您的位置:首页 > 其它

机器学习之优化算法学习总结

2018-01-29 20:45 387 查看

优化算法演化历程

机器学习和深度学习中使用到的优化算法的演化历程如下:

SGD –> Momentum –> Nesterov –> Adagrad –> Adadelta –> Adam –> Nadam

表1 优化算法演化过程及其原因表1 优化算法演化过程及其原因

演化过程原因
SGD –> Momentum由于SGD在优化过程中容易产生震荡,为减小震荡,Momentum在梯度下降过程中引入了动量,使之具有惯性
Momentum –> Nesterov对梯度项进行矫正,使梯度下降方向由积累的动量和假设走到下一步的梯度两部分决定的
Nesterov –> AdagradAdagrad中引入二阶动量,使之能够自适应调节学习率
Adagrad –> Adadelta由于Adagrad 使用了之前所有梯度的平方,会导致训练到后面梯度为0,因此,在Adadelta中只用前面一段时间的下降梯度的配方
Adadelta –> Adam在梯度更新中,使用了动量,并且能够自适应调节学习率
Adam –> Nadam引入了Nesterov 动量项

各优化算法的公式与特点

SGD

公式:

θ=θ−η∇θJ(θ)θ=θ−η∇θJ(θ)

特点:

仅由当前所在的梯度来决定参数如何更新

梯度下降过程中容易出现震荡

Momentum

公式:

mt=μ∗mt−1+η∇θJ(θ)mt=μ∗mt−1+η∇θJ(θ)

θt=θt−1−mtθt=θt−1−mt

特点:

引入动量,减小SGD在梯度下降过程中的震荡

梯度下降过程中,之前的动量也对当前运动有影响

Nesterov

公式:

mt=μ∗mt−1+η∇θJ(θ−μ∗mt−1)mt=μ∗mt−1+η∇θJ(θ−μ∗mt−1)

θt=θt−1−mtθt=θt−1−mt

特点:

在Momentum优化算法的基础上,对当前梯度值进行矫正

矫正方式为,假设参数往积累的动量方向走了一步时所在位置的梯度作为当前的梯度值

Adagrad

公式:

gt=∇θJ(θ)gt=∇θJ(θ)

nt=nt−1+(gt)2nt=nt−1+(gt)2

θt=θt−1−ηnt+ϵ−−−−−√∗gtθt=θt−1−ηnt+ϵ∗gt

特点:

适合用于稀疏梯度

前期梯度下降较快,后期梯度下降较慢

具有自适应学习率

训练后期,由于梯度累计较大,会使训练提前结束

Adadelta

公式:

gt=∇θJ(θ)gt=∇θJ(θ)

nt=v∗nt−1+(1−v)∗(gt)2nt=v∗nt−1+(1−v)∗(gt)2

θt=θt−1−ηnt+ϵ−−−−−√∗gtθt=θt−1−ηnt+ϵ∗gt

特点:

在Adagrad基础上,减小提前结束训练的风险

Adam

公式:

mt=μ∗mt−1+(1−μ)∇θJ(θ)mt=μ∗mt−1+(1−μ)∇θJ(θ)

nt=v∗nt−1+(1−v)∗(gt)2nt=v∗nt−1+(1−v)∗(gt)2

mt^=mt1−μtmt^=mt1−μt

nt^=nt1−vtnt^=nt1−vt

θt=θt−1−mt^∗ηnt^+ϵ−−−−−√∗gtθt=θt−1−mt^∗ηnt^+ϵ∗gt

特点:

Adam梯度经过偏置校正后,每一次迭代学习率都有一个固定范围,使得参数比较平稳

结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点

为不同的参数计算不同的自适应学习率

也适用于大多非凸优化问题——适用于大数据集和高维空间

各优化算法的分类

表2 各优化算法的分类表2 各优化算法的分类

梯度修正优化算法
没进入动量,且不具有自适应学习率BGD、SGD
引入动量Momentum、Nesterov
自适应学习率Adagrad、Adadelta、RMSprop
引入动量且自适应学习率Adam、Adamx、Nadam

优化算法使用总结

在不考虑优化算法的使用细节及其技巧的情况下,一般使用Adam

虽然后面的优化算法都是在SGD上改进而来,但是目前很多paper依旧使用SGD

一般在训练时,数据都要进行shuffle

几种优化算法并不一定哪一个绝对好,视模型和数据而定
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: