六、优化算法
1、Mini—batch梯度下降法(Mini-batch gradient descent)
Mini-batch梯度下降是梯度下降的一种变体,广泛应用于机器学习中,特别是在神经网络的训练中。它在批量梯度下降(Batch Gradient Descent)和随机梯度下降(Stochastic Gradient Descent,SGD)之间取得了平衡。
- 批量梯度下降:每次更新权重时,使用整个训练集进行计算。给出较精确的梯度估计,但计算量大。
- 随机梯度下降:每次只使用一个训练样本进行权重更新。它的计算速度快,但由于每次只考虑一个样本,梯度估计较不稳定,容易导致震荡。
Mini-batch梯度下降介于两者之间。它将训练数据分成小批次,每个批次包含多个样本(但不是所有样本)。通过使用小批次的数据来计算梯度并更新权重,它能有效减少震荡,同时加快计算速度,因此被广泛使用。
Mini-batch的大小可以调节,如果样本数量为1,那就是SGD。样本数量为全部样本,那就是BGD。如果总体样本数量m不太大时,例如m<2000,建议直接使用Batch gradient descent。然后,如果总体样本数量m很大时,建议将样本分成许多mini-batches。推荐常用的mini-batch size为64,128,256,512(取2的幂次方)。
2、指数加权平均(Exponentially weighted averages)
指数加权平均(EWA)是一种对历史数据进行加权求平均的方法。EWA对最近的数据赋予较大的权重,而对较早的数据赋予较小的权重。它作为一种有效的平滑技术,能够在深度学习中(常用于优化算法以及损失函数中)减少噪声,帮助加快收敛。它通过平衡新数据与历史数据,为优化算法和模型评估提供了更稳定的估计。在训练过程中,EWA能有效减小参数波动,提升模型性能。
指数加权平均数公式的好处之一在于,它占用极少内存,基本上只占用一行代码,然后把最新数据代入公式,不断覆盖就可以了,当我们计算多个变量的平均值,从计算和内存效率来说,这是一个有效的方法,所以在机器学习中会经常使用。
3、指数加权平均中的偏差修正(初期阶段)
在深度学习中,使用指数加权平均(EWA)时,特别是在优化算法如Adam中,由于在初始阶段累积的历史数据较少,EWA值会偏向于零。这种现象被称为偏差问题。为了解决这个问题,我们可以通过偏差修正(Bias Correction)来补偿初期累积数据不足造成的偏差。具体公式为:
偏差修正通过补偿初期EWA计算中的偏差,确保在训练的早期阶段可以得到更准确的梯度估计。这对深度学习中的优化算法(如Adam)至关重要,能够加快初期的收敛速度,改善模型的训练效果。
4、动量梯度下降法(Gradient descent with momentum)
动量梯度下降法是优化算法的一种改进方法,旨在加快梯度下降的收敛速度并减少震荡现象。相比于普通的梯度下降法,动量法在更新过程中引入了过去梯度的动量,把以前梯度的方向存储在变量V中,从形式上讲,这将是前面的梯度的指数加权平均值。这样可以避免路径上的局部振荡并使模型在最小值附近更快收敛。
动量梯度下降法法能更好地处理深度学习中复杂的损失函数曲面,尤其是那些存在鞍点、局部平坦区域的情况。
5、RMSprop
RMSprop(Root Mean Square Propagation)是深度学习中常用的一种自适应学习率优化算法,它通过调整每个参数的学习率来加速收敛,并有效避免梯度消失或梯度爆炸等问题。
RMSprop 的主要思想是对每个参数的梯度平方进行指数加权平均,以自适应地调整学习率,从而控制更新步长。这样可以避免梯度过大导致的学习率骤降问题,广泛应用于深度学习模型的训练,尤其在面对非平稳目标和复杂损失函数时表现出色。
6、Adam优化算法(Adam optimization algorithm)
Adam优化算法是深度学习中最常用的优化算法之一。它结合了动量梯度下降法和RMSprop的优点,通过对梯度的一阶动量(梯度平均值)和二阶动量(梯度方差)进行自适应调整,自动适应不同参数的学习率,从而实现了更快、更稳定的收敛效果。
通过以下几个步骤进行参数更新:
Adam的缺点:
- 可能过拟合:由于Adam会根据梯度的历史信息调整学习率,如果不小心选择过大的学习率,可能会导致模型过拟合。
- 不总是收敛到最优:尽管Adam通常表现良好,但在某些情况下,它的自适应学习率可能会导致收敛到次优解,而不是全局最优。
- 超参数调节依赖:Adam虽然对超参数比较不敏感,但依然需要合理的超参数调节,尤其是学习率的设置对于不同问题仍然至关重要。
7、学习率衰减
加快学习算法的一个办法就是随时间慢慢减少学习率,我们将之称为学习率衰减。初期使用较大的学习率可以帮助模型快速接近最优解,而在接近最优解时,逐步降低学习率可以让模型更精细地调整,避免错过全局最优点或出现震荡。