嵌入层的初始值是多少?

时间:2017-09-22 03:09:46

标签: machine-learning nlp deep-learning word2vec word-embedding

我正在研究嵌入字表示法。在许多dnn库中,它们支持嵌入层。这是非常好的教程。

Word Embeddings: Encoding Lexical Semantics

但我还不确定如何计算嵌入值。在下面的例子中,它甚至在任何训练之前输出一些值。它是否使用一些随机权重?我意识到Embedding(2, 5)的目的,但不确定它的初始计算。我也不确定如何学习嵌入的权重。

word_to_ix = {"hello": 0, "world": 1}
embeds = nn.Embedding(2, 5)  # 2 words in vocab, 5 dimensional embeddings
lookup_tensor = torch.LongTensor([word_to_ix["hello"]])
hello_embed = embeds(autograd.Variable(lookup_tensor))
print(hello_embed)
--------
Variable containing:
-2.9718  1.7070 -0.4305 -2.2820  0.5237
[torch.FloatTensor of size 1x5]

我打破了我的想法。首先,上Embedding(2, 5)是形状(2, 5)的矩阵。

Embedding(2, 5) = 
 [[0.1,-0.2,0.3,0.4,0.1],
 [-0.2,0.1,0.8,0.2,0.3]] # initiated by some function, like random normal distribution

然后,hello[1, 0]。然后hello表示由[1, 0].dot(Embedding(2, 5)) = [0.1,-0.2,0.3,0.4,0.1]计算。这实际上是嵌入的第一行。我理解对了吗?

更新

我找到了一个嵌入代码,它的值正是使用正态分布。是的,但它只是一个默认值,我们可以设置嵌入图层的任意权重。 https://github.com/chainer/chainer/blob/adba7b846d018b9dc7d19d52147ef53f5e555dc8/chainer/links/connection/embed_id.py#L58

2 个答案:

答案 0 :(得分:2)

Initializations定义了设置图层初始random weights的方法。您可以使用任何值来执行此操作。但初始值会影响Word EmbeddingPre-trained Word Embedding有许多方法可以尝试选择更好的初始值,例如this

答案 1 :(得分:1)

是。你从随机权重开始。我认为使用截断的正态分布而不是常规正态分布更常见。但是,这可能没有多大区别。