system: [SYSTEM]

user: 2. 梯度下降法 样本数据为 ( x i ， y i ) ， i = 1 ， 2 ， ⋯ ， m ，共有m个样本。其中样本的输入部分 ( x i 1 ， x i 2 ， ⋯ ， x i n ) 为数据的n个特征。步长(learning rate)是在迭代过程中，决定了沿梯度负方向前进的长度。 在监督学习中，为了拟合输入样本，使用假设函数(hypothesis function)，记为 h θ ( x ) ， h θ ( x i ) = θ 0 + θ 1 ∗ x i 1 + ⋯ + θ n ∗ x i n ，为方便写，加入 x i 0 = 1 ，则 h θ ( x i ) = ∑ j = 0 n θ j x i j 。 机器学习中，为了评估模型拟合的好坏，一般用损失函数(loss function)来度量拟合的好坏，损失函数极小化，也就是拟合的最好，对应的模型参数也将是最优参数。通常将样本输出与假设函数差的平方作为损失函数，即 J ( θ ) = 1 2 m ∑ i = 0 m ( y i − h θ ( x i ) ) 2 。 下面将对梯度下降以及各种衍生算法分别进行阐述。 2.1. 梯度下降(GD)算法 在机器学习中，最小化损失函数时，常采用梯度下降法一步步迭代去趋近全局最优值。当然，如果损失函数是非凸函数，梯度下降法最后可能得到的是局部最优解，但如果损失函数是凸函数，梯度下降法得到的解就一定是全局最优解。 梯度下降 [ 9 ] 是一种简单的、众所周知的且非常健壮的优化算法，它通过计算参数的梯度，并通过与学习率作乘，减去了该梯度的一部分进行参数更新。 可以看到，当学习率 ε 取值比较小时，参数更新的会比较慢，则导致收敛到极值的速度较慢；若把学习率设置的较大时，易导致在搜索过程中来回震荡，故而如何设置学习率的大小、如何加快收敛的速度以及如何减小搜索过程中的震荡才是深度学习真正要解决的问题之一。 2.2. 梯度下降法的延伸 梯度下降方法作为很稳健的优化方法，一直被广为使用，研究者为此做出了一些延伸方法，主要有批量梯度下降法、随机梯度下降法、小批量梯度下降法等。 批量梯度下降法 [ 10 ] (Batch Gradient Descent)，它是在梯度下降的算法基础上，在梯度更新的时候采用全部样本进行更新参数 θ ，更新规则即为式(1)。 θ i = θ i − α ∗ ∂ J ( θ ) ∂ θ i = θ i − α ∗ ∑ j = 0 m ( y j − h θ ( x j ) ) x j i (1) 随机梯度下降法 [ 11 ] (Stochastic Gradient Descent)，它与批量梯度下降法的不同是在于梯度更新参数的时候仅随机选取一个样本进行更新，并非全部样本， 更新规则即为式(2)。 θ i = θ i − α ∗ ∂ J ( θ ) ∂ θ i = θ i − α ∗ ( y j − h θ ( x j ) ) x j i (2) 从式(1)和式(2)可以看出，这两个方法相当于两个极端，一个是采用了全部的样本数据来进行更新参数，而随机梯度下降仅选取一个样本数据来进行更新参数，优缺点也显而易见，批量梯度下降的训练速度要慢，随机梯度下降的训练速度明显要快，特别是在大样本数据量下，批量梯度下降的时间成本会很高，不可取。但是从准确度来讲，随机梯度下降仅选取一个样本数据就决定梯度方向，会导致迭代的方向变化很大，不能很快收敛到局部最优解处，也可能导致解不是最优的。 基于上述两种方法，就诞生了小批量梯度下降。 小批量梯度下降法(Mini-batch Gradient Descent)，是批量梯度下降法和随机梯度下降法的折衷，也就是对于m个样本，采用x个样本来迭代，1 < x < m，更新规则即为式(3)。 θ i = θ i − α ∗ ∑ j = t t + x − 1 ( y j − h θ ( x j ) ) x j i (3) 小批量梯度下降兼顾了二者的优缺点，相比批量梯度下降，加快了收敛速度，相比随机梯度下降，也提高了准确度，是迄今为止大家都在用的方法，一般在现在深度学习的不同框架下，提及梯度下降方法，都是默认在指小批量梯度下降方法。 随机梯度下降已被证明了它是一种高效和有效的优化方法，在许多机器学习的成功案例中是核心算法，例如最近的深度学习发展进程，2012年Krizhevsky [ 12 ] 、2006年Hinton等 [ 13 ] 、2012年的Hinton [ 14 ] 等人、2013年的Deng [ 15 ] 等人、2014年Graves [ 16 ] 等人均在文章中验证了随机梯度下降的有效性。 2.3. 加入动量的随机梯度下降 1964年Poljak提出了经典的动量方法 [ 6 ] ，增加了动量矢量v，它积累了历史梯度方向，来代替了真正的梯度。速度是以动量参数 α 的衰减力度进行更新，若动量参数 α 越大，则之前的梯度对现在方向的影响也越大。直观的讲，若当前时刻的梯度与历史时刻梯度方向相似，这种趋势会在当前时刻加强，若方向相反，则当前的梯度方向趋势会减弱。 加入动量，会使得在下降初期加速下降，而在越过函数谷面时，学习率会使得两次更新方向基本相反，故而会在原地震荡，此时动量参数会使得更新幅度减小，有助于越过函数谷面。在下降的中后期，函数面的局部极小值所在的吸引盆数量较多，一旦进入吸引盆，则梯度为0，导致前后两次更新方向一致，此时动量参数会使得更新幅度增大，协助跃出吸引盆。 在1983年，Nesterov提出了基于动量变种的加速梯度算法 [ 17 ] ，此方法与动量算法的唯一区别就是，计算梯度的不同，Nesterov先用当前的速度v更新一遍参数，在用更新的临时参数计算梯度，相当于添加了矫正因子的动量算法。文章 [ 17 ] 指出，在随机梯度下，Nesterov将误差收敛从O (1/k)改进到O (1/k^2)，然而在随机梯度下降法下，Nesterov并没有任何改进。作者在文章中提供了经验证据，证明该算法优于梯度下降法、经典动量法和无Hessian-free [ 8 ] 算法。 2.4. AdaGrad 在基本的梯度下降法优化中，有一个常见的问题是，要优化的变量对于目标函数的依赖是各不相同的。对于某些变量，已经优化到了极小值附近，但是有的变量仍然在梯度很大的地方，这时候一个统一的全局学习率是可能出现问题的。如果学习率太小，则梯度很大的变量会收敛很慢，如果梯度太大，已经优化差不多的变量就可能会不稳定。 针对这个问题，当时在伯克利加州大学读博士的Jhon Duchi，2011年提出了AdaGrad [ 7 ] (Adaptive Gradient)，也就是自适应学习率。AdaGrad的基本思想是对每个变量用不同的学习率，设置了全局学习率之后，每次通过，全局学习率逐参数的除以历史梯度平方和的平方根，使得每个参数的学习率不同。这个学习率在一开始会比较大，用于快速梯度下降。随着优化过程的进行，对于已经下降很多的变量，则减缓学习率，对于还没怎么下降的变量，则保持一个较大的学习率。 2.5. RMSProp AdaGrad的一个值得注意的问题是， γ 最终会变得非常大，以至于训练速度会慢下来，阻止模型达到局部最小值，RMSProp [ 18 ] 是AdaGrad的另一种替代方法，它通过改变梯度累积为指数衰减的移动平均算法，用以丢弃遥远的过去历史，这使得模型能够继续学习。深度神经网络都是在非凸条件下的，RMSProp在非凸条件下结果更好，并在经验上，RMSProp已被证明是有效且实用的深度学习网络优化算法。 Nesterv算法可加速梯度，故而将Nesterv加入到RMSProp [ 19 ] ，这样既改变了学习率，Nesterov引入动量又改变了梯度，从两方面对参数进行了更新。 2.6. ADADELTA 2012年，Zeiler提出AdaDelta [ 20 ] 算法。它自适应动态学习率，仅使用了一阶信息，并且计算开销也是最小的。该方法不需要对学习速率进行人工调优，而且对于噪声梯度信息、不同的模型体系结构选择、各种数据模式和超参数的选择，都显得很稳健。在分布式集群环境中，使用单机器和大型声音数据集，与其他方法相比，在MNIST数字分类任务上表现了很好的结果。 2.7. ADAM (Adaptive Moment Estimation) 2014年，ADAM [ 21 ] 算法被Kingma等人提出，它是moment与RMSProp的结合，Adam 不仅如RMSProp算法那样基于一阶矩均值计算适应性参数学习率，它同时还充分利用了梯度的二阶矩均值(即有偏方差)，适合解决含大规模的数据和参数的优化目标，也适合解决包含高噪声或稀疏梯度的问题。具体来说，算法计算了梯度的指数移动均值，超参数 ρ 1 和 ρ 2 控制了这些移动均值的衰减率。 ρ 1 和 ρ 2 的默认参数值接近于1，因此矩估计的偏差接近于0。该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。 Continued 在Adam中，单个权重的更新规则是将其梯度与当前和过去梯度的L 2 范数成反比例进行缩放调整，Kingma等人 [ 21 ] 继而想到了将更新规则泛化到L p 范数的更新规则，将P趋于无穷便得到了Adamax算法。 2.8. Nadam Nadam (Nesterov-accelerated Adaptive Moment Estimation) [ 22 ] 是将Adam与Nesterov加速梯度结合在一起，它对学习率的约束将更强，具备二者的优势，使得此算法在某些问题上的效果更好。 2.9. ANGD 为了加速学习机器的学习动力，减少损失，2018年GH Wei等人 [ 23 ] 提出了一种考虑神经结构的几何结构的自然梯度法，并将费雪信息矩阵项加入到修正方程中。在自然梯度法中，其算法规则如下所示： Continued