微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于开发编码器-解码器模型的nn.embedding如何工作?

如何解决用于开发编码器-解码器模型的nn.embedding如何工作?

this tutorial中,它讲解了如何使用pytorch开发一个简单的编码器-解码器模型。 但是,在编码器或解码器中,定义了self.embedding = nn.Embedding(input_size,hidden_size)(或类似名称)。在pytorch documents中,nn.Embedding被定义为“一个存储固定字典和大小的嵌入的简单查找表”。 所以我很困惑,在初始化过程中,该查找表是从哪里来的?它会为索引初始化一些随机嵌入,然后对其进行训练吗?是否真的有必要加入编码器/解码器部分? 预先感谢。

解决方法

首先回答最后一位:是的,我们确实需要Embedding或等效名称。至少在处理离散输入(例如语言的字母或单词)时,因为这些标记被编码为整数(例如'a'-> 1,'b'-> 2等),但是这些数字不携带含义:字母“ b”不是“像'a',而是更多”,这是其原始编码所暗示的。因此,我们提供了Embedding,以便网络可以学习如何通过一些有用的方式来表示这些字母,例如使元音在某种程度上彼此相似。

在初始化期间,将以与模型中其他权重相同的方式对嵌入向量进行随机采样,并且还将对模型的其余部分进行优化。也可以从一些预训练的嵌入中初始化它们(例如,从word2vec,Glove,FastText),但是必须谨慎行事,不要通过反向初始化模型通过随机初始化的模型破坏它们。


嵌入并不是绝对必要的,但是强制网络得知13314(“项目”)与89137(“值”)非常相似,却与13315(“日本”)完全不同,这是非常浪费的。 )。而且它可能甚至也不会远程收敛。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。