原文链接:https://www.yuque.com/yahei/hey-yahei/optimizer
参考:
常见的加速训练技术:
- 恰当的的权重初始化策略:打破初始值的对称性,初始值也不能太小
- 恰当的激活函数:选用导数数值范围稍大的函数
- 批量归一化:平滑损失平面
- 复用部分预训练网络:复用预训练结果
- 使用恰当的优化器:开源项目中最常见的是SGD, NAG, RMSProp, Adam
常见优化器
传统梯度下降(Stochastic Gradient Descent, SGD)
参考:《机器学习-吴恩达 - 绪论、线性回归与逻辑回归 - 梯度下降算法 | Hey~YaHei!》
固定的下降速度
动量法(Momentum)
论文:《Some methods of speeding up the convergence of iteration methods(1964)》
引入新的超参数 与先前的 相乘,以继承先前的动量,并防止动量过快增长;
SGD可以看作是的情形;
动量法相当于对参数的更新量做了平滑累积,每次迭代的更新量都包含了前几次更新量的效应。
记第次迭代中,则有,展开有
考虑,则;
当时,,下降速度为SGD的倍。
当时为完全摩擦(退化为传统梯度下降);
当时为完全光滑;
通常来说取,此时下降速度理论上变为传统梯度下降的10倍。
涅斯捷罗夫加速梯度(Nesterov Accelerated Gradient, NAG)
论文:《A method of solving a convex programming problem with convergence rate O(1/k^2)(1983)》
动量法的变体,比动量法更快,而且振荡更小;
与动量法相比,区别在于计算的是损失函数在 上而不是 上的梯度:
AdaGrad
论文:《Adaptive Subgradient Methods for Online Learning and Stochastic Optimization(2011)》
通常取来防止的情况;
本质是为学习率增加一个感知损失累积效应的因子来动态调整学习率,训练前期较小,等效学习率较大,训练速度比较快;随着训练过程的推进,逐渐增大,等效学习率降低,减小振荡的出现,便于找到局部最优点。
考虑两权重梯度差异显著的情况(如图,平缓,陡峭),
传统的梯度下降,会在陡峭的上很快到达一个比较的位置,而平缓的方向上梯度下降缓慢;
而AdaGrad能够响应这种特殊情况,从而加速梯度下降。
RMSProp
该优化器由eoffrey Hinton在其课堂上提出,而没有形成正式的论文,研究者通常用 slide 29 in lecture 6 来引用它, 幻灯片 、 视频 ;
RMSProp是AdaGrad的变体,在AdaGrad的基础上增加了一个指数平滑平均的效果(通常取),解决了AdaGrad学习率衰减偏快的问题。
Adam
论文:《ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION(2015)》
动量法和RMSProp的集成。
和分别是对梯度的一次估计和二次估计,和是对和的无偏估计;
通常,取
Jacobian优化 & Hessian优化
以上讨论都是基于一次偏导的Jacobian矩阵,实际上用基于二次偏导的Hessian矩阵可以取得更好的优化效果。
但这很难应用到DNN上,因为每层都会输出个Hessian矩阵(如果是Jacobian,只需要n个),其中n是参数数量,而DNN参数数量大的惊人,所以基于Hessian的优化反而会因为计算大量的Hessian矩阵而速度下降并且需要大量的空间来进行计算。
学习计划(Learning Schedules)
如图,当学习率太低时训练过慢,学习率太高时不容易得到最优解;
可以在开始训练时给一系列不同的学习率跑一小段时间,比较它们的loss曲线,来确定一个比较合适的学习率;
除此之外,还有一些有用的策略,称为学习计划learning schedules——
- 分段常数学习率(Predetermined piecewise constant learning rate)
预设好每过多少epochs就改变学习率,需要比较多的人工调整
- 性能调整(Performance scheduling)
每N步用验证集计算一次loss,当loss不再减小的时候衰减学习率(通常乘以一个因子)
- 随时间指数衰减(Exponential scheduling)
为迭代次数,和是人工设置的超参数,学习率每步衰减一次
- 随时间乘方衰减(Power scheduling)
通常取,有点类似Exponential scheduling,但衰减速度稍微慢一些
论文《AN EMPIRICAL STUDY OF LEARNING RATES IN DEEP NEURAL NETWORKS FOR SPEECH RECOGNITION(2013) 》比较了一些主流的学习计划——
在语音识别任务中使用动量法优化的前提下,
- Performance Scheduling和Exponential Scheduling都表现的很好
- 但是Exponential Scheduling容易实现、容易调整、收敛更快