【动手学深度学习】9.6 编码器和解码器

正如我们在 9.5节中所讨论的, 机器翻译是序列转换模型的一个核心问题, 其输入和输出都是长度可变的序列。 为了处理这种类型的输入和输出, 我们可以设计一个包含两个主要组件的架构: 第一个组件是一个编码器(encoder): 它接受一个长度可变的序列作为输入, 并将其转换为具有固定形状的编码状态。 第二个组件是解码器(decoder): 它将固定形状的编码状态映射到长度可变的序列。 这被称为编码器-解码器(encoder-decoder)架构, 如 图9.6.1 所示。

我们以英语到法语的机器翻译为例: 给定一个英文的输入序列:"They""are""watching""."。 首先,这种"编码器-解码器"架构将长度可变的输入序列编码成一个"状态", 然后对该状态进行解码, 一个词元接着一个词元地生成翻译后的序列作为输出: "Ils""regordent""."。 由于"编码器-解码器"架构是形成后续章节中不同序列转换模型的基础, 因此本节将把这个架构转换为接口方便后面的代码实现。

编码器

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

python 复制代码
from torch import nn


#@save
class Encoder(nn.Module):
    """编码器-解码器架构的基本编码器接口"""
    def __init__(self, **kwargs):
        super(Encoder, self).__init__(**kwargs)

    def forward(self, X, *args):
        raise NotImplementedError

解码器

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

python 复制代码
#@save
class Decoder(nn.Module):
    """编码器-解码器架构的基本解码器接口"""
    def __init__(self, **kwargs):
        super(Decoder, self).__init__(**kwargs)

    def init_state(self, enc_outputs, *args):
        raise NotImplementedError

    def forward(self, X, state):
        raise NotImplementedError
python 复制代码
# 合并编码器和解码器
#@save
class EncoderDecoder(nn.Module):
    """编码器-解码器架构的基类"""
    def __init__(self, encoder, decoder, **kwargs):
        super(EncoderDecoder, self).__init__(**kwargs)
        self.encoder = encoder
        self.decoder = decoder

    def forward(self, enc_X, dec_X, *args):
        enc_outputs = self.encoder(enc_X, *args)
        dec_state = self.decoder.init_state(enc_outputs, *args)
        return self.decoder(dec_X, dec_state)

小结

  • "编码器-解码器"架构可以将长度可变的序列作为输入和输出,因此适用于机器翻译等序列转换问题。

  • 编码器将长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。

  • 解码器将具有固定形状的编码状态映射为长度可变的序列。

相关推荐
web135085886356 分钟前
10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
人工智能·spring boot·后端
Dipeak数巅科技20 分钟前
数巅科技中标中电科智慧院智能数据分析平台项目
大数据·人工智能·数据分析·商业智能bi
L_cl21 分钟前
【NLP 37、激活函数 ③ relu激活函数】
人工智能·深度学习·自然语言处理
说私域37 分钟前
抖音营销创新策略与案例分析:以奈雪的茶为例及开源AI智能名片2+1链动模式S2B2C商城小程序的启示
人工智能·小程序·开源·流量运营
莫叫石榴姐40 分钟前
DeepSeek行业应用实践报告-智灵动力【112页PPT全】
大数据·人工智能
新加坡内哥谈技术1 小时前
微软将OpenAI的野心外包给软银?
人工智能·深度学习·语言模型·自然语言处理
m0_748234711 小时前
AI语言模型的技术之争:DeepSeek与ChatGPT的架构与训练揭秘
人工智能·语言模型·chatgpt
Francek Chen1 小时前
【现代深度学习技术】卷积神经网络 | 图像卷积
人工智能·pytorch·深度学习·神经网络·cnn·图像卷积
Watermelo6171 小时前
大模型经济困局突围战:寻找打破“算力暴政“的下一个奇点
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·数据挖掘
艾醒(AiXing-w)1 小时前
Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境
linux·python·深度学习