引言
在任务管理(任务攻略 – 小园得志)那篇文章中我们分析过,有时loss过大并不是model的原因,而是因为optimization失败的原因,这篇文章来解决optimization失败的问题
一.为什么会Optimization失败
造成optimization失败的原因一般是gradient很低,但是loss很高,造成了local minima或者saddle point,这两个统称为critical point

二.概念
相信大家一定听过local minima,但是对saddle point的概念还比较陌生,这里对这两个概念再进行讲解区分
- 1. local minima(局部最小值)
local minima用一个山谷来比喻,相当于掉到了一个山谷,在当前位置附近,没有下降方向,gradient = 0 或接近0,算法容易停在这里
- 2. saddle point(鞍点)
saddle point更像一个马鞍,某些方向 loss 增大,某些方向 loss 减小,只是目前看似陷入了死胡同,其实是有解决方法的
这两种概念的关系就如下图所示:

三.如何判断
这里主要是根据泰勒公式进行判断,给定一组参数θ,计算θ附近的loss function形状,具体公示如下:

这里的g是指gradient(梯度),g 是loss function的一阶信息,用来表示当前点loss变化最快的方向
H指的是hessian(海森矩阵),描述loss function在不同方向上的二阶变化,也就是曲率,并且也是用来判断这两种类型的关键,我们接着往下看
当达到critical point的时候,gradient为0,关于g的参数就为0,如图所示:

接着我们用eigen values(方向曲率)进行判断,而H就是判断eigen values的关键
先设v = θ – θ’
可以得到这样一个等式:
Hv=λv
v:eigen vector(特征方向)
λ:eigen value(这个方向上的曲率)
为什么 Hessian 可以判断 eigen value 正负?
因为我们看:
把:
代进去:
得到:
因为:
所以:
的正负完全由:
决定
因此Hessian H 的结构决定 eigen values 的正负,于是有以下判断:
1.H is positive definite
所有的eigen values > 0,为local minima
2.H negative definite
所有的eigen values < 0,为local maxima
3.不同方向上的曲率符号不同,Hessian的eigen values中同时存在正值和负值
这种则为saddle point

四.如何更新参数
首先我们要确认是saddle point,接下来就可以更新参数了,目前我还不会解决local minima的方法
- 1.寻找负曲率的方向
也就是寻找H中eigen values <0 的情况,在这个方向上,L(θ)<L(θ′),因此loss会下降
- 2.如何寻找负曲率的方向
利用 Hessian 的 eigen vector。
满足:
其中:
- :eigen vector(方向)
- :eigen value(这个方向的曲率)
代入:
得到:
所以:
因为:
所以:
符号由:
决定
- 3. 更新参数
最后按照这个式子进行更新,𝜽 =𝜽′+αu
- θ′:当前 saddle point
- u:下降方向
- α:步长
- 4.不常用原因
虽然这个可以解决saddle point的问题,但其实这个方法是不常用的,因为耗费hessian很高,计算hessian过于贵
所以我们通常还是通过避开saddle point以此得到结果
五.哪个更常见
对于local minima和saddle point来说,saddle point更常见,因此不用担心,就算遇到了critical point,一般也是可以解决的
总结
这就是全篇内容了,希望对你有帮助

评论(0)
暂无评论