神经网络参数更新方法

来源:互联网 发布:临沂淘宝客服招聘信息 编辑:程序博客网 时间:2024/06/03 13:29

神经网络参数更新方法

SGD及变种

1、普通SGD update

    SGD(Stochastic Gradient Descent)就是最常见的随机梯度下降。

    向着参数的梯度的负方向改变(梯度方向是增加的方向)。


    这里的x可以是权值w也可以是偏置b。

2、Momentum update

    相比于普通SGD,这种方法在深度网络中收敛更好。

    受到物理中的启发:例子的力与势能梯度有相对关系。例子感受到的力,正是损失函数的负梯度。F=ma,负梯度正比于粒的加速度。与普通SGD不同,梯度直接作用于位置,这里用物理的角度来看,梯度直接影响速度,速度再影响位置。


3、Nestrevo Momentum update

    与Momentum稍稍有点不同。对于凸函数具有较强的理论收敛保证,实际中效果比Mnmentum稍好。

    当前参数向量在点x处,从Momentum更新中看v,忽略第二项v变成mu*v。做一个提前量用x_ahead=x+mu*v代替x。


    还可以用另一种形式


每个参数适应学习率方法

    前面的方法对每个参数学习了是固定的,调整学习率是一个耗时的过程。可以使用对每个参数都适应的学习率。

1、Adagrad


    对于大的梯度,会使他的有效学习率减小;对于小的梯度会使他的有效学习率增大。这种方法的一个缺点是,在深度学习中,单调的学习率通常证明太激进,会使学习停止过早。

2、RMSprop

    RMSprop是一种有效,但目前还未公开发布的自适应学习率方法。RMSprop改进Adagrad方法,减小他的激进,使用单调减小学习率。特别的,它使用了梯度平方移动平均值。

    decay_rate是一个超参数,典型值为[0.9, 0.99, 0.999]。
    根据梯度尺度来调整学习率是一个有利均衡的效果,但与Adagrad不同,更新不是单调小。

3、Adam

    Adam是一种最近提出的方法,有点像RMSprop结合momentum。

    简单的更新如下:


    与RMSProp类似,使用smooth版本的梯度m代替原始梯度dx。论文中的推荐值eps=1e-8,belta1=0.9,belta2=0.999。使用推荐值的Adam方法效果RMSprop稍好。但SGD加Nestrevo Momentum也值得使用。完整的Adam方法还包括一个bias校正机制。对前几部m,v设置成0进行补偿。