Python word2vec负采样跳过gram模型的正确梯度

Python word2vec负采样跳过gram模型的正确梯度,python,machine-learning,nlp,word2vec,word-embedding,Python,Machine Learning,Nlp,Word2vec,Word Embedding,我试图在python中使用负采样实现skip gram word2vec。 根据我的理解,我应该最大化论文中的等式(4) 我已经取了这个方程关于Vc,U和U_的梯度。其中Vc是对应于中心词的中心向量,U是对应于中心词上下文中的词的上下文向量,U_rand是随机采样词的上下文向量 然后,我计算每个单词和上下文单词组合的成本函数,将它们相加,打印出整个语料库的总和。我已经运行过几次了,我看不到整个成本总额有什么改善。成本一涨再跌 我得到了以下梯度 关于Vc的梯度J=(1-西格玛(V•U))*U-随机

我试图在python中使用负采样实现skip gram word2vec。 根据我的理解,我应该最大化论文中的等式(4)

我已经取了这个方程关于Vc,U和U_的梯度。其中Vc是对应于中心词的中心向量,U是对应于中心词上下文中的词的上下文向量,U_rand是随机采样词的上下文向量

然后,我计算每个单词和上下文单词组合的成本函数,将它们相加,打印出整个语料库的总和。我已经运行过几次了,我看不到整个成本总额有什么改善。成本一涨再跌

我得到了以下梯度

关于Vc的梯度J=(1-西格玛(V•U))*U-随机变量上的求和 向量(1-sigma(-V•U_-rand))*U_-rand

相对于U的梯度J=(1-西格玛(V•U))*V

关于U_rand的梯度J=(1-西格玛(-V•U_rand))*-V

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

  • 这些梯度正确吗
  • 我应该朝着梯度的方向走一步吗?(相对于梯度的负值)对我来说,我应该是,因为我们正在最大化成本函数
  • 对于随机抽取的单词,我们使用其中心词表示法或上下文工作表示法。从我观看的斯坦福讲座来看,这似乎是它的背景向量。但这似乎有所不同
  • 为整个语料库添加所有成本函数结果是否是看到改进的有效方法?(我不明白为什么不可以)

  • 我不明白你的问题2-4。似乎你不知道你不知道的东西

    首先,Skip Gram(SG和SGNS)具有以下成本函数():

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

    SGNS使用该函数计算二进制概率分布。mikolove论文的方程式(4)取代了上述成本函数:

    w
    是输入字,
    h
    是隐藏层
    h
    相当于
    w
    的字向量,因为输入层是一个热编码层
    c_pos
    是表示肯定词的词向量,
    c_neg
    是表示否定词的词向量
    W_neg
    表示所有
    K
    字向量的否定字

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

    取SGNS成本函数关于θ的导数:

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

    输入权重矩阵的梯度

    在SG和SGNS中,仅更新输入权重矩阵中与输入字对应的一个字向量。由于输入字的字向量相当于隐藏层,因此我们采用成本函数
    J
    h
    的导数:

    更新公式为:

    输出权重矩阵的梯度

    c_pos
    c_neg
    都是来自输出权重矩阵的字向量,我们分别对它们取梯度:

    这里,
    σ(c_j⋅h)−t_j
    称为。当模型优化权重时,该预测误差将最小化

    我是最大化还是最小化?

    机器学习的惯例是最小化成本函数
    J
    。但许多论文说,他们最大限度地提高了。。。呜呜呜呜。为什么呢

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

    argmax theta
    意味着我们通过调整
    theta
    来最大化以下概率。在机器学习中,一种常见的做法是将自然对数引入目标方程以简化推导(为什么要采用自然对数?读取)。然后:

    作者说他们最大化了可能性。然而,在机器学习中,约定是最小化代价函数,而不是最大化代价函数。为了遵守惯例,我们在等式(11)中添加了一个负号。这是因为最小化负对数似然等于最大化正对数似然。经过一些数学运算(),我们得到了可以最小化的代价函数:

    在方程式21)为什么乙状结肠(-c_-negh)变成乙状结肠(c_-negh)?