我们先看一个典型的基于RNN的Encoder-Decoder结构
输入是:“机器学习“,输出是“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分别如何支持并行化训练做一点浅析。
Encoder支持并行化
RNN之所以不支持并行化是因为它天生是个时序结构,t时刻依赖t-1时刻的输出,而t-1时刻又依赖t-2时刻,如此循环往前,我们可以说t时刻依赖了前t时刻