深层神经网络参数调优(四)——adam算法、α衰减与局部最优
(原创内容,转载请注明来源,谢谢)
一、概述
本文主要讲解另外一种思想的梯度下降——adam,并且在此之前介绍动量梯度下降和RMSprop算法作为前置内容。
另外,本文讲到学习速率衰减方式,以及局部最优和鞍点问题等。
二、动量梯度下降法
1、当前问题
mini-batch、随机梯度下降等,在优化每个w和b时,是会优化一个部分最优值,故容易出现抖动,导致优化速度慢。因此可以结合接下来的算法,来加快学习速度。
2、主要思想
将一个斜向的偏导数进行分解,以最优值点为中心的等价图中,分成横向和纵向,并且根据当前点的位置,对于需要快速优化的方向加速优化,对于不需要优化的方向,则减少优化,这样可以降低抖动。
3、公式
具体的做法,即之前提到的指数加权平均,根据这个方式,可以快速算出,每个w以及b当前的平均需要优化的值,再进行优化。
公式有两种,一种是下图左边(把紫色线划掉的部分加上),另一种则是不考虑紫色线划掉的部分。这两种本质上是一样的,区别仅在于对应的α的值不同。
这里需要的参数有两个,一个是之前一直提到的学习速率α,另一个是动量梯度下降需要用到的优化参数β。通常,β取0.9。
从物理上理解公式,可以认为有一个碗,然后球往下滚,V相当于速度,dW相当于加速度,β相当于摩擦力。
下图的公式有误,等式右边的v应该是vd(W-1),即是上一次计算出来的v才可以。b同v。
4、说明
对照动量梯度下降W=W-α*(β*v + (1-β)*dW),与之前梯度下降的W= W– α*dW,会发现动量梯度下降,在优化参数的时候,是会依赖之前的优化过程,相当于有一个“记忆”的功能。之前优化不太对的地方,在本次优化的时候,就会有所调整,直到逼近最优值。
因此,这种方式下,α就可以适当加大,加快学习速率。另外,也可以不用考虑之前说的一开始情况下的偏差,因为多训练几次后,自然就消除偏差了。
三、RMSprop
全称是root meansquare prop,这个公式和思想都和动量梯度下降很相似,只是在公式上有所不同,如下图所示:
下图公式等式右边同样有误,同上面计算动量。
可以看出,其在优化的时候,是用到了平方,而减法的时候是除以根号。这样一缩一放,则可以实现对需要加速学习的方向更加加速,对需要抑制变化的方向更加抑制变化。
上面的ε,是一个很小的数,主要是防止出现除以0的情况,其对算法基本没有影响,可以不用太过在意。
四、Adam算法
1、概述
全称是adaptmoment estimation,即自适应矩估计。
这里说到了“矩”的概念,概率论中矩的含义是:如果一个随机变量 X 服从某个分布,X 的一阶矩是 E(X),也就是样本平均值;X 的二阶矩就是 E(X^2),也就是样本平方的平均值。
根据上面的两种梯度下降,正好动量梯度下降就是一阶矩,而RMS就是二阶矩,故Adam算法把这两个结合了起来。
2、公式
其实际上是结合了动量梯度下降和RMS两种算法,把两个公式合在一起考虑了,具体过程见下面的公式:
3、说明
上面的参数中,需要调整的超参数通常只有α,其他几个超参数基本是确定的。一阶矩的系数β1=0.9,二阶矩的系数β2=0.999,ε=10-8,这些基本都是确定的。
另外,经过很多人的工作,发现Adam算法非常实用,结合随机梯度下降,其优化速度非常快,因此建议使用。
五、学习速率衰减
1、存在问题
对于随机梯度下降、mini-batch,在解决最优值的时候,会经过大量的波动,才会到达最优值,这个是因为其随机性比较大,都是部分最优值,而α如果比较大,有可能在接近最优值的时候,超出了最优值,导致波动。
2、方式
为了避免这个,可以在深度学习过程中,动态调整α。调整方式很多,见下面的第一种方式。
以遍历完成整个数据集,称为1代,即1 epoch。这里α每1代,则衰减一次,对应下面的公式,即参数epoch-num,初始为1,每遍历完成一次所有的数据集,则加一。
下图的公式中,α0是一开始设定的学习速率参数,而decay_rate是衰减率,这两个都是需要设定的参数。
除了上面的公式,还有下面几种方式。其中第一个称为指数衰减法;第二个式子的右边那个,t表示的是迭代mini-batch中的一个批次则衰减一次;第三个式子称为离散衰减。
3、说明
为了更快完成学习,可以进行动态的学习速率衰减。但是在刚开始调试架构的时候,通常是不用这个,直接调试更加直观。后面神经网络的架构稳定后,可以加上这个衰减。
六、局部最优化问题与鞍点
1、局部最优化问题
对于浅层神经网络和普通的机器学习,容易出现局部最优值,这是梯度下降算法固有的问题。
但是对于神经网络,特别是深层神经网络,基本不会出现这个问题。因为需要优化的维度太多了,而这些维度同时都是凹的或者凸的,概率很低。更多情况下是部分凹的部分凸的,导致会出现一个在某些维度下的最小值,称为鞍点。
如下图所示,左边是浅层网络的局部最优值,右边是深层网络会出现的鞍点(ng也是一个灵魂画师。。。。。。)。
2、鞍点的问题
鞍点会导致在一部分维度区域平缓,则偏导数很小,这样会导致优化起来非常慢,可能需要训练很久,才会离开这个鞍点,继续往后优化。
而正因为如此,Adam算法更体现了其优势,其是按维度分解进行优化的,因此可以更快速的对需要优化的方向进行优化。
七、总结
本文围绕深度学习更常用的优化方式——adam算法进行说明。梯度下降的时候,使用mini-batch或随机梯度下降,是为了遍历一次数据集能够优化更多次的w和b;而用adam算法,则是为了纠正mini-batch的部分数据最优值的问题,让其能够抖动的更少,更快速的趋向最优值。因此,这两种方法结合起来,在深度学习中则效率也就更高。
——written by linhxx 2018.02.07