Machine learning 嵌入层的初始值是多少?
我正在研究单词表示的嵌入。在许多dnn库中,它们支持嵌入层。这是一个非常好的教程 但我仍然不知道如何计算嵌入值。在下面的示例中,它甚至在任何培训之前都会输出一些值。它是否使用了一些随机权重?我实现了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
嵌入(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