Encoder-Decoder 架构整理
1. Encoder-Decoder 的引入
Encoder-Decoder 的引入是为了解决 RNN 无法处理 Seq2Seq 的问题。
我们知道 RNN 在每个时间步接受一个输入、并且返回一个输出。这对于定长的序列问题很方便(比如给句子的每个词做词性标注),但是很多 Seq2Seq 并不是定长的,输入和输出的长度并不固定(比如翻译问题)。唯一的解决办法是让 RNN 一次就读完全部的输入。但是 RNN 处理后的隐藏状态向量是定长的,强行将一个比较长的序列压缩进去会导致信息的缺失与遗忘。
一个想法是让这两个步骤分别由两个不同的组件来完成:一个组件负责将输入压缩成一个隐藏状态向量,另一个组件负责根据这个隐藏状态向量得到最终的输出。而这两个组件就是 Encoder 和 Decoder。同时使用 LSTM 来解决因为序列过长导致的遗忘问题。