【NLP自然语言处理】深入解析Encoder与Decoder模块:结构、作用与深度学习应用
目录
🍔 Encoder模块
1.1 Encoder模块的结构和作用
1.2 关于Encoder Block
1.3 多头自注意力层(self-attention)
🍔 Decoder模块及Add & Norm模块
3.1 Decoder模块介绍
3.2 Add & Norm模块
3.3 位置编码器Positional Encoding
3.4 Decoder端的输入解析
3.4.1 Decoder端的架构
3.4.2 Decoder在训练阶段的输入解析
3.4.3 Decoder在预测阶段的输入解析
🍔 小结

学习目标
🍀 掌握Encoder模块的结构和作用
🍀 掌握Decoder模块的结构和作用
🍔 Encoder模块
1.1 Encoder模块的结构和作用
- 经典的Transformer结构中的Encoder模块包含6个Encoder Block.
- 每个Encoder Block包含一个多头自注意力层, 和一个前馈全连接层.
1.2 关于Encoder Block
- 在Transformer架构中, 6个一模一样的Encoder Block层层堆叠在一起, 共同组成完整的Encoder, 因此剖析一个Block就可以对整个Encoder的内部结构有清晰的认识.
1.3 多头自注意力层(self-attention)
首先来看self-attention的计算规则图:

- 上述attention可以被描述为将query和key-value键值对的一组集合映射到输出, 输出被计算为values的加权和, 其中分配给每个value的权重由query与对应key的相似性函数计算得来. 这种attention的形式被称为Scaled Dot-Product Attention, 对应的数学公式形式如下:

- 所谓的多头self-attention层, 则是先将Q, K, V经过参数矩阵进行映射, 再做self-attention, 最后将结果拼接起来送入一个全连接层即可.

上述的多头self-attention, 对应的数学公式形式如下: $$ MultiHead(Q,K,V)=Concat(head_1,\cdots , head_h)W^O\\ where \; head_i= Attention(QW_{i}{Q},KW_{i}{K},VW_{i}^{V})\\ 其中\; W_{i}^Q \in \Bbb{R}^{d_{model}\times d_k} ,W_{i}^K \in \Bbb{R}^{d_{model}\times d_k} , W_{i}^V \in \Bbb{R}^{d_{model}\times d_v} ,W_{i}^O \in \Bbb{R}^{hd_v\times d_{model}} $$ 多头self-attention层的作用: 实验结果表明, Multi-head可以在更细致的层面上提取不同head的特征, 总体计算量和单一head相同的情况下, 提取特征的效果更佳.
-
前馈全连接层模块
- 前馈全连接层模块, 由两个线性变换组成, 中间有一个Relu激活函数, 对应的数学公式形式如下:

注意: 原版论文中的前馈全连接层, 输入和输出的维度均为d_model = 512, 层内的连接维度d_ff = 2048, 均采用4倍的大小关系.
前馈全连接层的作用: 单纯的多头注意力机制并不足以提取到理想的特征, 因此增加全连接层来提升网络的能力.
🍔 Decoder模块及Add & Norm模块
3.1 Decoder模块介绍
-
Decoder模块的结构和作用:
- 经典的Transformer结构中的Decoder模块包含6个Decoder Block.
- 每个Decoder Block包含三个子层.
- 一个多头self-attention层
- 一个Encoder-Decoder attention层
- 一个前馈全连接层
-
Decoder Block中的多头self-attention层
- Decoder中的多头self-attention层与Encoder模块一致, 但需要注意的是Decoder模块的多头self-attention需要做look-ahead-mask, 因为在预测的时候"不能看见未来的信息", 所以要将当前的token和之后的token全部mask.
-
Decoder Block中的Encoder-Decoder attention层
- 这一层区别于自注意力机制的Q = K = V, 此处矩阵Q来源于Decoder端经过上一个Decoder Block的输出, 而矩阵K, V则来源于Encoder端的输出, 造成了Q != K = V的情况.
- 这样设计是为了让Decoder端的token能够给予Encoder端对应的token更多的关注.
-
Decoder Block中的前馈全连接层
- 此处的前馈全连接层和Encoder模块中的完全一样.
-
Decoder Block中有2个注意力层的作用: 多头self-attention层是为了拟合Decoder端自身的信息, 而Encoder-Decoder attention层是为了整合Encoder和Decoder的信息.
3.2 Add & Norm模块
-
Add & Norm模块接在每一个Encoder Block和Decoder Block中的每一个子层的后面. 具体来说Add表示残差连接, Norm表示LayerNorm.
- 对于每一个Encoder Block, 里面的两个子层后面都有Add & Norm.
- 对于每一个Decoder Block, 里面的三个子层后面都有Add & Norm.
- 具体的数学表达形式为: LayerNorm(x + Sublayer(x)), 其中Sublayer(x)为子层的输出.
-
Add残差连接的作用: 和其他神经网络模型中的残差连接作用一致, 都是为了将信息传递的更深, 增强模型的拟合能力. 试验表明残差连接的确增强了模型的表现.
-
Norm的作用: 随着网络层数的额增加, 通过多层的计算后参数可能会出现过大, 过小, 方差变大等现象, 这会导致学习过程出现异常, 模型的收敛非常慢. 因此对每一层计算后的数值进行规范化可以提升模型的表现.
3.3 位置编码器Positional Encoding
-
Transformer中直接采用正弦函数和余弦函数来编码位置信息, 如下图所示:

-
需要注意: 三角函数应用在此处的一个重要的优点, 因为对于任意的PE(pos+k), 都可以表示为PE(pos)的线性函数, 大大方便计算. 而且周期性函数不受序列长度的限制, 也可以增强模型的泛化能力.

3.4 Decoder端的输入解析
3.4.1 Decoder端的架构
Transformer原始论文中的Decoder模块是由N=6个相同的Decoder Block堆叠而成, 其中每一个Block是由3个子模块构成, 分别是多头self-attention模块, Encoder-Decoder attention模块, 前馈全连接层模块.
- 6个Block的输入不完全相同:
- 最下面的一层Block接收的输入是经历了MASK之后的Decoder端的输入 + Encoder端的输出.
- 其他5层Block接收的输入模式一致, 都是前一层Block的输出 + Encoder端的输出.
3.4.2 Decoder在训练阶段的输入解析
- 从第二层Block到第六层Block的输入模式一致, 无需特殊处理, 都是固定操作的循环处理.
- 聚焦在第一层的Block上: 训练阶段每一个time step的输入是上一个time step的输入加上真实标签序列向后移一位. 具体来说, 假设现在的真实标签序列等于"How are you?", 当time step=1时, 输入张量为一个特殊的token, 比如"SOS"; 当time step=2时, 输入张量为"SOS How"; 当time step=3时, 输入张量为"SOS How are", 以此类推...
- 注意: 在真实的代码实现中, 训练阶段不会这样动态输入, 而是一次性的把目标序列全部输入给第一层的Block, 然后通过多头self-attention中的MASK机制对序列进行同样的遮掩即可.
3.4.3 Decoder在预测阶段的输入解析
- 同理于训练阶段, 预测时从第二层Block到第六层Block的输入模式一致, 无需特殊处理, 都是固定操作的循环处理.
- 聚焦在第一层的Block上: 因为每一步的输入都会有Encoder的输出张量, 因此这里不做特殊讨论, 只专注于纯粹从Decoder端接收的输入. 预测阶段每一个time step的输入是从time step=0, input_tensor="SOS"开始, 一直到上一个time step的预测输出的累计拼接张量. 具体来说:
- 当time step=1时, 输入的input_tensor="SOS", 预测出来的输出值是output_tensor="What";
- 当time step=2时, 输入的input_tensor="SOS What", 预测出来的输出值是output_tensor="is";
- 当time step=3时, 输入的input_tensor="SOS What is", 预测出来的输出值是output_tensor="the";
- 当time step=4时, 输入的input_tensor="SOS What is the", 预测出来的输出值是output_tensor="matter";
- 当time step=5时, 输入的input_tensor="SOS What is the matter", 预测出来的输出值是output_tensor="?";
- 当time step=6时, 输入的input_tensor="SOS What is the matter ?", 预测出来的输出值是output_tensor="EOS", 代表句子的结束符, 说明解码结束, 预测结束.
🍔 小结
-
Encoder模块
- 经典的Transformer架构中的Encoder模块包含6个Encoder Block.
- 每个Encoder Block包含两个子模块, 分别是多头自注意力层, 和前馈全连接层.
- 多头自注意力层采用的是一种Scaled Dot-Product Attention的计算方式, 实验结果表明, Mul ti-head可以在更细致的层面上提取不同head的特征, 比单一head提取特征的效果更佳.
- 前馈全连接层是由两个全连接层组成, 线性变换中间增添一个Relu激活函数, 具体的维度采用4倍关系, 即多头自注意力的d_model=512, 则层内的变换维度d_ff=2048.
-
Decoder模块
- 经典的Transformer架构中的Decoder模块包含6个Decoder Block.
- 每个Decoder Block包含3个子模块, 分别是多头自注意力层, Encoder-Decoder Attention层, 和前馈全连接层.
- 多头自注意力层采用和Encoder模块一样的Scaled Dot-Product Attention的计算方式, 最大的 区别在于需要添加look-ahead-mask, 即遮掩"未来的信息".
- Encoder-Decoder Attention层和上一层多头自注意力层最主要的区别在于Q != K = V, 矩阵Q来源于上一层Decoder Block的输出, 同时K, V来源于Encoder端的输出.
- 前馈全连接层和Encoder中完全一样.
-
Add & Norm模块
- Add & Norm模块接在每一个Encoder Block和Decoder Block中的每一个子层的后面.
- 对于每一个Encoder Block, 里面的两个子层后面都有Add & Norm.
- 对于每一个Decoder Block, 里面的三个子层后面都有Add & Norm.
- Add表示残差连接, 作用是为了将信息无损耗的传递的更深, 来增强模型的拟合能力.
- Norm表示LayerNorm, 层级别的数值标准化操作, 作用是防止参数过大过小导致的学习过程异常, 模型收敛特别慢的问题.
-
位置编码器Positional Encoding
- Transformer中采用三角函数来计算位置编码.
- 因为三角函数是周期性函数, 不受序列长度的限制, 而且这种计算方式可以对序列中不同位置的编码的重要程度同等看待.
-
在Transformer结构中的Decoder模块的输入, 区分于不同的Block, 最底层的Block输入有其特殊的地方. 第二层到第六层的输入一致, 都是上一层的输出和Encoder的输出.
-
最底层的Block在训练阶段, 每一个time step的输入是上一个time step的输入加上真实标签序列向后移一位. 具体来看, 就是每一个time step的输入序列会越来越长, 不断的将之前的输入融合进来.
-
最底层的Block在训练阶段, 真实的代码实现中, 采用的是MASK机制来模拟输入序列不断添加的过程.
-
最底层的Block在预测阶段, 每一个time step的输入是从time step=0开始, 一直到上一个time step的预测值的累积拼接张量. 具体来看, 也是随着每一个time step的输入序列会越来越长. 相比于训练阶段最大的不同是这里不断拼接进来的token是每一个time step的预测值, 而不是训练阶段每一个time step取得的groud truth值.


💘若能为您的学习之旅添一丝光亮,不胜荣幸💘
🐼期待您的宝贵意见,让我们共同进步共同成长🐼
相关文章:
【NLP自然语言处理】深入解析Encoder与Decoder模块:结构、作用与深度学习应用
目录 🍔 Encoder模块 1.1 Encoder模块的结构和作用 1.2 关于Encoder Block 1.3 多头自注意力层(self-attention) 🍔 Decoder模块及Add & Norm模块 3.1 Decoder模块介绍 3.2 Add & Norm模块 3.3 位置编码器Positional Encoding 3.4 Decod…...
【JAVA EE】多线程、锁、线程池的使用
目录 创建线程 方法一:继承Thread类来创建一个线程类 方法二:实现Runnable,重写run 线程等待 获取当前线程引用 休眠当前线程 线程的状态 synchronized synchronized的特性 1、互斥 2、刷新内存 死锁 死锁的四个必要条件 避免死…...
云计算:定义、类型及对企业的影响
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 云计算:定义、类型及对企业的影响 云计算:定义、类型及对企业的影响 云计算:定义、类型及对企…...
大数据面试题--kafka夺命连环问
1、kafka消息发送的流程? 在消息发送过程中涉及到两个线程:一个是 main 线程和一个 sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给双端队列,sender 线程不断从双端队列 RecordAccumulator 中拉取…...
【大模型】Spring AI Alibaba 对接百炼平台大模型使用详解
目录 一、前言 二、Spring AI概述 2.1 spring ai是什么 2.2 Spring AI 核心能力 2.3 Spring AI 应用场景 三、Spring AI Alibaba 介绍 3.1 Spring AI Alibaba 是什么 3.2 Spring AI Alibaba 核心特点 3.3 Spring AI Alibaba 应用场景 四、SpringBoot 对接Spring AI Al…...
Zabbix如何配置将信息发送到邮件
申请邮箱,下面以QQ邮箱为例 1.1登录邮箱后,点击设置->账号 1.2开启服务 1.3点击生成授权码(这里生成的授权码记得保存,后面要用到) 创建报警媒介类型 2.1点击管理/媒介/Email 2.2编辑 Email,这里配置的…...
jmeter常用配置元件介绍总结之前置处理器、测试片段
系列文章目录 安装jmeter jmeter常用配置元件介绍总结之前置处理器、测试片段 6.前置处理器6.1用户参数6.2取样器超时6.3.测试片段6.4JSR223 PreProcessor6.5.JDBC PreProcessor 6.前置处理器 在取样器请求之前执行的操作,优先级比取样器高,用来处理一些…...
Redis2:Redis数据结构介绍、通用命令、String类型、Key的层级格式
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...
jenkins流水线pipeline
创建项目 1. 新建item 并选择pipeline 1.1 和普通项目配置的区别 普通项目配置目录: pipeline项目目录: pipeline的两种语法 声明式语法 2. 配置 2.1 流水线配置 2.2 选择声明式 声明式需要添加一个名为Jenkinsfile的文件实现流水线 Jenkinsfile的…...
【计网】基于TCP协议的Echo Server程序实现与多版本测试
目录 前言: 1、InitServer类的实现 1.1. 创建流式套接字 1.2. bind 绑定一个固定的网络地址和端口号 1.3.listen监听机制 1.4.完整代码 2. 循环接收接口与服务接口 2.1.accept函数讲解 讲个商场拉客的故事方便我们理解: 2.2.服务接口实现 3.服…...
「QT」几何数据类 之 QVector2D 二维向量类
✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...
深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
文章目录 🌺深度学习面试八股汇总🌺权重初始化零初始化 (Zero Initialization)随机初始化 (Random Initialization)Xavier 初始化(Glorot 初始化)He 初始化正交初始化(Orthogonal Initialization)预训练模型…...
Rust: 利用 chrono 库实现日期和字符串互相转换
在 Rust 中,日期和字符串之间的转换通常涉及 chrono 库,这是一个功能强大的日期和时间处理库。以下是如何在 Rust 中将日期转换为字符串以及将字符串转换为日期的示例。 首先,你需要在你的 Cargo.toml 文件中添加 chrono 依赖: …...
【IEEE/EI会议】第八届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2025)
会议通知 会议时间:2025年4月25-27日 会议地点:中国南京 会议官网:www.aemcse.org 会议简介 第八届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2025)由南京信息工程大学主办,将于2025年4月25日…...
volatile 关键字的作用学习
转自: chatgpt 1.介绍 在 C 中,volatile 关键字的作用是告诉编译器一个变量的值可能在任何时刻被外部因素改变,编译器不能对其进行优化。这对于那些可能由硬件、其他线程或信号处理程序更改的变量特别有用。 当一个变量被声明为 volatile 时ÿ…...
数据字典是什么?和数据库、数据仓库有什么关系?
一、数据字典的定义及作用 数据字典是一种对数据的定义和描述的集合,它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字典的主要作用如下: 1. 对于数据开发者来说,数据字典包含了关于数据结构和内容的清晰…...
Docker平台搭建方法
Docker平台搭建方法 1.1在VMware中创建两个虚拟机,只需要1个网卡,连接192.168.200.0网络。 虚拟机分配2个CPU,2G内存,60G硬盘,主机名分别为server和client,IP地址分别为192.168.200.137和192.168.200.138。server节点还兼做regis…...
JavaScript数组
目录 1. 基本概念 2. 创建数组对象 2.1 字面量创建 2.2 构造函数创建 2.3 静态方法Array.of() 2.4 静态方法Array.from() 2.5 空槽位 3. 常用实例方法 3.1 修改方法 3.11 push 和 unshift 3.12 shift 和 pop 3.13 fill 3.14 cpoyWithin 3.15 reverse 3.16 sort …...
产品经理如何使用项目管理软件推进复杂项目按时上线
前言 相信很多产品同学或多或少都有过这样的经历:平时没有听到任何项目延期风险,但到了计划时间却迟迟无法提测……评审时没有任何argue,提测后发现开发的功能不是自己想要的……费劲九牛二虎之力终于让项目上线了,然而发现成果达…...
构建基于 DCGM-Exporter, Node exporter,PROMETHEUS 和 GRAFANA 构建算力监控系统
目录 引言工具作用概述DCGM-ExporterNode exporterPROMETHEUSGRAFANA小结 部署单容器DCGM-ExporterNode exporterPROMETHEUSGRAFANANode exporterDCGM-Exporter 多容器Node exporterDCGM-ExporterDocker Compose 参考 引言 本文的是适用对象,是希望通过完全基于Doc…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...

