【发布时间】:2017-03-22 23:57:26
【问题描述】:
如果 Skip gram Word2vec 模型中隐藏层和输出层之间的所有权重矩阵相同,那么输出之间有何不同?
【问题讨论】:
标签: machine-learning neural-network word2vec
如果 Skip gram Word2vec 模型中隐藏层和输出层之间的所有权重矩阵相同,那么输出之间有何不同?
【问题讨论】:
标签: machine-learning neural-network word2vec
本周我在尝试理解 skip-gram 时遇到了同样的问题。我经历了似乎是整个互联网而没有找到答案。幸运的是,我能够弄清楚。
首先,您在问题中提到的输出确实是相同的。你是对的。但这仍然是有道理的,因为我们之所以说 n 个输出向量,是因为我们在 skip-gram 窗口中有 n 个单词。每个输出都将与此窗口中的不同单词进行比较,我们将分别计算它们的错误。然后我们用反向传播更新矩阵。
我强烈建议您阅读这篇文章:word2vec Parameter Learning Explained。它将解释您关于 word2vec 基础的所有问题。
干杯!
【讨论】:
遇到了同样的问题,因为丑陋的单身汉已经回答了输出是一样的。另外,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。
【讨论】: