Word2Vec Hierarchical Softmax 中的内部顶点里面有什么?

问题描述 投票:0回答:1

我有关于分层 Softmax 的问题。实际上,我不太明白内部顶点(不是叶顶点)中存储的内容。我清楚地理解这个算法的主要思想,但是每一步我们都计算输入词嵌入与内部顶点的词嵌入的点积。那么这些内部顶点内部有哪些向量呢?是否是大小等于 embedding_size 的随机初始化向量,然后它们的坐标由于反向传播步骤而变化,直到我们停止?

machine-learning nlp word2vec hierarchical softmax
1个回答
0
投票

虽然有许多略有不同的思考方式,但将(经过训练的、冻结的)神经网络中的值更多地与边相关联而不是与顶点(节点)相关联可能会有所帮助。

从每个已知单词的(抽象)one-hot 编码进入网络的网络“投影权重”本质上是实际的每个单词的单词向量。假设 300d 个向量的常见情况,从单单词节点到内部节点的 300 条边就是单词。

然后,从内部激活到“输出”层还有另一组边缘权重,它提供了网络的上下文单词投影的训练目标。

在(更常见和通常的默认)负采样方法中,每个输出节点对应于单个可预测单词。这是一个非常容易可视化的输出形状。负采样的价值在于,您只检查所需单词的激活,以及更多随机选择的负单词,以执行训练更新。与检查所有

n
(词汇大小)输出节点的输出值相比,这种计算量要少得多,并且仍然工作得很好,并且不会因词汇量较大而变得更加昂贵(除非您出于其他原因选择也增加您选择的
V
负样本)。
在分层softmax中,输出节点的解释更加复杂。一组(不同的)节点必须具有正确的开/关激活来传达单词的可变长度哈夫曼代码,而不是在单个节点处的激活指示单个单词的预测。

因此,在 HS 中,为了反向传播网络更多地预测您想要的“积极”单词(从一个输入上下文),该算法仅考虑参与该单词独特编码的那些节点——最常见单词的较小节点集,而是为更罕见的单词提供更大的节点集,并将它们中的每一个更倾向于预测所需单词的模式。同样,您可以获得稀疏训练效率,即每个训练步骤仅更新一个很小的子集,远小于所有

n

节点。但是,成本会根据目标单词的不同而有所不同,并且随着词汇量的增长而随着

V
的对数增长。此外,由于代码的原始/天真的分配严格基于词频,非常不同的词可能具有非常相似的编码,可能会导致更多的词与词之间的干扰。 (最初的
V
版本中有一些暗示,随着时间的推移,会完善 HS 单词编码,以确保相似的单词共享相似的霍夫曼编码,但我几乎没有看到这个想法的后续行动,也许是因为负采样的主导地位。 )
因此,在 HS 网络中,从内部激活到输出节点的权重经过调整,通过霍夫曼代码来指示哪个单词是上下文中的首选预测。

在我最熟悉的 word2vec 实现中,Python Gensim,这些“隐藏到输出”的权重甚至不是在开始时随机初始化的,而是保留为 0.0 – 我认为这是直接从 Google 的初始化中复制的

word2vec.c

释放。但是,一旦训练开始,这些“输入权重”(初始随机输入词向量)的显式随机初始化意味着这些权重会立即受到扰动,一开始几乎完全是随机的,但对 SGD 训练变得更有帮助.

所以:

这些内部权重从 0.0 开始,但很快开始反映(初始随机)词向量和训练示例的影响
  • 它们通常
  • 不是
  • 在训练后从网络中收获,就像最终的词向量一样——但如果你想稍后继续训练,它们会被保留,并且可能为未来的训练提供一个运行的开始
  • (在负采样情况下,一些研究表明这些隐藏到输出的权重也可以解释为相同的
word2vec.c

每个单词向量,具有一些用处:请参阅 Microsoft 的 Mitra 等人关于“双词嵌入”的论文“。但是考虑到 HS 情况下输出字的长度编码不同,提取/解释这些输出权重将会更加棘手。)

在我最熟悉的实现中,它可能有助于思考而不是浅层神经网络的“投影层”(实际上是词向量本身,因为每个虚拟“单节点”1-热门词都有其

embedding_size

超重)和“隐藏层

    

© www.soinside.com 2019 - 2024. All rights reserved.