5、优化方法:随机梯度下降法
5.1 介绍
在上衣章,我们介绍了图像分类任务中的两个关键部分:
- 一个参数化的评分函数将原始图像像素映射到类得分(例如线性函数)
- 一个损失函数,它测量预测的分类得分与实际的分类之间的一致程度,来量化一组特定参数集的质量。我们看到有很多方法和版本(例如SoftMax、SVM)。
回顾一下,线性评分函数是这样的:f(Xi,W)=WXi,SVM损失的公式为:
对于样例xi,如果给一组参数W,得到的预测结果与实际标记Yi一致,则损失L趋低。我们现在将介绍第三个,也是最后一个关键部件:最优化。优化是寻找最小化损失函数的参数W集合的过程。
预告:一旦我们理解这三个核心组件是如何相互作用的,我们将重新审视第一个组件(参数化函数映射),并将其扩展到比线性映射复杂得多的函数:先是完整的神经网络,然后是卷积神经网络。损失函数和优化过程则保持相对稳定。
5.2 可视化损失函数
损失函数通常是在非常高维空间上定义的(例如在CIFAR-10 中,线性分类器权重矩阵的大小为10×3073),总共有30730个参数,它们难以可视化。然而,我们可以通过沿着光线(1维)或沿着平面(2个维度)对高维空间做切面来获一些直观映像。例如,我们可以生成随机权重矩阵W(它对应于空间中的单个点),然后沿着某个方向变化,并沿途记录损失函数值。也就是说,我们可以生成一个随机W1,然后不断变化a,计算损失L(W+W1)。这个过程产生一个简单的曲线图,值为X轴,损失函数的值为Y轴。也可以用两个维度,通过改变来计算损失值,从而给出二维的图像。下图,分别用x和y轴表示,而损失函数的值用颜色变化表示
使用CIFAR-10数据集中一个样本(左,中)和一百个样本(右)的多分类SVM(无正则化)的损失图示。左:只有一个变量a的一维损失。中,右:二维损失切面,蓝色=低损失,红色=高损失。注意损失函数的分段线性结构。多个实例的损失则取平均值,因此右边的碗形是许多分段线性碗的平均值(例如中间图所示的那个)。
我们可以通过检验数学来解释损失函数的分段线性结构。对于一个样例,我们有:
从等式中可以清楚地看出,每个样例的损失是一系列关于W的线性函数值(不小于零)的总和。此外,每一行W(即Wj),有时在它前面有一个正符号(当它对应于错误的分类时),有时是一个负号(当它对应于正确的分类时)。举例来说,考虑一个包含三个一维点和三个分类的简单数据集,全部的SVM损失函数(没有正则化)就是是这样的:
由于这些样本是一维的,所以数据Xi和权重Wj是一个数字。例如,W0,上式中一些项是W0的线性函数,并且其值都被钳位在零处。如下图所示:
1维的数据损失图。X轴是单权重,Y轴是损失。数据损失是多个部分求和而成。其中每个部分要么与权重无关(等于0),要么是该权重的线性函数。完整的SVM数据损失就是这个形状的30730维版本。
顺便提一句,您可能已经从它的碗状外观猜出,SVM损失函数是凸函数的一个例子。有大量的文献致力于有效地最小化这种类型的函数(凸优化)。但是一旦我们将评分函数F扩展到神经网络,我们的目标函数将变成非凸的了,上面的可视化将不再是碗状,而是复杂的、崎岖不平的样子。
不可微损失函数。请注意在损失函数中的扭结(由于最大操作)处,是不可微的。因为在这些扭结处,梯度没有被定义。然而,次梯度仍然存在。本课程我们将交替使用梯度和次梯度术语。
5.3 最优化
损失函数允许我们量化任何特定的权重集合W的质量。最优化的目标是找到最小化损失函数的W。我们现在要开发一种优化损失函数的方法。如果你有一些经验,这一部分可能看起来很奇怪,因为我们将使用的例子(SVM损失)是一个凸函数问题,但是请记住,我们最终还要优化神经网络,在那里我们不能很容易地使用任何在凸优化中开发的工具。