Machine learning 嵌入层的初始值是多少?

Machine learning 嵌入层的初始值是多少?,machine-learning,nlp,deep-learning,word2vec,word-embedding,Machine Learning,Nlp,Deep Learning,Word2vec,Word Embedding,我正在研究单词表示的嵌入。在许多dnn库中,它们支持嵌入层。这是一个非常好的教程 但我仍然不知道如何计算嵌入值。在下面的示例中,它甚至在任何培训之前都会输出一些值。它是否使用了一些随机权重?我实现了嵌入(2,5)的目的,但不确定其初始计算。我也不知道如何学习它的嵌入权重 word_to_ix = {"hello": 0, "world": 1} embeds = nn.Embedding(2, 5) # 2 words in vocab, 5 dimensional embeddings l

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

但我仍然不知道如何计算嵌入值。在下面的示例中,它甚至在任何培训之前都会输出一些值。它是否使用了一些随机权重?我实现了
嵌入(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]
我打破了我的想法来确定。首先,上
嵌入(2,5)
是一个形状矩阵
(2,5)

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


更新 我发现了一个嵌入代码,它的值正态分布。是的,但这只是一个默认值,我们可以为嵌入层设置任意权重。
是的。从随机权重开始。我认为使用截断正态分布比使用正则正态分布更常见。但是,这可能没有多大区别。

初始化定义了设置层的初始
随机权重的方法。您可以使用任何值来执行此操作。但是初始值会影响
单词嵌入
。对于
预训练单词嵌入
有很多方法,他们试图选择更好的初始值,如

均匀分布也很常见。
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