摩登7资讯
NEWS
深度学习常用优化器学习


万丈高楼从地起。我们日常直接使用优化器,但各类优化器有什么不同,各有什么特别,我一直没主动去了解。今天就来学习一下,记录并做笔记。

现在的SGD普遍指的是mini-batch SGD。最简单的优化器,即参数往梯度下降的最快方向更新。
θ ? = l r × g r a d heta -= lr imes grad θ?=lr×grad
梯度下降法一个很明显的问题就是,当batchsize比较小的时候,寻找最优值得速度很慢,因为方向基本呈震荡型。就像是黑暗中摸着手电筒探索道路。 如果batchsize比较小,则优化的方向仅是适合这批样本,而一小部分样本远不能代表数据集的整体分布,所以以这批样本求到的梯度来更新参数,就会出现震荡,而且SGD容易陷入局部极限值点。一个解决办法就是添加动量。

动量来自物理学的运动能量累积。 对于SGD来说,仅凭借当前梯度负方向来更新参数不够全面,那就融合一下上一步的梯度方向。
d e l t a = ? g r a d + m o m e n t u m ? o l d _ g r a d delta = - grad + momentum * old\_grad delta=?grad+momentum?old_grad
θ + = l r × d e l t a heta += lr imes delta θ+=lr×delta
momentum 一般设置为0.8-0.9。 即当前迭代方向,也要参考上一次的方向,用一个小于1的衰减系数融合。

Ada(adaptive)grad。 更新的参数一般是向量或者矩阵,有些参数更新的步长大,有些参数更新的步长短。现在想统一一下步长。learning rate是作用在所有的参数值上的,不能实现为每个参数设置不同的步长的目的。那么该用什么东西描述参数的一种尺度呢,有了一个尺度,我们就可以用尺度衡量参数该走的距离长短。AdaGrad是采用了梯度平方和。
假如某个参数的梯度很大,那么他的梯度和也很大。梯度之和跟之前的梯度加在一起,求个sqrt作为分母,就会让这个参数的梯度变小。
换句话说,梯度大的参数的步长小,梯度小的步长大。
g r a d _ s u m = p r e v _ g r a d _ s u m + g r a d 2 grad\_sum = prev\_grad\_sum + grad^2 grad_sum=prev_grad_sum+grad2
d e l t a = ? g r a d g r a d _ s u m delta = - \frac{grad}{\sqrt {grad\_sum}} delta=?grad_sum ?grad?
θ + = l r × d e l t a heta += lr imes delta θ+=lr×delta

这样的话,参数的梯度大小自身会影响走的步长。实现每个参数比较均匀的更新。
但是AdaGrad有个致命问题。当迭代次数增大之后,因为我们对梯度求得是平方和,则 g r a d _ s u m grad\_sum grad_sum会越来越大。则每个参数最后更新的步长越来越小。则训练速度太缓慢。

AdaGrad的弱点是可以改进的,这就是RMSProp。其实我们只要控制 g r a d _ s u m grad\_sum grad_sum不要太大就行了。因为引入衰减因子。
g r a d _ s u m = p r e v _ g r a d _ s u m × d e c a y + g r a d 2 × ( 1 ? d e c a y ) grad\_sum = prev\_grad\_sum imes decay+ grad^2 imes (1- decay) grad_sum=prev_grad_sum×decay+grad2×(1?decay)
d e l t a = ? g r a d g r a d _ s u m delta = - \frac{grad}{\sqrt {grad\_sum}} delta=?grad_sum ?grad?
θ + = l r × d e l t a heta += lr imes delta θ+=lr×delta
在统计 g r a d _ s u m grad\_sum grad_sum的时候,用decay和(1-decay)作为系数,这样的话,得到的梯度平方和不至于太大。

Adaptive moment Esitmation几乎是最常使用的优化器。它集成了动量和梯度和的两个优点。那么理所应当有两个超参数,beta1, beta2. 分别负责融合动量和梯度和。
m o m e m t = ? g r a d × ( 1 ? b e t a 1 ) + o l d _ g r a d × b e t a 2 momemt = - grad imes (1-beta1) + old\_grad imes beta2 momemt=?grad×(1?beta1)+old_grad×beta2
g r a d _ s u m = ? g r a d 2 × ( 1 ? b e t a 2 ) + p r e v _ g r a d _ s u m × b e t a 2 grad\_sum = -grad^2 imes (1-beta2) + prev\_grad\_sum imes beta2 grad_sum=?grad2×(1?beta2)+prev_grad_sum×beta2
d e l t a = ? m o m e n t g r a d _ s u m delta = - \frac{moment}{\sqrt{grad\_sum}} delta=?grad_sum ?moment?
θ + = d e l t a × l r heta += delta imes lr θ+=delta×lr

Beta1是一阶矩梯度之和(动量之和)的衰减率,通常设置为0.9。 Beta2是二阶矩梯度平方和的衰减率,通常设置为0.999。


上一篇:BIM在建筑施工中的应用
下一篇:抖音与饿了么合作,短视频为何搅动外卖江湖风云?

Copyright © 2012-2018 摩登7-摩登7娱乐-摩登7全球官方站

平台注册入口