在训练神经网络期间是否应更改嵌入层?

时间:2019-08-01 07:35:11

标签: python pytorch

我是深度学习和Pytorch领域的新成员。

最近,当我学习pytorch tutorial example for NER task之一时,发现nn.Embedding的嵌入在训练过程中发生了变化。

所以我的问题是在训练网络期间应该更改嵌入吗?

如果我想将预先训练的嵌入(例如,经过训练的word2vec嵌入)加载到PyTorch嵌入层中,在训练过程中是否也应该更改预先训练的嵌入?

或者我该如何阻止更新嵌入?

谢谢。

1 个答案:

答案 0 :(得分:1)

一个人可以在任务执行期间学习嵌入,对它们进行微调以完成手头的任务,也可以保留它们原样(前提是以前已经以某种方式对其进行了学习)。

在最后一种情况下,最终使用word2vec之类的标准嵌入进行微调(使用较小的学习率),但使用提供的词汇和嵌入。当涉及到像BERT这样的最新SOTA时,应该始终对数据进行微调,但要采用无监督的方式(如最初训练的那样)。

使用它们的最简单方法是torch.nn.Embedding.from_pretraineddocs)的静态方法,并向Tensor提供您的预训练数据。

如果您希望该图层是可训练的,请通过freeze=False,默认情况下,它不是您想要的。