机器学习关于Learning Rate自动调整学习率

Learning Rate

机器学习尝试Train的第一个数据集Mnist,大部分都会从此入手。

机器学习关于Learning Rate自动调整学习率

当你的Loss在逐渐减小的时候,Gradient却不一定减小

机器学习关于Learning Rate自动调整学习率

怎样做才能将gradient descent(下面用gd代替)做的更好?需要一个更好版本的gd?


在之前做gd的时候,所有的参数都是设同样的Lr,这肯定是不够的。


Lr应该为每一个参数客制化


客制化的Lr(Learning Rate)

Learning Rate(以下用Lr代替)将决定Update参数时的步伐有多大。


Lr设置的太大,显然步伐很大。


不同参数需要不同的学习率


若在某一个方向上gd的值很小很小,非常平坦(如下图蓝色箭头),我们希望Lr调大一点。

机器学习关于Learning Rate自动调整学习率

相反,如果在某一个方向上(下图绿色箭头)很陡峭,那么,我们希望将Lr调小一点。

机器学习关于Learning Rate自动调整学习率

Learning Rate如何做自动调整?

我们需要修改原来的Gradient Descent的式子。


原本的gd公式,这里只更改一个参数θ θθ


原式

机器学习关于Learning Rate自动调整学习率

将上式原来的η ηη修改为下面

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率

这个方法被用到Adagrad


到此,这并不是最终的Lr版本。Lr怎么实现动态调整呢?


再来看以下Error Surface


当在陡峭的(绿色箭头)地方,我们需要很小的Lr。


走到中间比较平滑的(红色箭头),我们需要很大的Lr。


和上面的不同,这是在同一个参数同一个方向上,也能够动态的调整Learning Rate!


机器学习关于Learning Rate自动调整学习率

就出现了以下的一个江湖失传的算法(找不到论文出处)


RMS Prop

第一步算g i 0 g_i^0g

i

0


和上面Root Mean Square是一样的,从第二步开始有所变化,其中α需要自己调。

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率

由此就得到了一个目前比较常用的Optimization策略—Adam

Adam : RMSProp + Momentum

现在在Pytorch上有Adam的套件,直接可用,Adam的介绍在Pytorch里面的Doc讲的更加详细!

机器学习关于Learning Rate自动调整学习率

学习速率调度

Learning Rate Decay

通过不断调整η ηη的大小。训练结束后,我们离目的地很近,所以我们降低了学习率。

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率

Summary

  • 从最原始的Gradient Descent版本

机器学习关于Learning Rate自动调整学习率

  • 进阶版Gradient Descent

机器学习关于Learning Rate自动调整学习率

机器学习关于Learning Rate自动调整学习率


上一篇:LeetCode-57-Insert Interval


下一篇:冒泡排序算法分析 - JAVA版