Adagrad就是针对这一问题提出的,自适应地为各个参数分配不同学习率的算法。其公式如下:
学习速率η
不再恒定不变,而是根据上式持续更新,下面的分母会随着迭代次数的增加累加gi
,gi
是第i
次更新所得到偏导数。
也即,对于所有的参数来讲,学习速率都是越来越小的。而且,偏导越小,学习速率减小的就越慢。
第一条很好理解,第二条要简单解释一下,如果偏导很小,说明本来的更新速率就很小,如果再将学习速率这个参数以一个较快的速度减小,那这个维度下的总参数更新速率就会变的过慢。
当然Adagrad也不是唯一的算法,拥有类似功能的还有RMSprop、Adadelta、AdaSecant、Adam等,而且一般而言Adam是目前的最优选择。
Momentum
我们考虑这样一个问题,如果单纯的只靠梯度来作为权重更新的唯一依据,会出现什么样的问题,如下图所示:
当梯度非常小,也即曲面在对应维度上非常平缓时,权重的更新会变得相当慢;在鞍点,也即偏导数为0的点,该维度权重会停止更新;而且也很容易停留在局部最小值而达不到全局最小值。
Momentum是冲量的意思,不过我们可以简单的把它理解为惯性,把梯度下降看做一个小球沿曲线滑落的过程,这样即便在梯度为零的点,也能以一个较快的速度进行梯度下降,甚至还有可能帮助损失函数突破局部最小值的限制,到达全局最小值。
前面所提到的表现优秀的Adam算法,就相当于RMSProp (高级版Adagrad) + Momentum。
如何优化在测试集上的表现
模型由于采用了过于复杂的参数,从而在训练集上拥有良好表现,而在测试集上表现很差,这样的现象叫做过拟合。这一部分就是要讲如何解决过拟合的问题。
增大训练集
首先来讲最简单的一个方法,增大训练集,通过使用更大的训练集来增强模型对于各种样本的适应性。
增大训练集也有两种方法,一个自然是去找到更多的训练样本,而另一个,是去创造更多的训练样本。比如在图像识别中,我们可以通过对已有图像训练样本的角度进行调整来创造一个新的训练样本,我们也可以通过在训练样本中加上一些噪声来创造新的训练样本等。