老饼讲解:一步一步上手深度学习
好了,这节我们先来看什么是RNN的编解码(Encoder-Decoder)模型吧。其实在讲RNN时,我们已经讲过Encoder-Decoder了,但这里作为回顾也好,作为重新理解也好,重新讲解一下。
先来说Encoder-Decoder模型,Encoder-Decoder模型并不是RNN专用的模型,更严确来说呢,它是一种解决方案。太严谨的定义也很难说,说了也很难理解,直接用例子来说吧。

如图所示,Encoder-Decoder把模型拆成了两部分:编码器与解码器。它先用第一部分编码器(编码器是一个模型)把输入压缩成一个信息(一般称为编码信息c),然后再利用第二部分的解码器(解码器也是一个模型)来把编码信息c转换为预测目标y。
总的来说呢,就是引入c来作为 与之间的桥梁,先用编码器模型把 转换为c,再用解码器模型把c转换为y。
在RNN中,就经常使用Encoder-Decoder方式来解决seq2seq问题,也就是不定长的输入、输出问题。
可能有的同学忘了seq2seq(序列到序列)是什么了,那再详细说说。

seq2seq就是,对模型输入一个长为n的序列,然后让模型输出一个长为m的序列,它的输入n和输出m都是不定长的,例如翻译问题就是一个典型的seq2seq问题,它的输入、输出长度都是不确定的、任意的。
好了,RNN使用Decoder-Encoder方式时,就是用两个RNN分别作为编码器与解码器,编码器将输入序列转换为编码C,而解码器则根据编码C得得输出序列。
以翻译问题为例,示例如下:

如图,先用一个RNN作为Encoder,然后在充当编码器的RNN中输入要翻译的句子,那么当输入完最后一个字符时,RNN的隐状态就承载了所有的输入序列信息,此时,可以把它作为编码c。然后,在翻译阶段,仍然以一个RNN作为解码器,把编码c作为解码器RNN的初始状态,然后通过解码器RNN逐个输出翻译结果。
好了,这只是一个大概的示例,实际使用中的骚操作是多种多样的,但主体思想都差不多。
这节我们大概地知道了RNN的Encoder-Decoder模型是什么。它其实就是用一个RNN作为编码器,用另一个RNN作为解码器,让输入与输出模型隔离,从而可以满足任意长度的输入、任意长度的输出。
评论