Transformer 学习笔记 | Encoder

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,1000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 本文记录了学习Transformer模型过程中对Encoder部分的理解,包括多头自注意力机制(Multi-Head Self-Attention)和前馈网络(Feed-Forward Network)的工作原理。每个Encoder Layer包含残差连接(Residual Connection)和层归一化(Layer Normalization),以缓解梯度消失问题并稳定训练过程。文中详细解释了Q、K、V的含义及缩放点积注意力机制(Scaled Dot-Product Attention),并通过图解展示了各组件的工作流程。欢迎指正。

前言

本文是在学习Transformer过程中记录的笔记,可能有一些理解不到位的错误。望指正。


Pasted image 20250218093336.png

在 Transformer 模型中,Encoder 部分由多个相同的 Encoder Layer 堆叠而成,每个 Encoder Layer 包含两个主要子层,分别是 Multi-Head Self-Attention (多头自注意力机制) 和 Position-wise Feed-Forward Network(前馈网络)。

Multi-Head Self-Attention由 Scaled Dot-product Attention 和 Multi-Head Attention 以及 Self Attention 和 Add & Norm 组成。

(1)多头自注意力层处理
每个 Encoder 子模块在接收到输入后,首先会将其传递到多头自注意力层(Multi-Head Self-Attention layer)。在这一层中,通过多头自注意力机制(如前面所述,查询、键、值都来自同一个输入序列自身)去计算输入序列不同位置之间的关联关系,生成相应的自注意力输出。

(2)前馈层处理
自注意力层的输出紧接着被传递到前馈层(Feedforward layer)。前馈层一般是由全连接网络等构成,对自注意力层输出的特征做进一步的非线性变换,提取更复杂、高层次的特征,然后将其输出向上发送到下一个编码器(如果不是最后一个 Encoder 的话),以便后续 Encoder 子模块继续进行处理。

下图是一层Encoder Layer 的图解。
Pasted image 20250218094635.png

  • Multi-Head Attention (多头注意力机制)
  • Residual connection (残差连接)
  • Normalisation (层归一化)
  • Position-wise Feed-Forward Networks(前馈网络)

Residual connection (残差连接)

"残差" 的字面意思是 "剩余的差异" 或 "误差"。 在神经网络中,残差 指的是 期望输出与模型实际输出之间的差异。 但在 残差连接 的语境下,"残差" 的含义略有不同,更侧重于 "输入与输出的差异部分" 或者说 "模型学习到的输入之外的 额外信息"

数学定义:假设我们有一个神经网络层,输入是 x,输出是 F(x)(F(x) 表示对 x 进行某种变换,例如自注意力计算或前馈网络计算)。

  • 没有残差连接: 输出就是 F(x)。
  • 有残差连接: 输出是 x + F(x)。 这里,F(x) 就是 残差,它表示网络层学习到的 相对于输入的变化。

过程:

1. 输入: 将网络层(例如,自注意力层或前馈网络层)的输入 x 复制一份。
2. 变换: 对输入 x 进行正常的变换,得到 F(x)。        
3. 相加: 将 F(x) 与 原始输入 x 相加,得到最终输出:x + F(x)。
简而言之,残差连接就是在网络层的输出上加上它的输入。

总结

  • 残差连接 将子层的输出添加到其输入上,这样可以形成一个短路,允许梯度直接流过网络层,有助于缓解深层网络中的梯度消失问题。

  • 数学上,残差连接可以表示为: $$Residual=x+SubLayer(x)$$ 其中 x 是子层的输入 $SubLayer(x)$ 是子层的输出。

Normalisation (层归一化)

  1. 输入 (X + Sublayer_output): 层归一化的输入是 残差连接后的结果 $X + Sublayer_output$。
  2. 计算均值和方差 (Mean and Variance): 对于 每个样本 (在 Transformer 中,可以理解为序列中的每个 token 位置),计算其 所有特征维度 的均值 (mean) 和方差 (variance)。 注意: 层归一化是 对每个样本 内部 的特征维度进行归一化,而不是像 Batch Normalization 那样对整个 batch 的样本进行归一化。
  3. 归一化 (Normalization): 使用计算出的均值和方差,对每个样本的特征进行 标准化,使其均值为 0,方差为 1。
  4. 缩放和偏移 (Scale and Shift - 可选): 为了增加灵活性,层归一化通常还会引入两个 可学习的参数缩放系数 γ (gamma)偏移量 β (beta)。 归一化后的结果会再经过 缩放和偏移 操作: y = γ * normalized_x + β。 模型可以学习到最佳的缩放和偏移参数。

    层归一化可以 稳定神经网络的训练过程。 它可以 减少 Internal Covariate Shift (内部协变量偏移) 现象,即网络层输入分布在训练过程中不断变化的问题。 稳定的输入分布有助于网络更快、更稳定地学习。


将这两个操作结合在一起,“Add & Norm” 的步骤如下:

  1. 计算子层的输出: $SubLayer(x)$
  2. 执行残差连接:$Residual=x+SubLayer(x)$
  3. 应用层归一化: $Output=LayerNorm(Residual)$

所以,“Add & Norm” 的整个过程可以表示为: $Output=LayerNorm(x+SubLayer(x))$

多头注意力

Q,K,V 叫法的起源 Q、K 和 V 分别代表 Query(查询)、Key(键)和 Value(值)。这些术语的来源和它们在注意力机制中的角色都与数据库的查询概念有相似之处。

在注意力机制中:

  1. Query (Q): 它代表了正在询问的信息或关心的上下文。在自注意力机制中,每个序列元素都有一个对应的查询,它试图从其他部分找到相关信息。
  2. Key (K): 这些是可以查询的条目或“索引”。在自注意力机制中,每个序列元素都有一个对应的键。
  3. Value (V): 对于每一个“键”,都有一个与之关联的“值”,它代表实际的信息内容。当查询匹配到一个特定的键时,其对应的值就会被选中并返回。

这种思路与数据库查询非常相似,可以将 Query 看作是搜索查询,Key 看作是数据库索引,而 Value 则是实际的数据库条目。

在 "Attention Is All You Need" 这篇 Transformer 论文中,这些术语首次被广泛地采纳和使用。注意力机制的核心思想是:对于给定的 Query,计算其与所有 Keys 的相似度,然后用这些相似度对 Values 进行加权求和,得到最终的输出。

多头(Multi-Head) 的方式是将多个 head 的输出 z,进行拼接concat)后,通过线性变换得到最后的输出 z

Pasted image 20250218102211.png

缩放点积注意力(Scaled Dot-Product Attention)

Pasted image 20250218101324.png

也就是说,Q、K、V 都是对输入 x 的线性映射:

  • query = linear_q(x)
  • key = linear_k(x)
  • value = linear_v(x)

注意:这里的 linear_q(x),linear_k(x),linear_v(x) 相互独立,通过 softmax 函数对 Query(Q)和 Key(K)向量缩放点积的分数进行归一化,得到权重系数(attention weights),值都介于0到1之间。按照公式: $$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$$ 使用权重系数对$Value(V)$向量进行加权求和,得到最终的注意力输出 $Attention(Q, K, V)$。

Pasted image 20250218101653.png

其中,$\sqrt{d_k}$ 为缩放因子。这个缩放因子可以防止内积过大,防止它经过 softmax 后落入饱和区间,因为饱和区的梯度几乎为0,容易发生梯度消失。

在多头注意力机制中,参数 $dk$ (每个头的维度)通常是由总的模型维度 $d{model}$ 和多头注意力的头数 (h) 决定的。具体来说,$d_k$ 通常是这样计算的:
$$d_k=\frac{d_{\mathrm{model}}}h$$

总结

Pasted image 20250218101122.png

参考资料

https://www.datawhale.cn/learn/summary/87
https://www.researchgate.net/publication/355061779_Lightweight_Transformer_in_Federated_Setting_for_Human_Activity_Recognition?_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6Il9kaXJlY3QiLCJwYWdlIjoiX2RpcmVjdCJ9fQ
https://github.com/xmu-xiaoma666/External-Attention-pytorch

相关文章
|
机器学习/深度学习 自然语言处理 搜索推荐
Transformer之十万个为什么?
这篇博文主要结合个人理解和思考,通过整理和自己的解释列出关于Transformer的部分重要问题(持续更新),看完后会对Transformer有个更好的理解。
Transformer之十万个为什么?
|
安全 Linux iOS开发
Anaconda下载及安装保姆级教程(详细图文)
Anaconda下载及安装保姆级教程(详细图文)
34654 1
Anaconda下载及安装保姆级教程(详细图文)
|
9月前
|
机器学习/深度学习 自然语言处理 算法
Transformer 学习笔记 | Decoder
本文记录了笔者学习Transformer的过程,重点介绍了填充(padding)和掩码(masking)机制。掩码确保解码器只依赖于之前的位置,避免信息泄露,保持因果关系及训练与推理的一致性。通过线性层和softmax函数生成输出概率,并使用梯度下降和反向传播进行训练。评估指标包括BLEU、ROUGE、METEOR和困惑度等。欢迎指正。
|
9月前
|
机器学习/深度学习 自然语言处理 并行计算
Transformer 学习笔记 | Seq2Seq,Encoder-Decoder,分词器tokenizer,attention,词嵌入
本文记录了学习Transformer过程中的笔记,介绍了Seq2Seq模型及其编码器-解码器结构。Seq2Seq模型通过将输入序列转化为上下文向量,再由解码器生成输出序列,适用于机器翻译、对话系统等任务。文章详细探讨了Seq2Seq的优势与局限,如信息压缩导致的细节丢失和短期记忆限制,并引入注意力机制来解决长序列处理问题。此外,还介绍了分词器(tokenizer)的工作原理及不同类型分词器的特点,以及词嵌入和Transformer架构的基础知识。文中包含大量图表和实例,帮助理解复杂的概念。参考资料来自多个权威来源,确保内容的准确性和全面性。
|
机器学习/深度学习 算法 计算机视觉
深度学习目标检测系列:一文弄懂YOLO算法|附Python源码
本文是目标检测系列文章——YOLO算法,介绍其基本原理及实现细节,并用python实现,方便读者上手体验目标检测的乐趣。
53374 0
|
10月前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
12203 46
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
8月前
|
人工智能 编解码 自动驾驶
RF-DETR:YOLO霸主地位不保?开源 SOTA 实时目标检测模型,比眨眼还快3倍!
RF-DETR是首个在COCO数据集上突破60 mAP的实时检测模型,结合Transformer架构与DINOv2主干网络,支持多分辨率灵活切换,为安防、自动驾驶等场景提供高精度实时检测方案。
1424 6
RF-DETR:YOLO霸主地位不保?开源 SOTA 实时目标检测模型,比眨眼还快3倍!
|
8月前
|
数据安全/隐私保护 UED 异构计算
【大模型私有化部署要花多少钱?】一张图看懂你的钱用在哪
本文探讨了高性价比实现DeepSeek大模型私有化部署的方法,分为两部分: 一是定义大模型性能指标,包括系统级(吞吐量、并发数)与用户体验级(首token生成时间、单token生成时间)指标,并通过roofline模型分析性能瓶颈; 二是评估私有化部署成本,对比不同硬件(如H20和4090)及模型选择,结合业务需求优化资源配置。适合关注数据安全与成本效益的企业参考。
【大模型私有化部署要花多少钱?】一张图看懂你的钱用在哪