为什么在 LSTM 模型中使用冻结的嵌入层

数据挖掘 神经网络 lstm 词嵌入 情绪分析
2021-10-04 10:03:38

我正在研究这种 LSTM 模式: https ://www.kaggle.com/paoloripamonti/twitter-sentiment-analysis

他们使用了一个冻结的嵌入层,该层使用一个预定义的矩阵,每个单词都有一个 300 的暗向量,表示单词的含义。

正如你在这里看到的:

embedding_layer = Embedding(vocab_size, W2V_SIZE, weights=[embedding_matrix], input_length=SEQUENCE_LENGTH, trainable=False)

嵌入层被冻结,这意味着在训练期间权重不会改变。

为什么这样做?

3个回答

用于Embedding层初始化的嵌入矩阵在大量文本语料库上进行了高度训练。训练和数据是如此巨大,以至于嵌入已经学会了单词之间的一种关联。

词嵌入

像 Word2Vec 这样的预训练嵌入将为嵌入空间中彼此相似school的单词生成向量。homework

许多此类关联是在经过严格训练后学习的,主要是在高端机器和精确计算的参数上。

为什么Embedding图层设置为trainable=false?

如代码中所述,我们通过参数为Embedding层提供了一个预训练的嵌入矩阵。weights=顾名思义,它是“预训练的”,不需要额外的训练。

我们可以通过保持它不可训练来享受这种嵌入的好处。在我们的任务上下文中进行额外的训练,可能会导致嵌入层的异常行为,并且还会扭曲学习到的关联。

在某些情况下,该Embedding层保持可训练。

这张幻灯片会对您有所帮助。

在此处输入图像描述

简而言之,预训练模型是在一个大数据集上训练的,并且词汇表中的所有单词都已经完美训练,但是当你微调模型时,你的数据集相对较小,很多单词不会被重新训练,那么重新训练和未经修饰的文字会一团糟。

在幻灯片中,单词television没有被重新训练,它保持在原来的位置,但重新训练的人游走了,然后之间TV距离增加了。这可能很糟糕。TVtelevision

使用静态(非训练)嵌入层的另一个好处是它减少了模型的带宽。

在这种情况下,使用的带宽减少了 300 倍。例如,您可以发送一个整数,而不是发送与 300 维向量中的每个值对应的 300 个浮点数。

如果您在同一台机器上运行模型,这可能没什么大不了的,但如果您使用 TensorFlow Serving 来托管您的模型,那么减少的带宽可能会很有用。