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

目录

介绍

组成结构

代码实现

编码器

解码器

合并编码器-解码器

思考


介绍

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

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

组成结构

编码器-解码器结构图

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

代码实现

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

编码器

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

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)。

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

合并编码器-解码器

显然,还是一个抽象类,只不过将前两个代码给合并了。

总而言之,“编码器-解码器”架构包含了一个编码器和一个解码器, 并且还拥有可选的额外的参数。 在前向传播中,编码器的输出用于生成编码状态, 这个状态又被解码器作为其输入的一部分。

#@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. 除了机器翻译,还有其它可以适用于”编码器-解码器“架构的应用吗?

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer是一种用于自然语言处理任务的深度学习模型,它由编码器解码器两部分组成。下面我将详细介绍Transformer的编码器解码器的内部结构。 编码器: Transformer的编码器由多个相同的层堆叠而成,每个层都有两个子层:多头自注意力机制和前馈神经网络。具体来说,编码器的内部结构如下: 1. 多头自注意力机制(Multi-Head Self-Attention):这是编码器的核心部分。它通过将输入序列中的每个位置与其他位置进行关联,来捕捉输入序列中的上下文信息。多头自注意力机制使用多个注意力头来并行地计算注意力权重,然后将它们的结果进行拼接和线性变换得到最终的表示。 2. 前馈神经网络(Feed-Forward Neural Network):在多头自注意力机制之后,每个子层都有一个全连接前馈神经网络。它将每个位置的表示作为输入,并通过两个线性变换和激活函数(通常是ReLU)来进行非线性变换。 解码器: Transformer的解码器也由多个相同的层堆叠而成,每个层包含三个子层:多头自注意力机制、多头编码器-解码器注意力机制和前馈神经网络。具体来说,解码器的内部结构如下: 1. 多头自注意力机制:与编码器中的多头自注意力机制相同,解码器使用它来关注解码器输入序列中的上下文信息。 2. 多头编码器-解码器注意力机制(Multi-Head Encoder-Decoder Attention):这个注意力机制用于将解码器的每个位置与编码器的输出进行关联。它帮助解码器在生成每个位置的输出时,利用编码器的信息来对输入序列进行对齐和理解。 3. 前馈神经网络:与编码器中的前馈神经网络相同,解码器的每个子层都包含一个全连接前馈神经网络。 总结起来,Transformer的编码器解码器都由多个层堆叠而成,每个层都包含多头自注意力机制和前馈神经网络。编码器用于对输入序列进行编码,而解码器则用于生成输出序列。这种结构使得Transformer能够在处理自然语言处理任务时,更好地捕捉上下文信息和建模序列之间的依赖关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值