深度学习优化器总结

深度学习(一般指深度神经网络DNN)有几个关键的要素:训练集,网络结构,损失函数(目标函数),优化方法。这里记录一下优化方法相关知识点吧。

1. why using optimizer?

训练DNN时,我们的目标是更新网络参数以使得损失函数最小化,optimizer就是更新参数的方法。不同的optimizer都遵循一个基本原则:

W = W- \eta \frac{\partial J}{\partial W}

\eta是学习率,也就是每次参数更新的程度。根据是否改变学习率,可以将optimizer分为两大派别。

2. 学习率固定的optimizer

1) BGD:Batch gradient descent,即在整个训练集上forward和backward一次,然后更新一次参数。缺点:收敛速度慢,大量重复计算。

2) SGD:Stochastic gradient descent,即在每一个训练样本上forward和backward一次,然后更新一次参数。优点:收敛速度快;缺点:波动大。

3) mini-batch SGD:将训练集分为小的批次(batch),在每一个批次上forward和backward一次,然后更新一次参数。中和了前两个。一般所说的SGD即为mini-batch SGD。

4) momentum SGD 动量

更新当前参数时既考虑当前梯度,又考虑之前的梯度(称之为动量)。

\\ g = \frac{\partial J}{\partial W} \\ v = \alpha v - \eta g\\ W = W + v

5) Nesterov SGD 牛顿动量: 

添加了校正因子的momentum, 即先用旧的动量更新一遍参数,然后再依据momentum的流程走。

\\\\ g = \frac{\partial J}{\partial W} \\ W = W + \alpha V\\ V = \alpha V - \eta g\\ W = W + V

上述两种动量方法都加速了学习速率,牛顿法添加了校正因子,进一步优化了原始动量方法。

3. 改变学习率的optimizer

上述方法学习率均固定,然而选择学习率又是很困难的,太小会使得收敛速度太慢,训练花费时间太长,太大又会产生波动(可能会跨过最优点)。可以参考下面两张图:

1) AdaGrad SGD:

每次迭代都会改变学习率,其目的是在平缓的地方使用大学习率,在陡峭的地方使用小学习率,使得收敛速度快的同时防止波动。r 是更新学习率时用的,由公式可知,越平缓,梯度g越小,r越小,则学习率增大(实现平缓处用大梯度)。\sigma为一个小常数,为了防止分母为0。

其中学习率的改变取决于梯度平方的累积(梯度累积为指数累积)(第二个公式)。

\\ g = \frac{\partial J}{\partial W}\\ r = r + g\cdot g\\ \eta = \frac{\eta}{\sigma + \sqrt{r}}\\ W = W - \eta\cdot g

2) RMSProp SGD:

与AdaGrad类似,改进梯度累积为指数衰减的移动平均,对非凸函数友好。\rho为衰减指数,指的是对于遥远的过去信息使用量较小。

\\ r = \rho r + (1-\rho )g\cdot g

3) RMSProp + Nesterov

RMSProp也可以结合动量,既使用了动量又改变了学习率,从两个方面改进优化算法。公式如下,红色部分是RMSProp梯度衰减累积部分,黑色是牛顿动量部分。

\\ W = W + \alpha V \\ g = \frac{\partial J}{\partial W} \\ {\color{Red} r = \rho r + (1-\rho) g \cdot g }\\ {\color{Red} \eta = \frac{\eta}{\sigma+\sqrt{r}} }\\ V = \alpha V - \eta g \\ W = W + V

4) Adam SGD (Momentum + RMSProp):

结合了momentum和RMSProp,同时也引入了修正项(即衰减的指数梯度累积,和衰减的动量累积)

\\ g = \frac{\partial J}{\partial W} \\ v = \rho_1 v + (1- \rho_1)g \\ r = \rho_2 r + (1-\rho_2)g\cdot g \\ {\color{Green}\hat{v} = \frac{v}{1- \rho_1^{2}} } \\ {\color{Green} \hat{r} = \frac{r}{1- \rho_2^{2}} } \\ \eta = \frac{\eta}{\sigma + \sqrt{\hat{r}}} \\ W = W - \eta \hat{v}

一般来说,使用动量且改变学习率,会使得收敛加速且减少波动,因此,adam SGD较为流行。

猜你喜欢

转载自blog.csdn.net/u013166817/article/details/83375158