互联网面试常见问题之一:你知道哪些优化方法?优缺点是什么?

下面博主汇总了常见的深度学习优化方法

深度学习常见的优化方法(Optimizer):发展历程:SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam 

优化算法遵循一个普适框架

定义待优化参数:

深度学习优化器前沿 深度优化算法_面试

 ; 目标函数:

深度学习优化器前沿 深度优化算法_梯度下降_02

 ; 初始学习率:

深度学习优化器前沿 深度优化算法_梯度下降_03

开始迭代优化,对于每个epoch

深度学习优化器前沿 深度优化算法_深度学习_04

:1) 对目标函数求偏导得到当前参数的梯度:

深度学习优化器前沿 深度优化算法_深度学习_05

2) 根据历史梯度计算一阶动量和二阶动量:

深度学习优化器前沿 深度优化算法_算法_06

3) 计算当前时刻的下降梯度:

深度学习优化器前沿 深度优化算法_深度学习_07

4) 根据下降梯度进行参数更新:

深度学习优化器前沿 深度优化算法_深度学习优化器前沿_08

注:所有的优化算法第3,4步都是一致的,区别就体现在第1,2步上

1规梯度下降算法

SGD-Stochastic gradient descent-随机梯度下降:算法每读入一个数据都会立刻计算Loss函数的梯度来更新参数。

深度学习优化器前沿 深度优化算法_梯度下降_09

    

优点:简单方便

缺点:下降速度慢,容易陷入局部最优。

BGD-Batch gradient descent-批梯度下降:算法读取整个数据集之后计算Loss函数的梯度来更新参数   

优点:如果Loss函数为convex,可得到全局最优解。  

缺点:数据处理量大,导致梯度下降慢;不能实时增加实例在线更新;训练占内存

Mini-BGD-Mini-batch gradient descent-小批量梯度下降:算法分别计算小批量的数据集即训练集的子集,来进行梯度下降。 优点:计算效率高而且收敛稳定,是现在深度学习的主流方法

2SGD with Momentum:为了抑制SGD的震荡,SGDM认为梯度下降过程可以加入惯性,引入一阶动量(各个时刻梯度的平均值

深度学习优化器前沿 深度优化算法_深度学习优化器前沿_10

。t时刻的下降方向,不仅由当前位置的梯度方向决定,而且由此前累积的下降方向决定。

优点:在更新方向的时候保留之前的方向,增加稳定性而且还有摆脱局部最优的能力。

3:NAG- Nesterov Accelerated Gradient:防止以上方法困在局部最优。不是直接计算当前位置的梯度方向,而是计算如果按照累积动量走了一步时候的梯度方向

深度学习优化器前沿 深度优化算法_梯度下降_11

,然后再与历史累积动量相结合(与Momentum一致)4:Adagrad-Adaptive gradient-自适应梯度:引入二阶动量(所有梯度值的平方和

深度学习优化器前沿 深度优化算法_面试_12

),改进随机梯度下降算法。以前的算法中,每一个参数都使用相同的学习率。 Adagrad算法能够在训练中自动对learning_rate进行调整

深度学习优化器前沿 深度优化算法_梯度下降_13

,参数更新频率越高,

深度学习优化器前沿 深度优化算法_深度学习_14

越大,参数

深度学习优化器前沿 深度优化算法_梯度下降_03

越小;参数更新频率越低,

深度学习优化器前沿 深度优化算法_深度学习_14

越小,参数

深度学习优化器前沿 深度优化算法_梯度下降_03

越大。    

优点:很适合处理稀疏数据。

缺点:因为

深度学习优化器前沿 深度优化算法_深度学习_14

是单调递增的,会使得学习率单调递减至0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识。5:AdaDelta/RMSprop:(root mean square propagation):改变二阶动量计算方法的策略,和Adagrad的区别在于,用的是所有梯度值的平均值(指数移动平均值大约就是过去一段时间的平均值)

深度学习优化器前沿 深度优化算法_深度学习_19

           

优点:避免了二阶动量持续累积、导致训练过程提前结束的问题了

6:Adam-adaptive moment estimation(Adagrad + Momentum):同时引入一阶动量和二阶动量。SGD的一阶动量:

深度学习优化器前沿 深度优化算法_梯度下降_20

, AdaDelta的二阶动量:

深度学习优化器前沿 深度优化算法_深度学习优化器前沿_21


7.:Nadam- Nesterov+ Adam:

深度学习优化器前沿 深度优化算法_梯度下降_22

深度学习优化器前沿 深度优化算法_深度学习优化器前沿_23

深度学习优化器前沿 深度优化算法_梯度下降_24

注意:β1,β2 是最常见的两个超参数,分别对应于一阶动量和二阶动量,实际使用过程中,参考经验值为

深度学习优化器前沿 深度优化算法_深度学习优化器前沿_25

, 初始化:

深度学习优化器前沿 深度优化算法_梯度下降_26

。初期

深度学习优化器前沿 深度优化算法_梯度下降_27

很容易接近0,为了实现无偏估计,通常进行误差校正:

深度学习优化器前沿 深度优化算法_深度学习优化器前沿_28

深度学习优化器前沿 深度优化算法_深度学习优化器前沿_29

(注:如果上述内容与他人相同属于正常现象,因为知识点都是一样的!有的方法优缺点不全,想进一步了解的请问度娘)

最后希望大家能够取得很好的面试成绩!