损失函数和优化-损失函数(1)
写在前面
这一节的内容比较多,仔细理解以及整理起来也着实相较之前多费了些力气,但这些力气都花得值得。
像这节中提到的“过拟合”和“正则化”,其实是非常常见而且基础的问题,但像我之前看论文,只知道大家都是这么做的以及具体是怎么做的,却是在这里才恍然究竟为什么要这么做。
不过之前一些零星的积累还是在学习中起到了作用的 ,比如课程中其实没有提到“过拟合”(overfit)这个词,但是根据讲述的问题很快就可以明白老师在讲“过拟合现象”,说明平时注重积累也是很重要的。
引出
从上一节的结果示例开始此节的分析。
CIFAR-10线性分类结果示例采用人工的方法可以比较看出第一列中猫的得分并非最高,第三列中青蛙的得分甚至为负,说明此处的权重选择并不合理。
此外,我们还可以设置一个函数定量地衡量任意一个W的好坏,将W作为输入,得分作为输出,这个函数即为损失函数。
而要找到一种有效的方式来从W的可行域中找出结果表现最佳的W取值,这个过程则被成为优化过程。
定义
损失函数的定义
- N:样本数
- x:图片每个像素点所构成的数据集
- y:希望算法预测出的结果,称为标签/目标
在这个例子中,我们尝试把数据集中的每一张照片分类到10个类别中的1个里,因此y的范围为1-10(或0-9)中的一个整数。表示对每个照片x哪个类是正确的。
损失函数记为Li,即根据样本x和权重矩阵W得到预测结果y,通过函数f得到预测的分数,和真实的目标(标签y)比较,即可定量描述预测效果。
最终的L为N个训练样本损失函数总和的平均值。
这个公式不仅适用于图片分类,同时也可延拓至其他问题。即已知x和y,通过损失函数可以判断参数W是否令人满意,然后在所有的W中找到在训练集上损失函数极小化的W。
多分类SVM损失函数
多分类SVM损失函数的定义计算的方式为,将除了真实的分类yi以外的所有的分类y求和,即求所有错误分类的和,比较正确分类的分数和错误分类的分数。
如果正确分类比错误分类高出某个安全边距(此处设为1),即若真实分类的分数要比其他任何错误分类的分数高得多,损失为0,然后把图片对每个错误分类的损失相加,取平均即最终损失。
同时也是一个合页损失函数
- S为通过分类器预测出来的类的分数
- x轴为Syi,训练集的第i个样本的真实分类的分数
- y轴为损失
随着真实分类的分数提高,损失会线性下降,在超过一个阈值后,降为0。
即我们已对这个样本成功地分对了类。
计算损失
为了便于说明和处理,将范围缩减至3个类别。
缩减后的3个类别及各自分数计算猫样本的损失函数。
以猫样本为例的损失计算结果 计算过程以同样的计算方式计算汽车和青蛙两个样本的损失,分别为0和12.9。
计算平均值即最终损失:5.27,反应出该参数W设置得有多失败。
需要说明的是,此处设置的安全边距1,是一个任意选择的值,因为在计算损失函数时,我们并不关心分数的绝对值,而只关心这些分数的相对差值,只需正确分类的分数远大于错误分类的分数即可。
有助于更好地理解损失函数的问题集
- 如果仅将汽车的分数改变了一点,是否会影响最终的结果?
- 答案:不会。
- 解释:损失函数只关心正确的分数比错误的分数大过边距值(1)。在车这个样本中,车的类别分数比其他分数大得多,因此不会有什么影响。
- SVM函数可能的最大最小值分别为多少?
- 答案:最小值为0,最大值为无穷。
- 初始化并从头训练这些函数时,初始化W的分数结果在训练的初期倾向于呈现较小的均匀分布的值。若所有的S(分数)都近乎于0,且差不多相等,损失函数结果会如何?
- 答案:分类的数量-1。
- 解释:当我们对所有错误分类的分数进行遍历时,分数近似相等使每一个损失项的结果都为1,相加后值即为分类的数量-1。
- 拓展:可作为一个有用的调试策略,刚开始训练时设想预期的损失函数值,如果第一次迭代的时候值不是分类的数量-1,意味着程序可能有bug。
- 将SVM所有错误分类的分数和正确分类的分数求和会发生什么?
- 答案:损失函数会+1。
- 如果用平均值而不是求和呢?
- 答案:不会改变。
- 如果在损失函数的公式中,max用了平方项,结果会怎样?
- 答案:成为一个不同的损失函数。
- 拓展:关于如何选择损失函数的计算方法,我们要对分类器可能会犯的不同类型的错误进行权衡。平方项损失函数意味着错误会被放大,而合页损失函数会忽略微小错误。在实践中需要重点考虑,告诉算法哪种类型的错误是自己关心的并且需要折衷的。
实现
使用Python语言,可以用简单几行代码计算Li。
使用numpy库,矢量化的代码过拟合现象
使损失函数的值为0的W并不是唯一的,例如存在一个W使L=0,则2W也可以使L=0。
W并不是唯一的在存在多个满足条件的W的情况下,损失函数要如何进行选择呢?
因为这里的损失函数,只是在数据上的损失,如下图中的式子,我们只告诉分类器需要找到可以拟合训练集的W。
机器学习的重点,是我们使用训练数据来找到分类器,然后我们将它应用于测试数据,所以我们并不关心训练集的表现,我们关心的是表现这个分类器的测试数据。
损失函数所以,如果我们只告诉分类器需要拟合训练集的话,可能会导致分类器的行为反常——过拟合,它会尝试完美分类所有的训练数据点。
过拟合的分类器事实上,如果出现了新的数据点,过拟合的分类器表现就会非常糟糕,我们更倾向于以下这条绿色直线所表示的分类器。
绿色直线代表的分类器表现更好正则化
正则化这里涉及到的就是机器学习中一个非常重要的基础问题——正则化。
为了得到这条绿色直线代表的分类器,我们需要为损失函数增加一个附加的项(正则项),鼓励模型以某种方式选择更简单的W,此处的“简单”取决于任务的规模和模型的种类。
这里实际上也体现了奥卡姆剃刀的理念,即科学发现最基本的思想就是要让一个理念更广泛,也就是说,当我们有多个可以解释观察结果的假设时,一般来讲,应该选择更简约的,因为这样可以在未来用于解释新的观察结果。
运用这种理念在机器学习中,我们会直接假设正则化惩罚项,通常记为R。
也就是说,标准损失函数通常由两项组成,数据损失项和惩罚项,这里的λ为超参数,用来平衡这两项。
有两种方法可以做到简化模型,一个是限制模型本身,不要更高的阶数或模型太过复杂,另一个是加入这个惩罚项,这样一来,模型依然可以逼近复杂模型的效果。
存在多种类型正在实践中使用的正则化最常见的可能是L2正则化或权值衰减。
- L2就是欧式范数的权重向量W,或有时平方规范,或有时二次范数。理念实际上是对这个权重向量的欧式范数进行惩罚。
- L1正则化具有一些很好的性质,像在这个矩阵W中鼓励稀疏。
- 弹性网络正则化是L1和L2的组合。
- 最大规范正则化,惩罚最高准则而不是L1或L2准则。
- 其他的会在后续讲座中提到。
这些惩罚项的主要目的是为了减轻模型的复杂度而不是试图去拟合数据。
在线性分类器中,Ws所反映的是x向量的值在多大程度上对输出有影响。
- L2正则化的作用是它更加能够传递出x中不同元素值的影响,鲁棒性会更好,当输入的xs存在变化的时候,判断会铺展开来,并主要取决于x向量的整体情况,而不是取决于x向量中某个特定元素。
- L1更喜欢稀疏解,它倾向于让大部分的W元素接近0,少量元素可被允许偏离0。
- L1度量复杂度的方式可能是非零元素的个数,而L2更多考虑的是W整体分布,所有的元素具有较小的复杂性。如何选择取决于数据以及具体的问题。
下节预告
在下一节中,将讲述另一种流行的损失函数,softmax损失函数。
- 在多项类SVM损失函数中,我们没有解释得分的真正意义。
- 而在softmax损失函数中,将赋予这些得分一些额外的含义,并且会用这些分数针对我们的类别计算概率分布。