当前位置: 编码机 >> 编码机优势 >> 编码器解码器架构seq2seq
我们刚看到的多对多网络示例与多对一网络非常相似。一个重要的区别是,RNN在每个时间步返回输出,而不是在最后返回一个组合输出。另一个值得注意的特性是输入时间步数等于输出时间步数。当你了解编码器-解码器架构后,会注意到另一个区别——在多对多的网络中,输出和输入是一致的,也就是说,网络不需要等到所有输入都结束后再生成输出。
编码器-解码器架构也称为seq2seq模型。顾名思义,网络由一个编码器和一个解码器组成,都是基于RNN的,并且能够使用和返回对应于多个时间步的输出序列。神经机器翻译是seq2seq网络最重要的应用,尽管seq2seq网络同样适用于结构大体上为翻译的问题。
例如,句子解析和图像描述。时间序列分析和问答系统也会用到seq2seq模型。在seq2seq模型中,编码器使用的是源序列,这是整数序列的一个批处理。序列的长度是输入时间步数,对应于最大输入序列长度。因此,输入张量的维度是。这将传递到一个嵌入层,将在每个时间步把整数转换为一个嵌入向量。嵌入的输出是一个形状为的张量。
把这个张量送入RNN中,RNN将每个时间步的向量转换为与其编码维数相对应的大小。这个向量是当前时间步和所有之前时间步的一个组合。通常,编码器会在最后一个时间步返回输出,代表整个序列的上下文或“思想”向量。这个张量的形状为。解码器网络架构与编码器类似,不同之处在于解码器在每个时间步都有一个额外的稠密层来转换输出。
解码器端每个时间步的输入为上一个时间步的隐状态,而输入向量是解码器在上一个时间步预测的token。对于第一个时间步,隐状态是来自编码器的上下文向量,而输入向量对应于将在目标端启动序列生成的token。例如,对于翻译用例,它是字符串开头伪token。
隐信号的形状是,所有时间步的输入信号的形状是。一旦通过嵌入层,输出张量的形状是。下一步是解码器RNN层,其输出是一个形状为的张量。然后,通过稠密层发送每个时间步的输出,稠密层将向量转换为目标词表的大小,因此稠密层的输出为。
这基本上是每个时间步上token的概率分布,因此,如果我们计算最后一维上的argmax,那么可以将其转换回目标语言中一个预测的token序列。