我们这一次词课的主要内容是模型的选择和评估
那么主要的内容我们在这个开始讲之前再重复一下
我们上次课说我们期末考试是70%占比
那么是开卷考试
考试的提醒主要是选择判断、检答和计算
那么关于大作业
我们是小余等于五个人组队完成
那么我们会稍微晚一点再开始
因为大家可能选课的前三周还不是很确定
当选课的人数确定以后呢
我们再陆续的公布题目
然后让大家自由的分组
那么题目我们是从这个JJF的DDCI大赛里面去选
你们可以有很大的范围去选你自己想要做的题目
然后它是可以从正式赛题和练习期中去选
那么最后要求提交代码和小组展示
小组展示我们在课程的后面会专门安排这样的时间
以小组为单位
做这个公布题来介绍你的工作
介绍你的方法、实现、还有你的结果等等
那么大作业的评分30分
会有15分是来自这个代码
我们会检查这个代码
然后还有15分会来一次小组的展示的质量
好
那我们回到上一课讲的这个机器学习
它的一个流程结构
首先我们肯定是有一些数据
我们要完成的是从这个数据中决一个model F
那么这个F是从一个X到Y的一个映射关系
比如说我这个X可能是它的房子的尺码
然后Y是它的房价
它是从一组输入到某一组输出的一个映射关系
那么这个关系我们是希望用一个模型来model它
那么怎么去确定这个模型
怎么去通过学习来建立这样的模型
那么首先就要有一些训练数据
就像这样的训练数据
然后有了这样的训练数据
我们要有一个假设集
这个假设集它是一个空间
那么这个空间我们用大H
花写的H来表示
它确定了你模型的形式
那比如说我要采取一个逻辑回归的方法
或者是我用SUBS建模
还是用SVM建模
还是用深度网络
那么这个是一个确定了一个假设空间
那么它就是F它的一个范围
我考虑一个什么样的范围
然后在这个范围里面再去求这个F的一些参数
那么这个求参数的过程就是这个模型训练
或者是模型优化的过程
就是由学习算法来实现的
那么这个学习算法就是我们写为Aggregum A
那么它是要通过去优化一个目标函数
来得到这个模型F里面的位置参数
那么假设这里这个花写的L就是这个优化目标
比如说它是一个损失函数
那我们要最小化模和损失函数
然后得到这个F的参数
一旦训练得到这样的参数以后
我们就得到了一个叫后面F hat
那么F hat是可以近似去表示这个F的
那么有了F hat以后
我们给你任何的一个测试的样本
没有出现在训练集中的
我们就可以去估计它的值
那假设这里其实就是给你一个房子的尺码
然后你去估计它的房价应该是多少
或者是给你一个输入的图像
我去估计这个图像它的类别是什么
那么这就是机器学习的整个结构它的流程
那么怎么去选择这样的模型呢
我要选什么样的模型才能达到我的目的
以及你训练之后怎么去评价你这个模型
是这节课我们主要想讨论的内容
首先我们再回顾一下上节课的这个例子
这是一个房价预测的问题
那么我们有了这个房子的这个数据
它是一种有标度有监督的学习方法
那么我们有了这个数据
我们怎么去估计这样的一个模型
那么这个是上面那个叉红色的叉是其实就是这个数据的分布
那么横坐标是房子的尺码
纵坐标是它的价格
那么我们要估计其实估计的就是X和Y之间的关系
那么用什么样的模型
这就涉及到你一个假设空间那个H空间
H space如果我们假设它是一个简单的一个线性函数的话
那么我们最后得到的模型可能就是一个像蓝色的直线这样子的一个model
去你和X和Y的关系
那么如果我们要考虑复杂一点的模型
比如说二次函数三次函数等等
那么它就可能是一个像绿色的线这样画出来的一个逆核的函数
那么怎么去选择合适的H呢
就是它的假设空间怎么去确定
那么这就是模型选择的问题
那么模型选择怎么去做呢
我们先给一个例子大家去有一些初步的感受
那么这是一个也是一个回归的例子
其实跟那个房价预测一样也是一个回归的例子
那么这里面有一个绿色的曲线
那么这个绿色曲线就是一个三元函数的曲线
横坐标是X动作标是那个T
那么T就是target就是目标值
那么这里我们得到的数据我们不是不知道那个函数曲线的
我们要从数据中去估计建立一个模型
那么我们得到的数据就是那个蓝色的那些点
可以看到这个蓝色的点并不都在这个曲线上面
就说明这个数据它本身是有噪声的
并不是非常准确的反映了这个在这个这个这个曲线上面
好我们现在要做的技术学习要做的就是从这些蓝色的数据点中
我去估计这个模型这个模型其实就刻画了X和T之间的关系
是吧那我要去从这些数据中去学一个model出来
那么我们要建立一个模型以后去建立它这个模型的损失函数
假设我们这个模型就是YXW
那么这里这个
这里这个Y就是我们要建立的模型
那么它是X的函数W是它的参数表是它的参数
那么这个我们要建立的这个损失函数
这个损失函数它就是Y和这个target的T之间的差的平方
所以I等于1到N大N就是代表所有训练的点数训练的样本的数量
那么这个呢就是我们要去最优化的一个目标
我们当然希望最小化
那么这个其实表示的就是误差对吧
那么这个Y的函数是对你任何一个X它的一个负极值
那么T呢是它的真实值
就是这些蓝色的点的这些对应的值
我们可以用图示来看一下这个
那么红色的假设是我们估计的这个Y的这个模型
那么蓝色的这些点是训练的数据点
那么绿色的其实它对应的就是它的误差
对不对
那么红色的是我们的model
那么我们对任何一个X我们估计它是这是它的估计值
那么这是它的真实值
那么它之间的这个差距就是它的误差
我们要学一个模型当然希望这些绿色的这个线是越短越好对吧
希望这个模型能够你和所有的训练数据
那么希望就是要最小化这些误差值
这个就是训练的这个目标
那么这个是我们采用不同的模型的时候
那么它最后得到的一个结果
那么这个红色的线假设是我们用这个不同次数的这个M得到的这个你和之后的这个模型
你看这个左上角这个其实是零阶的
那么就是一个常数零阶的多项式去作为模型
那么右上角是一阶的
然后下面是三阶和九阶的
这说明我们这个模型越复杂的话
它这个当然这个曲线越复杂对吧
那么它你和结果也是不一样的
那么可以看到这个当它取零阶和一阶的时候
它的拟核的效果还是很差的
因为你看它这个红色线上那个点和那个红色那个线距离那个训练数据那个点距离还是很远
就说明它的误差很大
它并没有这个优化的很好
对吧
那么就是因为它对模型过于简单了
那么这个呢其实就还是不错
它的这个红色的线基本上都在那个训练数据点附近
那么右下角那个其实非常完美
它在哪个程度上说完美
就是它通过了所有的训练数据点
这就意味着在所有训练数据上面它的误差都为零
对吧
也就是说它能够很好的预测所有的训练数据
在这个训练数据上的误差为零
但是它并不是很理想的
很显然
它这个虽然训练数据上误差为零
但是如果你换一些数据再去做用这个模型去做预测的话
它的误差就可能会很大了
因为它过于复杂了
那么这个现象就是它过拟合在了训练数据上
这就是过拟合现象
那么当然
像这个例子来说
那么左下角其实是一个比较合适的模型
并不是特别简单
也不是特别复杂
那么这里要说了一个叫独立同分布假设
也就是说我们在去进行机器学习的时候
我们要由训练数据训练模型
然后在测试数据上面去看这个模型的性能
那么我们这里的假设就是在训练和测试数据上面的
假设训练数据和测试数据是独立同分布的
所谓同分布就是说训练和测试的分布是相同的
那么它同样都从一个联合分布中去进行采样得到的
那么所谓独立就是每个样本都是从这些分布中独立抽取出来的
那么独立同分布的假设就是
它能够保证在训练数据上训练的模型
在测试数据上面依然很work
对吧
那比如说你的这个分布变了不一样了
那这个模型可能在测试上面的效果就很不好了
但是这个也是经典的机器学习的假设
现在我们也在考虑这个突破这样的一个约束
因为你很难在现实的生活中场景中
你要约束训练和测试数据完全相同
那么你可能你这个模型
尤其是大模型在大规模的训练数据上去训练过了
但是测试的时候你可能拿到的数据更不一样
那比如说你这个模型人脸识别模型
我在一个黄种人这个上面去训练了
但是我拿到非洲去用黑色的人种
我同样希望它能够识别精度很高
但是它训练测试数据分布不一样了
它的特征也不一样了
但是不是能够work呢
对吧
所以现在我们机器学习里面也有很多研究者
这是一个非常hot的topic
叫out of distribution
就是OOD
原来是独立同分部IID
现在是OOD问题
大量的研究者在研究OOD的问题
就是我的数据并不是原有的训练数据
训练阶段见到的是out of distribution的
那么这个是更挑战性的问题
现在也有很多不错的解决方法
但是我们作为机器学习的导论
我们现在要讲到的就是最经典的
机器学习里面的假设
就是独立同分部假设
这样能够保证你在训练的时候得到的模型
能够泛化到测试数据上面
当然也不能保证它的泛化能力
怎么去衡量它的泛化能力
我们后面会讲
那么也就是说未来的和过去的是一样的
过去的是用来训练的那些数据
未来是没有见到的那些测试数据
这样的话我们的模型就可以预测那些没有见过的数据了
还有一个经验误差和泛化误差的概念
所谓的经验误差就是在训练数据上的误差
就是刚才那个例子里面
那么右下角那个它的经验误差就是0
非常非常小
因为它在所有训练数据上的误差作为0
那么泛化误差就是在没有见过的数据上的误差
训练好了模型确定以后
你在一个新的数据上面去预测
看看它的预测和ground truth之间的差距
这个叫泛化误差
我们当然希望进行进去学习训练的模型
当然希望它泛化误差好
我们不是很关注它的经验误差
虽然我们用它来训练模型
因为在训练数据上它的真实的label我们是已经知道了
我们希望这个模型在将来的特殊数据上面能够work得好
这个是我们的目标
那么所以泛化误差越小越好
但是经验误差我们训练的时候是要最小化它
但是它也不一定是越小越好
那么就像刚才那个例子
它的经验误差非常小
但是这个显然是一个过泥河出现了
所谓过泥河就是它的训练误差非常小
甚至接近于零
但是它的测试误差非常大
那么这个学习它是把它这些训练数据
你可以形象地认为
它记住了这些学习训练的数据点
但是它没办法推而广之
它不具备举一反三的能力
你要再有新的数据让它去预测的时候
它的误差就变得很大了
那么我们需要的模型
是希望能够能够举一反三的
具有推广能力的
能够泛化的这样的模型
所以我们要尽量避免过泥河现象
我们看一下当产生过泥河的时候
它是它有一个什么样的现象
那么这个是我们的这个模型
刚才那个房价泥河模型的参数
这是它的这个模型的接数
我们刚才不是看了四种模型
零阶 一阶 六阶 九阶 对吧
当它是九阶的一个模型
非常复杂的模型
泥河的时候我们可以看到
它的泥河的这个系数
这是参数
它的绝对值非常大
绝对值非常大
这就表示
在输入X有一个很小的变化的时候
它的输出外可能会有很大的震动
这就对应的这样的图形的形式
红色的线
红色的线是一个九阶的多项式的函数的形式
就说当它的输入
在它的这个比如说它
即便是在训练书记旁边
有一个很小的变化
那么它的这个曲值都会变化很长
这就是由它的这个系数来决定的
那么这个其实不是我们希望得到的
这样它的泛化能力就会很差
右面这个图是它的训练误差
和测试误差的图
可以看到它的横坐标是M
就是模型的接数
我们可以看到随着模型接数的增加
也就是模型复杂性增加
它的训练误差
蓝色的线是一致下降的
但是测试误差
它的下降以后
到九阶会有一个很快的升高
那么这个例子呢
其实是一个特殊的例子
但是它基本上反映了这个过拟核的现象
过拟核的现象
它的测误差就是这样子的
一个U形的曲线
然后训练误差是这样子的
那么这一点显然是一个
最好的
然后这样的模型
通过这一点再继续变得复杂的时候
它的
虽然训练误差还是不断地在下降
但是它的特殊误差上升了
这个是我们需要
这部分是需要避免的
但在这个里面
当然三阶是最好的
就是在能得到一定的性能的情况下
我们倾向于用更简单的模型
那么这个例子呢
就是一个非常形象的
所谓欠拟核和过拟核的例子
你看训练数据
假设我们看到左侧的两个树叶
那么测试的时候
我们看到两个新的样本
一个是上下两个
那么如果是过拟核的话
那么上面那个树叶
我们就认为它不是树叶
因为它不是树叶 为什么
因为训练数据里面都有这个
树叶的边缘有这个锯齿形状
那么这个没有
不过过拟核我们往往就不会把它分对
那么欠拟核的话
我们可能会把这个分成树叶
因为它是绿色的
那么欠拟核你可以认为
它用了非常简单的特征
去做一个非常草率的判断
那么这个过拟核
你可以认为它用过于复大的模型
做一个过于复大的判断
那么这两者都不是我们想要的结果
好 那接下来看
我们怎么分析泛化误差的期望
泛化误差我们没办法准确的去计算
因为在真实的这个模型的应用中
在测试阶段
我们是不知道它的Ground truth的
我们这个paper上面report的测试结果
假设是知道
但是我们不用它
只要把它用作评分标准的
那么所以泛化误差
可能我们没办法准确的去估量
而且泛化误差我们是希望
能够在所有未见的数据上面去估量的
但是呢
我们又不可能拿到所有未见的数据
所以这里我们只能用通过期望的方式
来去衡量一下这个泛化误差的大小
那么这里我们不得不讲一些
稍微偏那个机器学习理论的东西
这里讲的稍微浅一点
因为这个模型选择要用到一些这个结论
那么后面讲这个
如果大家有不太理解的地方
我们后面还专门有一节课讲
机器学习的初步理论的时候
再去重复一下
那么这个就是所谓的偏差方差的分解
那么假设这个
测试数据是X
那么T是要测量的变量
那么其实你可以认为T就是那个目标
那么条件期望这里HX
我们假设我们的一个模型是F
FX
那么FX它的最优值
就我们定义为HX
那么这个呢
它就是一个条件期望的一个
它是一个均值
或者是条件概率的一个均值
为什么这样算
我们假设这个
假设一个loss function它的期望
那么它的期望
那肯定是一个积分嘛
积分是FX-T对吧
然后平方DXDT
对吧
那就是在所有XT的取值上面
我对这个误差的平方做积分
那么这是那个loss
那个loss的期望值就是这样的一个大概值
那么如果我要是说
对这个loss求
我想求一个最优的一个模型
那么其实就是
在这吧
对这个求一个偏导让它等于0对吧
那个偏导让它等于0的话
其实就把这个平方拿过来
2倍的FX-T
是吧
然后最后能够得到一个它的等式
这个过程我就不写了
那么等式就是这个F星
让它等于0的话
解出来这个F星
就等于这个T
DXDT
那么这个其实就是一个期望
这个是条件分布
你们刚上去年讲过了概率
那么这个不是条件分布
在T上的均值
在T上的均值就是这个期望值
ETX
那么我们把它定义为HX
那么这个HX你可以直觉地理解它
它为就是当数据量无穷大的时候
那么我能得到的最佳的那个模型
最优的模型
那么它是这个F星
当然我们不一定能得到
就看你这个进去学习那个模型和方法
那个优化过程能不能得到
所以这个HX是最优模型
可以认为是最优模型
因为我是要在所有的数据上面去求的
好
那我们要最小平方误差
其实就是这个
对吧
最小平方误差是这个
那么这里我把它改一下
这里
加上一个H
再减去一个H
然后就对应到这个
这里写的YX
YX和我这个FX是一样的
都是我要建立的模型
只是写法不一样
这个是我要建立一个模型
YX
这是FX
是一样的
那么那个T是那个target
是那个真实的label
就是真实的label
这是那个最优模型
所以我把这个拆开
里面加上一个HX
减去一个HX
然后把它再用完全平方展开
当然这是这个模型
当然这是其中的两项
还有一项是二倍的
Y减H乘以H减T对吧
那一项其实你最后积分以后等于0就没有了
所以这个误差的期望就是等于这两项
这两项
后面这一项你可以看到
这个THX都和我的模型Y没有关系
也就是说你这个Y
不管你最后训练出来什么样的一个模型Y
那么这一项都是存在的
也就是说这一项其实是造生
这一项是造生
那我们现在就研究前面这一项
前面这一项
那么前面这一项
我们这个
这是刚才的说明
说明这个就是我们要建的模型
这个W是它这个模型的参数
那么它要肯定是要去凝合HSX
这个是最优模型
那么所有的这些数据都是从这个里面采样来的
我们要最考察第一项
刚才那个第一项就是Y减去H平方
这一项
这一项我们可以把它
这个平方也把它拆分一下
这个里面减去一个这样一项
再加上这样一项
这两项一相同的
那么这一项是什么
就是说我的模型在整个数据集地上面
训练数据集地上面的一个期望
去求一个期望
然后
然后平方
然后还是用完全平方展开
等于这个平方
加这个平方
再加二倍的这两个的成绩
其中第二项
其实我们后面做积分的时候
这个最后一项第三项
成绩项还是可以消掉
它是等于零的
所以现在就剩这两项
那么它
这一项
平方
这个平方
这样两个平方的项
那么这个项
我们在对它
在地上面求期望
就是把
异地
作用于这个平方和这个平方这两项
然后
也就是说异地在这个上面去求
求期望
就等于这两项的期望
可以看到这个的期望
这个异地是可以
拿进去的
拿到这个平方里面的
因为这个
因为这个HX跟地没有关系
那么这个呢
这个Y是跟地有关系的
因为你是要在这个训练数据上面
去得到这个模型
所以把这个
我的模型在地上面求一个期望值
那么这个HX求完期望还是HX
那么这个呢
也是在后面这个完全平方
也是对它求一个整体的期望
也就是说这是一个
期望减去这个HX的平方
后面这个是一个
模型减去一个这个期望的
的这个平方以后再求期望
那么前面这一项的含义
就是Bear's的平方
它平方在外面
就是偏差的平方
为什么叫偏差
可以看到
这个是我建立的模型Y
HX是最优模型
也就是说我建立的模型
和最优模型之间的差距
这个叫偏差
这个偏差不是数据带来的
因为你这个数据已经求了期望了
把数据的干扰已经去掉了
那么这个呢
可以看一下
它这是我的模型
和这个模型的期望值之间的差距
再求期望
那么这个是方差
它就符合我们概率里面那个方差的定义
大家还记得方差的定义吗
其实它描述的是我的模型和平均
模型之间的差距
其实它跟方差的含义是一致的
也就是说它的这个方差的大小
是完全由数据带来的
就是说我在这个数据集上面训练的是
模型一
在那个数据集第二上面训练的模型二
第一和第二之间差距如果大的话
那么它的方差就会大
也就是说它这个方差的来源
是来源于训练数据
它的不稳定性或者是欺骗性的数据
所以它是就是方差的来源
那偏差呢
往往是来自于你模型本身的架构
因为你这个数据的干扰已经没有了
所以这叫是偏差的平方加方差
这个就是我们最后那个loss
它的期望值可以表达成的两个重要的两项
也就是我们刚才看到这个
不是它可以分这两项吗
然后对它求期望
然后等于这样
蓝色和红色这样两项
蓝色就是偏差的平方
红色就是方差
最后还有个noise
我刚才说的noise那一项
那么这个就是我们对于误差的期望的
它的组成部分就是偏差的平方
加方差加造生
就是这样三项
这个是偏差的平方
方差造生
就是偏差不是数据来到来的
然后方差是由训练数据带来的
这个造生是它本质存在的
它不可能消掉的
我们来进一步理解一下
这个所谓的偏差方差的分解
那么偏差的平方代表的是
它所有数据上面的平均的预测结果
我们不是在那个模型上面用求了一下ed吗
它的平均结果和真正的那个
最优的回归函数之间的差异程度
那么方差是一个数据级上的预测结果
和它的均值之间的差距
它代表的是这个模型对于数据级的敏感程度
越敏感的话方差会越大
还有造生是学习任务本身的难度来决定的
造生是和这个模型没有关系的
这个图就展示了我们期望的损失
和偏差方差以及造生之间的关系
黑色的是测试误差
红色的是方差
蓝色的是偏差的平方
这两个加起来是一个紫色的
单紫色和黑色之间的差距就是造生
那么看红色标其实是这里一个叫lambda
这里我们有讲lambda其实是正则项的系数
也就是说你lambda越大的话
它正则项起的作用越强
正则项的作用就是让模型趋于简单
那么说如果lambda越大的话
模型趋于简单
那么趋于简单的话它的方差会小
然后偏差
偏差会大
然后方差会小
这个图呢
这个靶子这个图很形象的
描述了所谓偏差和方差的含义
那你看如果偏差和方差都很低的时候就是这样
那么这个是方差很大
但偏差不大
那它的平均值会比较接近这个正中
那么这个是偏差很大
但是方差很小
那么这个就是偏差和方差都很大的情况
那么这个靶心你可以认为是你真实
那个HX
那个真实应该模型
那个自由的模型
好
那么我看一个例子加深一下这个了解
那么假设有100个数据集
100个数据集D
那每一个集合里面都是25个点数据点
那么我们也是去拟合一个正弦函数
我们采纳的模型这里是这样的形式的模型
这里是F
跟刚才那个Y是一个意思
我们假设这个模型是这样子的
模型的参数是W
那么其中这个它并不是WX
这里X就把它变成了5X
其实这个没有什么
就是把这个X做了一个指数函数
那么这个其实也叫G函数
我就是先把原始的X特征去做了一个非线性变换
然后在这个新的特征上面
去用这个多项式线性组合
然后得到这样的一个模型
这就是我要采取的模型
还有一个正德化项
正德化项就是2分之LambdaW
这是一个项量
就是24位项量
项量这个模
那么这个是一个正德化项
它会放在那个损失的后面
所以一个损失本来是一个
比如说军方跟损失就是两个平方
所以它新的损失就是一个
原来的那个损失就是F减
比如说T平方
然后再加上Lambda
所以它叫最小化这个损失
得到这个模型
所以一般在损失里面加入这样一项
这一项就叫正德化
Regalization
那么这一项它的作用其实是
你看它约束W的模长
它会约束这个函数模型的复杂程度
我们刚才看到那个九阶的那个
就像是拟核
它的系数非常大
W的模非常大
它会约束它的模
会让它不是那么震荡
趋于平坦
就是在你模型的接触假设
已经确定的情况下
加正德化会约束模型的复杂程度
约束模型的复杂程度
其实它就是调整偏差和方差
避免隔泥
所以加约束加加正德化
其实是避免过泥核的一个非常有效的手段
好 我们看一下
不同的Lambda曲值的时候
我最后得到
你看这个是100个数据集
为了好看
其实它是画了20条
20个数据集上面的模型拟核的结果
红色的线是拟核的模型
你看这个Lambda
左边是大
右边是小
你看这个Lambda越大的话
它对模型的约束越强
它模型会趋于简单
对不对
然后它这个模型就是这样
这个是Lambda等于-2.4
较小
这是它20个数据集上面拟核出来的模型
下面这个红色的线
就是这100个数据集上面的模型的平均
可以看到这个平均分别是这三种情况
那么偏差和方差可以看到
可以从这例子里看到
它对模型复杂度的影响
是可以通过这两个指标来呈现出来的
那么其中这个正则化是可以控制
通过偏差和方差控制它的最后的结果
还是非常非常重要的一项
不管是regulation还是normalization
在这个模型
尤其是现在深度网络模型里面的normalization
也是很重要的一个设计
要考虑的因素
我们再回到这张图可以看到
如果Lambda比较小的话
它的约束不是那么强
那么它的数据集就容易去拟核数据集上的噪声
它方差就会大
方差就会大
就像这个
那么如果Lambda比较大的话
它的约束很强
它方差会小
但是偏差会大
像左边这个例子这样
那么测试误差的最小值会
当时是出现在这里
这里的时候它的偏差和方差的核
也对应的是最小值
这两个之间的差距是由噪声
误差的噪声点带来的
当然我们要权衡一下偏差和方差
它不是说同时增加或同时降低的
所以这个就存在一个吹道
那么如果一个模型非常灵活
像一个九阶的模型它很灵活
那么它的偏差会低
但是方差会高
那么对于严格的模型
Strict或者是古板的
或者是刻板的模型
那么它的偏差会高
然后方差会低
当然还有一些更多的
我觉得这些细节
其实如果你不结合实例的话
就很难说它是对的还是错的
因为在有些情况下
我们并不一定要最小化方差
或最小化偏差
有的时候为了应用目标起见
我们可能会想要多一点方差
有的时候就是可能节省一些方差
那就多一点偏差
都是有可能的
这里就不细讲
但是这个偏差方差的分解
就是从理论上能够让我们更多的去理解
这个模型的泛化误差
还有就是它的过女和的现象
但是它的实用价值是有限的
首先我们计算的时候
是要去做积分的
对吧
也就是说我们需要知道
XT它的联合分布
在整个联合分布上采样去做积分
但是我们一般是不知道
它的真实的XT的分布的
还有就是我们要求这个期望
求这个EB
就是在很多不同的训练数据集上面
对某个模型去求它的期望值
但一般这个我们也没法做到
因为我们所有训练数据就那么多
你要说我有一百个训练数据集
我去分别每个数据集上去做
那你就把一百个合成一个都用了
训练数据我们害怕不够
就都是把它合在一个数据集上都用了
所以这个也是不是特别实际的一种做法
但是它从理论上给我们了解
泛化误差
偏差
方差的分解来说是非常重要的
好
那我们休息五分钟
然后一会再接着讲
在这样的前提条件下
我们理解了这个理论以后
怎么去进行这个复杂的这个模型选择
好各位同学我们接着讲
那么刚才讲的这个
关于偏差和方差的分解
稍微有一点点理论
那么如果大家想去复习的话
可以看最简短的是周志华老师那本西瓜书
那么也可以看B-shop那本英文的那本书
那么这个写法就是这个YX或者是FX
都是我要建立的模型
那么这个模型在这个例子里面很简单
它只有一个变量X
X就是输入的样本的特征
那么这个输出就是这个X的一个函数
它只有这一个字变量
但是有的时候
这个YX后面我会这个封号写W
就是意思是这个W是这个模型的参数
那么有时候写D
就是表示这个模型是在D上面训练得到的
他们都会影响这个模型
那么我们怎么去评价一个模型
进而去选择它的模型
就看它的模型性能如何呢
那么在单独的数据上面去评价这个模型的时候
有几种经典的代表性的方法
一个是流出法
一个是交叉验证法
还有一个是刺举法
那么这三种方法都很简单
但是实验中就是经常使用的
所以这个大家一定要了解
那么流出法就是hold out的意思
顾名思义的还很简单
就是说我整个训练数据集
我不是把整个训练集都拿来训练
就是你给你这么多数据
我不都拿来训练
我用一部分流出一部分
那么拿来训练的这一部分
叫training
流出来这部分叫validation
叫验证
这个叫训练
这个叫验证
那么这一部分数据你没有参与训练
但是它又有label
你就可以去用在这个数据上面
我去了解我训练
在训练集上训练这个模型
它的性能如何
然后进而
然后我再去调整这个模型的一些选择
比如说在简单点在复杂点
或者是它的有超参数的话
可以确定模型的超参数
那么这个就是流出法
那么一般的话
流出法经常会用一大半数据做训练
当然我们说这有一个样本复杂度的问题
这个也不讲了
也是一个理论一点的问题
就是说一个模型
给定一个模型的复杂程度
如果我给你的训练数据越多
它的模型训练出来的会越好
这是比较感性的一个表达
它会有一个更formal的一个定理
那么所以我希望用越多的训练数据越好
所以我会用一大半数据做训练
一小部分做验证
那么假设数据集包含1000个样本
那么我们可以拆成比如说700个和300个
那么700个做训练
然后300个做验证
那么在训练集上面训练完这个数据以后
假设它在验证集上这300个数据上面
分对了210个分错了90个
那么所以它的错误率就是30%
那么它的正确率是70%
所以你留验证集就是这样一个作用
我在验证集上去评价一下我训练好的模型的性能
那么一般的情况下
我们需要划分训练和验证集的时候
要保证它的数据分布是一致的
那怎么样呢
一般是分层抽样
比如说它是含有10个类别的这样的一些数据
我不能说3个类别验证7个类别做训练
最好是每个类别的数据都分成7成是训练的
3成是验证的
所以它最好是有分层抽样
那么这个在具体你实验做实验的时候
这是一个基本的原理
还有可以多次的重复划分
你划分好多次
每一次都在验证集上得到一个性能
最后把这多次的性能结果去做一个平均
这样就避免了一次划分的随机性带来的性能的不稳定
它的随机性
所以你多次平均以后得到一个更准确的评价结果
训练集一般是我刚才说了是占多数的
经常是三分之二以上肯定要
有时候五分之四甚至更多
这个是流出法
交叉验证法就是在流出法的基础上去循环使用的
所谓交叉验证
假设我们把一个数据集地分成十份
每一次它用其中的九份去做训练
然后一份去做
这里写的是测试
其实是验证
会得到一个模型的验证结果
下一次我用一个不同的字集去做验证
这样重复就可以重复十次
我们就得到十个这样的验证结果
做平均以后就能返回一个模型的结果
这样的模型性能的评价是比较贴近真实的
这就叫交叉验证
交叉验证划分这里是划分了十个
这个就叫十折交叉验证
英文叫fold
叫10 fold
cross validation
交叉验证就是cross validation
这个就是十折交叉验证
我们经常不一定非得取十折
十折是比较常用的一种设定
K可以取很多不同的值
怎么决定K值呢
如果K值很大的话
每一个字集用作验证的字集就非常小
非常小的话
物差的方差就会很大
因为在一个非常小的集合上测试
因为验证的样本量很少
但是它的偏差会相对小
你用来训练模型的数据量会大
它会用九份去做训练
不是九份
是K减一份做训练
然后它的训练数据量大
它的模型训练就会较好
它的贴近最优模型的可能性就更高
所以它的偏差会小
如果K比较小的话
比如说五折六折比较小的话
当然这样计算时间会减少
因为你用K折交叉验证是要重复K次的
那么时间会小
但是它的偏差会大
因为用于训练的样本数量少了
方差会小
为什么就是验证的样本量多了
就是每一个字集它的样本数量要多一些
你看这个也跟偏差和方差有关系
这就是为什么我们一定要先交代一下偏差和方差的含义
即便你可能有一些数学的推导没有看得非常深入
那么我们经常选的
刚才说是十折交叉验证比较常用
还有字举法
字举法叫bootstrap
英文叫bootstrap
那么这个也有研究者叫自助法
但我觉得字举可能更贴切一些
其实它是在给定的数据集里面去sample出来的
bootstrap
那么这个就是一个例子
那么前面左上角这个就是给定的这些数据
每个点代表一个数据点
我可以从这个里面去sample很多数据字集出来
那么它每次sample出来的
它的特点就是和它的原始给定的数据集是数量一致的
都是这么多数据点
但是每次sample可能跟原来的数据集不一样
可能有很大的overlap
因为它是有放回的抽样的
有放回的抽样
可以看到其实它这个黑色点抽两次
那么这个里面就是红色的黑色都没抽到
那么这个也是黑色的抽两次
所以它是对原始的数据集有放回的抽样
n次
得到一个和原始数据集同样大小的数据
然后这个叫bootstrap
然后在这样的数据上面去训练
因为你得到的每个数据集都不一样
它是有差别的
因为抽样的是有随机性
所以这样的话
它就可以在这样的不同的bootstrap上面去训练模型
我们可以看一下这个字举法
它大概覆盖了多少数据
为什么可以用这样的方法
那么假设它原始数据的数据集是有小n个样本
那么有放回的抽样抽n次
我们得到一个新的数据集d一匹
那么这样的话
其实这个你们概率可刚学过吧
那么采样一个数据样本没有被采到
就是采n次没有被采到
没有被抽到的是1-1%
每次都有1%的概率采到
那么一条数据
就是每采一次没有被抽到的概率是这个
那么采n次都没有被抽到
那么就是1-1%的n次方
当这个n比较大的时候
这个集限是1%
是一个0.368大概是
这就意味着你这样的用这个字举法去抽
那么它的数据集将会覆盖大约63.2%的样本
那么剩下的那些d减去d一匹
就可以作为验证集
就是说测试数据不是特别准确
做验证集
那么这也是一种方式
那么我们选择模型
那么我刚才说了把数据分成训练集和验证集
那么验证集是不参与训练的
那么它只是用来评价这个模型的性能
进而可能帮助去选择模型形式
或者是确定一些超参数
然后一旦确定了超参数
一旦确定了模型以后
我们会在整个数据集上面重新训练模型
也就是说我不是十折了
我不用九折了
我用十折重新训一下
或者是我用百分之百数据重新训一下
为什么
这样增加了训练数据量
它的训练的效果应该会很好
那么这样的话
得到一个模型
这个模型就等着在未来的测试数据上面
去进行评价了
它的泛化能力应该是
我们所能够得到的
最好的泛化能力的模型
最后
刚才讲的是跟模型选择有关系的
然后再看怎么评价呢
我训练好了一个模型
我怎么去看
在验证集上或测试集上看
这个模型到底好不好
就是我们有哪些指标
其实这个跟你的问题有关系的
我要解决一个什么问题
我要解决的是一个分类问题
可能就是准确率
那你要解决的是一个排序问题呢
还是一个图像生成问题
还是一个自然语言生成问题
不同的问题
它的评价是不一样的
我们可以看一些常用的
这个就是远远不全
就是你在后面接触到
自己学习的问题的时候
那你根据具体的问题
它会在这个领域里面
有些公认的评价方法
到时候你们还会进一步的去调研
那么所谓的性能评价呢
就是针对特定问题去评估模型
那么因为训练
训练好的以后的模型
我们要在测试局上去让它去做预测
然后看这个预测的效果
然后来去计算一个评价的量
那么它一定是针对特定问题的
没有general的评价指标
那么就假设
例如我们刚才这个房价这个问题
最简单的一个问题
它是一个回归问题
所以我们一般用均方误差来评价它
均方误差就是我们这个model F
和真实的这个Y之间
这里写的是Y
之前我用的是T
那个右上角这个角标
括号这个角标是代表的这个样本的index
它的样本的index
不是这个密词
那么一共比如说有N个样本
然后每个样本它的预测值和真实值之间的差别
差的平方和
这叫均方误差
这个是回归问题常用的评价指标
那么分类呢
假设它真实的就是两类
就是很简单两类分类
这是真实的分类
有十个样本
这是我预测的这个类别
那么怎么去评价一下我预测的这个质量好坏呢
可以用错误力或者是正确力
这两个相反的都可以
那么我预测的是0或1
有的分类器分出的值是一个时数
这个时数介于01之间的时数
它代表分到某一个类别的概率
那么这个错误率怎么去定义呢
就是这个布尔函数1
就是说如果这个成立的话
它就取1
不成立的话取0
也就是说它这两个预测值和真实值不相等的话
就取1
如果相等的话就取0
那么在所有的样本上求平均
这个其实就是说去计算一下它有多少样本
多少多大比例的样本是预测错了
所以这个叫错误率
和整个样本量去做一个商
就是有多少比率的样本量是预测错的
那么相对应的正确力就是
它正确的这些样本所占的比例
但是那个正确力和错误率也不总是合适
我们看一个例子
这是一个医学诊断的问题
那么假设
在这个癌症筛查的过程中
真正患癌的
它的比例是1%
那么也就是说100个人里面
可能有一个是患癌的
就是说100个人里面
那么也就是说100个人里面
可能有一个是患癌的
99个是健康的
那么它就是一个二类分类的问题
两个类别
假设我们建立了一个这样的
医学辅助诊断的系统
我们去对任何一个
比如说检测的这个结果
或者是图像
或者是什么化学指标去做分类
然后我们如果这个系统
对所有患者都分为健康
那它正确率就有99%
显然这个不是我们想要的
你把那1%的人也分成健康的话
这个是误诊
是漏诊
那么这个后果非常严重
所以说我们不能用
简单的正确率或错误率
来去作为指标
所以这个一定是要具体问题
来具体分析的
也就是说这两种错误的
代价并不相等
你就是把健康的分成癌症的
把癌症分成健康的
它的代价是不相等的
那么这里的99%的正确率不是很好
所以有的时候一个很高的正确率
并不代表你很好的解决了这个问题
并不代表你的模型的性能很好
那么它有可能是一个很好的
有可能是一个好的
也可能是平庸的
甚至是差的或者是可怕的结果
这个真的取决于具体的问题
那么这里像刚才这个医学的
诊断的例子
你就要考虑这个base rate
所谓的base rate就是
你预测优势类别的正确率
大部分这里的优势类别
就是那个健康的人群
那么大部分的问题上面
你预测优势类别都会得到一个很高的均群率
但是你光在这个基础上
你要平衡base rate
和稀有类别之间的差距
就像我们在一些分类的问题上面
我们假设这个类别
每个类别所占的数量都差不多
那么这个时候我们去做分类
和我们对这个数据分布
没有任何假设的时候做分类
是完全不一样的
我们现实中好多数据是长尾分布的
这个大家应该了解
是这样子的一个分布形式
横坐标是类别的index
纵坐标是它的分布的数量
就是可能有少数的类别
它的数量里面含的样本特别多
但是有大量的类别
它的样本量非常少
就是我们整个世界就是这样的一个分布
所以任何事情
我们这个长尾分布要比这个均匀分布
要更具代表性
就像生物的物种
就像各类事件的发生
都是这个长尾分布
所以在长尾分布下面
我们怎么去很好地去做分类
其实这个虽然只有两类
但是它也有一个非常高和非常低的
这样的一个分布
一个99%
一个1%
所以它是非常不均衡的
现在我们也有人
我本人也在研究
在数据分布非常平均的情况下
我怎么去做学习
这个也是一个挑战性的问题
比较直观的一个想法
我要考虑一下它不同类别
不光是求一个平均的错误率
然后不同类别我要区别对待
这是一个非常直观的想法
也就是说它要代价敏感
那么对于分成健康的人群
和分成癌症的人群
我对它的cost定义是不一样的
这里有一个cost01
有一个cost10
我这样的话
我就可以人为地赋予它不同的惩罚
比如说你本来是癌症
你给我分成健康的
我会给你一个很大的惩罚
这个时候我就考虑到了
不同类别之间的一个平衡的问题
这个方法其实就是解决
肠胃学习中的一个最基本的方法叫weighting
或者叫reweighting的方法
就是从加全的一个方法
所以大家要了解
并不是所有的类别都是平等的
我们也需要用不平等的方式来处理它们
一旦得到了分类结果以后
需要不光看整体的正确错误率
我们还要分析一下它错误的来源
哪些类别
哪些分错了
哪些本来是正确的分错了
哪些本来是0分成1
本来是1分成0
我们就可以用一个叫混淆矩症
confusion matrix去做一个这样的度量
confusion matrix大家可以看到
在很多问题上都会用到它
这个是它真实的label
我们假设以二类的分类问题为例
这个是true这个是false
这是真实的label
prediction是你预测的结果
预测的话positive就是你预测为
比如说健康
negative预测为癌症
这个是健康就是癌症
true代表正确就是错误
那个是正反是你预测的结果
这个true positive的意思就是
它本来是正立你预测为正
false negative就是本来是负立
但是你预测错了 false了
所以true和false代表你真实的结果
这个positive negative代表你预测的结果
所以正确的就是true positive和true negative
这两个是预测正确的
这两个是预测错误的
false negative和false positive
刚才我们说的accuracy
这是所有的样本分母
分子就是accuracy就是你预测正确的那些
除以所有的样本
这就是正确率
但是这个并不能够
即便是平衡的类别
也不能够完全的刻画它分类的性能
尤其是在这个癌症筛查的情况下面
它就不一定是很准确的
正确率是非常有局限的
尤其是占的比例非常大的那些类别
它是会非常影响最终的正确率
我们再回来看混淆矩阵
我们以文档的检索为例
假设是文档的检索
检索就是输入一个关键词
它返回
如果是返回的话
比如说是1
不返回是0
它也是这样的结果
这里就可以定义两个
一个是查准率
一个是查权率
查准率就是说
我返回的文档有多少是正确的
你搜它
搜出来以后有返回了很多个
这个里面是不是都是正确的文档
这个叫precision查准率
然后recall查权率
你有多少的正确的文档被返回了
可能有些漏掉了
这个是precision和recall的区别
查准率
用混淆矩阵里面对应的那些条目
数字来去计算
tp除以tp除以fp
tp和fp都是positive
positive是你返回正确的那些
返回正立的
但其中有多少是你预测正确的
这个是tp除以tp加fn
tp加fn就是返回的那些
它有多少正确的
不是返回
这是返回正确的
这是本来就是正确的那些文档
应该返回的文档
就是false negative
false negative就是说
本来它是应该返回的
但是你没有返回
你预测为negative了
所以这里有一个查准率和查权率的概念
从这个图里面可以去直观的去了解一下
比如说左边的举行是相关的
右边的是相关的
右边是不相关的
你可能返回圆形中间的圆形的区域
其中有一部分是true positive
但有一些是false negative
你本来应该返回整个左边这一部分
有一部分查准了
这绿色的
有一部分查错了
但是有一些这些就是没有查权
这一部分就没有查权
查准率就是说你在这个区域里面
圆里面有多少是准确的
查权率就是说你在整个正立里面
多少你预测为正立了
所以这是两个指标
查准率和查权率
有时候它是有一个trade off
就不是说你能够同时提升它的查准率和查权率的
这个也很容易理解
需要有一个预值
它两个是矛盾的
此消彼长的一个指标
一般的话我们会对
比如说你要返回的样本去做一个排序
比如说它相关性排序
我会卡一个预值
我返回多少个
当然你返回的越多
查权率越高了
但是查准率会低
你返回的越少有可能
排在前面
它准确率会可能高一些
但返回的越少
查权率会低
查准确率会高
所以我可能会设立好多个这样的
每个样本都设立一个预值
这样的话就能plot出来一条查准率和查权率的曲线
这个叫precision recall曲线
或者叫PR曲线
就是这样的
它横坐标是precision
纵坐标是precision
横坐标是recall
它这个曲线就是我取很多不同预值的时候这些点
延伸的一个线
当然这个线越向外
向右上角
说明这个模型会越好
那么再说明它的查准和查权率会越高
但是如果是两条交叉的曲线
我们就很难去判断
就像A和B
就很难判断它
哪个会更好一点
从这儿看好像是A
A和B要比C好
但是A和B很难说哪个更好一点
还有一个F1 score
F1 score它也是基于混淆矩阵来去算的一个结果
它也是在查准率和查权率基础之上去算的
是它的一个调和平均
具体的这些你都不用记
就知道它也是一个评价的指标
F1是这样定义的
n是样本数量
更一般的情况就是
刚才这里是β等于1
β你可以取一个你自己设定的值
当你设定β大于1的时候
那你就更care它的查权率
如果β小于1的话
你就更care它的查准率
还有这个是一个刚才分类的例子
从这个分类的结果
你就可以去构造confusion matrix混淆矩阵
你看本来是1
你预测为1的就三个
本来是1
预测为0的有一个
然后这样得到混淆矩阵
你就可以算
P precision recall
还有F1的值
这个都是它的一个评价指标
还有另外一个指标叫ROC
ROC大家也许听过
它的原名或者是全称叫
接受器工作特性
这个有点拗口
有人叫受试者工作特性
受试者 receiver
这个其实是
最早是在源于二战的时候
我们对迪迹检测的时候
我们去分析它的雷霸信号的时候
用的一个技术
所以接受器是从那儿来的
现在其实它
receiver没有当时的含义了
但是ROC曲线我们流用至今
ROC曲线是怎么来的呢
我们这个模型会对输入的样本进行排序
比如说你分类的话
我分成这个类别
怎么排序呢
可以根据它属于这个类别的概率
如果本身它就是一个ranking的话
它就本身有一个排序
根据这个排序
然后设立域值
然后去不断地改变域值
然后得到
两个量之间的一个曲线
和Precision Recall不一样的是
它的横坐标是FPR
纵坐标是TPR
我们看一下这两个
只是它的定义形式
这里
TPR叫
True Positive Rate
真阳性率
真假就代表True False
阳性阴性就是你预测的结果
这跟我们这个做检测
医学检测是一致的
阳性阴性指的是你模型预测的结果
真假是真实的
真阳性率就是
True Positive 除以TP加FN
这两个加起来就是你真实的
真正有多少个正阳本
这个是有多少个负阳本
这是假阳性率
FP除以这个值
你预测的里面
真阳性率和假阳性率之间
也是有一个吹道
然后我也可以画一个曲线
这个曲线叫ROC曲线
ROC曲线可以告诉我们
这个模型区分能力有多好
比如说这是两类
我们有这样的一个模型
可以预测患者患疾病的概率
然后我们就可以设立一个域值
然后去进行分类
这个域值放在中间
放在0.5这个地方是最好的
它左边就是True Negative
这是True Positive
这个橙色和黄色分别对应的
就是False Negative和False Positive
这个就是对应了我们混淆矩阵的含义
大家根据此图可以再强化一下
对混淆矩阵的量的定义和理解
看这个真阳性率
其实它也叫零敏度
如果是阳性的话
那么你把它检测对的准确性准确度
就是代表这个零敏度
是对一个模型来说的模型的零敏度
那么这个假阳性率的相反数一减去
它叫特异性
它渡量的是对负样本的判别能力
那么如果这个零敏度是对正阳本的判别能力的话
特异性就是对负样本的判别能力
如果特异性越高的话
那么它对负力的检测就会越准确
那么这个都是它的指标
当然这个零敏度和特异性之间也有个权衡
那么这个预值如果低的话
那么我们就会得到更多的正值
那么它的零敏度会高
但是特异性会低
如果提高这个预值的话
那么它的负值就会多
正值就会数量减少
然后它的特异性就会高
然后零敏度就会低
那么你看这是横坐标是特异性
然后纵坐标是零敏度
那么这个就是这个曲线
ROC曲线
这个ROC曲线是出positive和false positive rate之间的
这是零敏度的曲线
当然你可以转成ROC曲线
ROC曲线当然是越凸向左上角越好
那么我们可以用ROC曲线下面的面积
A rare undercode AOC
来表示模型的性能的好坏
或者模型的能力
它也是一个指标
我们不说它越凸向左边越好吗
它的面积越大越好
那么所以ROC也是一个这样的指标
而且它的定义是和模型它的排序的损失有关系的
看一下排序的损失
这个L rank就是排序损失
那个L rank是排序损失
它是对于任何一对正立和反立的样本
我们去定义它
X正就是正立
X负是负立
如果你这个正立
这个负立如果是正立预测的值
反而小于负立的时候
那么会给它一个1分的惩罚
那么如果它是相等的话
给它一个0.5分的惩罚
当然它正立应该是大于负立的
那个就没有惩罚了
所以这个就是一个惩罚
那么加在一起以后就是一个ranking的loss
一个损失函数
这个ranking的loss
然后这个loss用1减去以后就是对应的AOC
其实它对应的是ROC上面那个面积
减去以后就是下面AOC
所以这个AOC它对应的是一个预测样本
这个样本预测排序的性能的好坏
那AOC的值越高的话
代表它的模型的性能越好
那么这是一些例子
那么这个模型它显然它的判别力很强
它AOC就很高
但判别力很弱的话AOC就很低
好
那刚才说的都是像排序啊
检索啊分类啊这样的问题
那么现在这个文本生成
生成模型也很多
我们文本生成怎么去评价这个模型呢
左边这个叫修辞方式
这个是比喻 这是拟人
其他的
那这个比喻的就是生成一些不同修辞方式的语句
那怎么评价这些生成的语言的好坏
还有就是在NLP里面我们还有其他一些任务
比如说你从一个语言翻译成另外一个语言
翻译的质量好坏
你怎么评价呢
我这里介绍但是不全
介绍一两个指标
一个是BLEU
那BLEU是这样算的
那么首先它算一个概率
这个candidate是指你模型生成的那个语言
模型生成的语言
那么它会算一下
去计算一下生成的candidate这个句子
里面的词
在你那个reference
reference是指真实的语言
里面的单词出现的数量
去count一下
这是所有的单词出现的数量
然后去做一个笔直
这个P N就是这个笔直
但这里有一个ngram
ngram它也是一个语言模型
那么一个1gram
就是说你本来有一个
你看看一个语句长度为L
比如说一个句子长度是L
然后你生成的这个模型里面
这个candidate这个句子里面
有M个单词出现在
这个长度为L的这个
真实的句子里面了
那个reference的那个文本里面了
那么它这个ngram那个值
就是M除以L
L是长度
这个是1gram的计算
如果ngram的话
我还要有一个额外的约束
就是我这个词要连续出现ngram
那么这个值
然后再带到这个指数函数里面
这是系数
然后B N是一个惩罚项
是对那个句子长度长短的一个惩罚项
然后得到的这个指标
它就能够去衡量这个人类和机器
输出之间的一个质量的差异
然后这个是经常用于
去度量NRP里面的生成的
质量好坏的一个指标
还有困惑度
PPL
那么所谓困惑度就是说
当我们给定一段非常高质量的
就是贴近我们人类自然语言习惯的
这样的测试集的时候
模型生成这段文本的概率越高
那么它的困惑度会越小
反之的话
它的困惑度就会越高
那么这里W1到WN就是它的一个语料库
那么这个也是对概率模型
预测文本生成的一个指标
具体的形式和用法就不讲了
刚才是讲文本
那么如果是图像的话
那么你看这些图像都是由机器生成的
那我们怎么评价这些图像生成的好坏呢
那也有一些指标
我这里介绍两个
但是也不仅限于这些
一个是Inception Score IS
那么它是由这样的方法来去计算的
那么是指数函数里面是一个期望
期望X是服从PG
从PG里面抽取的
那个PG是G代表Generative
就是生成的那些图像的分布
PG是Generative的那些图像分布
里面去抽取
然后去做一个期望
然后KL是KL散度
KL Devendence它也是距离度量的方法
有两个输入
然后去计算这两个
它是两个分布之间的距离
一般比如说欧式距离是两个向量之间的距离
那么这里是两个分布
概率分布之间的距离
那么这里它度量的就是PY given X和PY之间的一个距离
那么这个里面我们用的是ImageNet
这是一个大型的图像集合
在这个集合上面去训练好的一个模型
叫Inception V3
用这样的一个模型来去评价图像
然后通过条件标签分布和边缘分布来进行比较
那么这个指标其实可以反映它的图像的清晰度和多样性
那么清晰度由这个
就是说这个它的伤越低的话
它的清晰度越好
然后这个伤越高的话
那么它的多样性会越好
那么分数越高的话
这个IS分数越高的话
就是在两个分布之间
对应的是这两个分布之间
这个KL散度越大
但是这里面有一个问题
就是说因为这个模型
所以它叫Inception Score
训练好这个模型
V3这个模型是在这个ImageNet上面训练的
所以它见过的图像都是这个
所以它都有点坐井观天
它不是这个数据集里面的一些图像
它就会认为不好
所以它对真实数据图像的分布有一些局限
它的认知是有一些局限的
所以没办法去特别准确地衡量
生成和真实的图像分布之间的关系
那么另外一个叫FID的指标
那么这个指标就更多地去考虑了
这个真实分布和生成的样本之间的关系
比如说这里R是指Real
然后G是指Generative
这是生成的
这是真实的
然后通过它们的分布的数字特征之间的计算
去得到它的这样一个指标
而且这里它用的不是最后的结果
它用的是这些网络中间层提取的那些特征
然后把这些特征去做一个概率统计的计算
求它的均值方差
然后再去计算这个指标
然后计算这个指标
如果越低的话
那么它的图像质量和多样性会越好
好
那么这一次课的主要内容就这些
就是关于模型选择和评价的这些问题
我课后会把这个slide放在课程网站上面
好
那我们这次课就到这儿
我们下周再见