一、Optimization Fails because ……
1. 问题:我们在做optimization的时候会发现,随着参数的不断更新,training的loss不会再下降,但是我们对loss并不满意。因此我们会发现,一开始model就train不起来,不管我们怎么更新参数,loss都不会掉下来,所以是什么问题导致的这个情况呢?
猜想:常见的猜想是,我们现在走到了一个地方,这个地方对loss的微分为0,这个时候gradient descent就不能再更新参数了,training也就停下来了,loss也就不会再下降了。
2. 当gradient为0的时候,这里统称为critical point。
a) 局部最小点(local minima),如果卡在local minima,可能就没有路可以走了。因为四周都比较高,你现在所在的位置是最低点的位置(loss最低的点),loss最低的点往四周走loss都会比较高,所以你就不知道走到其他地方去了。
b) 鞍点(saddle point),如果卡在saddle point,saddle point的旁边还有路可以让loss更低,你只要逃离saddle point,就很有可能让你的loss更低。
二、Tayler Series Approximation
1. 如果我们没有办法完整知道整个L(θ)的形状,但是给定一组参数θ′,在θ′附近的L(θ),是有办法被写出来的,如下图所示。
2. 第1项是L(θ′),也就是说当θ跟θ′很近的时候,L(θ)应该跟L(θ′)很靠近的。第2项是〖(θ-θ’)〗^Tg,其中g是一个矢量,也就是我们的gradient,它可以来弥补θ’跟θ之间的差距。虽然说θ’跟θ应该很接近,但是中间还是有一些差距的。
3. 第3项跟Hessian矩阵有关。第3项是(θ-θ’ )^T H(θ-θ’),它会再弥补θ跟θ′的差距。H里面放的是参数对L的二次微分。
4. 如果我们走到了一个critical point,也意味着gradient为0,所以绿色这一项就可以取消掉了,只剩下红色这一项。
5. 我们现在可以通过第3项来判断在θ′附近的error surface,到底长什么样,也就可以判断θ′是属于局部最小值点还是鞍点。
如下图所示,我们把(θ-θ’)用v这个向量来表示。对所有的v而言,v^THv都大于0,那这种矩阵叫做正定矩阵(positive definite),它所有的特征值(eigen value)都是正的。所以我们计算出一个Hessian,我们只需要去看Hessian的eigen value,就可以得出结论。
a)如果矩阵的所有特征值(eigen value)都是正的,那就是局部最小值点(local minima)。
b)如果矩阵的所有特征值(eigen value)都是负的,那就是局部最大值点(local maxima)。
c)如果矩阵的所有特征值(eigen value)有正有负,那就是鞍点(saddle point)。
三、Example
1. 我们现在有一个function是y=w1w2x,我们只有一组data,这组data是x为1的时候,它的level是1,所以当输入1,我们希望最终的输出跟1越接近越好。
2. 手推公式
3. 经过计算得到,矩阵的特征值有正有负,所以它是一个鞍点(saddle point)。
4. 如果碰到saddle point,我们可以不用那么害怕了,因为H它不只可以帮助我们判断现在是不是在一个saddle point,它还指出了参数可以update的方向。
根据线性代数的知识可以得到u^T Hu=λ‖u‖²,又因为鞍点的特征值有负值,所以存在特征值λ使得λ‖u‖²<0,u^T Hu<0,即L(θ)<L(θ′)。假设θ−θ′=u,你在θ′的位置加上u,然后沿着u的方向更新得到θ,这样就可以让loss变小。
5. 我们已经发现原点是一个critical point,它的Hessian有一个负的eigen value等于-2,那它对应的eigen vector有无穷多个,取其中一个u=[1,1]^T,只要顺着这个u的方向去更新我们的参数,就可以找到一个比saddle point的loss还要更低的点。
但是实际上我们不会把Hessian计算出来,因为涉及到二次微分,计算量大,因此我们会用其他方法逃离saddle point。
总结
其实局部最小点(local minima)并没有那么常见,因此在大多数情况下,你train到一个位置时,你的gradient已经很小了,于是你的参数就不会再更新了,这个时候就是因为你卡在一个鞍点(saddle point)。