Encoder-Decoder 预训练

Encoder-Decoder模型预训练

通过对Encoder-Decoder模型进行预训练能够有效的提高模型的训练效果。
seq2seq模型在数据集比较小的情况下,容易过拟合,在《Unsupervised Pretraining for Sequence to Sequence Learning》一文中提出了使用非监督的预训练来提升seq2seq模型的训练效果。该方法主要是通过两个语言模型对encoder和decoder进行预训练。并在微调阶段,共同训练seq2seq模型以及语言模型,以防止过拟合。

简介

这里写图片描述

假设给定输入句子 x 1 , x 2 , . . . , x m 以及输出句子 y n , y n 1 , . . , y 1 ,seq2seq模型的训练目标是最大化概率: P ( y n , y n 1 , . . . , y 1 | x 1 , x 2 , . . . , x m ) ,一般的seq2seq模型可以将上式表示为
P ( y n , y n 1 , . . . , y 1 | x 1 , x 2 , . . . , x m ) = t = 1 n p ( y t | y t 1 , . . . , y 1 , x 1 , x 2 , . . . , x m ) .

在seq2seq模型的训练中,一般使用RNN模型作为Encoder,Encoder加上一个output layer可以看做是一个语言模型,单独看decoder模型,也可以将Decoder作为语言模型,所以可以使用训练好的语言模型对Encoder和decoder进行预训练。

因此,在文中,主要是通过非标注的文本对语言模型进行训练,并作为seq2seq模型的预训练模型。如图1所示,阴影部分的参数表示被预训练。具体步骤如下:
1)首先,收集两个语料,一个为源侧的模型,一个为目标侧的模型。并分别训练语言模型。
2)训练好语言模型后,构建一个多层的seq2seq模型,Encoder中的LSTM的第一层以及词向量和decoder被预训练的权值初始化,另外,为了加强效率,decoder的softmax需要用目标侧的语言模型的softmax进行初始化。

改进

在使用语言模型对seq2seq模型进行预训练后,需要使用标签数据对seq2seq模型进行微调,有时候会降低模型的表现,尤其是在小数据集上。
为确保seq2seq模型训练不过拟合,文中主要采用将语言模型与seq2seq共同训练的方式来限制参数,防止过拟合,二者损失函数权重一样。

除了以上的改进之外,文中还提出了另外两个改进residual connection 以及multi-layer attention:
1)residual connection:使用residual connection 从LSTM的第一层输出直接到softmax的输入。见图2-a。
2)multi-layer attention:在模型中使用attention机制。如下图所示:
这里写图片描述

这里写图片描述

实验

这里写图片描述

这里写图片描述

这里写图片描述

扫描二维码关注公众号,回复: 8638481 查看本文章

实验结果表明:
1)仅仅预训练decoder比仅仅训练Encoder要好。
2)预训练尽可能作为一个训练过程。
3)预训练softmax是很重要的。
4)语言模型的目标函数是一个很强的正则化项。
5)这里写图片描述

发布了98 篇原创文章 · 获赞 337 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/yiyele/article/details/80800222
今日推荐