当前位置: 首页 > 科技观察

听说你知道深度学习最常用的学习算法:Adam优化算法?_0

时间:2023-03-13 21:35:37 科技观察

深度学习往往需要大量的时间和计算机资源进行训练,这也是深度学习算法发展的一大原因。虽然我们可以使用分布式并行训练来加速模型的学习,但所需的计算资源并没有减少。只有需要更少资源,让模型收敛更快的优化算法,才能从根本上加快机器的学习速度和效果,Adam算法就是为此而生!Adam优化算法是随机梯度下降算法的扩展,最近在深度学习应用中得到广泛应用,尤其是计算机视觉和自然语言处理等任务。本文分为两部分。第一部分简要介绍了Adam优化算法的特点及其在深度学习中的应用。第二部分从Adam优化算法的原论文出发,对其算法流程和更新规则进行了详细的解释和推导。我们希望读者在阅读完这两部分后,能够理解以下几点:什么是Adam算法,它为优化深度学习模型带来了哪些优势。Adam算法的原理机制是什么,它和相关的AdaGrad、RMSProp方法有什么区别。Adam算法的参数如何调整,其常用的配置参数有哪些。Adam的优化过程和权值更新规则Adam的初始化偏置校正的推导Adam的扩展形式:AdaMaxAdam优化算法是什么?Adam是一种可以替代传统随机梯度下降过程的一阶优化算法,它可以根据训练数据迭代更新神经网络权值。Adam最初是由OpenAI的DiederikKingma和多伦多大学的JimmyBa在2015年提交的ICLR论文(Adam:AMethodforStochasticOptimization)中提出的。本文的两部分都是基于对论文的讨论和解读。首先,该算法称为“Adam”,这不是首字母缩写词或人名。它的名字来源于自适应矩估计(adaptivemomentestimation)。原论文在介绍该算法时,列出了将Adam优化算法应用于非凸优化问题所获得的优势:高效计算的直接实现需要更少的内存和梯度对角缩放的不变性(第二部分将证明)适用于求解具有大规模数据和参数的优化问题适用于非平稳目标适用于解决噪声非常高或梯度稀疏的问题超参数可以直观解释并且基本上只需要少量参数调整的基本机制Adam优化算法Adam算法不同于传统的随机梯度下降。随机梯度下降保持单一的学习率(即alpha)来更新所有的权重,并且学习率在训练过程中不会发生变化。而Adam通过计算梯度的一阶矩估计和二阶矩估计,为不同的参数设计了独立的自适应学习率。Adam算法的提出者将其描述为集合了两种随机梯度下降扩展的优点,即:自适应梯度算法(AdaGrad)为每个参数保留一个学习率以改善稀疏梯度(即自然语言和计算机视觉问题)性能上。均方根传播(RMSProp)基于权重梯度的最近幅度的平均值自适应地保留每个参数的学习率。这意味着该算法在非平稳和在线问题上具有出色的性能。Adam算法同时获得了AdaGrad和RMSProp算法的优点。Adam不仅像RMSProp算法一样根据一阶矩的均值计算自适应参数学习率,还充分利用了梯度的二阶矩的均值(即biasedvariance/uncenteredvariance).具体来说,该算法计算梯度的指数移动平均值,超参数beta1和beta2控制这些移动平均值的衰减率。移动均值的初始值和beta1、beta2值都接近1(推荐值),所以矩估计的偏差接近0。这个偏差是通过先计算一个有偏差的估计,然后计算一个偏差校正估计。如果对具体的实现细节和推导过程感兴趣,可以继续阅读第二部分和原论文。Adam算法的效率Adam是深度学习领域非常流行的算法,因为它可以快速取得好的结果。实证结果证明,Adam算法在实践中具有优异的性能,相对于其他种类的随机优化算法具有很大的优势。在原论文中,作者通过经验证明了Adam算法的收敛性符合理论分析。Adam算法可以应用于MNIST手写字符识别和IMDB情感分析数据集上的优化逻辑回归算法,也可以应用于MNIST数据集上的多层感知器算法和CIFAR上的卷积神经网络-10图像识别数据集网络。他们得出结论:“我们展示了Adam优化算法使用大型模型和数据集解决局部深度学习问题的效率。”多层感知器模型中Adam优化算法与其他优化算法的对比其实Insofar、RMSprop、Adadelta、Adam算法都是比较相似的优化算法,在相似的场景下表现都非常好。但是Adam算法的偏差校正使其在梯度变得稀疏时比RMSprop算法更快更好。Insofar和Adam优化算法基本上是全局最好的选择。同样在CS231n课程中,也推荐Adam算法作为默认的优化算法。虽然Adam算法在实践中优于RMSProp,但我们也可以尝试SGD+Nesterovmomentum作为Adam的替代方案。也就是说,我们通常推荐在深度学习模型中使用Adam算法或SGD+Nesterov动量法。Adam的参数配置alpha:也称为学习率或步长因子,控制权值的更新率(如0.001)。较大的值(比如0.3)会导致学习率更新前更快的初始学习,而较小的值(比如1.0E-5)会让训练收敛到更好的性能。beta1:一阶矩估计的指数衰减率(例如0.9)。beta2:二阶矩估计的指数衰减率(例如0.999)。在稀疏梯度(如NLP或计算机视觉任务)中,此超参数应设置为接近1的数字。epsilon:这个参数是一个很小的数,在实现中用来防止被零除(比如10E-8)。此外,学习率衰减也可以应用于Adam。原论文使用衰减率alpha=alpha/sqrt(t)在逻辑回归的每个epoch(t)中更新。Adam论文建议的参数设置:测试机器学习问题的默认参数设置为:alpha=0.001,beta1=0.9,beta2=0.999和epsilon=10E?8。我们还可以看到流行的深度学习库都采用了论文推荐的参数作为默认设置。TensorFlow:learning_rate=0.001,beta1=0.9,beta2=0.999,epsilon=1e-08。Keras:lr=0.001,beta_1=0.9,beta_2=0.999,epsilon=1e-08,衰减=0.0。块:learning_rate=0.002,beta1=0.9,beta2=0.999,epsilon=1e-08,decay_factor=1。千层面:learning_rate=0.001,beta1=0.9,beta2=0.999,epsilon=1e-08Caffe:learning_rate=0.001,beta1=0.9,beta2=0.999,epsilon=1e-08MxNet:learning_rate=0.001,beta1=0.9,beta2=0.999,epsilon=1e-8Torch:learning_rate=0.001,beta1=0.9,beta2=0.999,epsilon=1e-8在***部分,我们讨论了深度学习中Adam优化算法的基本特点和原理:Adam是一种用于替代深度学习模型中的随机梯度下降的优化算法。Adam结合了AdaGrad和RMSProp算法的最佳性能,它仍然可以提供解决稀疏梯度和噪声问题的优化方法。Adam的调参比较简单,默认参数就可以解决大部分问题。在接下来的第二部分,我们可以从原论文出发具体展开Adam算法的流程和更新规则。论文:Adam:AMethodforStochasticOptimization我们提出了Adam算法,这是一种基于自适应低阶矩估计对随机目标函数执行一阶梯度优化的算法。Adam算法实现简单,计算效率高,内存要求低。Adam算法梯度的对角线缩放是不变的,因此非常适合解决具有大规模数据或参数的问题。该算法也适用于解决噪声大、梯度稀疏的非平稳问题。超参数是直观可解释的,只需要很小的调整。本文还讨论了Adam算法和其他一些类似的算法。我们分析了Adam算法的理论收敛性,并给出了收敛速度的范围。我们证明收敛速度在线性凸优化框架下达到最高。实证结果还表明,Adam算法实际上可与其他随机优化方法相媲美。***,我们讨论了AdaMax,它是Adam基于无穷范数的变体。上述算法中提到,在确定了参数α、β1、β2和随机目标函数f(θ)后,我们需要对参数向量、一阶矩向量、二阶矩向量和时间步进行初始化。然后当参数θ不收敛时循环迭代更新各个部分。即在时间步t上加1,更新目标函数的梯度为该时间步的参数θ,更新偏差的一阶矩估计和二阶原始矩估计,然后计算偏差校正的一阶矩估计和偏差校正的二阶矩估计,然后用上面计算的值更新模型的参数θ。2.算法上面的伪代码展示了Adam算法的基本步骤。假设f(θ)是一个有噪声的目标函数:即一个关于参数θ可微的随机标量函数。我们感兴趣的是如何降低这个函数的期望值,即f对于不同参数θ的期望值E[f(θ)]。其中f1(θ),...,,fT(θ)表示后续时间步长1,...,T的随机函数值。这里的随机性来自对随机子样本(小批量)的评估和函数的固有噪声。并且表示ft(θ)相对于θ的梯度,即ft在实际步长t处相对于θ的偏导向量。该算法更新梯度的指数移动平均值(mt)和平方梯度(vt),而参数β1,β2∈[0,1)控制这些移动平均值的指数衰减率。移动均值本身是使用梯度的第一个矩(均值)和第二个原始矩(有偏方差)来估计的。然而,由于这些移动均值被初始化为0向量,矩估计可能会偏向0,尤其是在初始时间步并且衰减率非常小(即β接近1)时。但好消息是初始化偏差很容易被抵消,因此我们可以获得mthat和vthat的偏差校正估计。注意,可以通过改变计算顺序来提高算法的效率,例如,将伪代码的三行循环语句替换为如下两条:2.1Adam的更新规则Adam算法更新规则的一个重要特点是它将被仔细选择步长的大小。假设ε=0,时间步t和参数空间中的有效下降步长有两个有效下降步长的上界:即在这种情况下,有效步长的上界满足和在其他情况下满足|Δt|≤α。第一种情况只能发生在极其稀疏的情况下:即除了当前时间步外,梯度全部为零。而在不太稀疏的情况下,有效步长会变小。那时,我们有,所以我们可以得到上界|Δt|<α。在更一般的情况下,由于|E[g]/pE[g^2]|≤1,我们有。每个时间步参数空间中有效步长的大小近似受步长因子α的限制,即。这可以理解为在当前参数值下确定了一个置信区域,因此比当前梯度估计没有提供足够信息要好。这使得提前知道α的正确范围变得相对简单。对于许多机器学习模型,我们知道一个好的最佳状态是在参数空间中的一组域上具有极高概率的状态。这并不少见,例如我们可以对参数进行先验分布。因为α决定了参数空间(即上确界)有效步长的大小,我们往往可以推断出正确的α大小,也可以从θ0经过一定的迭代次数达到最优解。我们可以称之为信噪比(signal-to-noiseratio/SNR)。如果SNR值较小,则有效步长Δt将接近于0,目标函数也将收敛于极值。这是一个非常理想的属性,因为更小的SNR意味着算法对方向是否对应于真正的梯度方向有更多的不确定性。比如SNR值在最优解附近趋于0,那么参数空间中就会有一个更小的有效步长:一种自动退火的形式。有效步长Δt仍然是梯度缩放的不变量。如果我们用factorc重新缩放(rescaling)梯度g,相当于rescaling了factorc和factorc^2scaling,同时在计算信噪比的时候,缩放factoroffset:3InitializationBiasCorrection如本文第二部分的算法所述,Adam使用了初始化偏差校正项。这部分会从二阶矩估计推导这个偏差校正项,一阶矩估计的推导完全类似。首先,我们可以得到随机目标函数f的梯度,然后我们希望利用梯度平方(squaredgradient)的指数移动平均和衰减率β2来估计它的二阶原始矩(有偏方差)。设g1,...,gT是时间步长序列上的梯度,其中每个梯度都服从一个潜在的梯度分布gt~p(gt)。现在我们初始化指数移动平均v0=0(零向量),指数移动平均在时间步t的更新可以表示为:其中gt^2表示Hadamard乘积gt⊙gt,它是与相应的元素。类似地,我们可以将其重写为仅包含之前所有时间步长的梯度和衰减率的函数,即消除v:我们想知道时间步长t的指数移动均值的期望值E[vt]与真实值的关系secondmoment,因此我们可以校正这两个量之间的偏差。接下来,我们同时求式(1)的左右两边,即:如果实二阶矩E[g2i]是静态的(平稳的),则ζ=0。否则ζ可以保持在一个较小的值,因为我们应该选择指数衰减率β1以便指数移动平均分配给梯度的权重很小。因此,将均值初始化为零向量会导致仅保留(1?βt^2)项。因此,我们除以算法1中的ζ项来校正初始化偏差。在稀疏矩阵中,为了获得可靠的二阶矩估计,我们需要选择较小的β2并在多个梯度上进行平均。然而,正是β2的这个小值导致缺乏初始化偏差校正,因此初始化步长过大。4.收敛性分析本文使用Zinkevich2003提出的在线学习框架对Adam算法的收敛性进行分析。5.相关研究工作与Adam算法直接相关的优化方法有RMSProp(Tieleman&Hinton,2012;Graves,2013)和AdaGrad(Duchieetal.,2011)。6实验图1:在MNIST图像集和IMDB电影评论数据集上使用10,000个词袋(BoW)特征向量训练具有负对数似然的逻辑回归。图2:在MNIST图像数据集上训练多层神经网络。(a)该图是使用dropout随机正则化的神经网络。(b)该图是使用确定性损失函数的神经网络。图3:卷积神经网络的训练损失。左图显示前三个epoch的训练损失,右图显示所有45个epoch的训练损失。图4:变分自动编码器(VAE)中带偏差校正项(红色)和不带偏差校正项(绿色)的损失比较。7Extension7.1ADAMAX在Adam中,单个权重的更新规则是将其梯度缩放成与当前和过去梯度的L^2范数(标量)成反比。并且我们可以将基于L^2范数的更新规则推广到基于L^p范数的更新规则。尽管对于较大的p值,这种变体在数值上变得不稳定,但在特殊情况下,我们让p→∞导致极其稳定和简单的算法(参见算法2)。下面推导这个算法,在使用L^p范数的情况下,t时刻的步长与vt^(1/p)成反比。请注意,这里的衰减项等效于β2^p,而不是β2。现在令p→∞,然后定义:这个表达式对应一个极其简单的迭代公式:其中初值u0=0。请注意,这非常方便,在这种情况下我们不需要修复初始化偏差。同样,AdaMax参数更新的量级比Adam简单,即|Δt|≤α。