繁体   English   中英

嵌入层的初始值是多少?

[英]What is the initial value of Embedding layer?

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

词嵌入:编码词法语义

但是我仍然不确定如何计算嵌入值。 在下面的示例中,它甚至在进行任何培训之前都会输出一些值。 它使用一些随机权重吗? 我实现了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)的矩阵。

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] 然后用[1, 0].dot(Embedding(2, 5)) = [0.1,-0.2,0.3,0.4,0.1]计算hello表示。 这实际上是嵌入的第一行。 我理解正确吗?


更新

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

Initializations定义了设置层的初始random weights的方法。 您可以使用任何值来执行此操作。 但是初始值会影响Word Embedding Pre-trained Word Embedding方法有很多,他们试图像这样选择更好的初始值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM