梯度下降算法综述

梯度下降算法是目前神经网络中最流行的优化算法。同时也是目前每个深度学习框架中都包含了各种各样的优化的优化梯度下降算法(例如:lasagne,caffekeras)。然而始终者通常对这些优化算法的优缺点并不了解,他们只是作为黑盒子提供给用户使用。

本文旨在介绍不同的梯度下降优化算法的不同点以帮助你更好的使用这些算法。我们首先介绍了不同种类的梯度下降算法。然后我们简要的对梯度下降算法面临的挑战进行了总结。接下来,我们介绍了应对梯度下降算法当前面临挑战的常用优化算法。我们夜对梯度下降算法并行和分布式架构进行了简要的介绍。最后,我们还指出了其他一些梯度下降算法的优化策略。

梯度下降算法是最小化参数为$\theta$的目标函数$J(\theta)$的方法。在梯度下降中通常通过更新与梯度相反方向的参数来实现目标函数的优化。学习率$\eta$决定了梯度下降的步伐大小。换句话说,我们沿着平面的梯度下山知道我们到达到一个山谷。如果你对梯度下降算法不太熟悉,你可以在这里找到关于梯度下降在优化神经网络中的详细介绍。

梯度下降算法分类

梯度下降算法根据用来计算目标函数梯度数据数量的不同可以分为三类。根据数据规模的大小我们对参数更新的精确度和更新所用时间之间的趋势线。

批梯度下降算法(Batch Gradient Descent)

Vanilla梯度下降和Aka批梯度下降算法通过所有训练样本来计算目标函数的梯度,参数更新公式如下:
$$\theta = \theta - \eta\cdot \Delta_{\theta}J(\theta)$$
由于在批梯度下降算法中每次参数更新需要计算所有数据集的梯度,批梯度下降算法速度会十分缓慢,在数据集太大不能一次读入内存的时候会更加麻烦。批梯度下降算法不能保证在每个新样本来的时候对模型进行更新。
批梯度下降算法的伪代码如下:

for i in range(nb_epochs):
    params_grad = evaluate_gradient(loss_function, data, params)
    params = params - learning_rate * params_grad

在预定的迭代时间内,首先利用假定的目标函数的参数$params$和所有的训练样本计算目标函数的梯度向量 $params_grad$。值得注意的是目前所有的深度学习的库都提供了关于某些参数的梯度的改进计算方法。如果你打算自己计算梯度,梯度检验是个不错的注意(具体可以看这里提供了一些梯度检验的技巧)。

计算得到目标函数的梯度后,根据梯度方向和学习率更新更新参数。批处理梯度下降在凸平面上能收敛到全局最优,在非凸平面上能够收敛到局部最优。

随机梯度下降算法(Stochastic Gradient Descent)

与批梯度下降算法相反,随机梯度下降算法会对每个样本 $x^{(i)}$和标签$y^{(i)}$更新参数,更新公式如下:

$$\theta = \theta - \eta \cdot \Delta_{\theta}J(\theta;x^{(i)};y^{(i)})$$

批梯度下降算法在每次参数更新时都需要对数据集中所有样本重新计算。随机梯度下降算法通过每次选取一个样本更新参数来避免这种计算冗余。它通常比BSG速度更快,可以用于在线场景。SGD由于频繁的更新会导致参数变化大,从而引起目标函数值会波动的非常厉害,如图1所示。

图1:随机梯度波动图([原图](https://upload.wikimedia.org/wikipedia/commons/f/f3/Stogra.png))

迷你批梯度下降(Mini-Batch Gradient Descent)

Mini梯度下降算法综合结合了批梯度下降和随机梯度下降的优点,每次利用样本集中的$n$个样本来更新梯度下降的参数,更新公式如下:
$$\theta=\theta - \eta\cdot\Delta_{\theta}J(\theta;x^{(i:i+n)};y^{(i:i+n)})$$
通过选取部分样本来更新参数,Mini批梯度下降算法具有以下优点:
a) 可以减小参数更新过程中的波动,这能够确保优化过程更加稳定的收敛;
b) 能够像当前的深度学习框架中那样利用矩阵优化来计算目标函数梯度那样高校。通常Mini批梯度下降算法的尺寸为50和256,但是根据应用的不同可以变化。Mini梯度下降算法是深度学习中最为常用的优化算法。即使有些网络训练中使用了Mini批梯度下降算法,但可能还是采用了SGD来进行描述。注意:在后文中我们描述SGD时为了简洁,省略了参数$x^{(i:i+n)};y^{(i:i+n)}$.

Mini-Batch的伪代码如下:

for i in range(nb_epochs):
    np.random.shuffle(data)
    for batch in get_batches(data, batch_size=50):
    params_grad = evaluate_gradient(loss_function, batch, params)
    params = params - learning_rate * params_grad

挑战

虽说 Mini-Batch梯度下降算法已经得到了广泛的应用,但是它并不能保证很好的收敛性,并且还有一些重要的挑战需要强调:

  • 选择合适的学习率比较困难。当学习率太小时,目标函数收敛太慢,当学习率太大又容易造成目标函数值在最小值附近波动,甚至跳出收敛区域。
  • 学习率更新计划[11]试图通过诸如蚁群算法或者预先定义的更新策略或者当迭代特定次数后。这些更新计划和阈值的定义应当更加高级,不能根据数据集的特点进行自适应。
  • 另外,对所有的参数使用同样的学习率夜又问题 。如果当我们的数据是稀疏的或者频率不同,我们或许不想所有的参数用同样的学习率更新,而需要对一些稀有的特征采用更大的更新参数。
  • 另外一个重要的挑战是对于优化非凸函数时容易陷入局部最优中。Dauphin指出局部最优的困难不是由于局部最小区域而是由于鞍点的存在,即一维是上升的,而另一维是下降的。鞍点周围通常是错误率相同的稳定状态点,这使得SGD算法很难跳出局部最优,因为它在所有的维度上都接近与等于0。

随机下降优化算法

接下来,我们对深度学习社区中用来应对上文提到的挑战的一些常用算法。我们不会讨论那些不适用于高阶数据优化的算法,比方说二阶方法,如牛顿法

动量(Momentum)

SGD算法容易在平面的凹处陷入麻烦,即:平面上的曲线在一边比另一边陡峭很多[1],这就是我们通常所说的局部最优。在这种情况下,SGD在凹底处震荡,然后缓慢的得到了如图二所示的局部最优解。
图2:无动量SGD
图3:动量SGD
动量(Momentum)[2]是一种加速SGD算法向相关方向下降,并且避免震荡的方法,如图3所示。它通过对上一步更新向量增加一个小数$\gamma$来更新当前的向量来实现加速和避免震荡,具体数学式如下:
$$v_t = \gamma v_{t-1} + \eta \nabla_\theta J( \theta)$$

$$\theta = \theta - v_t$$

注意:在一些实现中改变了等式中的符号,动量项中$\gamma$通常设微$0.9$或相似的值。本质上当采用动量法时可以想象成我们推一个球下山。随着球的向下滚动,它的动量增加,从而滚动的速度越来越快(直到它到达终止速度,如果又空气阻力存在,即$\gamma<1$)。在参数更新时情况夜类似:动量项能够增加梯度方向一致点的动量并且减小梯度方向改变维的动量。因此,我们能够保证函数能够收敛的更快,并且减小震荡。

Nesterov 加速梯度
如果一个球沿着山坡随意往下滚,那么得到的结果肯定不满意。那么我们可以有一个更智能的小球,这个小球可以知道它在坡道再次变陡之前减速。

Nesterov加速梯度算法(NAG)[7]为我们提供了这种智能动量。我们知道在我们使用动量项 $\gamma v_{t-1}$ 来更新参数$\theta$。通过计算 $\theta -\gamma v_{t-1}$ 可以帮助我们估计下一次参数的大概更新位置(梯度不能整体更新)。我们可以通过计算当前的梯度即利用当前的参数来计算将来参数的位置,更新数学式如下:

$$v_t = \gamma v_{t-1} + \eta \nabla_\theta J( \theta - \gamma v_{t-1} )$$

$$\theta = \theta - v_t$$
同样,我们将$\gamma$的值近似的设为$0.9$. Momentum首先计算当前的梯度 (如图4中蓝色向量所示) 然后在当前方向进行一个较大幅度的梯度更新 (如途中长的蓝色向量所示) 。而NAG首先进行一个较大幅度的梯度更新 (图中棕色向量),然后在调整梯度方向(红色向量),最终的梯度更新如图中绿色向量所示。这种更新方式能够避免更新过快从而提高结果的响应能力,这种方式在提高RNN训练性能中具有重要的作用[8]。
在以上的方法中我们能够根据代价函数当前梯度的情况来自适应的更新梯度从而加快梯度下降算法的收敛速度,我们也可以根据各个参数的重要性来对参数进行自适应的更新。

Adagrad

Adagrad[3] 就是这样一种梯度下降优化算法:它对每个参数的采用不同的学习率,需要频繁更新的参数学习率更大,而更新不那么频繁的参数学习率更小。Adagrad的这一特性使得它使用于稀疏数据的处理。Dean等人[4]发现Adagrad在训练大规模神经网络中能够提高网络的鲁棒性,如在谷歌训练从Youtube视频中识别猫的项目。另外,Penningto et al.[5]采用Adagrad来训练GloVe词向量构建网络,在该网络中,与频繁词相比非频繁单词在更新网络时需要更新幅度更大。首先,我们对参数集 $\Theta$ 中的每个参数 $\theta_{i}$ 采用相同的学习率 $\eta$ 进行更新。Adagrad在 $t$ 时刻对每个参数 $\theta_{i}$ 采用不同的学习率进行更新,我们首先说明Adagrad对每个参数的更新,之后我们再向量化。为了简洁,我们设 $g_{t,i}$ 是目标函数在 $T$ 时刻的梯度函数:

$$g_{t,i} = \Delta_{\theta}J(\theta_{i})$$

SGD在$t$时刻按照以下公式对参数进行更新:

$$\theta_{t+1,i} = \theta_{t,i} - \eta\cdot g_{t,i}$$

上式就是梯度更新准则,Adagrad 在每个时刻 $t$ 都更具过去的梯度对每个参数 $\theta_{i}$ 的学习率进行更新,参数的恶搞拿下方式如下:

$$\theta_{t+1,i} = \theta_{t,i} - \frac{\eta}{\sqrt{G_{t,ii} + \epsion}}\cdot g_{t,i}$$

其中 $G_{t} \in R^{d\times d}$ 在这里是一个对角矩阵,每个元素 $i,i$是参数 $\theta_{i}$ 的平方根 [24], $\epison$ 是一个避免参数为 $0$ 的平滑项(通常设为 $1e-8$ ).有趣的是,没有平方根操作的化,该算法表现的十分差。由于 $G_{t}$ 包含了所有过去梯度关于参数 $\theta$ 的平方根的和。所以我们可以通过元素之间 $G_{t}$和$g_{t}$ 的点乘来实现向量化:

$$\theta_{t+1} = \theta_{t} - \frac{\eta}{\sqrt{G_{t} + \epsion}}g_{t}$$

Adagrad算法的主要优点是不需要手动的设定学习率了。大多数的实现都采用$0.01$作为默认的学习率。Adagrad 算法的一个缺点是他将分母中所有的项相加,由于每项都为正,累加和在训练过程中会随着时间的变化而增加。这会导致学习率缩小,最后导致网络不能学习到更多的内容了。下面这种优化算法主要就是为了解决这一问题而提出的。

Adadelta

Adadelta[6]算法是Adagrad算法的一个扩展,它主要用来解决累加和变大导致学习率缩小的问题。
它通过累加固定窗口$w$大小的梯度来替代所有梯度的累加。

为了避免存储过去$w$梯度值的低效性,梯度和被定义为递归的延迟平均。时间$t$时的梯度平均只取悦与前
次的平均和当前的梯度

$$E[g^2]{t} = \gamma E[g^2]{t-1} + (1-\gamma)g_{t}^2$$
同样我们将$\gamma$设为$0.9$. 为了清晰,我们现在重写SGD的参数更新方程:

$$\Detla \theta_{t} = -\eta \cdot g_{t,i}$$

$$\theta_{t+1} = \theta_{t} + \Detla \theta_{t}$$

Adadelta的参数向量更新式如下:

$$\Detla \theta_{t} = - \frac{\eta}{\sqrt{G_{t} + \epsion}g_{t}}$$

同样,对角矩阵$G_{t}$可以通过延迟平均$E[g^2]_{t}$来代替:

$$\Detla \theta_{t} = -\frac{\eta}{E[g^2]{t}+\epsion}g{t}$$
由于分母是根的平方根,所以我们可以用以下缩写来替代:

$$\Detla = -\frac{\eta}{RMS[g]{t}}g{t}.$$

作者注意到这个更新单元与实际上不匹配,即参数更新单元要和假设相匹配。为了实现这李,他们首先
定义了另一种指数延迟,在这式中没有对梯度求平凡跟,但是对梯度更新的参数求平方根,式子如下:

$$RMS[\Detla \theta]{t} = \sqrt{E[\Detla \theta^2]{t} + \epsion}$$

由于$RMS[\Detla]_{t}$未知,所以我们将它用RMS的参数近似,直到更新。通过用前一步的
更新规则来替代学习率,最后Adadelta的更新规则如下:

$$\Detla\theta_{t} = -\frac{RMS[\Delta\theta]{t-1}{RMS[g]{t}}g_{t}.$$

在Adadelta中,我们不需要设置默认的学习率,因为它可以从更新规则中计算得到。

RMSprop

RMSprop是一种未公开发表的一种自适应学习率更新方法,它由Geoff Hinton在Coursera的课程中
提出。
RMSprop和Adadelta都是用来解决Adagrad’s学习率增长的问题。RMSprop在实际上
定义了我们上文提到的Adadelta:

$$E[g^2]{t} = 0.9E[g^2]{t-1} + 0.1g_{t}^2$$

$$\theta_{t-1} = \theta_{t} - \frac{\eta}{\sqrt{E[g^2]{t} + \epsion}}g{t}.$$

RMS也同样用延迟收敛除以学习率。Hinton建议$\gamma$值设置微$0.9$.$\eta$的默认值建议值为$0.001$.

Adam

Adam(Adaptive Moment Estimation)[15]是另一种为每个参数自适应计算学习率的方法。
除了像Adadelta和RMSprop存储了过去的推迟收敛稀疏 $v_{t}$ 外,Adam 还存储了过去$m_{t}$ 的参数,与 Momentum 类似:

$$m_{t} = \beta_{1}m_{t-1} + (1-\beta_{1})g_{t}.$$

$$v_{t} = \beta_{2}v_{t-1} + (1-\beta_{2})g_{t}^2$$

其中$m_{t}$和$v_{t}$分别是第一时刻和第二时刻梯度的估计值。由于$m_{t}$和$
被初始化为$o’s$ 本文作者发现他们会像$0$靠近,特别是在初始化步骤并且延迟率特别小时(即$\beta_{1}$和$\beta_{2}$接近1时).

我们可以通过计算当前的梯度即利用当前的参数来计算将来参数的位置,更新数学式如下:

$$m_{t} = \frac{m_{t}}{1-\beta_{1}^{t}}$$

$$v_{t} = \frac{v_{t}}{1-\beta_{2}^{t}}$$

通过上式即可更新参数,像Adadelta和RMSprop一样, 学习率的更新公式如下:

$$\theta_{t+1} = \theta_{t} - \frac{\eta}{\sqrt{v_{t}} + \epsion}m_{t}$$

作者提出$\beta_{1}$和$\beta_{2}$的默认值为$0.999$,$\epsion$的值为$10^{-9}$
文中实验表明与其他的自适应算法相比,Adam表现十分优异。

优化过程可视化

下面的两张动画图为优化过程提供了直观的认识。我们也可以在这里找到由Karpathy制作的动画。

在图5中,我们可以看到优化算法在目标函数上曲面上的随着时间的变化过程。需要注意的是,Adagrad,
Adadelta 和 RMSprop收敛速度差不多快,而Momentum和NAG像小球一样滚动下降。
但是它可以快速的对局部最优值作出反应,因为它增加了对局部最小值的查看。

在图6中战士了所有算法在鞍点的行为,在只有一个方向梯度为正数,其他所有方向梯度为负数的点。
图中指出了SGD算法所面临的局部最优的问题,我们可以看到SGD, Momentum和NAG非常难以跳出局部最优,虽说后两者在之后缓慢的跳出了鞍点,但是Adagrad,RMSprop,和
Adadelta可以快速的沿着负梯度下降。

我们可知,自适应学习率方法如Adagrad, Adadelta, RMSprop和Adam在这些情况下可以提供最好的收敛速度。

选用什么优化算法

那么我们该选用哪种优化算法呢?如果你的输入数据是稀疏的,那么你最好选用一种自适应学习率的方法。另外一大优势是自适应方法不需要手动设定学习率,通过设定默认值即可取得最好的训练结果。

总而言之,RMSprop是Adagrad的一种扩展,主要是用来解决Adag方法中学习率增长的问题。它进一步扩展成
Adadelta除了Adadelta使用RMS的参数来更新规则。最后Adam在momentum和RMSprop的基础上增加了偏差修正。在这种情况下Adam, RMSprop, Adadelta方法非常相似。KingMa等[15]证明了偏差修正可以帮助Adam在最后优化时性能比RMSprop更好。在数据稀疏的情况下,Adam是最好的选择。

有趣的是,在最佳几年的SGD算法中很少有人使用momentum或者是一个简单的学习率更新方式 。实践表明SGD通常能够找到一个最小值,但是它速度非常慢,它更依赖于更加鲁棒的初始化策略和更新策略。它非常容易陷入局部最小值也就是鞍点。因此,如果哦你需要快速的收敛性来训练神经网络,那么你最好选用一种自适应学习算率算法。

并行和分布式SGD

分布式SGD是加快大规模数据聚类方法最为直观的拌饭。
SGD本质上是顺序执行的,一步接着一步,逐渐的找到最小值。順序SGD具有良好的收斂特性,但是它在大規模數據集上執行太慢了。相反,异步执行SGD速度会加快,但是各节点上的通信会导致收敛性变差。另外,我们可以在一台机器上并行SGD不用大规模集群。下面的算法和结构是对分布式和并行SGD的优化方法。

Hogwild

Niu 等人在[23]介绍了一种更新策略被称作Hogwild.它允许在CPU上并行的更新SGD。处理器之间通过不枷锁的内存来实现共享。但是该方法只有在输入数据稀疏的情况下才有效,因为在此时每次更新的参数比例较小。实验表明在这种情况下,这种更新策略几乎可以取得等效的收敛性,因为处理器并不会对有用的信息进行重写覆盖。

Downpour SGD

Downpour SGD是SGD异步更新的一种方法,它最初由Dean等人在谷歌的分布式信念网中提出。它在很多服务器上进行训练。这些模型将他们的参数更新发送到一个服务器。每个机器负责更新一部分参数。然而,由于各子服务器并没有共享权重和更新,所以他们的参数会持续性的发散,影响收敛。

Delay-tolerant Algorithms for SGD

Mcmahan和Streeter[12]将AdaGrad通过采用延迟容忍算法扩展到了分布式的环境下。延迟容忍算法不仅根据过去的梯度更新,同时也根据延迟更新参数。该方法在实践中验证十分有效。

TensorFlow

TensorFlow[13]是谷歌最佳开源的深度学习框架。它是基于他们过去在分布式信念网的工作开发的。在分布式执行时,一个图被划分为多个子图,在每个节点上通过Send/Receive节点对来实现通信。然而,目前的TensorFlow版本还不支持分布式公牛。在13.04.16分布式版本的TensorFlow已经发布。

Elastic Averaging SGD

Zhang等人[14]提出了弹性平均梯度下降算法(Elastic Averaging SGD),在该方法中,通过一种弹性力量来实现中心参数存储服务器和参数服务器之间变量的练习。该方式允许本地变量根据中心服务器存储的变量进行浮动。实验表明这可以极大的提高算法寻找到新的局部最优点的性能。

其他优化策略

最后,我们介绍一些与前面提到的方法一起用来进一步提高SGD性能的优化策略。更为详细的策略综述可以参考综述问下[22].

洗牌和课程学习(Shuffling and Curriculum Learning)

通常, 我们需要避免训练样本的有序性从而避免它给我们的优化算法带来偏差,所以在每次迭代后对训练样本进行洗牌是个不错的选择。
另一方面,在我们旨在解决一些特定的难题时,以特定的顺序提供训练样本能够提高性能并且得到更好的收敛性。这种建立特定样本顺序的方法被称作课程学习[16].
Zareba和Sutskever[17]指出只能够通过训练LSTM算法来估算单个程序采用课程学习与混合策略方法会比采用原始的优化方法要号,其中顺序的样本带来了训练困难。

批量归一化(Batch normalization)

为了方便学习,我们通常需要在初始化阶段对参数通过初始化均值和方差都为0来对参数进行归一化。随着训练过程的进行,我们在不同的范围内根系参数,参数的正则特性丢失,随着神经网络层次的加深,这将会导致寻两变慢,并且扩大了波动。

批量归一化(Batch normalization)[18]在每次Mini-batch更新时重新建立正则化和变化,正则和和改变都通过反馈操作同时向前传递。通过将模型部分的正则和,我们可以使用更高的学习率,并且减少对正则参数的关注度。批量归一化另外夜扮演着规则化和减少(有时避免)需要Dropout.

尽早停止(Early stopping)

根据 Geoff Hinton “Early stopping (is) beautiful free lunch” (NIPS 2015 Tutorial slides, slide 63)”所述。你应当在训练过程中经常监视在验证集上的错误率 ,如果验证错误没有提高的化,尽早停止训练过程。

梯度噪声(Gradient noise)

Neelakantan[21]在每次更新梯度时通过下式增加了高斯噪声$N(0,\sigma_{t}^{2})$:

$$g_{t,i} = g_{t,i} + N(0,\sigma_{t}^{2})$$

他们通过以下算法来减少波动:

$$\sigma_{t}^{2} = \frac{\eta}{(1+t)^{\gamma}}$$

他们证明了通过增加噪声能够使得神经网络更加陆帮,并且能够帮助训练更复杂和更深的神经网络结构。他们怀疑噪声能够使得模型能够有更大的机会逃离局部最小值,在网络层次加深时,局部最小值更多。

结论

在本文中,我们首先介绍了三种梯度下降算法,其中Mini-batch梯度下降算法是使用最广泛的梯度下降算法。我们演技了当前最常见的梯度下降优化算法如: 动量(Momentum), Nesterov加速梯度算法,Adagrad, Adadelta, RMSprop以及异步梯度下降算法优化方法。最后,我们也考察了其他的梯度下降优化策略,如: 洗牌与课程学习,批量归一化和尽早停止等方法。

我希望本文能够让你对不同梯度下降优化算法的动机和行为有直观的认识。还有哪些常用的梯度下降算法我遗漏了?或者是你在实际中常用的梯度下降优化算法有哪些?都可以在留言中告诉我。

致谢

感谢 Denny Britz 和 Cesar Salgado 阅读本文的草稿并提出了建议。

打印版本引用

本文也可以在 arXiv上找到,如果你觉得本文对你有帮助,可以考虑引用本文:

Sebastian Ruder (2016). An overview of gradient descent optimisation algorithms. arXiv preprint arXiv:1609.04747.

翻译

本博文被翻译成了以下语言:

  • 日语
  • 中文
    2016年6月21更新,本博客也发布在了Hacker News上,这些 讨论提出了一些有趣的点和相关工作。

参考文献

[1]:Sutton, R. S. (1986). Two problems with backpropagation and other steepest-descent learning procedures for networks. Proc. 8th Annual Conf. Cognitive Science Society.
[2]: Qian, N. (1999). On the momentum term in gradient descent learning algorithms. Neural Networks : The Official Journal of the International Neural Network Society, 12(1), 145–151. http://doi.org/10.1016/S0893-6080(98)00116-6
[3]: Duchi, J., Hazan, E., & Singer, Y. (2011). Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. Journal of Machine Learning Research, 12, 2121–2159. Retrieved from http://jmlr.org/papers/v12/duchi11a.html
[4]: Dean, J., Corrado, G. S., Monga, R., Chen, K., Devin, M., Le, Q. V, … Ng, A. Y. (2012). Large Scale Distributed Deep Networks. NIPS 2012: Neural Information Processing Systems, 1–11. http://doi.org/10.1109/ICDAR.2011.95
[5]: Pennington, J., Socher, R., & Manning, C. D. (2014). Glove: Global Vectors for Word Representation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing, 1532–1543. http://doi.org/10.3115/v1/D14-1162
[6]: Zeiler, M. D. (2012). ADADELTA: An Adaptive Learning Rate Method. Retrieved from http://arxiv.org/abs/1212.5701
[7]: Nesterov, Y. (1983). A method for unconstrained convex minimization problem with the rate of convergence o(1/k2). Doklady ANSSSR (translated as Soviet.Math.Docl.), vol. 269, pp. 543– 547.
[8]: Bengio, Y., Boulanger-Lewandowski, N., & Pascanu, R. (2012). Advances in Optimizing Recurrent Networks. Retrieved from http://arxiv.org/abs/1212.0901
[9]: Sutskever, I. (2013). Training Recurrent neural Networks. PhD Thesis.
[10]: Darken, C., Chang, J., & Moody, J. (1992). Learning rate schedules for faster stochastic gradient search. Neural Networks for Signal Processing II Proceedings of the 1992 IEEE Workshop, (September), 1–11. http://doi.org/10.1109/NNSP.1992.253713
[11]: H. Robinds and S. Monro, “A stochastic approximation method,” Annals of Mathematical Statistics, vol. 22, pp. 400–407, 1951.
[12]: Mcmahan, H. B., & Streeter, M. (2014). Delay-Tolerant Algorithms for Asynchronous Distributed Online Learning. Advances in Neural Information Processing Systems (Proceedings of NIPS), 1–9. Retrieved from http://papers.nips.cc/paper/5242-delay-tolerant-algorithms-for-asynchronous-distributed-online-learning.pdf
[13]: Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., … Zheng, X. (2015). TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Systems.
[14]: Zhang, S., Choromanska, A., & LeCun, Y. (2015). Deep learning with Elastic Averaging SGD. Neural Information Processing Systems Conference (NIPS 2015), 1–24. Retrieved from http://arxiv.org/abs/1412.6651
[15]: Kingma, D. P., & Ba, J. L. (2015). Adam: a Method for Stochastic Optimization. International Conference on Learning Representations, 1–13.
[16]: Bengio, Y., Louradour, J., Collobert, R., & Weston, J. (2009). Curriculum learning. Proceedings of the 26th Annual International Conference on Machine Learning, 41–48. http://doi.org/10.1145/1553374.1553380
[17]: Zaremba, W., & Sutskever, I. (2014). Learning to Execute, 1–25. Retrieved from http://arxiv.org/abs/1410.4615
[18]: Ioffe, S., & Szegedy, C. (2015). Batch Normalization : Accelerating Deep Network Training by Reducing Internal Covariate Shift. arXiv Preprint arXiv:1502.03167v3.
[19]: Dauphin, Y., Pascanu, R., Gulcehre, C., Cho, K., Ganguli, S., & Bengio, Y. (2014). Identifying and attacking the saddle point problem in high-dimensional non-convex optimization. arXiv, 1–14. Retrieved from http://arxiv.org/abs/1406.2572
[20]: Sutskever, I., & Martens, J. (2013). On the importance of initialization and momentum in deep learning. http://doi.org/10.1109/ICASSP.2013.6639346
[21]: Neelakantan, A., Vilnis, L., Le, Q. V., Sutskever, I., Kaiser, L., Kurach, K., & Martens, J. (2015). Adding Gradient Noise Improves Learning for Very Deep Networks, 1–11. Retrieved from http://arxiv.org/abs/1511.06807
[22]: LeCun, Y., Bottou, L., Orr, G. B., & Müller, K. R. (1998). Efficient BackProp. Neural Networks: Tricks of the Trade, 1524, 9–50. http://doi.org/10.1007/3-540-49430-8_2
[23]: Niu, F., Recht, B., Christopher, R., & Wright, S. J. (2011). Hogwild! : A Lock-Free Approach to Parallelizing Stochastic Gradient Descent, 1–22.
[24]: Duchi et al. [3] give this matrix as an alternative to the full matrix containing the outer products of all previous gradients, as the computation of the matrix square root is infeasible even for a moderate number of parameters d.