局部极小值与鞍点
局部极小值与鞍点
我们在做优化的时候经常会发现,随着参数不断更新,训练的损失不会再下降, 但是我们对这个损失仍然不满意。把深层网络(deep network)、线性模型和浅层网络(shallow network)做比较,可以发现深层网络没有做得更好——深层网络没有发挥出它完整的力量,所以优化是有问题的。但有时候,模型一开始就训练不起来,不管我们怎么更新参数,损失都降不下去。这个时候到底发生了什么事情?
临界点及其种类
过去常见的一个猜想是我们优化到某个地方,这个地方损失关于参数的微分为零,如图所示。图中的两条曲线对应两个神经网络训练的过程。当损失关于参数的微分为零的时候,梯度下降就不能再更新参数了,训练就停下来了,损失不再下降了。

提到梯度为零的时候,大家最先想到的可能就是局部极小值(local minimum),如图 3.2a 所示。所以经常有人说,做深度学习时使用梯度下降会收敛在局部极小值,梯度下降不起作用。但其实损失不是只在局部极小值的梯度是零,还有其他可能会让梯度是零的点,比如鞍点(saddle point)。鞍点其实就是梯度是零且区别于局部极小值和局部极大值(local
maximum)的点。图 3.2b 红色的点在
但是如果一个点的梯度真的很接近零,我们走到临界点的时候,这个临界点到底是局部极小值还是鞍点,是一个值得去探讨的问题。因为如果损失收敛在局部极小值,我们所在的位置已经是损失最低的点了,往四周走损失都会比较高,就没有路可以走了。但鞍点没有这个问题,旁边还是有路可以让损失更低的。只要逃离鞍点,就有可能让损失更低。

判断临界值种类的方法
判断一个临界点到底是局部极小值还是鞍点需要知道损失函数的形状。可是怎么知道损失函数的形状?网络本身很复杂,用复杂网络算出来的损失函数显然也很复杂。虽然无法完整知道整个损失函数的样子,但是如果给定某一组参数,比如
式(3.1)是泰勒级数近似(Tayler series approximation)。
- 第一项
告诉我们,当 跟 很近的时候, 应该跟 还蛮靠近的; - 第二项
中, 代表梯度,它是一个向量,可以弥补 跟 之间的差距。有时候梯度 会写成 。 是向量 的第 个元素,就是 关于 的第 个元素的偏导数,即
- 光看
还是没有办法完整地描述 ,还要看式(3.1)的第三项 。第三项跟海森矩阵(Hessian matrix) 有关。 里面放的是 的二次微分,它第 行,第 列的值 就是把 的第 个元素对 作微分,再把 的第 个元素对 作微分后的结果,即
总结一下,损失函数

在临界点,梯度
我们可以根据

(1) 如果对所有
(2) 如果对所有
(3) 如果对于
有一个问题,通过
如果
阶对称矩阵 对于任意非零的 维向量 都有 ,则称矩阵 为正定矩阵。如果 阶对称矩阵 对于任意非零的 维向量 都有 ,则称矩阵 为负定矩阵。
举个例子,我们有一个简单的神经网络,它只有两个神经元,而且这个神经元还没有激活函数和偏置。输入
我们还有一个简单的训练数据集,这个数据集只有一组数据(1,1),也就是

可以直接画出这个神经网络的误差表面,如图 3.4所示,可以取[-2,2]之间的

除了尝试取所有可能的损失,我们还有其他的方法,比如把损失的函数写出来。对于图 3.3所示的神经网络,损失函数
可以求出损失函数的梯度
什么时候梯度会为零(也就是到一个临界点)呢?比如,在原点时,
海森矩阵
对于原点,只要把
通过海森矩阵来判断原点是局部极小值还是鞍点,要看它的特征值,这个矩阵有两个特征值:2和-2,特征值有正有负,因此原点是鞍点。
如果我们当前处于鞍点,就不用那么害怕了。
设
若
沿着
在前面的例子中,原点是一个临界点,此时的海森矩阵如式(3.9)所示,该海森矩阵有一个负的特征值:-2,特征值-2对应的特征向量有无穷多个。不妨取
所以从这个角度来看,鞍点似乎并没有那么可怕。但实际上,我们几乎不会真的把海森矩阵算出来,因为海森矩阵需要算二次微分,计算这个矩阵的运算量非常大,还要把它的特征值跟特征向量找出来,所以几乎没有人用这个方法来逃离鞍点。还有一些其他逃离鞍点的方法的运算量都比要算海森矩阵小很多。

如图 3.5(a)所示的一维空间中的误差表面,有一个局部极小值。但是在二维空间(如图3.5(b)所示),这个点就可能只是一个鞍点。常常会有人画类似图3.5(c)这样的图来告诉我们深度学习的训练是非常复杂的。如果我们移动某两个参数,误差表面的变化非常的复杂,有非常多局部极小值。低维度空间中的局部极小值点,在更高维的空间中,实际是鞍点。同样地,如果在二维的空间中没有路可以走,会不会在更高维的空间中,其实有路可以走?更高的维度难以视化它,但我们在训练一个网络的时候,参数数量动辄达百万千万级,所以误差表面其实有非常高的维度参数的数量代表了误差表面的维度。既然维度这么高,会不会其实就有非常多的路可以走呢?既然有非常多的路可以走,会不会其实局部极小值就很少呢?而经验上,我们如果自己做一些实验,会发现实际情况也支持这个假说。图3.6是训练某不同神经网络的结果,每个点对应一个神经网络。纵轴代表训练网络时,损失收敛到临界点,损失没法下降时的损失。我们常常会遇到两种情况:损失仍然很高,却遇到了临界点而不再下降;或者损失降得很低,才遇到临界点。图 3.6中,横轴代表最小值比例(minimum ratio),最小值比例定义为
实际上,我们几乎找不到所有特征值都为正的临界点。在图 3.6所示的例子中,最小值比例最大也不过处于
