深度学习:鞍点以及如何跳出鞍点

最近阅读了有关鞍点得到文章,做了一下总结:

  • 鞍点的定义:
    鞍点 (saddle point)的数学含义是: 目标函数在此点上的梯度(一阶导数)值为 0, 但从该点出发的一个方向是函数的极大值点,而在另一个方向是函数的极小值点。
    而当在某点的一阶导为0时,该点称为驻点
  • 判断鞍点的一个充分条件是:函数在一阶导数为零处(驻点)的Hessian矩阵为不定矩阵。
    半正定矩阵: 所有特征值为非负,或主子式全部非负。
    半负定矩阵:所有特征值为非正,或主子式负正相间。
    **不定矩阵:特征值有正有负,**或主子式不满足上面的两种情况。

典型的鞍点是函数 f(x)=x^ 3 中的(0,0),函数 z=x^ 2-y^2 的 多个鞍点 (0,0,0),(1,1,0),(2,2,0))。画图表示:
深度学习:鞍点以及如何跳出鞍点_第1张图片
深度学习:鞍点以及如何跳出鞍点_第2张图片
而高维凸优化优化过程困难的原因在于,存在大量的鞍点而不是极值点。正是因为深度学习中鞍点的大量存在,传统的牛顿法不适合,来寻优,因为牛顿法是通过直接寻找梯度为0的点,来寻优的,那么极有可能陷入鞍点。

(ps: 也正因为如此,牛顿法在Hessian为正定的时候,比梯度下降速度快,因为牛顿法直接找梯度为0 的点,而梯度下降则是一次一次的寻找当前点的最优梯度)

如何逃出鞍点:
1)利用Hessian矩阵,判断是否为鞍点,因为,Hessian在鞍点具有正负特征值,而在局部最小值点正定。
2)随机梯度,相当于给正确的梯度 加noise ,一定程度上避免了鞍点(但是只是一定程度),达到类似于如下公式的效果
在这里插入图片描述
3)随机初始化起点,也有助于逃离鞍点
4)增加偶尔的随机扰动
看到的一篇博客中的动图很直观的表明个算法逃离鞍点的示意图:
深度学习:鞍点以及如何跳出鞍点_第3张图片
参考文章:
https://blog.csdn.net/robert_chen1988/article/details/53056568
https://blog.csdn.net/BVL10101111/article/details/78051939

你可能感兴趣的:(损失函数,算法,深度学习)