我搜索并阅读了一些关于CBOW的文章,但这些文章之间似乎存在差异。
据我理解:
- 输入是一个批次向量。我们将它输入到隐藏层。因此,我们会在隐藏层得到另一个批次向量 H。
- 在一篇文章(第二部分2.2.1)中,他们说在隐藏层不会使用任何激活函数,但会对批次向量 H取平均,得到一个单一向量(不再是批次)。然后我们将这个平均向量输入到输出层,并对其应用Softmax。
- 然而,在这个Coursera的视频中,他们没有对批次向量 H 取平均。他们只是将这个批次向量 H 输入到输出层,并对批次输出向量应用Softmax。然后计算其上的成本函数。
- 而且,在Coursera的视频中,他们说我们可以在隐藏层使用RelU作为激活函数。这是新方法吗?因为我读了很多文章,但它们总是说隐藏层没有激活函数。
你能帮我解答这个问题吗?
回答:
在实际实现中——你可以查看其源代码——上下文词向量集会在作为神经网络的“输入”之前被平均在一起。
然后,任何反向传播到输入的调整也将应用于所有贡献到该平均值的向量。
(例如,在Google最初发布的word2vec论文中附带的原始word2vec.c
中,你可以看到向量累加到neu1
中,然后通过上下文窗口计数cw
进行平均的操作,具体见:
https://github.com/tmikolov/word2vec/blob/master/word2vec.c#L444-L448)