Optimization Fails
Loss掉到一定程度会掉不下去为什么?
参数对function的微分为0,也就是gradient趋近0
有两种情况会导致:
- local minima
-
saddle point
统称为critical point。
Which one?
可以通过泰勒式展开判断是哪个点,如果是local minima就没办法再调整参数,但是saddle point旁边还有路,可以调参。
Hession
根据Hession判断critical points形状。
然后是一大堆数学运算。。。
Saddle point有办法
H可以告诉我们参数调整的方向(顺着u的方向)。
Saddle point和Local minima哪个比较常见?
Local minima比较少见。
Batch and Momentum
Batch
Shuffle是指每个epoch重新分batch。
为什么要batch?
Batch可以分段update参数,不需要全部样本看完才update。
No batch: long time for cool down, but powerful
Batch: short time for cool down, but noisy
GPU可以平行运算,所以No batch花的时间不一定比batch长。
noisy有助于accuracy提升,这是optimization的问题
且小batch有助与testing data上的表现
大小batch各有优缺点
Momentum
Momentun就像一颗球从高处滑下学习曲线,不一定在local minima的地方停住。
Momentun在Gradient的反向(正常梯度下降的方向)和正向都update参数。
Momentum算法的本质
该算法将一段时间内的梯度向量进行了加权平均,分别计算得到梯度更新过程中w和 b的大致走向,一定程度上消除了更新过程中的不确定性因素(如摆动现象),使得梯度更新朝着一个越来越明确的方向前进。
来源:http://www.51zixue.net/deeplearning/588.html
Adaptive Learning Rate
Loss不下降不一定是卡在critical point,有可能是卡在Error surface的谷壁间震荡。
Training can be difficult even without critical points.
所以learning rate要设置不同值。
不同的参数要怎么设置learning rate?
平坦的时候learning rate大一点,陡峭的时候learning rate小一点。根据参数定制learning rate。
参数定制learning rate通常有哪些计算方法?
Root Mean Square.
然后是一堆数学运算。。。
RMS方法用于Adagrad算法。
但是还有个问题:
就算同一个参数随着时间改变也要调整learning rate。
所以有一个新方法,就是RMSProp。
应用RMSProp可以动态调整参数。
最常用的方法Adam: RMSPro+ Momentum
加入Adagrad是否提高训练表现?
有什么办法可以解决上图中发生的震荡?
Learning Rate Scheduling
- Learning rate decay,让LR随着时间变化,就是随着训练的增加减慢learning rate。
-
Warm up,意思是让LR先变大后变小。
Summary of Optimization
Optimization就是在Gradient Desent的基础上考虑过去所有gradients的大小(RMSProp)和方向(Momentum),同时考虑learning rate随着时间的变化。