V(t) = y*V(t-1) + learning_rate*G(x)
x(t) = x(t-1) - V(t)
参考:https://arxiv.org/pdf/1609.04747.pdf
DL训练面临的典型困难
- 普通的小批梯度下降法并不能保证很好的收敛性,但它提出了一些需要解决的挑战:选择合适的学习率可能是困难的。
- 学习速率过小会导致收敛速度过慢,而学习速率过大会阻碍收敛,导致损失函数在最小值附近波动甚至发散。
- 一种办法,可以在训练过程中调整学习率,例如退火,即根据预先定义的计划表减少学习率,或当各时期之间目标的变化低于阈值时。然而,这些进度表和阈值必须提前定义,因此不能适应数据集的特点,此外,相同的学习率适用于所有参数更新。如果我们的数据是稀疏的,并且我们的特征具有非常不同的频率,我们可能不希望将它们全部更新到相同的程度,而是对很少发生的特征就行更大的更新。
- 最小化神经网络中常见的高度非凸误差函数的另一个关键挑战是避免陷入大量次优局部极小值。Dauphin等人的[5]认为,这种困难实际上不是来自于局部极小值,而是来自鞍点,即一维向上、一维向下倾斜的点。这些鞍点通常被相同误差的平台所包围,这使得SGD很难逃脱,因为梯度在所有维度上都接近于零。
Mini-batch gradient descent
这是ML训练基本原理。一般不用直接梯度下降法就行训练
tf.train.GradientDescentOptimizer
Momentum(动量法)
更新公式如下,其中η为学习率(一般为0.9),用法:
tf.train.MomentumOptimizer
Nesterov accelerated gradient(NAG)
更新公式如下,用法:
Adaptive Moment Estimation (Adam)
tf.train.AdamOptimizer