数据挖掘-再谈梯度下降优化方法
再谈梯度下降优化方法
在上一篇文章,我们简单的介绍了梯度下降方法和一些简单的优化方法,比如随机梯度下降方法可以对原有的梯度下降方法进行优化和加速,在这个基础上又有小批量梯度下降方法和动量加速梯度下降方法进行优化,防止最后下降的震荡现象,可以更加快速得到最终的稳定最优解。本文要在上次文章的基础上,再介绍一些常见的梯度下降优化方法,也是最近十几年提出的一些方法,因为之前文章提出的动量加速随机梯度下降方法是上世纪60年代提出的,时间比较早,经过这些年深度学习以及机器学习的发展,已经有一些效果更好的优化方法,比如AdaGrad、RMSprop、Adadelta方法,下面我们分别介绍这些方法。
之前文章介绍过随机梯度下降方法,实际上随机梯度下降方法在具体的竞赛和应用中是有缺陷的,因为当参数维度较高的时候,不同的参数收敛程度不同,有些参数收敛的很快、有些的参数收敛的很慢,也就是说到某个阶段的时候,某些参数已经收敛到比较优的状态而另一些参数还没有收敛,这种情况使用随机梯度下降是不理想的,因为随机梯度下降方法是对所有的模型的参数使用相同的下降速度,所以需要使用AdaGrad方法进行优化。该方法的公式如下所示:
我们先看公式的右边,其实形式和随机梯度下降方法有些类似,都是学习率乘以梯度g,但是AdaGrad在分母放了sqrt®+δ ,δ是一个很小的非零数,用以避免分母为0的情况,上面这种形式就是AdaGrad方法的特点,因为这个r就是累计历史梯度的平方和得到的,通过这个累计的梯度平方和,可以使得各个参数的下降速度得以调整,下降的比较快的、收敛的比较稳定的参数就会略微下降,因为这个时候通过分母可以将下降的速率降低到非常小的一个值,而对于下降不多的参数,则会大幅下降。所以从AdaGrad方法就可以发现,该算法的核心思路就是随着不断迭代,整体的学习速度就会变慢,即开始大幅下降、后续小幅下降;下降的快的参数让它慢慢下降、下降的慢的参数让它加速下降。
在上面的AdaGrad梯度下降方法的基础上,又提出了RMSprop方法,该方法和AdaGrad的思路是一样的,但是在计算梯度累计的步骤是通过指数求和的形式来计算的,即最近的梯度权重较大,最开始一些梯度权重较小。它的公式如下所示:
根据公式发现,左边的式子也就是梯度下降的累计方法是指数加权的形式,因为每一次p*r都是代表上一次的梯度累计结果,这种形式可以保证和当前梯度最近的几步的重要性较大,之前的重要性较小。最终也是加上一个非常小的数值δ防止分母变为0,该方法是AdaGrad方法的一种改进,同样都是累计梯度的思想,RMSprop方法更看重最近的几步梯度。
然后还有一个Adadelta方法,该方法是一种自动适应并自动修改学习率的梯度下降方法,基本思路也和AdaGrad方法相同,但是不需要额外设置学习速率η的大小,而是根据当前梯度和当前参数变化之间的互相影响来决定学习速率的。该方法的公式如下所示:
其实公式的含义就是对梯度进行指数累计的加权,也就是第一个式子;然后计算当前参数的变化,就是第二个式子;然后对当前的参数的变化进行指数累计的加权处理,也就是第三个式子;最后得到的结果迭代到新的参数上即可。从公式可以看出,学习率是动态计算的,可以自适应并且调整的,可以在一定程度限制前两种方法学习率跳动的问题。
总的来说,这三种改进方法都是对随机梯度下降方法的改进,但是在不同的使用场景下AdaDelta方法和RMSprop方法各有优势,由于AdaGrad方法和RMSprop方法需要设定学习率这个超参数,即学习率设置的不好会影响下降的效果,而AdaDelta方法是动态计算学习速率的,所以效果会好一点,但是会稍慢一些,因为动态计算学习速率稍微耗时间一些。初学者需要了解各个方法的原理和思路,对于不同的场景使用不同的梯度下降方法,从而更好更快的进行参数收敛找到最优值。