首先回顾下前面的知识点
梯度下降的迭代公式如下
其中是待训练的网络参数,是学习率(有时也用表示),是一个常数,是梯度。以上是梯度下降法的最基本形式,在此基础上,为了使梯度下降法收敛更加迅速和稳定,研究人员提出了多种变种,其中最优秀的要数Momentum,RMSprop,和Adam 等。
Momentum算法
又叫做冲量算法,其迭代更新公式如下:
是我们计算出来的原始梯度,则是用指数加权平均计算出来的梯度。这相当于对原始梯度做了一个平滑,然后再用来做梯度下降。实验表明,相比于标准梯度下降算法,Momentum算法具有更快的收敛速度。为什么呢?看下面的图,蓝线是标准梯度下降法,可以看到收敛过程中产生了一些震荡。这些震荡在纵轴方向上是均匀的,几乎可以相互抵消,也就是说如果直接沿着横轴方向迭代,收敛速度可以加快。Momentum通过对原始梯度做了一个平滑,正好将纵轴方向的梯度抹平了(红线部分),使得参数更新方向更多地沿着横轴进行,因此速度更快。
RMSprop算法
对于上面的这个椭圆形的抛物面(图中的椭圆代表等高线),沿着横轴收敛速度是最快的,所以我们希望在横轴(假设记为)方向步长大一些,在纵轴(假设记为)方向步长小一些。这时候可以通过RMSprop实现,迭代更新公式如下:
观察上面的公式可以看到,是对梯度的平方做了一次平滑。在更新时,先用梯度除以 ,相当于对梯度做了一次归一化。如果某个方向上梯度震荡很大,应该减小其步长;而震荡大,则这个方向的也较大,除完之后,归一化的梯度就小了;如果某个方向上梯度震荡很小,应该增大其步长;而震荡小,则这个方向的也较小,归一化的梯度就大了。因此,通过RMSprop,我们可以调整不同维度上的步长,加快收敛速度。把上式合并后,RMSprop迭代更新公式如下:
Adam算法
Adam算法则是以上二者的结合。先看迭代更新公式:
典型值:。
Adam算法相当于把原始梯度做一个指数加权平均,再做一次归一化处理,然后再更新梯度值。
对AdaGrad算法的补充
需要强调的是,小批量随机梯度按元素平方的累加变量 出现在学习率的分母项中。因此,如果目标函数有关自变量中某个元素的偏导数一直都较大,那么该元素的学习率将下降较快;反之,如果目标函数有关自变量中某个元素的偏导数一直都较小,那么该元素的学习率将下降较慢。然而,由于 一直在累加按元素平方的梯度,自变量中每个元素的学习率在迭代过程中一直在降低(或不变)。所以,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。
词嵌入基础
使用one-hot 向量表示单词,虽然它们构造起来很容易,但通常并不是一个好选择。一个主要的原因是,one-hot 词向量无法准确表达不同词之间的相似度,如我们常常使用的余弦相似度。
Word2Vec 词嵌入工具的提出正是为了解决上面这个问题,它将每个词表示成一个定长的向量,并通过在语料库上的预训练使得这些向量能较好地表达不同词之间的相似和类比关系,以引入一定的语义信息。基于两种概率模型的假设,我们可以定义两种 Word2Vec 模型:
- Skip-Gram 跳字模型:假设背景词由中心词生成,即建模,其中为中心词,为任一背景词;
2.CBOW(continuous bag-of-words)
,其中$\cal W_0为背景词的集合。
Word2Vec 能从语料中学到如何将离散的词映射为连续空间中的向量,并保留其语义上的相似关系。那么为了训练 Word2Vec 模型,我们就需要一个自然语言语料库,模型将从中学习各个单词间的关系。