Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【现代深度学习技术】现代循环神经网络06:编码器-解码器架构

【现代深度学习技术】现代循环神经网络06:编码器-解码器架构

作者头像
Francek Chen
发布于 2025-05-05 05:00:29
发布于 2025-05-05 05:00:29
19200
代码可运行
举报
运行总次数:0
代码可运行

深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning

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

图1 编码器-解码器架构

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

一、编码器

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)转换为编码后的状态。注意,此步骤可能需要额外的输入,例如:输入序列的有效长度,这在机器翻译与数据集中进行了解释。为了逐个地生成长度可变的词元序列,解码器在每个时间步都会将输入(例如:在前一时间步生成的词元)和编码后的状态映射成当前时间步的输出词元。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#@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

三、合并编码器和解码器

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#@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)

  “编码器-解码器”体系架构中的术语状态会启发人们使用具有状态的神经网络来实现该架构。在下一节中,我们将学习如何应用循环神经网络,来设计基于“编码器-解码器”架构的序列转换模型。

小结

  • “编码器-解码器”架构可以将长度可变的序列作为输入和输出,因此适用于机器翻译等序列转换问题。
  • 编码器将长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。
  • 解码器将具有固定形状的编码状态映射为长度可变的序列。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
encode-decode结构
encode的输入是变长的序列向量,每个向量之间会在batch内填充为固定长度,神经网络限制,不能输入变长的向量。 encode输出固定长度的向量,但序列数量和输入数量保持不变,也就是一个输入产生一个输出。每个输出之间是独立的。 encode的网络可以不固定,比如常见nlp任务用rnn,。 encode将可变序列编码为固定状态,decode将固定状态输入映射为其它可变序列。 decode的网络可以不固定,其中ctc 结合search策略也可以用来做decode。
全栈程序员站长
2022/11/08
9140
encode-decode结构
【现代深度学习技术】现代循环神经网络07:序列到序列学习(seq2seq)
  正如我们在机器翻译与数据集中看到的,机器翻译中的输入序列和输出序列都是长度可变的。为了解决这类问题,我们在编码器-解码器架构中设计了一个通用的”编码器-解码器“架构。本节,我们将使用两个循环神经网络的编码器和解码器,并将其应用于序列到序列(sequence to sequence,seq2seq)类的学习任务。
Francek Chen
2025/05/06
1960
【现代深度学习技术】现代循环神经网络07:序列到序列学习(seq2seq)
【现代深度学习技术】注意力机制04:Bahdanau注意力
  我们试着找到灵感:在为给定文本序列生成手写的挑战中,Graves设计了一种可微注意力模型,将文本字符与更长的笔迹对齐,其中对齐方式仅向一个方向移动。受学习对齐想法的启发,Bahdanau等人提出了一个没有严格单向对齐限制的可微注意力模型。在预测词元时,如果不是所有输入词元都相关,模型将仅对齐(或参与)输入序列中与当前预测相关的部分。这是通过将上下文变量视为注意力集中的输出来实现的。
Francek Chen
2025/05/11
880
【现代深度学习技术】注意力机制04:Bahdanau注意力
【现代深度学习技术】注意力机制07:Transformer
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/05/21
2020
【现代深度学习技术】注意力机制07:Transformer
编码器-解码器循环神经网络全局注意力模型简介
编码器-解码器模型提供了使用递归神经网络来解决有挑战性的序列-序列预测问题的方法,比如机器翻译等。
花落花飞去
2018/02/06
6.6K0
编码器-解码器循环神经网络全局注意力模型简介
动手学深度学习(十三) NLP机器翻译
机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT)。 主要特征:输出是单词序列而不是单个单词。 输出序列的长度可能与源序列的长度不同。
致Great
2020/02/25
9150
动手学深度学习(十三)  NLP机器翻译
动手学深度学习(十四) NLP注意力机制和Seq2seq模型
在“编码器—解码器(seq2seq)”⼀节⾥,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息。当编码器为循环神经⽹络时,背景变量来⾃它最终时间步的隐藏状态。将源序列输入信息以循环单位状态编码,然后将其传递给解码器以生成目标序列。然而这种结构存在着问题,尤其是RNN机制实际中存在长程梯度消失的问题,对于较长的句子,我们很难寄希望于将输入的序列转化为定长的向量而保存所有的有效信息,所以随着所需翻译句子的长度的增加,这种结构的效果会显著下降。
致Great
2020/02/25
5140
动手学深度学习(十四) NLP注意力机制和Seq2seq模型
TensorFlow从1到2(十)带注意力机制的神经网络机器翻译
机器翻译和语音识别是最早开展的两项人工智能研究。今天也取得了最显著的商业成果。 早先的机器翻译实际脱胎于电子词典,能力更擅长于词或者短语的翻译。那时候的翻译通常会将一句话打断为一系列的片段,随后通过复杂的程序逻辑对每一个片段进行翻译,最终组合在一起。所得到的翻译结果应当说似是而非,最大的问题是可读性和连贯性非常差。 实际从机器学习的观点来讲,这种翻译方式,也不符合人类在做语言翻译时所做的动作。其实以神经网络为代表的机器学习,更多的都是在“模仿”人类的行为习惯。 一名职业翻译通常是这样做:首先完整听懂要翻译的语句,将语义充分理解,随后把理解到的内容,用目标语言复述出来。 而现在的机器翻译,也正是这样做的,谷歌的seq2seq是这一模式的开创者。 如果用计算机科学的语言来说,这一过程很像一个编解码过程。原始的语句进入编码器,得到一组用于代表原始语句“内涵”的数组。这些数组中的数字就是原始语句所代表的含义,只是这个含义人类无法读懂,是需要由神经网络模型去理解的。随后解码过程,将“有含义的数字”解码为对应的目标语言。从而完成整个翻译过程。这样的得到的翻译结果,非常流畅,具有更好的可读性。
俺踏月色而来
2019/05/14
7710
使用基于注意力的编码器-解码器实现医学图像描述
图像描述是生成图像文本描述的过程。它使用自然语言处理和计算机视觉来为图像生成描述的文本字幕。一幅图像可以有很多个不同的描述,但是只要它正确地描述了图像,并且描述涵盖了图像中的大部分信息就可以说是没问题的。下面是示例图片和生成的描述文字。
deephub
2022/11/11
5410
使用基于注意力的编码器-解码器实现医学图像描述
LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】
这个架构常用于编码器-解码器架构是一种常用于序列到序列(Seq2Seq)任务的深度学习架构。序列到序列的问题举例:NLP问题(机器翻译、问答系统和文本摘要)。
来杯Sherry
2023/09/26
6980
LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】
pytorch实现的transformer代码分析
代码来源:https://github.com/graykode/nlp-tutorial/blob/master/5-1.Transformer/Transformer-Torch.py
西西嘛呦
2020/08/26
9650
在PyTorch中使用Seq2Seq构建的神经机器翻译模型
在这篇文章中,我们将构建一个基于LSTM的Seq2Seq模型,使用编码器-解码器架构进行机器翻译。
deephub
2020/09/23
1.8K0
在PyTorch中使用Seq2Seq构建的神经机器翻译模型
循环神经网络——下篇【深度学习】【PyTorch】【d2l】
设计多个隐藏层,目的是为了获取更多的非线性性。深度循环神经网络需要大量的调参(如学习率和修剪) 来确保合适的收敛,模型的初始化也需要谨慎。
来杯Sherry
2023/09/19
4750
循环神经网络——下篇【深度学习】【PyTorch】【d2l】
为什么 BERT 仅使用 Transformer 的编码器部分,而不使用解码器部分?
在自然语言处理领域,BERT (Bidirectional Encoder Representations from Transformers) 通过 Transformer 的编码器实现了双向预训练,并且在多个任务中取得了卓越的表现。
编程小妖女
2025/01/20
1660
为什么 BERT 仅使用 Transformer 的编码器部分,而不使用解码器部分?
基于Seq2Seq结构和注意力机制的神经机器翻译
神经机器翻译(NMT)是一种端到端自动翻译学习方法。它的优势在于它直接学习从输入文本到相关输出文本的映射。它已被证明比传统的基于短语的机器翻译更有效,而且后者需要更多的精力来设计模型。另一方面,NMT模型的训练成本很高,尤其是在大规模翻译数据集上。由于使用了大量参数,它们在推理时的速度也明显变慢。其他限制是翻译稀有单词且无法翻译输入句子的所有部分时的鲁棒性。为了克服这些问题,已经有一些解决方案,例如使用注意力机制来复制稀有词[2]。
deephub
2021/07/01
8170
用Keras LSTM构建编码器-解码器模型
本文是关于如何使用Python和Keras开发一个编解码器模型的实用教程,更精确地说是一个序列到序列(Seq2Seq)。在上一个教程中,我们开发了一个多对多翻译模型,如下图所示:
磐创AI
2020/11/25
2K0
用Keras LSTM构建编码器-解码器模型
python用于NLP的seq2seq模型实例:用Keras实现神经机器翻译
在本文中,我们将看到如何创建语言翻译模型,这也是神经机器翻译的非常著名的应用。我们将使用seq2seq通过Python的Keras库创建我们的语言翻译模型。
拓端
2021/01/13
1.4K0
python用于NLP的seq2seq模型实例:用Keras实现神经机器翻译
在本文中,我们将看到如何创建语言翻译模型,这也是神经机器翻译的非常著名的应用。我们将使用seq2seq体系结构通过Python的Keras库创建我们的语言翻译模型。
拓端
2020/09/26
1.5K0
【机器学习】--- 序列建模与变分自编码器(VAE)
在机器学习领域,序列建模与变分自编码器(Variational Autoencoder, VAE) 是两个至关重要的技术,它们在处理时间依赖性数据与复杂数据生成任务中都发挥着关键作用。序列建模通常用于自然语言处理、语音识别等需要保持顺序关系的任务,而VAE是生成模型的典型代表,旨在学习数据的分布并生成类似数据。将两者结合的模型在序列生成、数据增强、预测等任务上有广泛应用。本文将详细剖析序列建模与VAE的基本原理,阐述二者结合的架构,并提供详细的代码示例。
Undoom
2024/09/23
4540
Transformer:Attention机制、前馈神经网络、编码器与解码器
在自然语言处理领域,Transformer模型已经成为了主流的深度学习架构。凭借其强大的处理能力和高效的性能,Transformer在许多NLP任务中都取得了显著的成果。而在Transformer模型中,Attention机制起到了至关重要的作用。
JOYCE_Leo16
2024/03/22
2.7K0
推荐阅读
相关推荐
encode-decode结构
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验