机器学习笔记:编码器与解码器

目录

介绍

组成结构

代码实现

编码器

解码器

合并编码器-解码器

思考


介绍

在机器翻译中,输入的序列与输出的序列经常是长度不相等的序列,此时,像自然语言处理这种直接使用循环神经网络或是门控循环单元的方法就行不通了。因此,我们引入一个新的结构,称之为"编码器-解码器"(Encoder-Decoder),通过这种结构,来实现输入输出长度不均等的问题。

在这一节内容,只介绍这一结构的总体架构,不进行具体实践。

组成结构

编码器-解码器结构图

如图所示,本结构主要由一个编码器和一个解码器组成,首先输入源字符串序列,通过编码器进行编码,输出一个状态。随后,解码器对状态进行解码,根据状态进行输出,输出结果即为翻译所得目标语言字符串。解码的这个过程还需要其他输入,比如源字符串序列的有效长度(valid_length)。

代码实现

编码器和解码器的代码都由抽象类进行实现。

编码器

编码器类的前向计算为抽象方法,返回NotImplementedError。具体使用时需要重写该方法。

python 复制代码
from mxnet.gluon import nn

class Encoder(nn.Block):
    def __init__(self, **kwargs):
        super(Encoder, self).__init__(**kwargs)

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

解码器

解码器有前向计算和状态两个抽象函数。init_state()用于将编码器的输出(enc_outputs)转换为编码后的状态。*args表明其可能需要额外的输入,这有可能是输入序列的有效长度(valid_length)。

python 复制代码
class Decoder(nn.Block):
    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.Block):

    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)

思考

  1. 假设我们使用神经网络来实现"编码器-解码器"架构,那么编码器和解码器必须是同一类型的神经网络吗?

  2. 除了机器翻译,还有其它可以适用于"编码器-解码器"架构的应用吗?

相关推荐
Python×CATIA工业智造19 分钟前
Frida RPC高级应用:动态模拟执行Android so文件实战指南
开发语言·python·pycharm
千宇宙航20 分钟前
闲庭信步使用SV搭建图像测试平台:第三十一课——基于神经网络的手写数字识别
图像处理·人工智能·深度学习·神经网络·计算机视觉·fpga开发
IT古董24 分钟前
【第二章:机器学习与神经网络概述】04.回归算法理论与实践 -(4)模型评价与调整(Model Evaluation & Tuning)
神经网络·机器学习·回归
onceco1 小时前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化
天水幼麟1 小时前
动手学深度学习-学习笔记(总)
笔记·深度学习·学习
狐凄1 小时前
Python实例题:基于 Python 的简单聊天机器人
开发语言·python
悦悦子a啊2 小时前
Python之--基本知识
开发语言·前端·python
jndingxin4 小时前
OpenCV CUDA模块设备层-----高效地计算两个 uint 类型值的带权重平均值
人工智能·opencv·计算机视觉
天水幼麟4 小时前
动手学深度学习-学习笔记【二】(基础知识)
笔记·深度学习·学习
Sweet锦4 小时前
零基础保姆级本地化部署文心大模型4.5开源系列
人工智能·语言模型·文心一言