前言
这是我在Datawhale组队学习李宏毅机器学习的记录,既作为我学习过程中的一些记录,也供同好们一起交流研究,之后还会继续更新相关内容的博客。
最优化失败的原因
如图所示,在梯度下降中,Loss应该不断下降并达到一个最小值。但在我们训练中,有可能出现Loss下降到了一个谷底,但此时并没有足够小的情况,也有可能Loss就没怎么下降(对应图中蓝,橙曲线)。
出现这种情况的原因是下降中遇到了临界点(critical point),而临界点不只包括之前我们提到的局部最小值(local minima)也包括鞍点(saddle point)。所以要注意区分的一个点就是我们梯度下降失败并不一定是因为遇到了局部最小值,还可能是遇到了鞍点。
如果我们遇到临界点了,我们该怎么做呢,这就要分情况讨论了。
当我们遇到的是local minima时,我们就暂时无路可走了,而当我们遇到的是鞍点时,事情就还有转机,因为对于鞍点来说,Loss只是陷入了某一个方向上的最小值,如果换一个方向,就可以继续下降。
如何区分局部最值和鞍点
泰勒级数近似
数学基础的补充
在上图中的式子就展示了如何用泰勒级数来近似计算,以下是对式子的解说:
首先,θ并不是我们熟悉的角度,而是一个由参数组成的向量。
再一个,绿框中第一部分就是参数向量之差的转置矩阵,g则是在
θ
′
θ'
θ′处的梯度。
最后红色框中的部分中的
H
H
H就是L对
θ
j
和
θ
i
θj和θi
θj和θi的二次微分得到的矩阵,也叫黑塞矩阵,具体细节直接百度。
判断方法
达到临界点时。绿框等于0,红框中的式子将决定我们遇到的critical point是哪种情况。
注:设
(
θ
−
θ
′
)
(\theta-\theta')
(θ−θ′)为
v
v
v。
如图所示:对于所有的
v
v
v,
v
T
H
v
v^THv
vTHv 的取值将影响我们遇到的哪种情况。但
v
v
v是无法穷尽的,所以我们可以通过
H
H
H特征值来判断。当特征值全为正数时为Local minima,全为负值时为Local maxima,有正有负为Saddle point。
举个例子:
设一个特别简单的神经网络:
y
=
w
1
w
2
x
y=w_1w_2x
y=w1w2x
critical point用Error Surface表示出来就像是上图一样。
如上图所示:代入 x 和 y x和y x和y,求这个网络的Loss,并将L分别对 w 1 和 w 2 w_1和w_2 w1和w2偏求导,得到g等于0,所以到了critical point。然后带入 w 1 、 w 2 w_1、w_2 w1、w2求黑塞矩阵的特征值,-2和2,所以 w 1 = 0 和 w 2 = 0 w_1=0和w_2=0 w1=0和w2=0这点是鞍点。
为什么遇到鞍点时不用害怕呢?
因为
H
H
H会告诉我们参数更新的方向。
如上图所示:当我们遇到saddle point时,我们要做的就是找出负的eigen value,以及它对应的eigen vector。然后用对应的eigen vector加上
θ
θ
θ去更新
θ
θ
θ。
而如何去求eigen value与eigen vector可以去看这个博文
eigenvector和eigenvalue的求法
在之前的例子中我们去实践一下,求出在 ( 0 , 0 ) (0,0) (0,0)处的黑塞矩阵和它的特征值。求出负的特征值对应的特征向量 u u u。然后沿着 u u u去更新 θ θ θ。
但是!由于这个方法的计算特别的复杂,所以一般不被用于实际操作。但这意味着我们在训练时遇到saddle point不用太担心,还是有解决办法的。后面将介绍一写更实用的逃离saddle point 的方法。
Saddle point v.s. Local Minima
现在,我们要讨论Saddle Point和Local Minima哪个在我们训练中更常见。
现在有一个想法:在低维中,我们遇到的Local Minima,在高维中去观察的话,它可能就是一个Saddle Point,就像上图中左侧的两幅图一样,从二维的角度去观察它是个Local Minima,但从三维的角度去观察的话,就是一个Saddle Point。
而当我们在训练时,参数是百万级别的,也许Local Minima会很少?
通过实验统计,发现我们遇到Critical point大多都是Saddle Point。
总结
本节聚焦于最优化失败时的原因可能是遇到了critical point,介绍了Local minima和Saddle point以及它们的判别方法和在实际训练中出现的可能性。