NLP-生成模型-2017-Transformer(四):单个输入-输出样本的并行化计算【编码:训练预测都基于注意力机制来并行化】【解码:训练时基于掩码注意力机制、teach-forcing来并行化】

我们先看一个典型的基于RNN的Encoder-Decoder结构

NLP-生成模型-2017-Transformer(四):单个输入-输出样本的并行化计算【编码:训练预测都基于注意力机制来并行化】【解码:训练时基于掩码注意力机制、teach-forcing来并行化】_第1张图片
输入是:“机器学习“,输出是“machine learning”。模型的大概工作时序是:Encoder部分,输入序列逐个送进RNN,计算出最后时刻的隐藏状态c,作为上下文信息传给Decoder。Decoder部分,将c和t-1时刻的输出作为t时刻的输入,逐步计算预测得到t时刻的输出。这个结构中,Encoder和Decoder部分都是无法并行化的,这是由RNN结构本身决定的(t时刻计算依赖t-1时刻的输出)。值得注意的一点是,这里我们讨论的并行化,不是指多个“输入-输出”样本批量处理,而是指对于单个的“输入-输出”样本,模型中Encoder和Decoder都需要历经t次迭代。

Transformer并行化
《Attention Is All You Need》[3] 中提出:“The Transformer allows for significantly more parallelization“ ,我们这里对Transformer中的Encoder和Decoder分别如何支持并行化训练做一点浅析。

NLP-生成模型-2017-Transformer(四):单个输入-输出样本的并行化计算【编码:训练预测都基于注意力机制来并行化】【解码:训练时基于掩码注意力机制、teach-forcing来并行化】_第2张图片
Encoder支持并行化

RNN之所以不支持并行化是因为它天生是个时序结构,t时刻依赖t-1时刻的输出,而t-1时刻又依赖t-2时刻,如此循环往前,我们可以说t时刻依赖了前t时刻所有的信息。RNN的实质目的是学习时序数据中的局部依赖关系,实际上深度学习很多模型的目的都是为了学习样本之间的局部关系,如CNN也是为了学习空间数据中局部依赖关系。为了完成对长距离样本之间依赖关系的学习,CNN采用多次卷积、池化等操作,这样需要加大网络的深度,才能更多的学习到更大范围的样本局部依赖关系。RNN虽然理论上可以建立长距离依赖关系,但由于存在梯度消失、网络容量等问题,实际上效果也要打折扣。

理解Encoder部分能支持并行化训练的关键就在于理解自注意力机制:

NLP-生成模型-2017-Transformer(四):单个输入-输出样本的并行化计算【编码:训练预测都基于注意力机制来并行化】【解码:训练时基于掩码注意力机制、teach-forcing来并行化】_第3张图片

待续




参考资料:
Seq2Seq模型概述
浅析Transformer训练时并行问题
The Illustrated Transformer
Teacher Forcing机制及Beam search详解
Transformer并行化训练笔记
1分钟|聊聊Transformer的并行化

你可能感兴趣的:(#,NLP/词向量_预训练模型,Transformer,transformer,自然语言处理,深度学习)