机器学习系列 九 - 2. Tips for Deep Learning - adaptive learning rate

下图所说的testing data 不是真正的testing data, 而是我们已经labeled 数据,是validation set

Adaptive Learning Rate



之前再讲gradient descent的时候已经讲过adaptive learning rate了。


在那个时候,我们会用一次微分来估算二次微分的值,那是在假设说二次微分很固定的情况。
在·

但是实际上,我们真正面对问题的时候是更加困难的。
在做deep learning的时候,我们要定一个loss function,然后我们用 gradient descen 去minimize这个loss function。
这个时候这个loss function 对于参数来说是非常复杂的。
更要命的是,这多个参数就代表了他是一个多维的,所以很难知道参数对于error surface的影响到底是什么样子的,也就是无法通过画图来表示出来。

举例来说,我们来考虑假设w1 和w2,两个参数,蓝色代表loss 比较地的地方,红色代表loss 比较高的地方

现在考虑参数在w1的横坐标方向移动,
    1. 在绿色区域,我们可能会希望步伐小一点,也就是learning rate小一点,因为这里位于一个陡峭的上坡上,太大容易过拟合。
    2. 在红色的地方,我们会希望步伐稍微大一点,learning rate 大一点,因为这里位于一个平缓的地带,希望更快过掉这里。

那么我们就需要一些比adam 更复杂点的方法
RMSProp
他跟Adagrad 的区别在于更新的时候,会先把gradient 取平方后乘以一个weight,然后再加上之前的所有的gradient的平方和。来得到新的分母这一项。 这个是Adagrad的一个变体而已。


Momentum 
在最初的gradient descent里面我们会遇到各种各样的例如鞍点saddle point、local minimal等等让train 停下的地方:

这个运动跟球的运动跟物理上的概念有不同,因为物理中有惯性,球可能在local minimal的地方会继续走,能不能把惯性这个概念加入到gradient descent里面去?

如果考虑惯性的概念,此时我们的运动 取决于两个因素:
1.  gradent 的反方向
2.   惯性方向
那蓝色代表参考了 1 和 2 之后真正让参数运动的方向。

a. 在对顶端
    这是惯性为0,而gradient 很大,所以球会往右走。    
    

b. 当球落到下面一点的时候,这是后gradient 梯度较小山坡斜率较小,但是这时候因为一路从左往右走过来,所以惯性很强
        
c. 如果参数走到一个local minimal地方,他的gradient等于0, 如果原来的话,就停下了,但是这时候由于一路从左向右走过来,惯性不是0,告诉球要继续走,所以没有停下。
         

d.    如果现在继续走到右边高左边低的地方,gradient 想让他往左右,但是惯性还是已让想让他向右走,这个时候就要去看惯性强一些还是梯度强一些,才能决定接下来的走向。
         

当然以上只是我们想象中的理论。所以并不能一定避免local minimal。


我们原先所学到的gradient descent
1. 算一下θ0处的gradient 然后我们根据learning rate 往θ0的反方向走蓝色的线段
2. 再算θ1处的gradient 然后根据learning rate 往θ1的反方向走蓝色线段
....

Momentum里考虑两个因素
1. 参数gradient之后的反方向
2. 惯性,这里用前一次所移动的方向 
下面开始分析如何进行的
1. θ0, 我们知道他是起始点,所以他的Movement v0 = 0 ; 然后计算θ0 处的gradient 值
        那我们就得到要走的方向:
        不过上面v0是0,所以第一次只考虑gradient 的方向,如下:
    
2. θ1, 我们现在已经得到了前一次移动的方向,然后我们结合本次的gradient。
        所以结合绿色的上一次移动方向   减去   本次gradient方向,就得到了要移动的蓝色方向。
        

然后这个过程反复执行下去


那为什么只考虑前一次的移动方向呢?
因为只考虑前一次的移动方向就是考虑了所有过去的移动方向。
    1.第一次θ0的点Movement  v0= 0, 所以只考虑gradient 的值
        v0 = 0
    2., 带入v0 = 0,所以就得
         
    3. ,带入v1, 所以就得
         
可以看出来,每一个θ都跟他过去所有θ的gradient 都有关系,也就是说我们只考虑前一个θ的惯性方向,也就考虑了之前所有的惯性方向了。


那么我们把RMSProp 和 Momentum 加起来,就得到了Adam....... 这个伪代码要背过!


自行实现adam的方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值