SGD(Stochastic Gradient Descent,随机梯度下降)
基于梯度的迭代优化算法,旨在通过调整模型参数来最小化损失函数。
随机梯度下降的特点:
随机性: 在每次迭代中,随机梯度下降只使用一个随机样本(或少数几个样本)来计算梯度和更新参数。这使得每次迭代都具有一定的随机性,可以避免陷入局部极小值,有助于跳出不良的局部最优解。
更快的更新: 由于每次迭代只处理一个样本或少数几个样本,随机梯度下降的更新速度较快。这有助于加速模型的收敛速度,尤其在大型数据集上表现出色。
噪声影响: 由于每次只使用少量样本来计算梯度,更新可能受到噪声的影响,导致参数的波动性较大。为了缓解这一问题,通常会使用学习率衰减等策略。
随机梯度下降的更新规则如下:
新参数=旧参数−学习率×梯度新参数=旧参数−学习率×梯度
其中,梯度是损失函数关于模型参数的导数。通过反复迭代,随机梯度下降尝试不断调整参数,以寻找能够最小化损失函数的最优参数。
虽然随机梯度下降具有一些优点,但也具有一些挑战,如参数更新的不稳定性、学习率的选择等。因此,现代优化算法通常是在随机梯度下降的基础上进行改进和扩展,以提高稳定性和收敛速度。
"动量"(Momentum)
"动量"(Momentum)是一种在优化算法中用于加速梯度下降的技术。它通过在参数更新中引入一个惯性的概念,以平滑梯度更新的变化,从而帮助算法更快地收敛到最优解。动量可以应用于随机梯度下降(SGD)等优化算法中。
在动量的概念中,当前步的更新不仅取决于当前的梯度,还考虑了之前步骤的累积梯度信息。这使得参数更新在一个更加平滑的方向上进行,有助于克服局部极小值、避免震荡,并提高收敛速度。
动量的更新规则可以表示为:
(始化速度:在算法开始之前,初始速度通常设置为零)
速度=β×速度+学习率×梯度
新参数=旧参数 - 速度
其中,beta 是一个介于0和1之间的超参数,通常被设置为一个较小的值,如0.9。这个值控制了之前步骤的梯度对当前步骤的影响程度。较大的$\beta$值使得之前的梯度影响更大,从而增加了惯性,使得参数更新更加平滑。
总之,动量技术通过引入惯性的概念,改进了梯度下降算法,帮助加速收敛并提高优化算法的稳定性。
sgd和动量的比较
假设有一个损失函数,其含有两个参数w1、w2(可把这个函数想象成一个二维空间中的曲面),然后将这两个参数作为横纵坐标,可以绘制出参数空间中的损失函数曲线。在这个背景下,我们可以讨论随机梯度下降(SGD)和动量优化算法在这个曲线上的表现。
-
SGD 曲线: 在每次迭代中,SGD 会根据当前点的梯度方向以一定的步长(学习率)朝着梯度下降的方向更新参数。因此,在损失函数曲线上,SGD 的路径可能会呈现出震荡和方向变化较大的情况。特别是在接近最优解时,SGD 可能会在最小值附近来回徘徊。
-
动量曲线: 动量算法引入了速度的概念,使参数更新具有惯性,从而在参数空间中平滑路径。在损失函数曲线上,动量算法的路径可能会更加平滑,因为速度的引入可以减少参数更新的摆动。此外,动量算法可能会更快地穿越一些平坦区域,并更容易跳出局部极小值。
综上所述,对于参数空间中的损失函数曲线,SGD 的路径可能更具有方向变化和震荡,而动量算法的路径可能更加平滑、稳定,且更有可能避免陷入局部最优值。不过,这只是一种直观描述,在实际应用中,效果会受到很多因素的影响,包括学习率、动量系数、初始参数等。在选择优化算法时,还需要根据问题的性质和试验结果来决定哪种算法更适合。
RMSprop
RMSProp(Root Mean Square Propagation)是一种优化算法,用于训练神经网络和深度学习模型。它是基于梯度的优化算法之一,旨在解决随时间变化的梯度大小问题,从而提高优化的稳定性和效果。
RMSProp 通过自适应地调整学习率,使得每个参数的学习率可以根据其梯度历史进行调整。这有助于处理不同参数的梯度变化幅度差异较大的情况,提高算法的收敛性。以下是 RMSProp 的主要特点和更新规则:
自适应学习率: RMSProp 使用一个指数移动平均来跟踪每个参数的梯度平方的历史。这个平方梯度的移动平均可以看作是一个参数的梯度大小的方差估计。然后,算法根据这个估计来自适应地调整参数的学习率,从而更准确地控制参数的更新。
平滑梯度更新: RMSProp 引入了一个衰减因子(通常用 $\beta$ 表示),用于衰减先前的平方梯度估计。这有助于平滑梯度的变化,减少参数更新的摆动,从而提高算法的稳定性。
(其中,$\beta$ 是衰减因子,控制平方梯度移动平均的衰减程度,$\text{学习率}$ 是学习率,$\epsilon$ 是一个小常数,以防止分母为零。)
总之,RMSProp 是一种自适应学习率的优化算法,通过追踪平方梯度的历史来调整参数的学习率,从而提高算法的稳定性和收敛性。它在解决梯度变化幅度不一致问题时表现出色,通常用于神经网络的训练中。
Adam
Adam(Adaptive Moment Estimation)是一种优化算法,结合了动量和自适应学习率的概念,用于训练神经网络和深度学习模型。它在训练过程中自适应地调整参数的学习率,并具有一定的惯性,以提高收敛速度和稳定性。
Adam 算法的特点包括:
自适应学习率: Adam 算法使用了自适应学习率的思想,对不同参数采用不同的学习率。它通过估计梯度的一阶矩(均值)和二阶矩(方差)来调整学习率,从而适应不同参数的变化情况。
动量: 类似于动量算法,Adam 也引入了速度的概念,以一定的惯性更新参数。这有助于减少参数更新的震荡,并加速收敛过程。
偏差校正: 在初始迭代中,一阶和二阶矩的估计可能会存在较大的偏差。为了消除这些偏差,Adam 引入了偏差校正机制,使得估计的一阶和二阶矩能更准确地反映梯度的变化。
超参数控制: Adam 算法具有几个超参数,如学习率、动量系数和衰减因子。这些超参数需要进行调整,以便适应不同的问题和数据。
(其中,$\beta_1$ 和 $\beta_2$ 是一阶和二阶矩的衰减因子,$t$ 是当前迭代的步数,$\epsilon$ 是一个小常数,以防止分母为零。)
Adam 算法的综合性质使其在深度学习模型的训练中具有良好的表现。它综合了动量的平滑性和自适应学习率的优势,使得在不同的问题上能够更快地收敛并获得较好的结果。然而,选择优化算法仍然需要根据具体问题和实验结果进行。