优化方法小结

将各类型优化方法总结下方便查阅,大体分为:一阶梯度依赖的,二阶梯度依赖的;不依赖梯度的优化方法。

1)一阶梯度依赖的优化方法

1.1)GD:Gradient Descent

这个很好理解,根据梯度 w f ( w ) 来指导下一步优化方向。
梯度来源于 f 沿着某方向 l = ( e 0 , e 1 , . . . , e i ) 的方向导数: f w | l = f w , l .
其中变化(增长)最快的方向及导数值称为梯度: w f ( w ) = ( f w 0 , f w 1 , . . , f w i )

w = w η w f ( w )

1.2)Moment GD

[带有动量的GD](On the momentum term in gradient descent learning algorithms),其基本思路是,设想如果当前的梯度方向与历史累积的方向相同,是不是可以加大这个方向上的步幅,以加快收敛速度;若震荡的梯度,则是不是可以互相抵消,避免多走弯路,以加快收敛速度。[同向累计,反向抵消]如下, γ = 0.9

{ v t = γ v t 1 + η w w = w v t

另外一种更新方式如下(需要见证下,来自安德鲁的课程):
{ v t = γ v t 1 + ( 1 γ ) w w = w η v t

[ bias correct ]
假设一个时间变量 v t ,如果

v t = γ v t 1 + ( 1 γ ) w t

E [ v t ] = E [ ( 1 γ ) j = 1 t γ t j w j ]

E [ v t ] = E [ w t ] ( 1 γ ) j = 1 t γ t j + ϵ

E [ v t ] = E [ w t ] ( 1 γ t ) + ϵ

得到 v t 的期望值是 w t 的期望的指数衰减值。
若修正 v t = v t 1 γ t E [ v t ] E [ w t ] + ϵ

1.3) NAG

NAG:Nesterov accelerated gradient [A method for unconstrained convex minimization problem with the rate of convergence o(1/k2)]
基本想法是,提前预知下一步的位置是上坡,则减小步幅,提前预支下一步的位置是下坡,则增大步幅。

{ v t = γ v t 1 + η w f ( w γ v t 1 ) w = w v t

1.4) RMSprop

RMSprop GD :root mean square
是Hitton提出的,基本思路是Bias-correct,不过是利用 E [ v ] w 2 的正相关关系,找到梯度的期望来指导当前的参数更新。
假设 v t = γ v t 1 + ( 1 γ ) w 2
E [ v ] = E [ w 2 ] ( 1 γ ) + ϵ

{ v t = γ v t 1 + ( 1 γ ) w 2 w = w η w v t

1.5) Adam

Adam GD:adaptive moment estimation [2015-Adam, A Method for Stochastic Optimization]
结合了moment和RMSP的两者优点,如下:

{ v t = γ 1 v t 1 + ( 1 γ 1 ) w v t = v t 1 γ 1 s t = γ 2 s t 1 + ( 1 γ 2 ) w 2 s t = s t 1 γ 2 w = w η v t s t + ϵ γ 1 = 0.9 ; γ 2 = 0.999

并且在online-learning时,Adam也是收敛的。

1.6) AdaGrad

AdaGrad Descent [ Adaptive Subgradient Methods for Online Learning
and Stochastic Optimization]
基本思路: 自适应学习率,能够对频繁更新的参数采取更小的步幅;对更新不频繁的参数采取更大的步幅。非常适合稀疏数据的学习。其中 G i 表示到update当时为止,所有已计算的梯度的平方和。

w i = w i η G i + ϵ w i

1.7) AdaDelt

AdaDelt GD [ An Adaptive Learning Rate Method]
AdaGrad存在问题:平方和的累和会一直增加下去,导致分母部分无限大,梯度被削弱至非常小,参数不再更新。而AdaDelt则刚好为解决这问题而诞生,借助指数衰减平均 E [ w 2 ] t = γ E [ w 2 ] t 1 + ( 1 γ ) w t 2 的思路来避免所有历史梯度^2的平均加和。
首先参数的增量值 x t , i 用梯度的期望来表示为: x t , i = η E [ w i 2 ] t + ϵ w t , i
然后增量值的期望值也用指数衰减平均表示 E [ x 2 ] t = γ E [ x 2 ] t 1 + ( 1 γ ) x t 2
用梯度的期望,增量值的期望估计(当次的不知道,用前一次的来估计),以及当前梯度来指导学习的方向。

w t , i = w t 1 , i E [ x i 2 ] t 1 + ϵ E [ w i 2 ] t + ϵ w t , i

作者在原文里解释,是用一阶导数去估计二阶导数Hassion矩阵。

补充阅读

AdaMax
Nadam:Nesterov Momentum into Adam
DFP
DFBS
AdamW

估计函数的二阶导数,其实好多方法都是对二阶导数的估计得来的,比如DFP/DFBS/AdaDelt。

2)二阶梯度依赖的优化方法

各种适应性,在有道云笔记上有部分内容。
牛顿下降法
求解 a r g m i n x f ( x ) ,等价于找到 f ( x ) = 0 对应的 x 值。
要想找到函数的零值点,可以根据其泰勒展开 f ( x ) = f ( x k ) + ( x x k ) f ( x k ) 作近似逼近,另f=0,得到 x k + 1 = x k f ( x k ) f ( x k ) ,由于导数是描述增幅的,那么对应的 x k + 1 就相应的比 x k 要更靠近零值点,如下图。


那么回到等价问题上,找到函数 f ( x ) 的零值点,我们对 f ( x ) 在某处 x k 做一阶展开 f ( x ) = f ( x k ) + ( x x k ) f ( x k ) ,于是得到迭代关系 x k + 1 = x k f ( x k ) f ( x k ) 可以不断逼近 f ( x ) 的零值点。

3)不依赖梯度的优化方法

3.1)Gradient Boost

Gradient Boost的梯度方向是由最终label与当前的预测label之间的差距给出的,详细见GB

3.2)Constractive Divergence

对比散度类方法,主要是根据条件随机场的收敛性,可以根据下次采样比当前状态更靠近稳定最优解,来给出优化方向,详细见RBM

梯度相关的trick

1) ReLU等激活函数的各种类型。
2) Gradient Clip,常用在RNN类方法中。
3) Batch Normalize,对所有网络都使用。(Group Normalization, Switchable Normalization等改进的方法)
4) 正则化方法及各种变形改进。(DIN里面有个根据数据对梯度作约束的正则,非常有意思)

未完待续
后续会补充能查到的资料,并且会讲解如何在TF里面实现自定义的Gradient Optimize Operation。

猜你喜欢

转载自blog.csdn.net/yujianmin1990/article/details/78565299