您的位置:首页 > 理论基础 > 计算机网络

神经网络各优化方法

2017-12-14 10:44 134 查看

什么是优化方法

  优化方法,是通过某种训练模式最小化误差(损失)函数的算法。

  损失函数度量基于模型参数的模型预测值与真实值之间的偏差程度,在神经网络中是基于w(权重)和b(偏置)的函数。我们通过优化方法更新模型参数,从而让模型预测值更符合预期;

  权重更新的快慢由学习率 lr 决定,当 lr 过大时,会导致 loss 提高; 当 lr 较大时, loss 无法收敛; 当 lr 较小时,loss 收敛慢;故一般使用较大的 lr 开始训练,随着迭代次数的增加,减小学习率 lr。下面使用 α 表示学习率 lr 。

  优化的目的当然最好是可以使 loss 达到全局最小点,但由于模型可能是非凸的,所以达到较好的局部最小点也是我们的选择。

优化方法可以分为两类:

一阶优化方法

  这种优化方法通过计算导数dE/dw(误差函数对权重的导数)得到该权重最佳减小方向,从而优化模型;在多变量的情况下,该方法被扩展为梯度,所以优化方法也是基于梯度下降的方法,最基础的方法也是梯度下降。

二阶优化方法

  二阶优化方法使用二阶导数(Hessian方法)来最小化误差函数。由于二阶导数的计算代价太高,所以一般不会使用二阶优化方法。

固定学习率的优化方法

梯度下降

  最原始的梯度下降是一次训练所有数据集样本,得到其平均损失函数,然后计算其梯度。其权重的更新方式为: wi=wi−α∂E(W,B,X,Y)∂wi

  一次训练所有训练集样本带来的问题是训练速度很慢,且可能导致内存溢出。

SGD

  SGD(Stochastic gradient descent),随机梯度下降。最简单的随机梯度下降是每次对一个训练样本进行训练,其效果和梯度下降差不多,但训练的速度更快。随机梯度下降的参数更新的很频繁,所以其参数之间会具有高方差,损失函数会波动,可能不会收敛到最小值(但也在最小值附近)。其权重更新方式为:wi=wi−α∂E(W,B,x,y)∂wi

Mini Batch

  现在一般称批梯度下降(Mini Batch Gradient Descent)为SGD,其使用一小批数据集(m个独立同分布的数据样本)作为一次训练的对象,该处理初步解决了频繁的参数更新问题。Mini Batch 是后面几个改进方法的基础。

  在我们选择批量 m 的大小时,我们一般使用 2 的某个幂作为m的选择(一般为16~256),这样会运行得更快。其权重更新方式为g=1m∑im∂E(W,B,x,y)∂wiwi=wi−αg

  SGD算法在遇到鞍点(大概就是每个参数想走的地方不一样)时,存在难以逃脱的问题。这种问题称为 Hessian 矩阵病态条件问题。

Momentum(动量)

  动量方法可以用来解决 Hessian 矩阵病态条件问题,其方法是在梯度更新时参考上一次梯度的方向,表现形式为:g=1m∑im∂E(W,B,x,y)∂wi vt=βvt−1−αg wi=wi+vt

  直观来说,就是当目前的方向与原先的方向相反,借鉴之前的梯度,就会减小其权重更新振荡的幅度,从而加快收敛;当目前的方向与原先方向相同,则加快其收敛速度。若梯度方向都大致相似,其收敛速度的加快与参数 β 的关系为:vt−βvt−1=−αg v=α|g|1−β

  就是如果 β 为 0.99, 则其收敛速度是SGD的 100倍。

  通过累计历史梯度,可能可以逃出连续的驻点。

  但动量的问题在于,如果动量过高,可能会完全越过最小值。

Nesterov

  Nesterov, 牛顿动量是Momentum的变种,该方法有机会解决动量方法越过最小值的问题。其改进点在于在计算梯度前,先用当前速度 v(t-1) 更新一次参数,再用更新后的临时参数计算梯度。其表现形式为:wi=wi+αvt−1 g=1m∑im∂E(W,B,x,y)∂wi vt=βvt−1−αg wi=wi+vt

  该方法对于参数的更新更敏感,也能减少SGD方法的频繁振荡问题,也不会最小值,相当于加了矫正因子的Momentum。

自适应参数的优化方法

  相同学习率并不适用于所有的参数更新。如果训练数据很稀疏,且特征频率差异大,则更新的幅度不应该一样。对于很少出现的特征,应该使用更大的学习率。

AdaGrad

  AdaGrad方法通过参数来调整适合的学习率,对小频率参数进行大幅度更新,对大频率参数进行小幅度更新。其具体做法为:先设置一个全局学习率,在迭代开始之后,该参数的学习率会除以历史梯度平方和的平方根,从而使每个参数的学习率不同。该方法的表现形式为:g=1m∑im∂E(W,B,x,y)∂wi r=r+g2 wi=wi−αγ+r−−−−√g

  AdaGrad方法的好处为不用手动调整学习率。但由于r一直在变大,所以学习率会越来越小,所以模型的学习能力和收敛能力会越来越低,需要很长的时间来训练。所以AdaGrad较为适用于稀疏数据集的训练。

AdaDelta

  AdaDelta 方法是 AdaGrad 方法的改进,相对于 AdaGrad 方法完全累计先前所有的梯度平方和, AdaDelta 方法使用一个衰减系数 ω 来“忘记”太过久远的梯度平方和,从而避免学习率无限减小的问题。该方法的表现形式为:g=1m∑im∂E(W,B,x,y)∂wi r=ωr+(1−ω)g2 wi=wi−αγ+r−−−−√g

 &emspAdaDelta 方法结合 Nesterov 方法的使用如下:wi=wi+αvt−1 g=1m∑im∂E(W,B,x,y)∂wi r=ωr+(1−ω)g2 vt=βvt−1−αγ+r−−−−√g wi=wi+vt

  AdaDelta和Momentum结合之后,就可以不用设置全局学习率了。

Adam

  Adam(Adaptive Moment Estimation,自适应矩估计)算法,该方法实际上是修正后的 Momentum 方法 和 AdaDelta 方法的结合。该方法的表现形式为:g=1m∑im∂E(W,B,x,y)∂wi Momentum 项 st=ρ1st−1+(1−ρ1)g AdaDelta 项 rt=ρ2rt−1+(1−ρ2)g2 s=s1−ρt r=r1−ρt wi=wi−αγ+r−−−−√s

  其中 ρ1 建议默认为0.9,ρ2建议默认为0.999,γ 默认设置为10^{-16}。

  值得一提的是,Adam 方法通常被认为对超参数的选择相当鲁棒,且其在实际应用中的效果良好,超过了其他的自适应技术。使用 Adam 方法较为方便,但如果选择了较好的学习率 ,Momentum能得到更好的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  神经网络 优化 adam