LOCAL MINIMA VS SADDLE POINT
我们在做Optimization的时候,有时随着参数的不断更新,Training的Loss不会再下降,这个Loss并不优秀,那是什么原因导致这个Loss不再下降呢?常常是因为计算的Gradient为0,这个时候梯度下降没有办法再更新参数了,对应的loss也就不会下降了。
当gradient为0,也就是critical point的时候,可以有以下两种情况:
1、LOCAL MINIMA(局部最小值): 看图可知,四周都比较高,当前所在的位置已经是局部最低的点,往四周任何方向走 Loss都会比较高,无路可走。
2、SADDLE POINT(鞍点): 看图可知,左右方向是比红点高,但是前后方向比红点低,该红点既不是Local Minima,也不是Local Maxima,如果是卡在Saddle point,旁边还是有其他路可以逃离saddle point,以此让Loss更低。
接下来从数学推导来可以判别一个点是局部最小值还是鞍点:
首先用Tayler Series Appoximation泰勒级数展开把Loss写出来如下图所示:
当我们我们遇到Critical point,意味着Gradient为0,所以第二项可以去掉。只与第三项H(Hessian Matrix)有关。我们可以第三项来判断,在θ′附近的error surface(误差曲面),到底长什么样。知道error surface,我们就可以判断θ′是属于局部最小值点还是鞍点。
这样一来,根据Hessian矩阵:
(1)如果其所有特征值都是正的,就说明是Local Minima(局部最小值点)。
(2)如果其所有特征值都是负的,就说明是Local Maxima(局部最大值点)。
(3)如果其所有特征值有正有负,就说明是Saddle Point(鞍点)。
逃离SADDLE POINT:
如果发现位于Saddle Point,我们就可以逃离该点。Hessian Matirx它不只可以帮助我们判断是否位于Saddle Point,它还指出了我们参数可以Update的方向。
当位于Saddle Point,我们只需要找出小于0的特征值以及对应的特征向量u,用u+θ′得到新的θ,这样这个θ的Loss一定比原来更低。
BATCH VS MOMENTUM
我们常常使用Batch(批次)进行Optimization,我们将数据分成好多份Bacth,每次用一个Batch计算Loss和Gradient,如图所示。
1 update = go through one batch.
1 epoch = go through all batch.
Shuffle 意味着重新分配Batch。
SMALL BATCH VS LARGE BATCH(N=20)
Small Bacth,BatchSize =1, 每个Example都更新,一个epoch更新20次;
Large Batch,BacthSize=20,20个Examples过完后一起更新,一个epoch就更新1次;
由于计算机带有并行运算的能力,Large Batch花费的时间不一定比Small Batch 花费的时间长。
通过比较可以发现,在Batch大小在1000以内时,每一次更新时间相差不BatchSize相对较大的时候,每一个Epoch的更新次数就会减少,因此一个Epoch所耗费的时间更少。
除此之外,Small Batch往往有更好的性能,在训练模型上有更好的表现,"Noisy"的更新对训练模型有帮助。
MOMENTUM(动量)以此来对抗一些LOCAL MINIMA和SADDLE POINT
实际上M就是之前所有GradieWeighted Sum。也就是它不仅考虑当下的Gradient也考虑之前所有的Gradients。