2021-06-20

1. 局部最小值与鞍点

为什么optimization会失败?

过去常见的一个猜想是,更新到了参数对Loss的微分为0的地方,gradient descent就没办法在update参数了,training就停止了。参数对Loss的微分为0的地方,最先想到的就是local minima。但不是只有local minima的gradient为0,也有其他地方会让gradient为0,比如鞍点saddle point。gradient为0的点统称为critical point。
在这里插入图片描述

如果gradient很靠近0,卡在了某个critical point上,怎么判断是local minima还是saddle point?
在这里插入图片描述
判断方法如下:
在这里插入图片描述

在这里插入图片描述

eigen value特征值
在这里插入图片描述

example:
在这里插入图片描述
若判断后发现卡住的地方是saddle point,可以根据H继续更新,沿着负的特征值的特征向量的方向。
在这里插入图片描述
example:
在这里插入图片描述
实际上,几乎不会真的把Hessian算出来,因为该矩阵的计算量非常大,还要计算特征值和特征向量。

Saddle point 和Local minima那个更常见?
从经验来看,Local minima并不十分常见

2. 批次和动量两个训练技巧

2.1 Batch(批次)

在这里插入图片描述

  1. 为什么要用Batch?
    在这里插入图片描述
    直观上,大的Batch size更新参数所花的时间较长,效果较稳,而小的Batch size更新参数所花的时间较短,但效果不稳定,即两种方式各有优劣势,如上图所示。

在这里插入图片描述
但是实验证明比较大的Batch size计算loss,进而计算gradient所需要的时间不一定比比小Batch size所花时间长,这主要是因为GPU可以平行运算。因此batch size从1到1000所花的时间基本一样,但GPU平行计算的能力是有极限的,当batch size很大的时候,运算时间是会增加的。
在这里插入图片描述
GPU的平行运算可以减少大的Batch size的运算时间,即其劣势消失了,那大的Batch size比小的Batch size好吗?在这里插入图片描述noisy的gradient反而可以帮助training。batch size越大,validation acc上的结果越差。(这不是overfitting,因为batch size越大,training set 的效果也是越差的;同样的model,同样的function,batch size越大,training set 的效果是越差,所以不是Model bias的问题。因此是optimization的问题)
在这里插入图片描述
为什么小的batch size在training set上会取得比较好的结果?为什么noisy的update,noisy的gradient会在training的时候会取得比较好的结果?
在这里插入图片描述
因为不同batch的function略有不同,容易跳出critical point。
小的batch size对Testing有帮助。
在这里插入图片描述
在这里插入图片描述
直觉上,大的batch size会倾向于走到sharp minima,小的batch size会倾向于走到flat minima。
在这里插入图片描述

2. Momentum

在这里插入图片描述
vanilla(一般的)
在这里插入图片描述
一般的gradernt descent:有一个初始参数 θ 0 \theta_0 θ0,计算一下gradient,然后往gradient的反方向update参数。
gradient descent + momentum不止往gradient的反方向update参数,是gradient的反方向加上前一步移动的方向去update参数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. Adaptive Learning Rate

给每一个参数不同的learning rate
在这里插入图片描述
当learning rate较大时会在两边震荡,当learning rate较小时不再震荡,又由于learning rate太小无法收敛到最优值。
在这里插入图片描述

所以需要对gradient descent做进一步改进。原始版本所有参数都设置同样的learning rate。learning rate应该为每个参数客制化。
在这里插入图片描述
gradient小的方向,希望learning rate大一点;gradient大的方向,希望learning rate小一点。
在这里插入图片描述
上述改进用在Adagrad的方法里面
在这里插入图片描述
为什么有用?怎么做到learning rate大的时候gradient减小,learning rate小的时候gradient就大呢?有 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2两个参数, θ 1 \theta_1 θ1波动小, θ 2 \theta_2 θ2波动大。 θ 1 \theta_1 θ1波动小因此算出来的gradient就比较小, σ 1 \sigma_1 σ1就比较大小; θ 2 \theta_2 θ2波动大因此算出来的gradient就比较大, σ 2 \sigma_2 σ2就比较小。
在这里插入图片描述
同一个方向同一个参数也希望learning rate是动态调整的——RMS Prop。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
RMS Prop方法比较灵敏。
现在最常用的optimization策略是Adam:RMS Prop+Momentum
在这里插入图片描述
改进之后,用Adagrad求解先前的convex。
在这里插入图片描述
为改进上述情况,设置learning rate跟时间有关,即learning rate scheduling。最常用的策略是learning rate decay——试随着时间的不断进行,随着参数的不断update,设置 η \eta η越来越小。因为刚开始距离终点很远,后来距离终点越来越近,所以把learning rate减小,让参数更新逐渐慢下来。
在这里插入图片描述
另一种learning rate scheduling的常用策略是warm up——设置learning rate先增大后变小。
在这里插入图片描述
Momentum是直接把所有gradient都加起来,所以考虑了gradient的方向,即正负号。root mean square只考虑gradient的大小。所以 η \eta η和momentum不会互相抵消掉。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值