gpt4 book ai didi

python - word2vec 负采样 skip gram 模型的正确梯度

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:49 24 4
gpt4 key购买 nike

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

我已经计算了这个等式相对于 Vc、U 和 U_rand 的梯度。其中Vc为中心词对应的中心向量,U为中心词上下文中某个词对应的上下文向量,U_rand为随机采样词的上下文向量。

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

我得到了以下渐变

grad J with respect to Vc = (1-sigma(V•U))*U - Summation over random vectors (1-sigma(-V•U_rand))*U_rand

grad J with respect to U = (1-sigma(V•U))*V

grad J with respect to U_rand = (1-sigma(-V•U_rand))*-V

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

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

最佳答案

我不明白你的问题 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 的词向量,因为输入层是one-hot编码的。 c_pos是positive word的词向量,c_negrandomly drawn的词向量来自 noise distribution 的否定词. W_neg 表示所有 K 词向量的否定词。

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

enter image description here

就 theta 对 SGNS 成本函数求导:

enter image description here

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

输入权重矩阵的梯度

在SG和SGNS中,输入权重矩阵中只有一个与输入词对应的词向量被更新。由于输入词的词向量等同于隐藏层,我们对h取成本函数J的导数: 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

关于python - word2vec 负采样 skip gram 模型的正确梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49745192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com