word2vec负抽样跳过克模型的正确梯度

时间:2018-04-10 04:12:18

标签: python machine-learning nlp word2vec word-embedding

我正在尝试使用负抽样在python中实现skip-gram word2vec。 根据我的理解,我应该通过Mikolov Et al从论文中最大化等式(4)。

我已经根据Vc,U和U_rand取了这个等式的梯度。其中Vc是对应于中心字的中心向量,U是对应于中心字上下文中的字的上下文向量,U_rand是随机采样字的上下文向量。

然后我计算每个单词和上下文单词组合的成本函数,将它们相加并打印出整个语料库的总和。我正在运行这几次,并没有看到整个语料库成本总和有所改善。成本上升然后反复下降。

我得到了以下渐变

  

关于Vc的渐变J =(1-sigma(V•U))* U - 随机求和   向量(1-sigma(-V•U_rand))* U_rand

     关于U =(1-sigma(V·U))* V

grad J.      

关于U_rand的渐变J =(1-sigma(-V•U_rand))* - V

所以说到这里,我有几个问题:

  1. 这些渐变是否正确?
  2. 我应该向渐变方向迈出一步吗? (与渐变的负面相反)对我来说,我应该像我们最大化成本函数一样
  3. 对于随机抽样的单词,我们使用其中心单词表示或上下文工作表示。从我在youtube观看的斯坦福演讲中,它似乎是它的背景向量。但这source似乎有所不同。
  4. 是否为整个语料库添加所有成本函数结果是一种有效的方法来改进? (我不明白为什么不这样做)

1 个答案:

答案 0 :(得分:0)

我不明白您的问题2-4。似乎您不知道自己不知道的东西。

首先,Skip-Gram(SG和SGNS)都具有以下成本函数(derivation of cost function):

enter image description here

上面的等式适用于批次梯度下降-在扫描大小为T的整个语料库后进行一次更新。这是低效的,因为T在NLP应用程序中很大。因此,我们使用Stochastic Gradient Descent(SGD)更新每个训练样本的权重:

enter image description here

SGNS使用sigmoid函数来计算二进制概率分布。 mikolove的论文的公式(4)替换了以上成本函数::

enter image description here

w是输入词,h是隐藏层。 h等效于w的单词向量,因为输入层是单热编码的。 c_pos是肯定词的词向量,c_negrandomly drawn中否定词noise distribution的词向量。 W_neg表示所有K个否定词的词向量。

任何机器学习模型的一般更新方程为:

enter image description here

对theta取SGNS成本函数的导数:

enter image description here

从这一点出发,我们需要针对输入权重矩阵和输出权重矩阵计算梯度:

输入权重矩阵的梯度

在SG和SGNS中,输入权重矩阵中仅对应于输入单词的一个单词向量被更新。由于输入单词的单词向量等效于隐藏层,因此我们采用成本函数J相对于h的导数: enter image description here

更新公式如下:

enter image description here

输出权重矩阵的梯度

c_posc_neg都是输出权重矩阵中的单词向量,我们分别针对它们两个采用梯度:

enter image description here

在这里,σ(c_j⋅h)−t_j被称为prediction error。随着模型优化权重,此预测误差将最小化。

我要最大化还是最小化?

机器学习中的约定是最小化成本函数J。但是许多论文说,他们最大化 ... bla bla bla的可能性。为什么会这样?

否定采样的最初思想是最大化观察正对的概率,并最小化观察负对的概率。从数学上讲,它可以翻译为:

enter image description here

argmax theta表示我们通过调整theta来最大化以下概率。在机器学习中,通常的做法是对目标方程采用自然对数以简化推导(为什么采用自然对数?请读here)。然后:

enter image description here

作者说他们最大化了概率。但是,在机器学习中,惯例是最小化成本函数,而不是最大化成本函数。为了遵守约定,我们在等式(11)中添加了一个负号。之所以可以这样做,是因为最小化对数对数可能性等于最大化对数对数可能性。经过一些数学操作(derivation)之后,我们获得了可以最小化的成本函数:

enter image description here