1. 局部极小值与鞍点
1.1 临界点及其种类
在优化问题中,损失函数的临界点指的是那些导数为零的点,即局部极小值(local minimum)、局部极大值(local maximum)或鞍点(saddle point)。
-
局部极小值 (Local Minimum): 局部极小值是指在函数定义域内的某一点,该点的函数值比周围任何其他点的函数值都要小。在该点的任何小邻域内,函数值都不会低于这一点的函数值。在多维空间中,局部极小值可以想象为一个碗的底部。在优化问题中,局部极小值是优化算法可能达到的点之一,但它不一定是全局最优解。
-
局部极大值 (Local Maximum): 局部极大值与局部极小值相反,它指的是在函数定义域内的某一点,该点的函数值比周围任何其他点的函数值都要大。在多维空间中,局部极大值可以想象为一个山峰的顶部。在优化问题中,局部极大值通常不是我们想要的解,因为它们代表了性能的局部最差点。
-
鞍点 (Saddle Point): 鞍点其实就是梯度是零且区别于局部极小值和局部极大值的点。在多维空间中,鞍点可以想象为马鞍的形状,即在某些方向上是局部最小值,在其他方向上是局部最大值。鞍点在多维优化问题中尤为重要,因为它们可能误导优化算法,使算法陷入局部最优而非全局最优。在数学中,鞍点或极小值点是函数图形表面上的一个点,其正交方向上的斜率(导数)均为零(临界点),但不是函数的局部极值。一句话概括就是:
一个不是局部极值点的驻点称为鞍点。
*驻点:函数在一点处的一阶导数为零。
如下图所示,是函数 图像,其鞍点在 (0, 0) 位置。函数
的整个曲面看上去就像是一个马鞍,其在
轴方向向上曲,在
轴方向向下曲, 整个图像看起来像马鞍一样,鞍点为(0,0)。
但是如果一个点的梯度真的很接近零,我们走到临界点的时候,这个临界点到底是局部极小值还是鞍点?
如果损失收敛在局部极小值,我们所在的位置已经是损失最低的点了,往四周走损失都会比较高,就没有路可以走了。但鞍点没有这个问题,旁边还是有路可以让损失更低的。只要逃离鞍点,就有可能让损失更低。
1.2 判断临界值种类的方法
判断一个临界点到底是局部极小值还是鞍点需要知道损失函数的形状。可是怎么知道损失函数的形状?
虽然无法完整知道整个损失函数的样子,但是如果给定某一组参数,比如,在
附近的损失函数是有办法写出来的。
上式是泰勒级数近似(Tayler series appoximation)。
其中,第一项是损失函数在点
的值;第二项
中
是损失函数在
处的梯度向量,其第
个元素
是 L 对
的偏导数,即
=
。第三项跟海森矩阵(Hessian matrix)
y有关,包含了损失函数在
处的二次微分。海森矩阵
是一个方阵,其元素
是
对
和
的二阶偏导数,即
。
关于海森矩阵补充:
在数学中,Hessian 矩阵是标量值函数或标量场函数的二阶偏导数的方块矩阵。它描述了许多变量函数的局部曲率,可以用于判定多元函数的极值。假设有一实数函数 f: Rn→ R ,是关于输入 x (x ∈ Rn) 及输出 f(x) ∈ R 之间的关系式。如果其所有的二阶偏导数都存在,并且在该函数的领域上连续,那么 Hessian 矩阵 H 是一个 n×n 的矩阵,通常如下定义:
通过分析海森矩阵的正负定性(即其特征值的正负),我们可以判断临界点是局部极小值、局部极大值还是鞍点,具体如下:
- 如果海森矩阵的所有特征值都是正的,那么它是正定的,临界点是局部极小值。
- 如果海森矩阵的所有特征值都是负的,那么它是负定的,临界点是局部极大值。
- 如果海森矩阵的特征值有正有负,那么临界点是鞍点。
1.3 局部极小值与鞍点的区别
局部最小值就经过泰勒展开后的损失函数第二项中的H 矩阵的特征值全部大于/小于零,而鞍点则是H矩阵的特征值中即有大于零的,也有小于零的。局部极小值和鞍点的相同点是,在该点处的梯度(导数)都为零。在实际的过程中,我们输入到模型中的数据特征是非常多的,所以我们通常遇到的是鞍点,而不是临界点(极大值/极小值)。
1.4 逃离鞍点的方法
当我们判断出来当前正处于鞍点时,就知道参数其实还有进一步优化的可能。海森矩阵不仅可以帮助我们判断当前的临界点是否为鞍点,还可以指出参数更新的方向。
如下图(a)所示的一维空间中的误差表面,有一个局部极小值。但在二维空间(图(b))里,这个点可能就是一个鞍点。图(c)经常被用于说明深度学习训练的复杂性,如果我们移动某两个参数,误差表面的变化非常复杂,存在着非常多局部极小值。低维度空间中的局部极小值,在更高维的空间中可能是鞍点。虽然更高的维度难以被可视化它,但我们在训练一个网络的时候,参数数量动辄达百万千万级,所以误差表面其实有非常高的维度(参数的数量代表了误差表面的维度)。既然维度这么高,其实可能就有非常多的路可以走。既然有非常多的路可以走,那么局部极小值可能就很少。
实际上,我们几乎找不到所有特征值都为正的临界点。如下图所示,最小值比例最大也不过处于 0.5 ~ 0.6 的范围,代表只有约一半的特征值为正,另一半的特征值为负,代表在所有的维度里面有约一半的路可以让损失上升,还有约一半的路可以让损失下降。虽然在这个图上,越靠近右侧代表临界点“看起来越像”局部极小值,但是这些点都不是真正的局部极小值。所以从经验上看起来,局部极小值并没有那么常见。多数的时候,我们训练到一个梯度很小的地方,参数不再更新,往往只是遇到了鞍点。