目录
神经网络研究员早就意识到肯定是最难设置的超参数之一,因为它对模型的性能有显著的影响。损失通常高度敏感域参数空间中的某些方向,而不敏感于其他。动量算法可以在一定程度缓解这些问题,但这样做的代价是引入了另一个超参数,在这种情况下,自然会会问有没有其他方法。如果我们相信方向敏感度在某种程度是轴对称的,那么每个参数设置不同的学习率,在整个学习过程中自动适应这些学习率是有道理的。
Delta-bar-delta算法是一个早期的在训练时适应模型参数各自学习率的启发方式。该方法基于一个很简单的想法,如果损失对于某个给定模型参数的偏导数保持相同的符号,那么学习率应该增加。如果对于该参数的偏导变化了符号,那么学习率应该更小。最近,提出了一些增量(或者基于小批量)的算法来自适应模型参数的学习率。
1、AdaGrad
AdaGrad算法,独立地使用所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根。具有损失最大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。净效果是在参数空间中更为平缓的斜率方向会取得更大的进步。在凸优化背景中,AdaGrad算法具有一些令人满意的理论性质。然而,经验上已经发现,对于深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减少。AdaGrad在某些深度学习模型上效果不错,但不是全部。
Require:全局学习率
Require:初始参数
Require:小常数
,为了数值稳定大约设置为
初始化梯度累积变量
while 没有达到停止准则 do
从训练中采包含m个样本
的小批量,对应目标为
。
计算梯度:
![]()
累积平方梯度:
计算更新:
(逐元素地应用除和求平方根)
应用更新:
end while
2、RMSProp
RMSProp算法修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。AdaGrad旨在应用于凸问题时快速收敛。当应用于非凸函数训练神经网络时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。AdaGrad根据平方梯度的整个历史收缩学习率,可能使得学习率在达到这样的凸结构前就变得太小收敛。它就像一个初始化与该碗状结构的AdaGrad算法实例。
RMSProp的标准如下所示,结合Nesterov动量的形式如下下一个算法所示。相比于AdaGrad,使用移动平均引入了一个新的超参数,用来控制移动平均的长度范围。
Require:全局学习率
,衰减速率
Require:初始参数
Require:小常数
,通常设为
(用于被小数除时的数值稳定)
初始化累积变量
while 没有达到停止准则 do
从训练集中采包含m个样本
的小批量,对应目标为
。
计算梯度:
累积平方梯度:
计算参数更新:
(
)
应用更新:
end while
Require:全局学习率
,衰减速率
,动量系数
Requie:初始参数
,初始参数
初始化累积变量
while 没有达到停止准则 do
从训练集中采包含m个样本
的小批量,对应目标为
。
计算临时更新:
计算梯度:
累积梯度:
计算速度更新:
(
逐元素应用)
更新应用:
end while
经验上,RMSProp已被证明是一种有效且实用的深度神经网络的优化算法,目前它是深度学习从业者经常采用的优化算法之一。
3、Adam
Require:步长
(建议默认为:0.001)
Require:矩估计的指数衰减速率,
和
在区间[0,1)内。(建议默认为:分别为0.9和0.999)
Require:用于数值稳定的最小常数
(建议默认为:
)
Require:初始参数
初始化一阶和二阶矩变量
,
初始化时间步
while 没有达到停止准则 do
从训练集中采包含m个样本
的小批量,对应目标为
。
计算梯度:
更新有偏一阶矩估计:
更新有偏二阶矩估计:
修正一阶矩的偏差:
修正二阶矩的偏差:
(逐元素应用操作)
应用更新:
end while
"Adam"这个词派生自短语“adaptive moments”。早期算法背景下,它也许最好被看做结合RMSProp和具有一些重要区别的动量的变种。首先,在Adam中,动量直接并入了梯度一阶矩(指数加权)的估计。将动量加入RMSProp最直观的方法是将动量应用于缩放后的梯度。结合缩放的动量没有明确的理论动机。其次,Adam包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计。RMSProp也采用了(非中心的)二阶矩估计,然而缺失了修正因子。因此,不像Adam,RMSProp二阶矩估计可能在训练初期有很高的偏置。Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。
4、选择正确的优化算法
目前,最流行的算法并且使用很高的优化算法包括SGD、具动量的SGD、RMSProp、具动量的RMSProp、AdaDelta和Adam。此时,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)。