这节课的内容其实也是很简单
我们这个机器学习导论之所以叫导论
其实是介绍性的
introductionary的
对吧
那么其实很简单
但是是基础
你还是必须了解
必须去了解的
你在后面再学更复杂
更精巧的方法的时候
你需要这些基础的东西
然后你才能够理解更深奥的东西
大家看一下这节课的内容
其实就是开始讲
第一节课是介绍
对吧
然后第二节课是模型选择的内容
那么从这节课开始
我们会有六次课是讲监督学习
那么监督学习也是机器学习里面最通用
最基础的一大类的学习方法
所以我们花了最多的时间
大家能听到吗
喂
最多的时间来讲监督学习
那么这节课主要是讲
最简单的监督学习方法
就是线性模型
现在大家都用的是神经网络深度学习模型
那么那个是更复杂
是高度非线性的模型
但是并不是说你
就只会让神经网络就可以了
你需要对我们一步一步走过来
我们所有的机器学习的模型有一个了解
那么这个线性模型就是最简单的模型
那么你非线性模型
它通过很多很多层的累积
然后变得高度非线性
但是你需要以线性模型为基础
那么大家看到左边
其实就知道我们这节课的主要分级部分
那么线性模型解决两个问题
这次课就是告诉大家
线性模型以两个监督学习问题为代表
一个是回归问题
这个大家在介绍的前两节课里面
已经对它有认识了
对吧
回归问题
还有一个是分类问题
当然这个分类问题
从二类的分类问题
我们扩展到多类的分类问题
然后就是给大家介绍一下
一些可能会用到的一些
编程的工具和环境
最后这个BDCI其实是最后大作业的内容
先让大家一步一步先去了解着
然后你去有时间去看看这个网站
大概都是哪些内容
然后从这个星期开始
大家选课基本决定了以后
你就可以跟同学有时间的时候
去讨论讨论
然后形成一些分组
然后慢慢的也不是说一次两次
而慢慢的决定你的选题
我们后续还会在课程的同时
然后给大家介绍更多的这样的内容
好线性模型
我们首先讲如何用线性模型
解决这个回归问题
那么我们再回顾一下这个机器学习的结构
那么机器学习
我们是希望从这个数据里面
比如说这是一些给定的数据
那么这个数据里面去学一个model
这个model是什么model呢
它可能是从输入x到y的一个映射
那么这个就是我们要学的东西
或者说你说它是一个函数f也好
那么怎么从这个数据里面去学它呢
首先你要有这样的训练数据
那么这个训练数据
在这节课里面就是有标签的数据
那么这个标签就是它的价格
是连续的量标签
那么在回归问题里面
它就是一些连续的实数值的标签
那么这个可以认为是这个数据的特征
那么每一个特征对应一个标签
当然有可能你这个数据是很复杂的
这个特征是高维的
甚至是结构化的
比如说图
图像视频等等
那么每一个样本它都对应有特征和标签
那么我需要从这些数据里面去学到这个模型f
那么我要给定这些训练数据
那么我还需要一个假设计
那么这个假设计
hypothesis space
那么这个假设计就是说我要从
这个模型要考虑的对象
是什么样的一个范围
那比如说我要线性模型
那么这个就是一个假设计
或者是我考虑resnet神经网络
卷机神经网络
那么这个也是一个假设计
那么这个假设计
确定了你要考虑的模型的一个范围
好
那么有了假设计
假设计有了训练数据
然后我就可以通过设计一个训练
学习算法
Aggresim
通过这个学习算法
去学到这个映射函数
那么这个映射函数里面肯定有未知的参数
那么通过最小化某一个损失函数L
然后去学到这个模型里面
所有未知参数的取值
这样的话你这个模型F就确定了
对吧
一旦你学到了这个模型
然后你就可以在这个测试的新数据上面
去进行预测
那么学到的模型假设我们写为F hat
为什么写为F hat
因为它是从训练数据中学到的
那么它和你这个F我的初中
可能并不那么相近
这个有好多地方都会确定
你是否能学到一个很好的F hat
因为它可能比如说训练数据的约束
可能数据不够多
我学不到一个很好的
或者是假设集有点小
或者是这个假设集
它并不能够
它的能力和我的这个不能够去完全的刻画这个数据的分布
比如说
但是数据是很复杂的
但是我假设集用一个线性模型
那么这个差距也会体现在你最后学到的这个模型
它的能力并不够好
还有会影响的就是学习的算法
那么之前神经网络不是我们说过有极其举落
那并不是说神经网络它们本身的能力不够好
那么它都有非线性拟核的能力
神经网络层数越高
它的非线性能力
非线性越强
那么它拟核的能力也会越强
我们曾经说过就是说
我们没有讲
那么一个两层的神经网络如果它足够宽的话
那么它的非线性拟核能力
它就可以拟核任意的函数
所以它拟核能力非常强
但是为什么我们学
那个神经网络还会有起伏呢
还会有这个沉寂的阶段呢
就是因为我们寻不出来一组好的参数
这个网络本身是很好的一个模型
但是我们学不到一组好的参数
这个就是因为学习算法的问题
或者它优化过程的问题
它的解空间很大
但是我找不到那个最优解
或者是我落不到那个最优解的附近
所以虽然模型很好
但是我找不到那个解的话
那你这个学出来的模型F hat
也是不理想的对吧
所以我们深度学习的阶段
我们不光是模型的规模大了
而且我们是学习的过程
有了很大的改进
并不是直接就是比如说
反传梯度
我们可以用无监督的方法去初始化
比如说
然后让这个模型的解落在一个
比较好的一个局部区域
然后再用比如说有监督的
去翻听这个参数等等
这样的学习策略使得我们在
很大规模很复杂的模型
上面也能找到一组很好的参数
这样的我们学到的模型
才是有效的对吧
那么所以这些所有的这些
都可能会影响你最后学到的模型的
这个能力
那么一旦学到这个模型
比如说我们一个线性模型F
那么它的参数是W
那么X是它的特征
那么我给你任何一个新的样本
比如说这样的新的样本
我就可以对这个样本它的
它对应的那个值
进行一个预测
那么这个就是积极学习的整个的流程
对吧
好
那我们现在以这个回归为例
看怎么用线性模型来解决回归问题
其实回归问题我们之前已经有
设计了对吧
在介绍的时候
还有在学习理论偏差方差分解的时候
都是以回归的问题为例的
所以这里我们可能很快的就能过一下
这个关于回归的问题
那么回归问题
它的训练数据是这样一组数据
假设有N个数据点
或者N个样本点
那每一个XI它都是一个特征
然后对应的YI就是它的回归值
那么训练数据每一个都是有回归值的
所以它叫有监督的学习
对吧
然后我们假设集就是一个线性函数
一个集合
比如说我假定它是一个二次函数
那么二次函数的这个集合就是你的假设集
然后我们要确定一个损失函数
损失函数
那个F是我要建立的模型
它是一个线性函数
那么Y是光truth那个值
我要通过最小化这个损失函数
求到那个模型的参数
对吧
那么当然它的期望风险
期望风险是在整个数据集上面的几分
你看PXY
就是说它有可能的所有的这个数据
那么训练数据只是PXY里面
你可以认为是它里面采样的一个集
从里面采出来N个
对吧
那么这N个里面
我们在N个数据的集训练集上面去训练这个模型
那么期望风险我们是不可能准确的去算出来的
所以我们没办法去直接优化这个
因为PXY我们往往是不知道的
那么所以我们在这个已知的训练数据上
去训练这个模型
所以我们只能最小化那个经验风险
我们说的所有跟empirical相
所有的一说empirical
它一定是训练数据上面得到的
叫empirical
就是说你训练数据
它只是这个PXY的一个采样的一个子集
对吧
那么但是我们在这个上面去优化
就是经验风险
最小化
然后得到一个经验误差
最小化经验误差来得到这个模型
好
那么还是这个数据集
假设我们如果这个线性模型是一个最简单的
你看一次函数的话
那么我们通过在这个线性数据集
在这个训练数据集上去拟核
然后能够得到这样一条直线
对吧
那么显然这个直线
它并不是特别好的
拟核了这个数据集
这是数据点
那么横坐标是它的特征动作标
它是它的应该有的那个回归值
好
那么我们怎么去拟核这个
怎么去求这个参数W0和W1呢
我们看看它的过程
首先这个是
这个更简化的一个图
那么X是自变量
Y是应变量输出
就是输入输出之间的关系
其实就是要拟核它的关系
那么假设这是个线性模型
然后这线性模型这个红色的部分
其实代表就是它的误差
也就是说你模型的预测和真实值之间的这个差距
那么我们要最小化这个误差
对吧
然后去求这个Beta0和Beta1
那么其实这个最小化的过程就很简单
因为你只要对这个去求一个导数
对吧
你要summarize over所有的样本
i等于1到n
然后去求导数让它等于0
就能够直接算出来Beta0和Beta1
那么它Beta0和Beta1这个值
就是一个很简单的这样的一个计算
当然它对它和所有的这个训练数据是有关系的
是有关系的
这里的summarize是所有的样本
n个样本去求核的
那我们看一下其实也可以
其实这个是有B核解的
Close Form Solution的
但是你也可以用迭代的方法去
这个去得到这条直线
那么迭代的过程就是这样
就是说Beta0是等于这个对吧
然后Beta1是这个值
然后你可以看
那么它通过不断的迭代
然后得到一条让它的误差最小的那条直线
那么这个是一个得到参数的过程的推导
首先也是建立误差函数
其实后面这个就是fx对吧
这是我们的模型Beta0减Beta1x
那y是那个训练数据的ground truth的那个值
那么这是一个均方误差的表示形式
那所以我们要对这个求导
这个loss求导数让它等于0
分别求偏导Beta0和Beta1求偏导
那么求偏导的结果是这样
这个是对Beta1求偏导的结果
这个是对Beta0让它们都等于0
都等于0之后其实这个就是对Beta1
你看参数其实很简单对吧
都是线性的对Beta来说
好那么这样的话我们就得到了这个
这个刚才那个Beta0和Beta1的这个计算的结果
好那么刚才是一元
就是它的特征只有一个x
那如果我们现在它的特征有两个
那么就可以用一个向量来表示特征
那么它包含两个特征一个x1x2
那么这个时候它的线性回归模型
那么还是一个线性回归
那么这时候就有三个参数可以写成向量乘的形式
就是w的转制乘以x
那么有三个参数
那么x我把它进行一个扩展
变成一个三维的向量
那么w0w1w2这是要求的那个参数
那么其实这个求解的过程也是一样的
也是求w0w1和w2三个参数
通过最小化它的军方误差就能够求得
好那么这个优化问题就是变成了这样子对吧
优化问题是这样子的
那么这个argmin就是我要使这个l这个loss function最小的时候
它w的取值argmin大家知道这个意思
然后w的取值就是我要求的那个w心
那么这个loss function是什么
就是这个模型减去y对吧它的平方
然后也还是对w所有的wj去求偏导
等于这样的一个值
那么这个其实也是有弊和解的
或者叫解析解
就是说w心就等于这样的一个结果
那么这里我把这个一个大写的这个x的转制
写成这样的形式
那么其中每一个column都是一个样本它的特征
所以它是d乘以n为的一个矩阵x转制对吧
d表示它这个每一个样本特征的维度n是样本的数量
就是d乘以n为的
那么y是一个n为的项量
因为它表示n个样本
它每个样本它的最后的回归值
它放在一起变成一个n为的项量了
那么这个是可以写成这样子的
那么你可以看到打x矩阵转制乘以x
它就变成一个方阵对吧
那么变成方阵 方阵求逆
那么这里有可能不可逆
那么在数值上如果解决不可逆的话
那么就在这个x转制乘以x上面
加上一个极小的一个对角线上
加上一个极小的正数值
然后再去求逆
这是一个数值上面的小的trick
就是你在编程的时候如果有这样的问题
还有一些解决这个问题的
就是如果它不可逆的话
说明它的特征有荣誉
那么如果你在加一个极小的这个值的话
它有可能变成可逆
但是你也可以直接求它的违逆
就pseudo inverse也有可能解决这个问题
还有就是你可能可以进行特征的降维
那么这个是一个比如说D乘以n为的特征对吧
这是它的特征的维度是D
那你可以把这个特征维度降低
然后这个方阵它的维度就会降低
那么它可逆的可能性就大大增加了
那么降维也是使得这个模型
避免它overfitting的一个非常有效的手段
那么这里是这个多说几句
好那么这个是得到了这个参数向量的估计w新
那么这个就是x
我们刚才说xt是D乘以n
那么其实x就是其实是n乘以D
就是加了一个1就是为了对应那个w向量
它不是有一个w0吗
对吧
w0是它的那个贝尔斯那一项
那么这样的话其实是把x增广了一下
那么这个是y是一个n为的向量
那么这个损失函数就是y减去xw转至乘以y减去xw
只不过说就是把原来的均方误差写成向量的形式
大家这一点你学过线性代数
这个应该很熟悉
好那么直接由它其实求求这个最小化这个ew去求w新的过程
其实就是把这个ew对w求偏导
求偏导以后你看这个形式二次的形式对吧
对w说是二次的形式
二次的话请求求偏导变成这样子一次的
那么求导数尤其是矩阵
还有一些矩阵的运算求导数
大家可以查表
就是有一些总结好的calculus
就是直接查一下就可以了
如果你不记的话
比如说有一些像特殊的形式
比如说矩阵的g它求导数
然后什么求导数直接去查就可以了
它网上有这样的文档去求一下
有calculus里面
好那么这样
让这个偏导等于0
其实就得到w新的值了
也是这样子的
其实这个就是从用向量和矩阵的表示
来求的这个过程其实跟刚才是一样的
我们在数学里面
不能说数学在机器学习里面
那么一般我们会用大写的字母表示矩阵
有的时候大写的时候还加粗
有时候不加粗
然后用小写的粗体的字母像这样
wx表示向量对吧
就跟现行代数里面是一致的
好那么其实这个是求导的一个过程
我就不讲了
这个矩阵求导还有好多
这个wk里面有一些总结
大家可以去check
在不同形式下面怎么去求导
好那么我们可以看到
那么这个是最后的一个闭合结
那么我们优化的过程肯定是希望它
比如说最小化那个误差
那么它对应的其实是一个梯度下降的过程
那么我们看这幅图就知道
那么它的横坐标是w
然后纵坐标是loss
那么可以看到这个曲线
其实就是它的这个函数的曲线
那么任何一个点
在这个点上对w求它的梯度
那么这个黑色的箭头就是梯度的反方向
我们要最小化那个loss function
其实就是求
因为loss function是一个二次的函数对吧
二次函数
然后它去求这一点
它的这个切线其实的方向对吧
那么它的方向就是梯度的反方向
那么其实这个梯度怎么求
就是这个delta l除以delta w
所以它的这个就是它的切线的方向
好那么这个loss function
他们它的最优质肯定是在这里的
那我们在这一点
希望我们找到这个最优质这一点
那么就不断的去求它的梯度
求梯度下降的方向
然后不断的去接近这个最优点
那么当然这个这个你也要控
非常重要的一点就是控制它的不长对吧
那你如果这个沿着梯度方向下降太多的话
那你可能就就就就就脱离了这个
这个其中的这个这个最优质的这个范围
可能就跑到别的这个这个局部最优解那里去了
所以这个梯度方向可能每次下降一点点
每次下降一点点对吧
好那么这里我们有两种梯度下降的方法
那么这个都是梯度下降
梯度下降是这样
就是我对loss function对w求偏导
这是梯度对吧
然后减就是它梯度下降的反方向
就是梯度下降方向
梯度的这个反下降的这个方向
就是刚才黑色箭头那个方向
所以它是一个反方向
那么wj呢不断的沿着这个方向去下降
就得到了w求解的值
所以我们一般是用这样梯度下降的方法去做的
现在在深度学习网络里面
我们因为网络参数非常多
我们的优化过程就是一个梯度反传的过程
我们最终神经网络经过一层一层一层
然后到最后到输出
然后输出以后
你跟你的ground truth做比较会形成一个误差
然后误差反传
反传的过程也是用梯度下降来做的
那么梯度下降也是像这样迭代的方法
我们并不是一次求到所有参数的close form solution
但是对简单的线性模型
你直接求的闭合解就可以了
但是复杂模型我们都是要一步一步的去求解
那么即便是简单模型
那么去这样梯度的求解可能是更高效的一种方法
你的计算量会大大降低
那么梯度下降有两种方式
一种叫p batch level的一种叫stochastic
那么所谓的batch就是
你看从这个表达形式你可以get到它的idea
就是每一次我用所有的数据去算它的梯度
然后算到梯度
这个梯度你看我们刚才求到的梯度是这个结果
每一次用它所有的数据求它的梯度
然后这个alpha其实就是它的不长
就是每次梯度下降
我不是要控制它下降多少吗
就是它不长
然后每一次梯度下降的幅度是由alpha确定
那下降的这个方向是由所有数据的梯度确定的
所以它叫batch
一个batch里面是有n个样本点
那么也就是每次都用全部数据来求这个梯度
那么这里变成加了也是对的
因为这里你看这个是f减y
这里是y减x
y减f
所以这里是变成加
那么和p的处理方式不一样的
就是还有随机梯度下降
叫stochastic gradient descent
那么这个呢
就是说对于每一个样本上面我都求梯度
求梯度以后把这个x做一个下降
然后下一次再一个新的样本点来了
我再做一个下降
所以它叫随机梯度下降法
每次选一个数据或者一些数据
然后像这个公式里面
就是说每一个数据都会决定一次下降
但是一般更常用的方法是介于这两者之间
叫mini-batch
就是说我每一次选一个小的集合
然后决定梯度下降的梯度
然后去更新这个参数
那么我们现在因为神经网络
我们的数据量也是海量的
你不可能把所有数据量load进来
去计算这个x
这是多大的矩阵
根本load不进去
所以我们是patch level的
batch level的
就是你每一次有一个batch
然后load进来去tune
然后每个batch里面
你在梯度下降的话
还有一个mini-batch
就是每一个mini-batch决定梯度
然后梯度去下降
然后下次再来一个mini-batch
那么这个过程是随机的
就是说你找哪一个mini-batch是随机的
所以它叫随机梯度下降
那么在训练的时候
其实这个方法是更高效的
它更高效
就是更快的能找到
你距离那个最优点
最找到的时候
它的步数是最少的
那么所以我们经常听到sgd
sgd方法就是随机梯度下降方法
那么这两个图可以看到
那么bgd呢
就是如果你用所有的样本
batch level的话
它下降是比较平滑
直接每一步都是接近目标
因为它用所有的数据来去计算梯度
它不会有很多随机成分或震荡
那么这个随机梯度下降方法
你可以看到其实是有这样的情况
但是呢
这个在实践中
这个sgd会快很多
因为它每次用的数据量非常少
你别看它这里好像很曲曲
不是很直接
但是它每次用极小量的数据
进行更进行快速的这个迭代
然后它的是非常非常高效的
相比这个这个p处理的方法
好那么这个是一元先行回归的一个图
那个左边其实是一个
你看它的误差怎么下降
误差怎么一点点下降
比如说它的初始点在
这个右上角这个点
它怎么误差一点点下降到最低点
然后这个是对应的
它的那个得到的那个回归的线
好
那刚才是一个最简单的先行回归
那么也可以有好多不同的先行回归
那么这个是一个叫对数先行回归
那么这个f这里是一样的
右半部分一样
只是左半部分这个y呢
我又取了一个这个ln函数
那么这个是对数和这个
一般先行回归和对数先行回归之间
有一个差别
那么这个呢也叫线性模型
其实它以y和x之间已经完全不是线性关系了
对吧
因为它这里有一个其实指数的级别的关系
那么我们说线性模型
其实它并不是只能够model线性
我们之前也讲过一个叫比如说fx等于w transpose phi x
这个phi x它可以是非线性的
对吧
它可以是一组接函数构成的phi 1x
phi 2x
phi比如说mx
也就是每一个x输入的那个x特征
我都用一组非线性函数把它做一个变换
那比如说x原来是一个项量
对吧
我用把它用m个非线性函数
比如说正弦函数二次函数等等
把它变换
变换成一个每个样本都用m个函数去进行变换以后
变成m为特征
对吧
就是每一个样本有m为特征表示
这样的话我就形成了对每个样本形成了一个新的特征表示
然后再把它用线性模型去建模
这个就是一个特别非线性的一个模型了
就是从x和f之间是完全非线性的
但是对于w来说还是线性的
所以这样的模型我们也叫它线性模型
但是它有非常强的非线性拟核能力
所以不要小看这个线性模型
线性分类和线性回归的这个方法
那么其实现在很多深度模型它每一层都是线性的
就是它通过一个节点连到另外一个节点
这是线性的
只不过在这个节点里面它又有一个非线性的一个映射
对吧
所以这个这里只是一个例子
也就是说这个线性模型它可以广义到很多很多种情况
就看你的这个定义
好
那么刚才讲的是
回归问题
回归问题就是线性模型解回归问题
我们是可以得到闭合解的
当然更多的
尤其是数据量很大
然后模型也比较这个参数多的时候
我们更常用的是梯度下降法
那么梯度下降法是怎么得到的
那么这个是关于这个线性的回归模型
接下来我们再看分类问题
还是分类问题也是一个有监督学习问题
所以每一个样本X它都有一个label Y
那么这个时候的Y就不是实数值
不是连续的
那么它是一些离散的值代表类别的
所以叫分类嘛
那么这个时候我们还是用线性模型
所以这个H还是线性函数的集合
那么我们这个loss function不一样了
原来是fx拟和Y值对吧
那么现在呢
我们假设是分类
那这个fx的这个输出的类别
是否跟ground truth类别相等呢
如果相等的话
你看这个1它是指示函数
那么这个指示函数
就是说如果不相等的话就取1
也就是说这个式子成立的话就取1
不成立的话就取0
那它不相等的话
我就借一个loss
如果相等的话呢
就loss就为0
所以这个就是它的loss function
那么期望的风险
当然也是在所有可能的x和Y的值上面
去求一个积分
那么理想的分类函数肯定是像红色的线这样
那么是一个单位的节约函数
就是说我如果是这个x
它是0
比如说01两个类别的话
是0类别的话
那么loss它都分为0
1类别都分为1
那么是这样子的
但是这样的函数
它是一个离散的
它不能够求到
所以我们一般会把它换成一个连续可微的sigmoid函数
就像这个黑色曲线的这样的形式
那么sigmoid是指函数的形态
就是这种形态的函数都叫sigmoid的函数
那么它是0到1之间的一个连续的实质函数
那么所以我们分类器分输出的结果
往往它并不是01
不是离散的
那么很少用
比如说你要是优化一个函数
它的函数的结果是离散的01
或者是0123这样的值的话
那是很难去优化
因为它不可求不可导
那你在去优化的时候就会有很大的困难
所以我们大部分分类问题最后输出的也是一个01之间的连续值
那么这个值呢
它可能代表的是这个输入x
它属于某个类别的概率
可以这样去解读
那么这个呢
是一种sigmoid函数
它是1加1的负这次方分之1
这是一种sigmoid函数
好
那我们这里讲
我们用什么样的方法来去进行
来解决这个分类的问题呢
假设我们是两个类别
两个类别
那么我们介绍一下
最简单的线性分类模型叫
逻辑回归logistic regression
哎
这个注意啊
虽然这个方法叫regression
但是它是一个分类的模型
并不是回归模型
我们解释一下为什么
那我们之前讲过
产生式方法判别式方法对吧
那么这个逻辑回归就是一种判别式方法
discriminative的方法
判别式方法和产生式方法区别就是
我不关心数据是怎么产生的
我只关心这个拿到数据以后
我去对数据的比如说如果分类的话
我直接去model数据的这个
分类的结果
那比如说
我是这样的一个分类问题
我直接去求中间的这条线
你求到这个分类的线
那你不就学到分类器了吗
然后给你新的样本
你就知道分到哪边了对吧
那么这是一种判别式方法
像svm的方法
支持向量机就属于这样的
这是一种判别式方法
还有一种判别式的方法就是
我不是直接学这个线
我是学后验概率
就是说我给你任何一个x
那么它属于哪个类别的概率我求出来
那么直接能够去求出它的后验概率
那么这个分类的问题也就解决了对吧
所以那么这个也是一种
直接model它也是一种判别式的方法
那么生成式方法不一样
生成式方法
我要model数据产生的过程
比如说我假设数据是一个高斯分布的
那么它是一个这样的分布
这是两个类别
我要model的就是
我要model这个y1类别
属于y1的时候
它的一个分布是这样的
假设然后属于y2的时候
它的分布是这样的
然后呢
根据这个
我在乘以每一个类别的先验概率
就是说它这数据属于y1属于y2
大概就是我没有看到数据之前
我对它的一个判断对吧
然后这两个不是要正比于这个y1x吗
对吧
所以由这个过程我就能够推断
它属于y1的概率了
所以它要通过model这个model数据产生的过程
然后来最后推出它的分类
那么这是产生式方法
判别式方法我不管数据是怎么产生的
我直接对这个后缘概率去建模
我对后缘概率建一个模型
假设这个模型输出的就是后缘概率
那么逻辑回归方法就属于这样的方法
它直接对后缘概率建模的
它是以一种判别式的分类方法
我们看到
你看这就是后缘概率对吧
y等于1 x given x
就是说样本x属于类别1的概率是多少
这是一个后缘概率
那么我们建立的模型是这样的一个模型fw
以w为参数的一个模型f对吧
那么这个模型我用一个逻辑函数logistic函数来表示
我们刚才说了logistic函数是这样子的对吧
01之间的一个函数
好
那么这个函数就是1加ex
就是exp x分之1
这里的自变量不是x
而是w transpose x
那么利用这样的形式
我就把参数加到这个模型里面了
但是这个模型最后的输出还是0到1的这样的一个
sigmoid的这个曲线
但是这个曲线里面的参数有一个w
所以我通过这样的方式
对这个后缘概率建立一个模型
那么given任何x
我都会输出一个0到1的之间的值
那么这个值代表它属于y1的第一个类别的概率
就是y等于1的概率
这就是我直接对它的后缘概率建立一个这样的模型
为什么这样的模型是合理的呢
它能够把这个
它只要它把训练数据能够通过这个模型分得很好
就可以了
然后通过在训练数据上拟合
我得到一个合适的w
那么这个模型就能够很好的分训练数据
那么在我也期望它在测试数据上有很好的泛化能力
这就是逻辑回归的思想
那么这个公式可以进行一个变形
我求一个这个和1减这个
然后求一个long函数
其实就又得到了这个线性的方程
那么就注意我刚才说的逻辑回归其实是一个分类方法
为什么叫logistic regression呢
因为这是一个logistic函数G
G是一个logistic函数
然后回归呢
它要回归出来的是一个0到1的一个值
它是一个输出是一个连续的值
那么这个值呢
并不是要回归我一个label数据上面的值
而是它要拟合的这个值
代表它这个属于某个类别的厚颜概率
好 我们休息五分钟
一会再接着讲
好 我们接着讲
我们刚才讲到这个逻辑回归的这个厚颜概率的表达形式
那如果是二类的分类问题最简单的
那假设这个它外等于1的厚颜是t
那么外等于0就是1减t 对吧
它的概率是1减t
那么分类规则就很简单了
那么这个t大于0.5的话
比如说分到第一类
然后再来说这个t大于0.5的话
比如说分到第一类
然后这个否则的话分到第零类
当然你也可以去算一下t和1减t的比例
比率
然后它是大于1的
那么分到第一类
对吧
或者是去求这个log函数
然后它大于0的话分到第一类
这几个式子都是等价的
那么其中这里这个t除以1减t呢
叫几率
那么logt除以1减t就叫log odds
所以而且这个对数几率呢
也叫logic函数
对数几率叫logic函数
它这个是
那么logistic就是它的反函数
所以为什么它叫logistic
那么这个是
这个关于它的所谓二分类的时候
它的一些说法 叫法
那么我们一旦建立了这样的一个logistic regression的函数
去建立这样的模型
我怎么去求它的解呢
那么经常是用极大自然估计
极大自然估计咱们概率课上讲过
极大自然估计是
估计它的参数的一种常用的方法
极大自然它是要通过最大化自然
来求得参数的
那对刚才的这个问题
给你这样的一个训练集
那么x是每个样本的特征
然后y是它的类别
那么我们这个对数自然就是这样子的 对吧
因为这里取了log
那么自然就是对于每一个x
它属于y的这个概率
那么或者是py跟yx
其中yw是参数
那么这样的加在一起
本来是成绩
取了log以后就变成和的形式
那么这个就是它的对数自然
那么所谓的自然函数
我不知道大家是否还记得
可以直觉上认为
就是我给你这样的一组参数的情况下
我这个数据看上去是它现在呈现的样子的概率
就是它的自然
自然是这样的一个含义
那我当然希望我数据就是现在这个样子
那么我要求这个参数
求这个参数 反推这个参数
当然自然函数它没有考虑到这个先验
所以它只是从数据中得来的
关于这个模型的参数的估计方法
那么极大自然就是求参数θ
这个θ就刚才w是一样的
那么是要从这样的分布里面去采样
使得这个x的可能性越大越好
也就是说x要呈现它训练数据的样子
那这个极大自然方法
就是自然函数是这样
自然函数
那么就是给定这样的参数下面
数据呈现它现在的样子
这样的概率
然后这个就是自然函数
那么对数自然就是这个自然函数求一个对数
那么极大自然就是对数自然求极大
然后这个时候对应的那个θ的估计值
就是极大自然最后估计的参数的结果theta hat
好
那我们再回到刚才那个二类的分类问题
我们说我们建立了一个这样
y属于类别1的这样的模型fwx
这是一个logistic function的形式
是一个这样sigmoid形式的曲线
那么当然它属于类别0的话就是1减
然后我们看怎么就可以算到它整个的后院了
就是不管y是0还是1
那可以把这两个合在一起
就可以写成这样的形式
因为y值取0或是取1这两个值
对吧
那么所以它这两个式子合在一起
就把y可以放到指数上面
取1的话就是前面这一项
取0的话就是后面这一项
对吧
所以它这两个式子可以合并写成这样子
那么给定n条训练数据以后
它的这个自然
注意这里的自然
自然函数是参数的函数
它是参数的函数lw
它表示取这个参数的时候
数据呈现它现在样子的概率
那么取这个参数的时候
那么数据
我们可以把它的这个数据的这个形式
这个后院形式放在这里
就是刚才这个
对所有的n条训练数据求和
那么对数自然就是
对这个lw求对数
那么这个指数就拿到前面来
就变成这样的形式
为什么要用对数
那么对数的话
就后面求优化会非常容易
不管是像这个logistic的函数
还是高斯还是什么
它都有指数
所以我们用对数来去计算的时候
求导数会非常容易
就没有那个指数的那项
然后接下来我们就可以对这个log自然求偏导
求偏导不是为了去优化吗
去优化最大化这个log自然以后
对求w的值
那么也就是对这个求偏导
这求偏导就很容易了
直接能够得到
它的最后的求导的结果就是这样的形式
那么这个形式
你看
那么这个就是
没有一个闭合结
是需要迭代的去优化
那么我们可以用t度的方法去求
那么这里因为是最大化这个值
所以用t度上升
那么之前是最大
在刚才回归的问题里面是最小化
loss
所以t度下降
这是最大化自然t度上升的方法
所以是这样
wj加上这个是t度值
然后alpha是它的不长
大家可以看到
其实这个和刚才用线性模型解回归问题的解
是一样的
完全一样
这个是不是很奇妙
就是说你要解决的问题完全不同
一个回归问题
一个分类问题
然后模型也不一样
一个线性模型
一个是逻辑回归模型
然后它们的解参数的更新的公式完全一样
那么
就是说它和用最小军方误差
求线性回归
它的解释也完全一样的
只不过你现在这里要注意
你这个fw是这样的一个logistic function的形式
之前的那个f
之前那个f是一个线性函数
就是一个w transpose x
那么这个就是简单的二分类了
就是逻辑回归方法解二分类的问题
我们可以举一个例子
那么就是影评
它是一个分类的问题
那么这个影评怎么去做呢
我们先要给大家介绍一个关于文档特征表示
叫磁带模型
磁带叫back of words
那么这就是对文档怎么抽取一组它的特征来表示
每个文档是一个样本
这个样本怎么用特征来刻画呢
那么这个就是一个磁带
假设左边是一个文档
一段文字
那么中间是一个磁带
那么这个磁带其实你可以认为它是一个字典
然后通过这个磁带
然后我就把这个文档中出现的这个词罗列一下
那比如说e出现六次
i出现五次
然后等等等等
那么你这样的这样的特征呢
你就可以把它串起来
变成一个向量的表示形式
这个就是磁带模型
那么有了这样的模型以后
我就每一个文档我都可以抽一个向量
作为它的特征表示
那么这个是它的特征表示形式
那么当然这个磁带怎么来确定也是有技巧的
你要考虑哪些词
是不是有一些高频的词
没有意义的
我要把它去除掉什么的呀 恶呀之类的
或者是这个词的顺序要怎么去
这个一般词的顺序不会考虑
是不是要考虑它的频率
还是只是出现了就会记
然后不出现不记呢等等
那么一般是用通过词频
然后来去抽取一组这样的一个向量
然后来表示每一个文档
那么一旦有了这样的这个
每一个文档有一个向量作为特征
我们就可以用逻辑回归对它做分类了
其实就是对
其实一个文本分类的问题
那么这个求解过程也是一样
求解过程也是一样的
那么用T度上升的方法去求
这个最大化它的这个对数自然去求解
那比如说这个这一段文字是这样子的
这样子的
然后我就会对它其中的有有些词建立
抽取出来建立一个特征向量
那么如果我只考虑四个特征词
比如说只考虑这四个特征词
然后我就可以得到一个这样的模型
这个模型最后得到的这个参数是这样子的
那么其实这个是非常简化的
我们的这个一般的这个磁带都非常大
如果Camelon也非常这个这个高微
所以这个文档分类也是一个
不是那么简单的问题
那么之前有很多文本处理的方法
就文本的方法就
但现在趋于统一了
就是自从这个Chad GPT出来
大家都知道吧
就是GPT系列的这个方法出来以后
那么它都把和NLP相关的很多任务
统一起来了
它变成一种预测的这个任务来去做
就说你因为文本文档
它是一个每一个单词都是很具语意信息的
那么它呢是一个
而且是个序列化的表示
那么它就用这个预测的方式
然后统一了所有NLP的问题
就说我看到前面几个词
我预测下面一个词
然后它又举一大量的语料
来训练这样的大规模的模型
然后就形成了一个
这个非常好的一个大模型
也就是这个GPT系列的模型
那么这个模型它具有这个小样本
泛化的能力
就说你没有听过没有见过的
它也能够理解
这就是一种智能涌现
我们说现在智能涌现是什么意思
就是当你的数据规模和模型的规模
达到一定程度的时候
它模型突然具备了某种之前没有的能力
理解推理的能力
这个叫智能的涌现
但是这个是在NRP上面比较成功的
但是在很多其他领域还没有做到这种程度
就比如说视觉
我们还有很大的挑战
因为视觉你面对的不是像语言
因为语言是我们后天学到的
它是有丑相 有语意的
所以它的信息量非常稠密
然后每一个词它都有它确切的含义
但是图像视频等等这样的东西
它的信息量很稀疏
那么你看到的一个图像的图像
它其中的一个什么patch
一个pixel的value
它代表什么含义呢
没有
你需要从图像中去抽取去学习
但这个过程本身是去挑战的
它不像语言
它本身就已经有很密集的语音信息了
所以就是说视觉是有更多具有挑战性的问题
在可能等着大家去解决
是更加的一个更大的领域
好那么对一旦得到了这样的特征
其实文本分类
就是一个简单的分类的问题了
对吧
一旦得到x了就可以抽象
它就是一个一个分类的问题
那么刚才讲的是二分类的问题
我们现在可以把它扩展到多分类的问题
什么是多分类
简单就是它不是两个类别
那么它可能是n个k个类别
比如说原来刚才是n个数据
它们只有这个有n个也是两个类别
那么如果是它有两个以上的类别的话
那么就比如说有一些图像
大的图像集合
它可能一千个甚至更多的类别
那么这个时候我们有什么样的方法去解决呢
那最简单的方法
一个是一对多
一个是一对一
一对多的意思
就是说每一类都和其他的类别比较
那就是每一个比如说图像我去分类的时候
我不是把它分成某一个多个类别中的一类
而是我看它是猫还是不是猫
也就是每一个次分类
我都把它当做一个二分类
对吧
是猫还是不是猫
当然你这样的话
你就是还要考虑它是狗还是不是狗
是鱼还是不是鱼
如果你要考虑的是大k个类别的话
那你就要有k个二分类
才能够解决这个问题
那么而且每一次分类都是非常unbalanced的
就是因为是猫和不是猫
不是猫的数据量非常大
对吧
概率非常大
是猫只是一小部分
尤其是类别特别数量特别巨大的时候
所以你还要考虑这种非常不平衡的一个分类问题
那么另外一个思路就是一对一
就是每一类都和其他所有类比较
就是说你每一次都考虑一对
这个是猫还是狗
或者是是猫还是鱼
那这个也很多
因为有很多组合对吧
那么c n二种至少
就是说有这么多种情况
但是好处就是你每一次只考虑两个类别
这两个类别是相对数量平衡的
但是你用到的训练数据也只有这两个类别的数据
其实这两种情况都不是很
这个最优的解决方案
我们先看一下这两种方案
就是弯一对一和一对多
那么这个就是
这个左边就是这个一对一对吧
然后右边是这个这个一对多的情况
其实这个大家一目了然
就不用太多解释
其实是最简单直接的解决多类分类问题的
那么这个一对多的对一对多的方法
那么我们要首先要选择一个好的二类的分类器
比如刚才的逻辑回归就是一个二类的
svm也是
那么然后构建n个不同的二类分类器
然后看它是最后来确定
根据这n个分类器的结果
然后去组合一下来
和决定它应该是哪一类
那么当然是哪个类别的分最高就是哪个类别
n个分类器fi
比如说你要n个类别的话
你就是n个分类器
然后fi
然后看哪个fi是最高的
然后就把它最后确定为哪个类别
那么一对一的话
就是你任意选两个类别
那就有n乘以n减一种取法
对不对
那么构建这样的分类器
然后这样的话
你每一次都看它是猫还是狗
去判断
那么这个的话是一个二类分类器
当然这个
因为什么除以二
就是这个分类器
i和j 这和i是一样的
那么这个分类的函数就是这样
也是
你要去懂这个分类器
这个分类器
去最后判断它是属于哪个类别
好
那么
最后评价一下这两种方法
那么这个一对多呢
它肯定是我刚才说到的
这个非常不平衡的
一个猫一个不是猫
那么它是一个非常不平衡的
一个猫一个不是猫
那么它是一个非常不平衡的
一个猫一个不是猫
那么它是一个非常不平衡的
两个类别分类的问题
那抚养本级很大
中养本级很小
那么一对一的话呢
它的分类器数量需要的非常多
就是要CN2种
是吧分类器
然后每一个分类器都很小
但是它的每个分类器很小
而且很快
而且它类是平衡的
所以
一般情况下这种分类的
这个要比一对多
要快很多
那么我们看一下
这个二分类器和多分类器
如果同时去分的话
那么它的一个扩展的形式
这是二分类器
就是逻辑回归的形式对吧
二分类器
那么多分类器可以这样去
也可以这样去算
那么这个是更扩展的
一种解决方案
更general的方案
那么这个时候就不是
外属于类别一的后援概率
而是外等于1、2、3、1
直到k
假设一共要分的是k个类别
那么这样的话就得到
最后要预测的不是一个量
而是一个向量
向量
然后这个是分子
这是分母
分母是对所有的这些
k个类别的指数去求和
然后分子是每个指数
那么其实这个就是
大家听过softmax吗
你都是肯定是同时求
k个输出
每个输出它是一个
得到的是一个logit
其实是一个
它属于每个类别的概率
好
就是softmax函数
那么就是说一组
这个是输入的特征
假设三维
然后它会通过这个W
这个参数矩阵
这个线性映射
就是Wx
然后再加上一个b
这个偏移量
加上一个b
然后等一个值以后
做一个softmax函数
那么如果是一个的话
一个x
那么二类分类的话
其实这是一个sigmoid函数
对吧
但是是多个的话
是k个的话
那么这个函数其实就是
一个softmax函数
softmax你可以理解为
把这个01的值
把它这个变成了一个
0到1之间的一个值
那么经过softmax
就得到了这k个类别
的k个预测值
每一个都是0到1之间的
一个概率值
那么这个就是softmax函数
当然这个就是
其实这个你可以认为
最简单的神经网络架构
就是输入层
然后映射
然后到了这个输出
比如说输出层
会加一个sigmoid函数
那其实神经网络每一个
节点
其实它都是
这里是一个
这是x嘛
wx
然后在这里再加上一个
一个非线性映射
所以都是这样的
只不过
如果现在模型深度
高的话你就会加很多很多层
那么这个就是
k类
分类器常用的方法
就是直接用逻辑回归
求得k类的结果
然后再给大家介绍一个
叫交叉伤损失
那么我们刚才也说了
这个
集大四然
那么也可以用交叉伤
交叉伤是什么
交叉伤是你比如说
y等于k
我们先导出这个交叉伤
那么yi等于k
这个是
如果它相等的话
不相等的话就是0
这就是说
我要去对哪些term求和
那么对于这个dk的
类别我去计算一下
它的softmax值
那么最后得到的是
这样的一个
目标函数
那么所谓的cross entropy
交叉伤呢
其实就是它求的是
两个分布之间的距离
这两个分布它的越相似
越重合度高
它的这个交叉伤损失
会越低
交叉伤会越低
所以我们一般用交叉伤
损失去
作为分类的一个
指标
去最小化
这个交叉伤
去优化这个模型
我们假设你正在比如说
举个例子开发一个音乐的app
然后它有k种
音乐类型
然后你就可以用一个
包含k个类别的
softmax的多类分类器
还是用
逻辑汇归去建k个
二类分类器
这两个有什么区别吗
那么这个其实取决于你的类别之间
是否是互斥的
那么如果是互斥的话
那么你就可以用一个k类的
softmax分类器
你同时去预测
这个类别
其实你可以认为我们刚才也讲
softmax是
logistic的一种扩展
但是如果是不互斥的话
就是说如果一个
音乐它是可以既属于
类别一也属于类别二的
就是不互斥的话
那你就很难用这样一个k类的
softmax分类器
那么就构建k个
二类分类器会更合适
但大部分我们会属于
这种情况比较多
互斥的
比如说你输入一个图片你很少
就说我要给它多个label
多个label的问题
在继续学习里面叫
多标签学习问题
那我们可能有其他更好的
建模方式来解决这个问题
而不是
构建k个分类器
去进行分类
多标签问题
那么这个就是一个
类别互斥的问题
比如说有四类音乐
那么这四类音乐
是互斥的
那么建立一个softmax分类器
直接对四个类别去分类
就可以了
那么如果不互斥的话
假设这四个类别音乐
跟刚才四个类别不一样
那么这个四个类别都是
并不互斥
比如说这样子它是中间
可以overlap的
那么我们就会建立
四个这样的二元的
逻辑回归的分类器
每个都是把
这个输入分成两个类别的
然后最后
得到一个结果
所以大部分情况
都是前者
类别是互斥的情况
直接用一个softmax就解决K类了
还有类别不平衡
这个也要提一下
不平衡的问题
分类过程中
每一个类别的样本量不一样
我们说了
现实
这个世界中
所有的数据分布都不是平衡的
它是一个常委的
我们说了
比如说这是
这是每个类别的样本量
这是类别的标签
那么
它可能占有很多
少数类别
每个类别都有很多样本
但是有很多类别
它的每个类别
有极少数的样本
就像
我们的图像里面可能
像常见的一些动物 猫啊狗啊
非常多
但是稀有动物可能就非常少
它本来出现的频率就小
还有就是
比如说人脸识别
它跟你人群的分布是有关系的
它多大年龄多少的人
它占的比例高
然后多大年龄多少占的比例低
或者是人种
或者是地域等等
分布都不是平衡的
所以在这种情况下分类
其实就有一定的难度
那个类别
这个叫head
或者叫tail
这个叫many class
叫few class
就是它的大量的类别
会对小类别有一个压制
它会影响
一些小类别的分类结果
我们也说如果99%的人
都不会生病
这个医疗诊断的结果
都分为健康
那它准确率不是99%吗
对吧
所以如果你要去优化这样的分类器的话
其实这个不平衡问题
就是一定要考虑的一个问题
那么
有些学生
也在研究这个叫
肠胃的识别问题
我们也会有很多方法
来解决这样的问题
那么这个问题
在分类的里面是需要考虑的
但是现在有好多
benchmark数据集
benchmark
就是基准数据集
它都过于理想化了
就是它的类别基本上给你是平衡的
但是
你这个
现实中
你这个在平衡数据上预测
训练出来的这个模型
到现实中它walk的并不是那么好
就是因为现实分布
和理想分布之间的差距
好
那么
我们刚才也讲到
比如说它有九十个实例
是类别一
十个实例是类别二的这样的
一百个实例的二分类问题
那么这就是一个非常不平衡的例子
还有我们刚才之前
也讲过了
精度悖论所谓的
如果
把它都分为类别一的话
得到的准确率很高
但是这显然这个分类器非常不理想
所以
这个
为了去得到一个更好的
平衡的分类器就有好多种方法
像
这个不是在这个课上
去要讨论的
大家知道有这样的一个问题
然后具体要怎么去做
那需要去
你去调研比如说最前沿的
他conference的文章
他做到什么程度了
用什么样的方法
能现在的最稍大的结果
是什么样子的
那么是需要去阅读
最前沿的论文的
那么如果对于二类的分类的话
比如说
N正它表示标签一
的样本数
N负表示标签零的样本数
那么显然这个
如果是不平衡的话
他们的比值就
距离一非常远
那么我们可以把这个
比值呈在这个
logit上面或者是
logout上面
logout上面然后在
对它
去优化的时候考虑它对
最后代价的影响
这个叫代价敏感学习
那么这只是最
基本的解决这个问题的
一种手段叫
rewaiting
重加权
也有一些方法
叫rebalancing
重平衡
通过采样的方法
去让这个不平衡程度
降低
当然还有更多的
更精巧的算法
所谓采样
重采样方法刚才说的重加权方法
重采样方法
就是可以显然
对大类别人你去掉一些样本
叫欠采样
或者对小类的样本
去过采样re-sampling
一些
都是解决这种不平衡
问题的一些手段
叫重平衡方法
那么这个就是
关于分类的问题
我们这几课讲的都
最简单的模型
那么回归的
模型是讲的什么
就是线性
回归模型
分类的是讲的逻辑回归模型
分类的
模型可以扩展到多类的
情况
还有关于不平衡
分类的问题
在回归问题上面还有
线性模型它会有
非线性的扩展等等
都是非常非常基本的
概念方法
那么接下来
我们介绍一点实用工具
那么这个
是一个
线性分类的
样本库叫lib-liner
那么它是
这个林志仁就是台湾的
一个林志仁教授去做的
那么它是它有
metlab python java c++
的接口
那么当然我们上学的时候
去做这些
继续学习的算法
都是基于metlab
它非常快捷
但是现在基本上是用python
它封装得更好
然后有很多函数
优化的算法都是封装好的
直接调用就行了
那么这个
它是一个就是
在大规模数据上
不算是特别大规模了
它是一个高效的线性算法库
那么这个是它的
一个模型
run出来的结果
它有不同的方法
这个方法
都是比较经典比较
老的一些方法
那么当然
小规模的数据用python里面的
sklearn就可以求解
你可以去查一下
sklearn的文档和势力都很多
大家可以去看一看
虽然你现在可能不一定
会用到这个
但是你用这个工具
你会对我们讲的这个
简单的线性模型
有一个非常
更直观的
了解
还有后面要讲的svm模型
那个有一个叫
除了liblinear
后面讲的svm
林教授他还有个叫libsvm
当时svm
非常popular的那个年代
大家都用libsvm
用matlab版本的
就是libsvm去做
是非常简洁高效的
一个工具
liblinear主要是线性
模型的库
大家可以去看一下
那么
它有一些分类的势力
那么这个libsvm的格式
还有用train
predict的程序
简单的调影方法
大家可以去看一下
当然还可以通过
在这个环境里面用不同的参数
那么是有通过
比如说-s来设置参数
这个求解这个过程
去看一下它的说明就
很清楚了
比如说0就是
logistic regression
然后还有
svm有不同版本的
那么它这里用了
叫l2 regularized
就是说
这个逻辑回归
模型它还有了一个正则化
我们其实第一节课的时候
讲过
不管是回归问题
还是分类问题
我们现在讲的这个loss它就是一个
f-y
平方
这个loss没有加
那个正则化相
其实是可以加一个正则化相
比如说加上lambda
这个就是l2 regularized
l2指的是它
to norm
对这个w不是一个向量吗
这个向量
它的to norm去求一下
它的模
然后作为一个约束向
去优化它
我们之前在讲
它方差分解讲经验误差的时候讲过
那么这个lambda
越大的话
那么对这个模型的
约束越强
就模型会趋于简单
然后它这个lambda越小
它约束会越弱
我们说它产生那个overfitting
的时候当这个参数
w它的
它震荡性非常强
使得它在这个所有训练
数据点上它的误差都为0
但是它的泛化能力比较差
所以我们约束
w的辅大程度
让它趋于平缓
然后这样的模型它
产生overfitting的可能性
就降低了
那么这个就是
大部分我们会用这样的
regularization
所以你在这个里面你看它所有的
线性模型也加了正则化
还有用钢B
就是这个
取值为0和1
的预测过程
当然你可以用一些
还有一些封装好的库
还有其他的编程语言等等
其实更多的语言大家不用太
去关注
可能mattlab是最容易看的
然后python
大家一定要会
现在很多模型
都是用python
好 那么这是这几课的
要讲的主要内容
那么我们接下来
再介绍一下关于大作业
我只是几个例子
选题的例子并不
仅限于这些
你们到时候可以到网上去查
那么这个选题比如说是
我后面会把这slides
放到网上
蚂蚁和蜜蜂的图片分类
比如说这是蚂蚁这是蜜蜂
然后你比如说常用的模型
传统的
人工你去构造特征
人工怎么构造特征
那你就定义特征抽取的方法
然后加分类器
也可以用神经网络
比如说CNN大家知道
卷迹神经网络
然后用什么样的
网络架构
你自己来定
去探索他们的
结果他们的效果如何
那么就是
分蚂蚁和蜜蜂
很简单
还有命名实体识别
这个是一个序列标注任务
这个是一个例子
这个呢
其实是NLP的问题
是个语言的问题
传统的模型是用
隐马尔科夫模型
你们的概率课上什么也讲到一点点
然后还有条件随机场
那么他们
如果是用神经网络的话
就是用这个
回归网络
或者是长短时记忆网络
和Transformer Bird
Transformer现在非常popular
也许你可以接近
熟悉一下这个
这个model
其实Transformer刚开始
提出来的时候
它是对NRP的一种
模型
序列化的输入
然后它通过Transformer
其实是一种学习
序列化之间的内部
通过tension来计算相似度
然后生成它的
预测结果的这样一个过程
那么现在其实
视觉领域也用Transformer
叫Virin Transformer
然后它只如何就是把比如说
输入的图像
做成patch
然后patch也可以进行序列化的
Transformer也可以输入它的特征
那么这个Transformer现在性能非常好
也是非常主流的
特征提取的方法
这个不光特征提取
就是前期的
得到它有效的一种表示形式
然后
这个Virin Transformer
不管是Transformer还是Virin Transformer
都有好多种变种
应用非常广泛
这是一个
网址 从这里面可以
了解更多的
关于这个选题的
情况
还有垃圾邮件分类
那么这个是个文本分类的问题
也是一个非常传统的
机器学习的问题
你像
那个你像
这两个邮件你要分
它是垃圾邮件还不是
垃圾邮件
那么常用的模型 传统的机器学习
模型像
技术 SVM 逻辑回归
这些都是
传统的分类模型
对吧
如果是用神经网络模型的话
也是要用词项量
用Backup Words
提特征
然后用神经网络
像TaxCNN
CNN是
因为它是卷机神经网络
它更适合像图像
这样的
分类点阵分布的
这样的一个
处理
TaxCNN就是把CNN去移植到
Tax的输入上面的一种
模型
还有RN 循环神经网络
还有LSTM
后面RN和LSTM的
模型都是针对序列输入的
比如说
文本
针对序列输入得到的
模型
现在其实像这样的模型
它也曾经耗透过一段时间
但是现在都已经被
Transformer打败了
Transformer是最好的
还有信用卡评级
这也是一个
其实也是一个分类的问题
因为它的评级
也是把它离散化
不是输出一个值
Value 而是输出一个级别
那么它呢
传统的模型也是比如说
就是说决测数SVM这些都有
逻辑回归
就我们这几个讲的这些模型
也是可以用
神经网络呢比如说
可以考虑全连接网络
当然你也可以尝试其他的
方法
还有航空旅客
聚类问题
叫Clustering是一个
无监督学习问题
Cluster是
Cluster就是说你所有的数据
都没有Label 只有数据本身
那你怎么去
对这样的数据进行分析呢
那就是数据本身
它揭示它内在的
一些本质规律
Cluster就是我把这些数据
缺成处
一处就是一个组
在没有任何Label的情况下
我仅从X它的
特征去把它分成一些
组 那么这些组就叫Cluster
然后分成这个组的过程
就叫Clustering
就是聚类过程
根据数据的
特征把它聚成
一些处
那么最常用的这个聚类的方法
就是K-Mins
K均值聚类
然后K-Mins虽然非常
简单 但是
它效果并不差 肯定它不是
最差的一种方法
虽然它可能往往不是最好的
当然还有一些什么高斯混合模型
层次聚类 密度估计等等
普聚类等等方法
那么它针对数据分布的
情况不一样 你可能
会采用不同的方法
那么比如说这个我具体的
后面讲聚类的时候再讲
它的模型
选择的问题
这是它的参考的网址
那么这些都是在
BDCI网站
网站上面大家可以去
回头去check一下
有更多的选择
它这个有什么
竞技题 专题 赛
竞技赛 训练赛
都是可以选的
那么它设计很多种
数据结构 图像 语言 图
它设计的行业
这个问题
还有设计的模型框架
也非常的广泛
所以可能你前期还是可以
慢慢的去关注一下
然后确保对这些
问题有一个理解
然后你因为你现在学到的
工具还少 比如说你掌握的
模型和算法还少 你可以在学
一段时间以后再慢慢确定
你要选哪个topic
还要和你的小组的成员进行
讨论
那么这个是关于它的背景
数据还有任务的
一些介绍
这是关于训练赛
它的介绍
在课上
我就不具体的讲了
然后你这些内容都可以
从网站上去看
那么具体的要求
我其实第一节课大概说过
就是每个小组小于等于五个人
有一个队长
有一个组长来组织大家
那么这个最后要
交的那个大作业就由组长一个人
每一组交一份就可以了
然后提交的截止时间
就是这个学期最后一周
最后一周
具体时间会告诉大家
然后提交的是
发给我们助教
用邮件发过去
那么
这个具体的要求
你选定了一个topic以后
要至少实现
三种方法来解决这个问题
比如说逻辑回归算一种方法
SVM算一种方法
而集成方法也算一种
比如说你两种模型再加一个集成的方法
也是可以的
还有实现了
然后你要写一篇报告
这个报告肯定包含
比如说你对这个问题的理解
你怎么去
你用什么样的算法
这个算法的形式化呀
然后你怎么去处理数据的
然后肯定
必不可少的包括它的结果
就是在这个问题上面
你最后用不同的三种模型
得到三种的
结果是什么样的
要有一个报告
最好还应该有
结果的分析
对吧
这是要交的报告
还有就是PPT展示
我们最后
在开卷考试之前
会有大作业汇报的阶段
一组为单位
然后来讲一下你这个
作业的情况
那么这个PPT展示到时候
具体的时长啊
我到时候晚一点再告诉大家
我们在报名的时候
我们会在这个微信群里面
用一个在线的腾讯文档
让大家去添上你这个
小组的名字
然后和你要选的topic
就行了
我们会稍微晚一点再发
不够的
去了解讨论
和商量的时间
好
那么提交的格式
你现在不用记
后面会告诉大家
一个是要提交
代码
还有PPT还有报告
都要交的
还有这个代码
不能超过这么多
这个
因为代码只是代码
不用包括数据集
好
那么这个是
还有加分项
加分项就是
像这些我就不一一的念了
如果你做得足够好的话
我们肯定是可以加分的
其实加分并不最重要
希望大家借此
然后锻炼自己动手的能力
你选择的这个方向
要求动手能力的一个方向
尤其现在这个人工智能的
发展也许有的时候
他不同的工作
他的思想上的
创新也许并不那么的明显
关键是人家做出来了
你没做出来
你像那个Chad GPT
从他第一次提出来
到Chad GPT
到GPT4
GPT3.5
他有很大区别吗?没有
我们没有做出来
这个是动手能力
当然这个也跟
多个方面有关系
所以你利用
做大作业的机会
真实地锻炼了你自己的能力
这是最重要的
那么还有一些提示
关于数据及划分的时候
模型选择的时候
等等的一些提示
这个划分
就是涉及到
我们之前讲的Cross Validation
你怎么去进行
训练验证
然后最后检测
测试等等
肯定是要Train Validation
Test 对吧
还有模型的规模的选择
我不知道大家的算力
那么没有GPU的话
你要考虑
你用多大规模的模型
然后
什么情况下能run
我觉得大家试一下就知道了
现在讲就是只上弹兵
试一下就知道了
我们课上讲的所有的模型
都非常小
都是可以scale的
但是如果你想要尝试一下
上手尝试一下
神经网络的模型
我还是鼓励大家可以试一下
大规模一点的模型
好
还有就是模型集成往往
是能够提升效果的
就是性能驱动的话
你的目标就是想要得到最好的
在这个问题上
我要把分数刷得最高
那你可能要考虑一下
比如说集成的手段
什么方法
那么还有一些就是你可能
如果这个问题可能
并不只用一种模型
去解决
比如说非剧类问题也许尝试
可以用剧类的方法
去处理
然后再怎么怎么样
不是说我这一个问题
我就拿一个模型放进去就run
你可能需要
多个不同的模型去做
所以这里可能
需要你自己去设计的地方
还有工具肯定推荐大家
用Python
因为这个是你们后面
研究生阶段肯定是
最好的工具
推荐大家用Python
刚才我说的那个工具包
上面linear之类的
它也有Python的借口
还有一些数据库
这些是大家
可以用的
你可以找到很多库
还有一些其他
就是你在
构建模型
还有训练的过程中
用到的一些工具
比如说去可视化数据
可视化
训练过程等等
这些都是你
现在可以通过这个使用
锻炼自己
对这个工具的
熟练程度
这几课的内容
就这么多
我们下一节课还是
还是有监督学习
大家不要忘了
要开始考虑
关于大作业的问题
你不要等到
这个快结束了
我发现我还没找到分组呢
这个就有问题了
那你自己就锻炼不了
你这方面的能力
谢谢大家
下周再见