什么是更新器?
更新器之间的主要区别是他们如何对待学习率。随机梯度下降是深度学习中最常用的学习算法,它依赖于Theta
(隐藏层中的权重)和alpha
(学习率)。不同的更新器有助于优化学习速率,直到神经网络收敛到其最高性能状态为止。
用法
若要使用更新器,请将一个新类传递到计算图或多层网络中的updater()
方法。
ComputationGraphConfiguration conf = new NeuralNetConfiguration.Builder()
.updater(new Adam(0.01))
// 在下面添加你的层和超参数
.build();
可用的更新器
NoOpUpdater (无操作更新器)
NoOp 更新器: 对梯度不做改变的更新器
RmsPropUpdater(均方根传播更新器)
RMS 传播更新:
http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf http://cs231n.github.io/neural-networks-3/#ada
SgdUpdater(随机梯度更新器)
SGD更新器仅适用学习速率
AMSGradUpdater (Adam变体更新器)
AMSGrad 更新器
参考文献: https://openreview.net/forum?id=ryQu7f-RZ
NesterovsUpdater
涅斯特罗夫动量。跟踪前一层的梯度,并使用它作为更新梯度的方式。
applyUpdater
public void applyUpdater(INDArray gradient, int iteration, int epoch)
获得涅斯特罗夫更新
- 参数 gradient 获取更新的梯度
- 参数 iteration 迭代
AdaMaxUpdater
AdaMax 更新器, Adam的一个变体。 http://arxiv.org/abs/1412.6980
applyUpdater
public void applyUpdater(INDArray gradient, int iteration, int epoch)
根据给定的梯度计算更新
- 参数 gradient 获取更新的梯度
- 参数 iteration 迭代
- 返回递度
AdaDeltaUpdater
http://www.matthewzeiler.com/pubs/googleTR2012/googleTR2012.pdf https://arxiv.org/pdf/1212.5701v1.pdf
Ada增量更新器。更健壮的adagrad,它跟踪梯度的移动窗口平均值,而不是adagrad的每个衰减学习速率
applyUpdater
public void applyUpdater(INDArray gradient, int iteration, int epoch)
得到给定梯度的更新梯度,也更新ada delta的状态。
- 参数 gradient 获取更新的梯度
- 参数 iteration 迭代
- 返回递度
GradientUpdater
梯度修改:随着时间的推移处理更新,计算更新和跟踪相关信息的梯度变化。
AdaGradUpdater
每个连接权重使用的向量化学习率
改编自: http://xcorr.net/2014/01/23/adagrad-eliminating-learning-rates-in-stochastic-gradient-descent
也可以看 http://cs231n.github.io/neural-networks-3/#ada
applyUpdater
public void applyUpdater(INDArray gradient, int iteration, int epoch)
获得特定的学习率AdGrad特征,保持正在传入的梯度的历史。注意,传入的每个梯度随着时间的推移而适应,因此opName adagrad。
- 参数 gradient 获得学习速率的梯度
- 参数 iteration 迭代
AdamUpdater (自适应矩估计更新器)
自适应矩估计更新器 http://arxiv.org/abs/1412.6980
applyUpdater
public void applyUpdater(INDArray gradient, int iteration, int epoch)
- 参数 gradient 获取更新的梯度
- 参数 iteration 迭代
- 返回梯度
NadamUpdater (涅斯特罗夫加速自适应矩估计更新器)
涅斯特罗夫加速自适应矩估计更新器 https://arxiv.org/pdf/1609.04747.pdf
applyUpdater
public void applyUpdater(INDArray gradient, int iteration, int epoch)
根据给定的梯度计算更新
- 参数 gradient 获取更新的梯度
- 参数 iteration 迭代
- 返回梯度