1.优化失败的原因
图1 训练参数的常见情况
在上一节中,讨论了如何通过梯度下降方法训练深度学习模型。随着参数训练更新次数的增加,可能会遇到两种常见的失败情况:第一种,损失函数随着更新次数的增加呈现出平稳的状态,并没有非常明显的下降趋势;第二种,损失函数的数值虽然在下降,但是在某次更新后不再继续下降,且损失函数数值并没有很小。
这两种情况发生的原因通常是梯度为0或很小,导致参数不再更新或变化不大。在高等数学中,将这种梯度为0的情况称为驻点(Critical Point)。根据损失函数的不同,又可以将驻点细分为局部极小点(Local Minima)、局部极大点(Local Maxima)和鞍点(Saddle Point)。
局部极小点意为在一定范围内,所有的函数值都比该点的函数值大;局部极大点意为在一定范围内,所有函数值都比该点函数值小。从二维函数的角度来看,鞍点一个方向的截面呈现出局部极小点的情况,另一个方向的截面呈现出局部极大点的情况,形状如同“马鞍”状。
图2 鞍点示例
深度学习模型在参数优化的过程中使用的是梯度下降方法,所以当遇到梯度为0的情况下,可以排除局部极大点的情况。当训练时遇到局部极小点的情况,便无法判断下一步的更新方向;但遇到鞍点的情况,或许可以判断下一步的更新方向。因此,区分当前驻点是局部极小点和鞍点对深度学习模型的参数优化具有极大的参考价值。
2.区分局部极小点和鞍点
2.1理论分析
根据局部极小点和鞍点的定义,假设在处梯度为0,需要考虑在向量附近的情况。依据泰勒定理可知,在处附近,可以近似将损失函数进行二阶展开。
在式中表示为梯度,是一个向量,有,;是一个矩阵,存储的是二阶导数,被称为Hessian矩阵,因此有。由损失函数的二阶泰勒展开式可知,损失函数在附近的值和梯度的Hessian矩阵有关。由于为驻点,因此为0,原式转化为公式(2)。
因此的驻点类型是局部极小点还是鞍点取决于带有Hessian矩阵的最后一项。
将记为,最后一项则记为。假设对于任意的向量,有大于0,此时大于,因此的类型为局部极小点;假设对于任意的向量,有小于0,此时 小于,因此的类型为局部极大点;若对于任意的向量,有正有负,此时的类型为鞍点。
依据线性代数的矩阵理论对于任意的向量,大于0,可认为为正定矩阵(Positive Definite),此时矩阵的所有特征值(Eigen Value)均大于0;对于任意的向量,小于0,可认为为负定矩阵(Negative Definite),此时矩阵的所有特征值(Eigen Value)均小于0;对于任意的向量,有正有负,此时矩阵的所有特征值(Eigen Value)也有正有负。综上,驻点类型的判断取决于Hessian矩阵,如果Hessian矩阵为正定矩阵,其所有的特征值均大于0,驻点类型为局部极小值;如果Hessian矩阵为负定矩阵,其所有的特征值均小于0,驻点类型为局部极大值;如果Hessian矩阵有正有负,其所有的特征值也有正有负,驻点类型为鞍点。
2.2实例分析
通过一个案例来分析判断驻点是局部极小点、局部极大点和鞍点的哪一种。假定,机器学习模型为,只有一笔训练数据x=1,y=1。该图绘制出了损失函数随两个参数和变化的曲面图。最中间黑色点、左下方一排黑色点和右上方一排黑色点是梯度为0的驻点。图中由蓝至红的颜色变化,表示损失函数数值逐渐增大,因此易知中心黑色点为鞍点,左下方一排黑色点和右上方一排黑色点是局部极小点。
图3驻点研判分析
可以从数学理论的角度来分析这些驻点的类型。计算该模型的损失函数可得公式(3)
根据上面的理论分析,首先需要求其驻点,分别求损失函数关于w_{1}和w_{2}的偏导数可得公式(4)。
可得驻点为,或。对应的点即为图中中心黑色点;对应的点即为左下方一排黑色点和右上方一排黑色点。接下来计算二阶偏导数,可得Hessian矩阵见公式(5)。
分别将,和代入Hessian矩阵可得矩阵见公式(6)和公式(7)。
计算式(6)对应的特征值可求得,,因此中间黑色的点为鞍点;计算式(7)对应的特征值可求得公式(8)
由公式(8)可知,和必有一值为0,且和之和大于等于0,因此,左上和右下黑色的点为局部极小点。
3.鞍点的更新方法
在训练深度模型的过程中,如果参数更新停留在鞍点,从理论上来说,可以找到下一步的更新方向。对公式(2)进一步分析,假设是的特征向量,是特征值且小于0,且和的差距为特征向。因此,公式(2)的后半部分可写成。由线性代数理论可得(9)式
由于,因此公式(9)表示,当和的差距为特征向量时即,。因此,只需要沿着的方向更新参数,便可以使损失函数下降。
图4鞍点更新的示例
仍以模型为例,取的特征值,易知其中一个特征向量为
因此,如图所示的黑色箭头部分即为特征向量的方向,只需要沿着右上方更新参数,参数会更新至局部极小点。
4.升维的“降维打击”
图5鞍点和局部极小点比较
在实际训练的过程中,参数更新遇到鞍点的情况比局部极小点的情况多。以上图为例,左上方是一个二维参数的损失函数曲线;左下方是一个三维参数的损失函数曲面。左上方的曲线可以看成左下方曲面的二维投影,在二维的时候红色的驻点为局部极小点,在三维的时候红色的驻点就成了鞍点。驻点为鞍点仍然有可能是损失函数下降,而驻点为极小点,参数的更新就遇到了瓶颈,无法进一步优化更新。这表明,当模型维度上升时,驻点为鞍点的概率随着增加了,对比低维度的模型实际上起到了“降维打击”的作用。登高望远,站的高度越高,视野就更加开阔了,可选择的道路和方向就多了。这和荀子“登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。”的思维是一致的。
图6实际训练的情况
图中蓝色的点表示,训练一个神经网络参数更新至驻点时的情况,纵轴表示损失函数的数值,横轴表示正的正的特征值在所有特征值的比值。如图所示,由于基本上无法找到一个比值为1的点,因此在实际进行深度学习模型训练的过程中,遇到的大部分驻点都是鞍点(特征值都有正有负),局部极小点基本上不会出现。
更多内容请关注我的微信公众号白泽图鉴获取!!!
标签:升维,函数,驻点,矩阵,极小,降维,鞍点,局部 From: https://blog.51cto.com/u_14278341/6020590