梯度下降算法总结

来源:互联网 发布:android app启动优化 编辑:程序博客网 时间:2024/05/21 06:45

    • 基本梯度下降法
      • 随机梯度下降
      • 批梯度下降法
    • Momentum梯度下降法
    • Nesterov Momentum梯度下降法
    • AdaGrad
    • RMSprop
    • AdaDelta
    • Adam

机器学习中,求解的问题常常变为最优化问题,求解最优化问题,常常使用梯度下降法。梯度下降法的最基本原理是向着最优化点不断靠近。假设最终的Loss函数为

J(θ)=1Ni=1N(hθ(xi)yi)

那么梯度下降的基本形式为

θn+1=θnαJ(θ)

在实践中,根据具体问题,有演变出以下几种

基本梯度下降法

基本梯度下降法,是指在每一次更新参数时,都是通过减去×

这里的通常是指整个训练样本求得的损失函数的梯度,在实践中,每次求得整个训练样本的梯度并不现实,因此有分为随机梯度下降和批梯度下降。

随机梯度下降

随机梯度下降,是指:每次随机抽取一个样本->求得损失函数->计算梯度->执行梯度下降算法。

这里计算的损失函数为一个样本的损失函数

J(θ)=hθ(xi)yi

随机梯度下降法中,噪声比较多,每一步参数更新,不一定是向着最优方向;因此损失函数并不是计算全局最优,样本并不纯净等。

批梯度下降法

随机梯度下降法,每次求得的梯度噪声太大,参数更新许多迭代次数太多。因此有了梯度下降法和随机梯度下降法的折中:批梯度下降法。

批梯度下降法,是每次求得一批样本的损失函数->求梯度->更新参数。

一次样本求梯度,一定程度上减小了噪声;计算量也不至于太大。在实践中常常使用批梯度下降法。

Momentum梯度下降法

通过优化参数找到损失函数最小值,可以看做小球在山上滚动,找到山谷。参数随机初始化,可以看做小球从这个位置以起始速度为0,开始滚动。损失函数的梯度,可以看过施加给小球的力,通过力有了速度,通过速度改变位置。由力学定律F=m×a,梯度与加速度成正比,加速度改变速度,因此可以得到以下更新过程:

v=μvαJ(θ)θn+1=θn+v

μ是动量系数,即一个方向的速度并不是立刻改变,而是速度通过积累一点点改变,μ值得大小,可以通过trian-and-error来确定,实践中常常设为0.9。

动量法,原理在于一个方向的速度可以积累,而且越积累越大;通过不同训练样本求得梯度时,在最优的方向的梯度,始终都会增大最优方向上的速度。因此,可以减少许多震荡。

Nesterov Momentum梯度下降法

Nesterov Momentum梯度下降法是对Momentum梯度下降法的一个改进。在Momentum梯度下降法中,已经求出了μv,那么可以再“向前看一步”,不是求解当前位置的梯度,而是求解θ+μv处的梯度。这个位置虽然不正确,但是要优于当前位置θ

v=μvαJ(θn+μv)θn+1=θn+v

AdaGrad

学习率在梯度下降法中,十分重要,但是所有参数都是用同一个学习率未必合适。例如,有些参数可能已经接近最优,仅仅需要微调,需要比较小的学习率;而有些参数还需要大幅度调动。在这种场景下,AdaGrad,来自适应不同的学习率。

AdaGrad原理也比较简单,它通过记录之前更新每一步更新值的平方,将这些参数累加,以此来调节每一步的学习率。

G=G+J(θn)2θn+1=θnαG+ϵJ(θn)

如果梯度比较大,它会不断减小学习率;相反,则会增大。

缺点是,随着训练进行,学习率会不断减小,最终参数不再更新。

RMSprop

RMSprop是为了解决AdaGrad法中,梯度不断减小问题的。方法很简单,通过设置当前梯度和历史梯度比例,例如

G=γG+(1γ)J(θ)2θn+1=θnαG+ϵJ(θn)

AdaDelta

AdaDelta也是为了解决Adagrad中,学习率不断减小问题的。与Adagrad不同的是,AdaDelta通过设置窗口w,只是用部分时间段内累计的梯度。

存储前w个梯度

E[J(θ)2]t=γE[J(θ)]t1+(1γ)J(θ)2tθn+1=θn+αE[J(θ)2]t+ϵJ(θ)

Adam

Adam考虑了梯度以及梯度的平方,具有AdaGrad和AdaDelta的优点。Adam根据梯度的一阶估计和二阶估计,动态调整学习率。

m=β1×m+(1β1)J(θ)v=β2×v+(1β2)J(θ)2θn+1=θnαnv+ϵ

推荐的超参数为ϵ=1e6,β1=0.9,β2=0.999

0 0