【问题标题】:Understanding Skip gram model output了解 Skip gram 模型输出
【发布时间】:2017-03-22 23:57:26
【问题描述】:

如果 Skip gram Word2vec 模型中隐藏层和输出层之间的所有权重矩阵相同,那么输出之间有何不同?

【问题讨论】:

    标签: machine-learning neural-network word2vec


    【解决方案1】:

    本周我在尝试理解 skip-gram 时遇到了同样的问题。我经历了似乎是整个互联网而没有找到答案。幸运的是,我能够弄清楚。

    首先,您在问题中提到的输出确实是相同的。你是对的。但这仍然是有道理的,因为我们之所以说 n 个输出向量,是因为我们在 skip-gram 窗口中有 n 个单词。每个输出都将与此窗口中的不同单词进行比较,我们将分别计算它们的错误。然后我们用反向传播更新矩阵。

    我强烈建议您阅读这篇文章:word2vec Parameter Learning Explained。它将解释您关于 word2vec 基础的所有问题。

    干杯!

    【讨论】:

      【解决方案2】:

      遇到了同样的问题,因为丑陋的单身汉已经回答了输出是一样的。另外,https://iksinc.wordpress.com/tag/skip-gram-model/ 有一个简单的例子,看起来像这样(使用了较低的精度):

      # skip-gram learning example
      
      import numpy as np
      
      wi = np.array([[-0.094, -0.44, 0.31], [-0.491, -0.23, 0.065], [0.07, 0.17, -0.36], [0.1, 0.46, 0.08], [-0.23, -0.15, -0.04], [0.41, -0.19, -0.44], [0.18, 0.09, 0.28], [-0.05, 0.49, 0.26]])
      wo = np.array([[0.02, 0.48, 0.43, 0.37, -0.36, -0.12, 0.27, -0.35], [-0.37, 0.42, -0.26, -0.15, 0.03, 0.35, -0.14, 0.13], [0.42, 0.36, 0.47, -0.02, -0.42, -0.44, 0.27, -0.45]])
      
      xk = np.array([[0, 1, 0, 0, 0, 0, 0, 0]])
      ht = np.dot(xk, wi)    
      u0 = np.dot(ht, wo)
      yk = np.exp(u0) / np.dot(np.exp(u0), np.exp(u0).transpose())
      
      print yk
      

      产生

      [[ 0.14522021  0.09623482  0.11615102  0.11297892  0.15114373  0.12464769 0.12064487  0.1466973 ]]
      

      然后将 yk 和各自的真值向量之间的差异反向传播以更新权重 wi 和 wo。

      【讨论】:

        猜你喜欢
        • 2021-08-07
        • 2021-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 2019-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多