文章目录
神经网络参数更新方法
1、SGD
-
SGD(Stochastic Gradient Descent)就是最常见的随机梯度下降。
-
向着参数的梯度的负方向改变(梯度方向是增加的方向)。
这里的 x 可以是权值 w 也可以是偏置 b。
2、MBGD
-
MBGD(Mini Batch Gradient Descent)小批量梯度下降
-
对每个批次中的 n 个训练样本,这种方法只执行一次更新。
-
为了避免 SGD 和标准梯度下降中存在的问题。
使用小批量梯度下降的优点是:
- 可以减少参数更新的波动,最终得到效果更好和更稳定的收敛。
- 还可以使用最新的深层学习库中通用的矩阵优化方法,使计算小批量数据的梯度更加高效。
- 通常来说,小批量样本的大小范围是从 50 到 256,可以根据实际问题而有所不同。
- 在训练神经网络时,通常都会选择小批量梯度下降算法。
3、Momentum update
- SGD 方法中的高方差振荡使得网络很难稳定收敛。
- 研究者提出了一种称为动量(Momentum)的技术,通过优化相关方向的训练和弱化无关方向的振荡,来加速 SGD 训练。
受到物理中的启发:例子的力与势能梯度有相对关系。例子感受到的力,正是损失函数的负梯度。F=ma,负梯度正比于粒的加速度。与普通 SGD 不同,梯度直接作用于位置,这里用物理的角度来看,梯度直接影响速度,速度再影响位置。
4、Nestrevo Momentum update
与 Momentum 稍稍有点不同。对于凸函数具有较强的理论收敛保证,实际中效果比 Mnmentum 稍好。
- 通过使网络更新与误差函数的斜率相适应,并依次加速 SGD。
- 也可根据每个参数的重要性来调整和更新对应参数,以执行更大或更小的更新幅度。
当前参数向量在点 x 处,从 Momentum 更新中看 v,忽略第二项 v 变成 mu*v。做一个提前量用 x_ahead=x+mu*v 代替 x。
每个参数适应学习率方法
前面的方法对每个参数学习了是固定的,调整学习率是一个耗时的过程。可以使用对每个参数都适应的学习率。
5、Adagrad
Adagrad 方法是通过参数来调整合适的学习率 η,对稀疏参数进行大幅更新和对频繁参数进行小幅更新。因此,Adagrad 方法非常 适合处理稀疏数据
。
对于大的梯度,会使他的有效学习率减小;对于小的梯度会使他的有效学习率增大。这种方法的一个缺点是,在深度学习中,单调的学习率通常证明太激进,会使学习停止过早。
6、AdaDelta
AdaDelta 方法是 AdaGrad 的延伸方法,它倾向于解决其学习率衰减的问题。Adadelta 不是累积所有之前的平方梯度,而是将累积之前梯度的窗口限制到某个固定大小 w。
7、RMSprop
RMSprop 是一种有效,但目前还未公开发布的自适应学习率方法。RMSprop 改进 Adagrad 方法,减小他的激进,使用单调减小学习率。特别的,它使用了梯度平方移动平均值。
decay_rate 是一个超参数,典型值为 [0.9, 0.99, 0.999]。
根据梯度尺度来调整学习率是一个有利均衡的效果,但与 Adagrad 不同,更新不是单调小。
8、Adam
Adam 算法即自适应时刻估计方法(Adaptive Moment Estimation),能计算每个参数的自适应学习率。这个方法不仅存储了 AdaDelta 先前平方梯度的指数衰减平均值,而且保持了先前梯度 M (t) 的指数衰减平均值,有点像 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 进行补偿。