🐬编码器-解码器架构
2021-12-4
| 2023-8-7
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

 
重新考察CNN
notion image
 
 
 
  • 编码器(encoder): 将输入编程成中间表达形式(特征)
  • 解码器(decoder): 将中间表示解码成输出
机器翻译是序列转换模型的一个核心问题, 其输入和输出都是长度可变的序列。 为了处理这种类型的输入和输出,可以设计一个包含两个主要组件的架构:
  • 编码器(encoder): 它接受一个长度可变的序列作为输入, 并将其转换为具有固定形状的编码状态。
  • 解码器(decoder): 它将固定形状的编码状态映射到长度可变的序列。
这被称为编码器-解码器(encoder-decoder)架构
notion image
notion image
以英语到法语的机器翻译为例: 给定一个英文的输入序列:“They”、“are”、“watching”、“.”。 首先,这种“编码器-解码器”架构将长度可变的输入序列编码成一个“状态”, 然后对该状态进行解码, 一个词元接着一个词元地生成翻译后的序列作为输出: “Ils”、“regordent”、“.”。 由于“编码器-解码器”架构是形成不同序列转换模型的基础, 因此这里把这个架构转换为接口方便后面的代码实现。

编码器

在编码器接口中,只指定长度可变的序列作为编码器的输入X。 任何继承这个Encoder基类的模型将完成代码实现
 

解码器

在下面的解码器接口中,新增一个init_state函数, 用于将编码器的输出(enc_outputs)转换为编码后的状态。 注意,此步骤可能需要额外的输入,例如:输入序列的有效长度。 为了逐个地生成长度可变的词元序列, 解码器在每个时间步都会将输入 (例如:在前一时间步生成的词元)和编码后的状态映射成当前时间步的输出词元。
 
 

合并编码器和解码器

总而言之,“编码器-解码器”架构包含了一个编码器和一个解码器, 并且还拥有可选的额外的参数。 在前向传播中,编码器的输出用于生成编码状态, 这个状态又被解码器作为其输入的一部分。
  • PyTorch
  • 机器翻译与数据集序列到序列学习 seq2seq
    目录