7. 类神经网络训练不起来怎么办(一)局部最小值与鞍点
gradient为零的点统称为critical point
局部最小值:local minima
鞍点:saddle point
loss没办法在下降也许是因为卡在了critical point
为什么要分辨?
如果是local minima 那可能就没有路可以走了,如果是saddle point 还是有路可以走的,使loss更低。
如何分辨到底是卡在local minima 还是 saddle point?
L (θ) loss function 在 θ‘ 附近的泰勒展开式,
其中 gradient是一个向量,弥补 θ‘ 和θ‘ 之间的差距;
hessian是一个矩阵,会补足加上gradient后与真正的L (θ) 之间的差距。
如果走到了一个critical point,意味着gradient为0,即绿色这一项为0 ,只剩下红色这一项。(下图所示)
判断标准:
为了方便,将(θ - θ’)设为 v
只需要看H的 eigenvalue(特征值)的正负即可。
- H的特征值全为正的时候 ,我们认为是 local minima
- H的特征值全为负的时候 ,我们认为是 local maxima
- H的特征值有正有负时候 ,我们认为是 saddle point
如果训练停下来是因为saddle point ,我们可以继续看hessian 进而看出 update 的方向。
找出负的特征值(saddle point 特征值有正有负)顺着 u 的方向更新,就可以让loss变小。
注:在实际的 implementation 里面,你几乎不会真的把hessian算出来,运算量非常非常的大。
后续会谈到其他的逃离saddle point的方法 他们的运算量都要比算H小的多,之所以讲这个方法,
是因为如果卡在saddle point 也许没那么可怕,至少我们还有这一招。
saddle point 跟local minima 哪个更常见?
先给出答案 saddle point更常见,local minima 很少很少
解释:在一维的空间好像到处都是local minima ,但是 会不会在二维空间来看他就是一个saddle point,当前维度空间看是一个local minima 但在更高维的空间中有可能就是一个saddle point。
今天我们训练一个network时候,参数往往动辄百万千万以上,我们的参数有多少就代表我们的error surface的维度有多少,既然维度这么高,会不会其实根本就有非常多的路可以走?既然有非常多的路可以走,会不会其实local minima根本就很少呢!如果你做一些实验,结果也是支持这一假设!