深度学习成长之路(二)学习率(learning rate)的知识汇总

首先是找到的三篇不错的博客,看完收获很多。链接如下:

机器之心 学习速率设置指南

简书 batchsize和lr的笔记

雷锋网 抛弃learning rate decay

学习率(learning rate)属于调参过程的一部分,目前常见的是通过设置schedule,根据特定的规则更新学习率。常用的方式就是learning rate decay。当然在最近提出了增大batchsize来保持学习率的策略,在第三篇博客可以进行了解。

接下来,是自己读这三篇博客和论文的理解。

1、学习率属于需要设置的关键超参数,在最小化训练网络的损失函数时,学习率缩放了权重更新的幅度。学习率太低,训练速度会很慢;学习率太高,有可能梯度下降过程中直接跳过了最低点,训练变得发散。

2、新知识点损失函数地图(loss landscape) 论文地址。 用来可视化损失函数的曲率,得到三维立体图形,研究多种因素(网络架构,各种超参数,优化器等)对损失函数形态的影响。

3、设置最优的学习率,是为了损失函数下降的最快。一共有三种阶段,损失函数基本不动(lr低),损失函数下降最快(lr优),损失函数发散(lr高)。

4、学习率设置常用的技巧是学习率退火(learning rate annealing),其中具体的方法有随步数衰减(step decay),指数衰减等。一般在编写代码中可以直接使用TF或者pytorch给出的衰减技巧。如果需要自己来设置学习率衰减策略,往往是创建一个学习率时间表(learning rate schedue),根据自己设定的规则进行更新。

5、周期学习率(cyclical learning rate,CLR) 论文地址,采用三角形更新规则,需要设置三个参数,max_lr、base_lr和stepsize(一个周期的一半),提出周期学习率表,在两个约束值之间变动。

6、热重启的随机梯度下降(SGDR)论文地址,采用余弦退火表(cosine annealing)和周期性热重启(warm restart)技术相结合。对于热重启的理解就是,每个周期结束后,在现有收敛的参数基础上再次开始。区别在于不是从头开始,相当于学习率降到最低后退出,在现有基础上再次提高学习率继续探索梯度下降的局部低点。

7、关于batchsize和LR之间的关系有两篇论文:

On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima

Don't Decay the Learning Rate, Increase the Batch Size

第一篇论文warm start实验比较重要,先用小batch训练,之后热启动用大batch训练,模型的泛化能力提高。

第二篇论文主要是在说增大batchsize之后可以不要衰减学习率。

8、普遍认为小batchsize训练的模型泛化能力更好,有助于SGD的收敛。帮助SGD收敛到平滑最小值(flat minima),而不是尖锐最小值(sharp minima)。

最后的话:

自己主要是对learning rate进行了较为全面的了解,背后的数学原理没有涉及,当然因为现在许多代码都是集成的,也省去了不少麻烦。个人觉得虽然现在有抛弃LR decay,但设置schedule进行衰减训练才是比较适用的。

你可能感兴趣的:(深度学习成长之路)