目录

1、AdaGrad

2、RMSProp

3、Adam

4、选择正确的优化算法


神经网络研究员早就意识到肯定是最难设置的超参数之一,因为它对模型的性能有显著的影响。损失通常高度敏感域参数空间中的某些方向,而不敏感于其他。动量算法可以在一定程度缓解这些问题,但这样做的代价是引入了另一个超参数,在这种情况下,自然会会问有没有其他方法。如果我们相信方向敏感度在某种程度是轴对称的,那么每个参数设置不同的学习率,在整个学习过程中自动适应这些学习率是有道理的。

Delta-bar-delta算法是一个早期的在训练时适应模型参数各自学习率的启发方式。该方法基于一个很简单的想法,如果损失对于某个给定模型参数的偏导数保持相同的符号,那么学习率应该增加。如果对于该参数的偏导变化了符号,那么学习率应该更小。最近,提出了一些增量(或者基于小批量)的算法来自适应模型参数的学习率。

1、AdaGrad

AdaGrad算法,独立地使用所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根。具有损失最大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。净效果是在参数空间中更为平缓的斜率方向会取得更大的进步。在凸优化背景中,AdaGrad算法具有一些令人满意的理论性质。然而,经验上已经发现,对于深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减少。AdaGrad在某些深度学习模型上效果不错,但不是全部。

Require:全局学习率自适应学习率算法(六)、自适应学习率算法_优化算法

Require:初始参数自适应学习率算法(六)、自适应学习率算法_神经网络_02

Require:小常数自适应学习率算法(六)、自适应学习率算法_神经网络_03,为了数值稳定大约设置为自适应学习率算法(六)、自适应学习率算法_神经网络_04

     初始化梯度累积变量自适应学习率算法(六)、自适应学习率算法_初始化_05

     while 没有达到停止准则 do

     从训练中采包含m个样本自适应学习率算法(六)、自适应学习率算法_一阶矩_06的小批量,对应目标为自适应学习率算法(六)、自适应学习率算法_初始化_07

     计算梯度:自适应学习率算法(六)、自适应学习率算法_初始化_08 

     累积平方梯度:自适应学习率算法(六)、自适应学习率算法_优化算法_09

    计算更新:自适应学习率算法(六)、自适应学习率算法_优化算法_10(逐元素地应用除和求平方根)

    应用更新:自适应学习率算法(六)、自适应学习率算法_缩放_11

end while

2、RMSProp

RMSProp算法修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。AdaGrad旨在应用于凸问题时快速收敛。当应用于非凸函数训练神经网络时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。AdaGrad根据平方梯度的整个历史收缩学习率,可能使得学习率在达到这样的凸结构前就变得太小收敛。它就像一个初始化与该碗状结构的AdaGrad算法实例。

RMSProp的标准如下所示,结合Nesterov动量的形式如下下一个算法所示。相比于AdaGrad,使用移动平均引入了一个新的超参数自适应学习率算法(六)、自适应学习率算法_优化算法_12自适应学习率算法(六)、自适应学习率算法_优化算法_13,用来控制移动平均的长度范围。

Require:全局学习率自适应学习率算法(六)、自适应学习率算法_初始化_14,衰减速率自适应学习率算法(六)、自适应学习率算法_一阶矩_15

Require:初始参数自适应学习率算法(六)、自适应学习率算法_神经网络_16

Require:小常数自适应学习率算法(六)、自适应学习率算法_一阶矩_17,通常设为自适应学习率算法(六)、自适应学习率算法_一阶矩_18(用于被小数除时的数值稳定)

      初始化累积变量自适应学习率算法(六)、自适应学习率算法_神经网络_19

  while 没有达到停止准则 do

      从训练集中采包含m个样本自适应学习率算法(六)、自适应学习率算法_初始化_20的小批量,对应目标为自适应学习率算法(六)、自适应学习率算法_初始化_21

      计算梯度:自适应学习率算法(六)、自适应学习率算法_缩放_22

      累积平方梯度:自适应学习率算法(六)、自适应学习率算法_神经网络_23

      计算参数更新:自适应学习率算法(六)、自适应学习率算法_一阶矩_24(自适应学习率算法(六)、自适应学习率算法_神经网络_25)

      应用更新:自适应学习率算法(六)、自适应学习率算法_初始化_26

end while

Require:全局学习率自适应学习率算法(六)、自适应学习率算法_优化算法,衰减速率自适应学习率算法(六)、自适应学习率算法_一阶矩_15,动量系数自适应学习率算法(六)、自适应学习率算法_神经网络_29

Requie:初始参数自适应学习率算法(六)、自适应学习率算法_初始化_30,初始参数自适应学习率算法(六)、自适应学习率算法_神经网络_31

      初始化累积变量自适应学习率算法(六)、自适应学习率算法_神经网络_19

      while 没有达到停止准则 do

           从训练集中采包含m个样本自适应学习率算法(六)、自适应学习率算法_缩放_33的小批量,对应目标为自适应学习率算法(六)、自适应学习率算法_初始化_34

           计算临时更新:自适应学习率算法(六)、自适应学习率算法_初始化_35

           计算梯度:自适应学习率算法(六)、自适应学习率算法_一阶矩_36

           累积梯度:自适应学习率算法(六)、自适应学习率算法_初始化_37

           计算速度更新:自适应学习率算法(六)、自适应学习率算法_初始化_38(自适应学习率算法(六)、自适应学习率算法_缩放_39逐元素应用)

           更新应用:自适应学习率算法(六)、自适应学习率算法_初始化_40

end while

经验上,RMSProp已被证明是一种有效且实用的深度神经网络的优化算法,目前它是深度学习从业者经常采用的优化算法之一。

3、Adam

Require:步长自适应学习率算法(六)、自适应学习率算法_神经网络_41(建议默认为:0.001)

Require:矩估计的指数衰减速率,自适应学习率算法(六)、自适应学习率算法_一阶矩_42自适应学习率算法(六)、自适应学习率算法_神经网络_43在区间[0,1)内。(建议默认为:分别为0.9和0.999)

Require:用于数值稳定的最小常数自适应学习率算法(六)、自适应学习率算法_初始化_44(建议默认为:自适应学习率算法(六)、自适应学习率算法_缩放_45)

Require:初始参数自适应学习率算法(六)、自适应学习率算法_初始化_30

     初始化一阶和二阶矩变量自适应学习率算法(六)、自适应学习率算法_神经网络_47自适应学习率算法(六)、自适应学习率算法_神经网络_19

     初始化时间步自适应学习率算法(六)、自适应学习率算法_优化算法_49

     while 没有达到停止准则 do

         从训练集中采包含m个样本自适应学习率算法(六)、自适应学习率算法_初始化_20的小批量,对应目标为自适应学习率算法(六)、自适应学习率算法_初始化_34

         计算梯度:自适应学习率算法(六)、自适应学习率算法_神经网络_52

         自适应学习率算法(六)、自适应学习率算法_一阶矩_53

        更新有偏一阶矩估计:自适应学习率算法(六)、自适应学习率算法_初始化_54

        更新有偏二阶矩估计:自适应学习率算法(六)、自适应学习率算法_缩放_55

        修正一阶矩的偏差:自适应学习率算法(六)、自适应学习率算法_缩放_56

        修正二阶矩的偏差:自适应学习率算法(六)、自适应学习率算法_缩放_57 (逐元素应用操作)

        应用更新:自适应学习率算法(六)、自适应学习率算法_一阶矩_58

     end while

"Adam"这个词派生自短语“adaptive moments”。早期算法背景下,它也许最好被看做结合RMSProp和具有一些重要区别的动量的变种。首先,在Adam中,动量直接并入了梯度一阶矩(指数加权)的估计。将动量加入RMSProp最直观的方法是将动量应用于缩放后的梯度。结合缩放的动量没有明确的理论动机。其次,Adam包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计。RMSProp也采用了(非中心的)二阶矩估计,然而缺失了修正因子。因此,不像Adam,RMSProp二阶矩估计可能在训练初期有很高的偏置。Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。

4、选择正确的优化算法

目前,最流行的算法并且使用很高的优化算法包括SGD、具动量的SGD、RMSProp、具动量的RMSProp、AdaDelta和Adam。此时,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)。