机器学习&&深度学习——从编码器-解码器架构到seq2seq(机器翻译)

这篇具有很好参考价值的文章主要介绍了机器学习&&深度学习——从编码器-解码器架构到seq2seq(机器翻译)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er
🌌上期文章:机器学习&&深度学习——注意力提示、注意力池化(核回归)
📚订阅专栏:机器学习&&深度学习
希望文章对你们有所帮助

接下来就要慢慢开始实战了,把这边过了,我们接下来就要进行机器翻译的实战了。实战完,我们需要开始学习当今很先进的transformer以及BERT,并且做点模型出来了。最近有点累了,做完这个以后会休息一两天然后继续肝,预推免前一定要肝出一些不错科研项目出来。

编码器-解码器结构

机器翻译是序列转换模型的一个核心问题,其输入和输出都是长度可变的序列。为了处理这种类型的输入和输出,我们可以设计一个包含两个主要组件的架构:第一个组件是一个编码器(encoder):它接受一个长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。 第二个组件是解码器(decoder):它将固定形状的编码状态映射到长度可变的序列。这被称为编码器-解码器。结构如图:
机器学习&&深度学习——从编码器-解码器架构到seq2seq(机器翻译),机器学习&&深度学习,机器学习,深度学习,机器翻译,人工智能,自然语言处理
所以我们之前遇到的CNN与RNN,某种程度上也可以看成这种结构的。
比如之前分类猫狗的例子,CNN的特征抽取可以看成编码器,其作用是将输入编程成中间表达形式(特征);而softmax回归就可以看成是解码器,其将中间表示解码成输出。
而对于RNN,编码器就是将文本表示成了向量,解码器就是将向量表示成输出。
这里将把“编码器-解码器”架构转换为接口方便后面的代码实现。

编码器

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

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)转换为编码后的状态(此步骤可能需要额外的输入,例如:输入序列的有效长度)。 为了逐个地生成长度可变的词元序列,解码器在每个时间步都会将输入 (例如:在前一时间步生成的词元)和编码后的状态映射成当前时间步的输出词元。

#@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

合并编码器和解码器

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

#@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)

“编码器-解码器”体系架构中的术语状态会启发人们使用具有状态的神经网络来实现该架构。

小结

1、“编码器-解码器”架构可以将长度可变的序列作为输入和输出,因此适用于机器翻译等序列转换问题。
2、编码器将长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。
3、解码器将具有固定形状的编码状态映射为长度可变的序列。

序列到序列学习(seq2seq)

机器翻译中的输入序列和输出序列都是长度可变的。为了解决这个问题才提出了“编码器-解码器”架构。这里将使用两个循环神经网络的编码器和解码器,并将其应用到序列到序列,也就是seq2seq类的学习任务。
循环神经网络编码器使用长度可变的序列作为输入,将其转换为固定形状的隐状态(可理解为输入序列的信息被编码到循环神经网络编码器的隐状态中)。为了连续生成输出序列的词元,独立的循环神经网络解码器是基于输入序列的编码信息和输出序列已经看见的或者生成的词元来预测下一个词元。
如下图是机器翻译英文为法语的过程图,可以看出我们解码器不仅会接受编码器编码出来的结果,还会接受其真正翻译为法语的信息,因此我们根本不用担心解码器太长,然后预测错误以后会一直错,因为本来就有正确的信息了。

机器学习&&深度学习——从编码器-解码器架构到seq2seq(机器翻译),机器学习&&深度学习,机器学习,深度学习,机器翻译,人工智能,自然语言处理
再剖析一下这张图,特定的“eos”表示序列结束词元。一旦输出序列生成此词元,模型就会停止预测。
在循环神经网络解码器的初始化时间步,有两个特定的设计决定:首先,特定的“bos”表示序列开始词元;其次,使用循环神经网络编码器最终的隐状态来初始化解码器的隐状态。
接下来将会利用seq2seq来实现机器翻译。文章来源地址https://www.toymoban.com/news/detail-644072.html

到了这里,关于机器学习&&深度学习——从编码器-解码器架构到seq2seq(机器翻译)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【NLP概念源和流】 06-编码器-解码器模型(6/20 部分)

            在机器翻译等任务中,我们必须从一系列输入词映射到一系列输出词。读者必须注意,这与“序列标记”不同,在“序列标记”中,该任务是将序列中的每个单词映射到预定义的类,如词性或命名实体任务。 作者生成         在上面的

    2024年02月14日
    浏览(48)
  • 深入了解Transformer:从编码器到解码器的神经网络之旅

    自2017年问世以来,Transformer模型在自然语言处理(NLP)领域引发了一场革命。它的独特设计和高效性能使其成为了解决复杂语言任务的关键工具。 (1)自注意力机制 Transformer的核心在于自注意力机制。它允许模型在处理每个词时考虑句子中的所有其他词,从而有效捕获长距离依

    2024年01月17日
    浏览(53)
  • LeViT-UNet:transformer 编码器和CNN解码器的有效整合

    levi - unet[2]是一种新的医学图像分割架构,它使用transformer 作为编码器,这使得它能够更有效地学习远程依赖关系。levi - unet[2]比传统的U-Nets更快,同时仍然实现了最先进的分割性能。 levi - unet[2]在几个具有挑战性的医学图像分割基准上取得了比其他法更好的性能,包括Synap

    2024年02月12日
    浏览(47)
  • SpringBoot项目整合OpenFeign、实现动态IP+URL请求、自定义(编码器\解码器)

    OpenFeign 是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中. 启动类加上注解: @EnableDiscoveryClient 动态URL 工具类: FeignUtils.class

    2024年02月02日
    浏览(55)
  • 【人工智能】Transformer 模型数学公式:自注意力机制、多头自注意力、QKV 矩阵计算实例、位置编码、编码器和解码器、常见的激活函数等

    Transformer模型由多个编码器和解码器层组成,其中包含自注意力机制、线性层和层归一化等关键构造模块。虽然无法将整个模型完美地表示为单个数学公式,但我们可以提供一些重要构造模块的数学表示。以下是使用LaTeX格式渲染的部分Transformer关键组件的数学公式: 自注意力

    2024年02月14日
    浏览(56)
  • RK3399Pro-硬件编解码器MPP库快速上手--(二)MPP编码入门

    整个编码分为mpp_create,mpp_init, 再通过mpp的接口mpi-control接口来进行参数设置.一般需要配置三类信息: 码率控制方式(MPPEncRcCfg),通过命令MPP_ENC_RC_CFG配置; 输入控制配置(MppEncPrepCfg),通过命令MPP_ENC_SET_PREP_CFG配置; 协议控制配置(MppEncCodecCfg),通过命令MPP_ENC_SET_CO

    2024年02月02日
    浏览(37)
  • 利用第三方解码器ffmpeg让群晖DSM6.2.4版本的Video Station支持DTS视频编码和EAC3音频编码

    截至2022年5月6日,此方法可用! 本文章可以解决群晖版本6.2.4-25556 Update5(Video Station版本2.5.0-1656)在播放dts、eac3音频编码的视频时提示不支持的问题。 对于群晖6.2.3版本,Video Station版本2.4.9,网上随便搜的方法都可以使用,但是用在6.2.4未必可行。原因在于Video Station版本2

    2023年04月08日
    浏览(42)
  • 机器学习&&深度学习——BERT(来自transformer的双向编码器表示)

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——transformer(机器翻译的再实现) 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 我们首先理解一下相关的一些概念,首先我们知道在自然语言系统中,词是意义的基

    2024年02月12日
    浏览(45)
  • 深入理解深度学习——Transformer:解码器(Decoder)部分

    分类目录:《深入理解深度学习》总目录 相关文章: ·注意力机制(Attention Mechanism):基础知识 ·注意力机制(Attention Mechanism):注意力汇聚与Nadaraya-Watson核回归 ·注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function) ·注意力机制(Attention Mechanism):

    2024年02月10日
    浏览(49)
  • 深度学习RNN,GRU,LSTM文本生成解码器的训练损失讲解(附代码)

    以下以GRU为例讲解RNN作为解码器时如何根据用户、商品特征信息 hidden 生成评价。 解码器部分代码如下: 在训练时,解码器会有两个输入:一是编码器提取的用户、商品特征,二是用户对商品的评价。 评价是文字,在训练开始前已经转换成了Token ID, 比如 I love this item , 每个

    2024年04月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包