adam2015.pdf
什么是Adam Optimizer是对SGD的扩展,可以代替经典的随机梯度下降法来更有效地更新网络权重。 请注意,Adam这个名字并不是首字母缩写词,实际上,作者(OpenAI的Diederik P. Kingma和多伦多大学的Jimmy Lei Ba)在论文中指出,该论文首次在ICLR 2015上作为会议论文发表,标题为Adam: A method for Stochastic Optimization, that the name is derived from adaptive moment estimation. Adam Optimizer是深度学习中的一种优化算法,由Diederik P. Kingma和Jimmy Lei Ba在2015年的ICLR会议上首次提出。这个名称来源于“Adaptive Moment Estimation”,并非首字母缩写。Adam算法旨在解决随机梯度下降法(SGD)的一些局限性,提供更有效的网络权重更新策略。 在传统的随机梯度下降法中,每次迭代都会根据整个数据集的梯度更新权重,这在大规模数据集上效率较低。相反,Adam采用小批量梯度,以降低计算成本并提高收敛速度。它结合了动量(Momentum)和RMSProp两种优化技术的优点,能够更好地适应不同参数的学习率,并且对噪声和稀疏梯度具有良好的鲁棒性。 Adam算法的关键在于两个时间加权移动平均估计:第一阶矩估计(即梯度的均值,记为m)和第二阶矩估计(即梯度平方的均值,记为v)。这两个估计分别用于追踪梯度的瞬时平均值和平方平均值,以适应不同的学习率。Adam通过以下公式进行权重更新: 1. 初始化m和v为0。 2. 对于每个训练步骤t: - 计算梯度g_t。 - 更新m_t = β1 * m_{t-1} + (1 - β1) * g_t,其中β1是第一阶矩的衰减系数,通常取0.9。 - 更新v_t = β2 * v_{t-1} + (1 - β2) * g_t^2,其中β2是第二阶矩的衰减系数,通常取0.999。 - 修正m_t和v_t以防止初期偏置(由于β1和β2接近1导致的累积误差):m_t_hat = m_t / (1 - β1^t),v_t_hat = v_t / (1 - β2^t)。 - 使用学习率η(通常需要调整)和修正后的m_t_hat和v_t_hat进行权重更新:w = w - η * m_t_hat / (√(v_t_hat) + ε),其中ε是一个小常数,防止除以零。 Adam算法的超参数简单直观,通常不需要大量调整。β1和β2控制了过去梯度的权重,而ε影响了权重更新的稳定性。尽管如此,理论上的收敛性分析表明,Adam在在线凸优化框架下的收敛速率有界,与其他最优算法的性能相当。 在实践中,Adam表现出色,特别是在深度学习模型的训练中,它通常比其他随机优化方法(如SGD、RMSProp或Momentum)效果更好。此外,还有Adam的一个变体AdaMax,它基于无穷范数,适用于需要更稳定学习过程的情况。 Adam Optimizer是深度学习领域中一个强大且灵活的优化工具,它的出现显著改善了大型数据集和参数问题的训练效率,同时也适应了非平稳目标函数和噪声或稀疏梯度问题。