机器学习中的优化算法总结

1 梯度下降算法理论分析

1.1 相关介绍

1.1.1 批量梯度下降

使用整个数据集的优化算法被称为批量(batch)或确定性(deterministic)梯度算法,因为它们会在一个大批量中同时处理所有样本。通常,术语“批量梯度下降”指使用全部训练集,而术语“批量”单独出现时指一组样本。

1.1.2 随机梯度下降

每次只使用单个样本的优化算法被称为随机(stochastic)或者在线(online)算法。术语“在线”通常是指从连续产生样本的数据流中抽取样本的情况,而不是从一个固定大小的训练集中遍历多次采样的情况。

1.1.2 小批量随机梯度下降

大多数深度学习的算法介于以上两者之间,使用一个以上而又不是全部的训练样本。传统上,这些会被称为小批量随机(minibatch stochastic)方法,现在通常将它们简单地称为随机(stochastic)方法。

1.2 迭代步的推导

考虑如下优化问题,其中x是模型的参数,

minwRnf(w)=1ni=1nfi(w)

对f(x)在w=w(k)处做二阶泰勒展开,并假设2f(w(k))1α(k)I
w(k+1)=argminwf(w)=argminwf(w(k))+<f(w(k)),ww(k)>+12(ww(k))T2f(w(k))(ww(k))=argminwf(w(k))+<f(w(k)),ww(k)>+12α(k)||ww(k)||22=argminx<f(w(k)),w>+12α(k)||ww(k)||22=argminwF(w)

F(w)w=0,即
f(w(k))+1α(k)(ww(k))=0

可得
w=w(k)α(k)f(w(k))

所以
w(k+1)=w(k)α(k)f(w(k))

这就是梯度下降算法的迭代步,其中α(k)是第k步的步长。
同理,如果不假设2f(w(k))1α(k)I,则推导出牛顿法的迭代步如下:
w(k+1)=w(k)(2f(w(k)))1f(w(k))=w(k)H(k)1g(k)

2 梯度算法实现

2.1 基本算法

2.1.1 随机梯度下降

更新规则如下:

θθϵθ(1mi=1mL(f(x(i);θ),y(i)))

2.1.2 动量

初始化v=0,更新规则如下:

vαvϵθ(1mi=1mL(f(x(i);θ),y(i)))θθ+v

动量方法(Polyak, 1964)引入了变量v充当速度角色,速度v积累了梯度元素θ(1mi=1mL(f(x(i);θ),y(i)))α越大,之前梯度对现在方向的影响也越大。动量的主要目的是主要解决两个问题:

  • Hessian矩阵的病态条件(更新一步之后loss并没有减小)
  • 随机梯度的方差(随机梯度和全梯度之间有偏差)

2.1.3 Nesterov动量

受Nesterov加速梯度算法(Nesterov, 1983, 2004)启发,Sutskever et al.(2013)提出了动量算法的一个变种。这种情况的更新规则如下:

vαvϵθ(1mi=1mL(f(x(i);θ+αv),y(i)))θθ+v

Nesterov动量和标准动量之间的区别体现在梯度计算上。Nesterov动量中,梯度计算在施加当前速度之后。因此,Nesterov动量可以解释为往标准动量方法中添加了一个校正因子。

2.2 自适应学习率算法

最近提出一些增量(或者基于小批量)的算法来自适应模型参数的学习率。它们的思想都是,为每个参数设置不同的学习率,在整个学习过程中自适应这些学习率。

2.2.1 AdaGrad

Adagrad算法(Duchi et al., 2011)独立地适应所有模型参数的学习率。效果是在参数空间中更为平缓的倾斜方向会取得更大的进步。在凸优化背景下表现很好。更新规则如下:

  1. 计算梯度:g1mi=1mL(f(x(i);θ+αv)
  2. 累积平方梯度:rr+gg
  3. 更新:θθϵδ+rg

2.2.2 RMSProp

RMSProp算法(Hinton,2012)修改AdaGrad以在非凸设定下效果更好。AdaGrad根据平方梯度的整个历史收缩学习率,经验上已经发现,对于训练深度神经网络而言,从训练开始时积累梯度平方会导致有效学习率过早或过量的减少。RMSProp使用指数衰减平均以丢弃遥远过去的历史,使其能够在最后找到凸碗状结构后快速收敛,它就像一个初始化于该碗状结构的AdaGrad算法实例。更新规则如下:

  1. 计算梯度:g1mi=1mL(f(x(i);θ+αv)
  2. 累积平方梯度:rρr+(1ρ)gg
  3. 更新:θθϵδ+rg

2.2.3 AdaDelta

Adadelta算法(Zeiler, 2012)也像RMSProp一样,使用了小批量随机梯度按元素平方的指数加权移动平均变量r,两位作者在互不知道的情况下都想到了这样的方法。AdaDelta跟RMSProp不同的地方在于,使用累积更新量代替学习率,因此它的主要优势在于不需要选取学习率。更新规则如下:

  1. 计算梯度:g1mi=1mL(f(x(i);θ+αv)
  2. 累积平方梯度:rρr+(1ρ)gg
  3. 计算更新:Δxdrg
  4. 累积更新量:dρd+(1ρ)Δx
  5. 应用更新:θθ+Δx

2.2.4 Adam

Adam(Kingma and Ba, 2014)这个名字派生自短语“adaptive moments”,可以看作RMSProp和Moments的结合。更新规则如下:

  1. 计算梯度:g1mi=1mL(f(x(i);θ+αv)
  2. 更新有偏一阶矩估计:sρ1s+(1ρ1)g
  3. 更新有偏二阶矩估计:rρ2r+(1ρ2)gg
  4. 修正一阶矩的偏差:s^s1ρ1t
  5. 修正二阶矩的偏差:r^r1ρ2t
  6. 更新:θθϵs^δ+r^

2.3 随机梯度算法

2.3.1 SAG

SAG方法(Le Roux et al., 2012)更新规则如下:

w(k+1)w(k)α(k)(1n(fsk(w(k))fsk(w(k1)))+1ni=1nfi(w(k1)))

其中,sk是从1,2,...,n均匀采样的值。
该方法的缺点是需要为每个样本存储最新的梯度;更新的梯度是全梯度的有偏估计,证明见下一节。

2.3.2 SAGA

SAGA方法(Defazio et al., 2014)是SAG方法的无偏版本,更新规则如下:

w(k+1)w(k)α(k)(fsk(w(k))fsk(w(k1))+1ni=1nfi(w(k1)))

其中,sk是从1,2,...,n均匀采样的值。
在这个方法中,
E(Δw)=E(fsk(w(k))fsk(w(k1))+1ni=1nfi(w(k1)))=f(w(k))f(w(k1))+f(w(k1))=f(w(k))

所以更新量是f(w(k))的无偏估计。

2.3.3 SVRG

SVRG方法(Johnson et al., 2013)不需要为每个样本存储一个最新梯度。
机器学习中的优化算法总结