如果Skip gram Word2vec模型中隐藏和输出层之间的所有权重矩阵相同,那么输出如何相互不同?
答案 0 :(得分:0)
本周我试图理解skip-gram时遇到了同样的问题。我经历过似乎是整个互联网而没有找到答案。幸运的是,我能够弄明白。
首先,您在问题中提到的输出确实相同。你是对的。但它仍然有意义,因为我们说 n 输出向量的原因是我们在skip-gram窗口中有n个单词。每个输出将与此窗口中的不同单词进行比较,我们将分别计算它们的错误。然后我们用反向传播更新矩阵。
我强烈建议您阅读这篇文章:word2vec Parameter Learning Explained。它将解释有关word2vec基础知识的所有问题。
干杯!
答案 1 :(得分:0)
遇到同样的问题,因为丑陋的学士回答了输出是一样的。作为补充,在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。