首先,本节提出了一种优化失败的情况——随着参数不断更新,训练的损失不会再下降,但我们对这个损失仍然不满意。
这种情况出现的原因是,当参数对损失微分为零的时候,梯度下降就不能再更新参数了,训练就停下来了,损失不再下降了。
但该点梯度为零,有不止一种可能性。不仅可能是局部极小/大值,也有可能是鞍点。我们需要先确定是哪种情况,才能更好地解决问题。区分两者的方法,关键在于周围的点——局部极小值往四周走损失都会变高,而鞍点则有路可以让损失更低。
而对于损失函数的形状,可以通过泰勒级数近似得到:
L(θ)≈L(θ′)+(θ−θ′) Tg+1/2(θ−θ′)TH(θ−θ′)
而对于临界点来说,g为零,因此,损失函数近似为:
L(θ)≈L(θ′)+1/2(θ−θ′)TH(θ−θ′)
为了符号简洁,我们用向量 v 来表示 θ - θ′, (θ - θ′)T H (θ - θ′) 可改写为 vTHv,因此,只需要判断海森矩阵是正定矩阵,还是负定矩阵,还是有正有负即可。
但实际上,我们几乎不会真的把海森矩阵算出来,因为海森矩阵需要算二次微分,计算这个矩阵的运算量非常大,还要把它的特征值跟特征向量找出来,所以几乎没有人用这个方法来逃离鞍点。还有一些其他的方法可以告诉你往哪个方向走,运算量都比要算海森矩阵小很多。只是使用海森矩阵逃离鞍点的方法举例,从这个角度来看,鞍点似乎并没有那么可怕。
但实际上,我们训练不同神经网络并统计临界点的类别发现,我们几乎找不到所有特征值都为正的临界点。所以从经验上来说,局部极小值并没有那么常见,多数时候我们训练到一个梯度很小的地方,参数不再更新,往往只是遇到了鞍点。