Transformer 学习笔记 | Encoder

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 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

相关文章
|
10月前
|
机器学习/深度学习 XML 自然语言处理
Transformer 架构—Encoder-Decoder
Transformer 架构—Encoder-Decoder
402 2
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer:Attention机制、前馈神经网络、编码器与解码器
Transformer:Attention机制、前馈神经网络、编码器与解码器
335 1
|
10月前
|
机器学习/深度学习 编解码
LeViT-UNet:transformer 编码器和CNN解码器的有效整合
LeViT-UNet:transformer 编码器和CNN解码器的有效整合
236 0
|
机器学习/深度学习 自然语言处理 搜索推荐
Transformer之十万个为什么?
这篇博文主要结合个人理解和思考,通过整理和自己的解释列出关于Transformer的部分重要问题(持续更新),看完后会对Transformer有个更好的理解。
Transformer之十万个为什么?
|
1月前
|
机器学习/深度学习 自然语言处理 并行计算
Transformer 学习笔记 | Seq2Seq,Encoder-Decoder,分词器tokenizer,attention,词嵌入
本文记录了学习Transformer过程中的笔记,介绍了Seq2Seq模型及其编码器-解码器结构。Seq2Seq模型通过将输入序列转化为上下文向量,再由解码器生成输出序列,适用于机器翻译、对话系统等任务。文章详细探讨了Seq2Seq的优势与局限,如信息压缩导致的细节丢失和短期记忆限制,并引入注意力机制来解决长序列处理问题。此外,还介绍了分词器(tokenizer)的工作原理及不同类型分词器的特点,以及词嵌入和Transformer架构的基础知识。文中包含大量图表和实例,帮助理解复杂的概念。参考资料来自多个权威来源,确保内容的准确性和全面性。
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer到底解决什么问题?
本文希望围绕“Transformer到底是解决什么问题的”这个角度,阐述NLP发展以来遇到的关键问题和解法,通过这些问题引出Transformer实现原理,帮助初学者理解。
Transformer到底解决什么问题?
|
25天前
|
机器学习/深度学习 自然语言处理 算法
Transformer 学习笔记 | Decoder
本文记录了笔者学习Transformer的过程,重点介绍了填充(padding)和掩码(masking)机制。掩码确保解码器只依赖于之前的位置,避免信息泄露,保持因果关系及训练与推理的一致性。通过线性层和softmax函数生成输出概率,并使用梯度下降和反向传播进行训练。评估指标包括BLEU、ROUGE、METEOR和困惑度等。欢迎指正。
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Transformer
【8月更文挑战第7天】
93 3
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer介绍
Transformer模型于2017年由Google提出,其在BERT中大放异彩,革新了NLP领域。Transformer的优势在于并行计算能力和处理长距离依赖,通过自注意力机制避免了RNN/LSTM的梯度问题。它由编码器和解码器组成,使用位置编码处理序列信息。Transformer在机器翻译、文本生成、问答系统等多个任务中提升效率和准确性,并扩展至计算机视觉和语音识别。随着AI发展,Transformer成为大模型核心技术,推动整个产业进步。
|
机器学习/深度学习 自然语言处理 算法
【Transformer系列(1)】encoder(编码器)和decoder(解码器)
【Transformer系列(1)】encoder(编码器)和decoder(解码器)
4532 0
【Transformer系列(1)】encoder(编码器)和decoder(解码器)