深度学习优化算法有哪些,实验效果如何?

摘要:深度学习优化算法最耳熟能详的就是GD(Gradient Descend)梯度下降,然后又有一个所谓的SGD(Stochastic Gradient Descend)随机梯度下降,其实还是梯度下降,只不过每次更新梯度不用整个训练集而是训练集中
深度学习优化算法最耳熟能详的就是GD(Gradient Descend)梯度下降,然后又有一个所谓的SGD(Stochastic Gradient Descend)随机梯度下降,其实还是梯度下降,只不过每次更新梯度不用整个训练集而是训练集中的随机样本。梯度下降的好处就是用到了当前迭代的一些性质,以至于总能较快找到驻点。而像遗传算法等智能优化算法,则是基于巨大的计算资源上的。它们并不使用函数特性,通常需要“种群”几乎遍布整个参数空间才能进行有效的优化,更像是一种暴力搜索。而因为神经网络参数量太大,几百万维的参数量不可能让种群达到“密布”(即使每个维度两个“个体”,种群规模也是2的百万次幂),所以神经网络优化通常都用基于梯度下降的算法。   现在,神经网络优化常用的都是梯度下降算法的变体,下面介绍Momentum, RMSProp, Adam这三种最常用的。它们都对梯度下降的某些不足做出了改进。 Momentum   Momentum是动量的意思。它对每次迭代进行平滑处理,以至于不会像GD一样,当梯度很大时一下子跳地太远,在梯度较小时又跳得太少。定义很简单,就比GD多了一步: $V_t = \beta V_{t-1} + (1-\beta) \nabla \theta_t$ $\theta_{t+1} = \theta_t - \eta V_t$   其中$\theta_t$表示第$t$次迭代的参数张量,$\nabla \theta_t$表示关于它的梯度。$\eta$是模型学习率。$\beta$是平滑因子,也就是积累梯度的权重,越大则之前的梯度对当前影响越大,越小则此次迭代的梯度对当前影响越大,而等于0时Momentum就退化成GD了。$V_{t-1}$表示第$t$步迭代以前累积的梯度动量。   相较GD,加上平滑的概念以后,Momentum会更加注重优化的全局性,这是因为它每次迭代都取决于之前所有梯度的加权和。拿跑步来举例,GD的每一步都是当前地面坡度最陡的方向,而Momentum则是添加了惯性,每一步都将跑步速度向坡度最陡的方向调整。 RMSProp   RMSProp改进了GD的摆动幅度过大的问题,从而加快收敛速度。迭代式如下: $\begin{gather}S_t = \beta S_{t-1} + (1-\beta)( \nabla \theta_t)^2 \label{}\end{gather}$ $\begin{gather}\displaystyle \theta_{t+1} = \theta_t - \eta \frac{\nabla \theta_t}{\sqrt{S_t}+\varepsilon}\label{}\end{gather}$   $(1)$式中的$( \nabla \theta_t)^2$和$(2)$式中的分式分别表示按元素进行的平方操作和除法操作。$(2)$式中的$\varepsilon$是为了防止除数为0而设置的较小数,它与张量$\sqrt{S_t}$执行的是按元素进行的加法。   按迭代式可以看出,RMSProp对梯度的方向进行了较弱的规范化,让梯度的每一个元素向单位值1或-1靠近,这样一来,优化时的摆动幅度就会减小一些。而又为了不至于靠得太近而直接变成全1和-1,用于规范化的是之前梯度平方的累积量而不是直接用当前梯度的平方。因此,如果$\beta=0$,那就是用当前梯度的平方来规范化,每次更新方向的每个元素值就都是1和-1了。下面来分析各种情况。   以下是分别用GD、Momentum、RMSProp对二元函数$z = x^2+10y^2$进行优化的例子,并且将numpy与pytorch方式都实现了一遍加以比较。初始点位于$(250,-150)$和$(-250,150)$,学习率分别为$0.02,0.02,20$,Momentum和RMSProp的$\beta$都为0.9。以函数值小于1为迭代结束的判断条件。图例中显示了迭代次数,如下:   可以看出RMSProp少走了很多弯路,路线更平缓。Momentum虽然比GD多走很多弯路,但是迭代的次数还是有所下降的。 Adam   以上介绍的两个优化算法在不同的起始位置似乎各有优缺点,而Adam就是将Momentum和RMSProp的优势结合起来的算法。
阅读全文