☰
注意力机制与 Transformer(Attention + Transformers) 补充
2026/10/4 10:22:13 网站建设 项目流程

第一篇:从 RNN 到 Attention(为什么要引入注意力?)

1.1 RNN 的局限与瓶颈

任务背景:序列到序列(Seq2Seq)任务,例如机器翻译(英语“we see the sky” -> 意大利语“vediamo il cielo”)。

  • 编码器-解码器架构(Encoder-Decoder):

    • 编码器(Encoder):,逐步处理输入序列,输出最终隐藏状态。

    • 解码器(Decoder):,根据上一个输出​、上一个状态以及上下文向量 c预测当前输出。

  • 💡 致命瓶颈:通常将编码器的最后一个隐藏状态直接作为上下文向量 c。这意味着无论输入序列多长(哪怕 T=1000),所有信息都必须被压缩进这一个固定长度的向量 c 中,长序列信息必然严重丢失。

1.2 Bahdanau Attention(RNN + Attention)

核心思想:打破固定长度 c 的瓶颈。在解码器的每一个时间步,动态计算一个专属的上下文向量​,让它“回看”整个输入序列。

  • 步骤 1:计算对齐分数(Alignment Scores)


其中是一个简单的线性层(Linear Layer),将解码器前一步状态​ 和编码器第 i 步状态​ 拼接后映射为一个标量分数​。

  • 步骤 2:Softmax 归一化得到注意力权重


满足且。这代表在生成当前词时,对输入序列每个词关注度的大小。

  • 步骤 3:计算上下文向量(Context Vector)


(这是一个对编码器隐藏状态的加权线性组合)。

  • 步骤 4:解码器更新

  • 💡 直观理解与可视化:

    • 翻译 "vediamo"(we see)时,注意力权重​ 和​ 较高(对应 "we" 和 "see")。

    • 翻译 "il"(the)时,注意力权重​ 较高(对应 "the")。

    • 注意力矩阵图(Attention Weight Matrix):横轴是输入词,纵轴是输出词。对角线上亮起表示顺序对应;如果是倒装句,注意力会偏离对角线,完美捕捉语法结构(如欧洲经济区那个案例)。

  • ✅ 核心优点:所有操作都是可微的!不需要人为监督网络“应该看哪里”,只要定义好损失函数,梯度会自动反向传播,让网络学会如何对齐。

第二篇:通用的 Attention 机制(Q, K, V)

2.1 从单查询到多查询

我们将 RNN 的架构剥离,只保留 Attention 操作。把解码器状态看作查询(Query),编码器状态看作数据(Data)。

  • 单查询:q 与每个​ 计算点积相似度,经过 Softmax 得到权重​,输出​。

  • 💡 缩放点积(Scaled Dot-Product):当向量维度 D 很大时,点积结果会很大,导致 Softmax 进入饱和区(梯度趋近于0)。因此需要除以​​。

2.2 引入 Key 和 Value 矩阵

为了让数据扮演不同的角色,我们引入了键矩阵()和值矩阵(​)。

  • 输入:查询向量,数据向量。

  • 投影:

    • 键(Key):,维度。

    • 值(Value):​,维度。

  • 计算步骤(MATLAB格式):

    % 1. 计算相似度矩阵 E E = (Q * K') / sqrt(D_Q); % 形状: [N_Q x N_X] % 2. Softmax 归一化得到注意力权重 A (沿着 N_X 维度) A = softmax(E, dim=2); % 形状: [N_Q x N_X] % 3. 计算输出 Y (值的加权线性组合) Y = A * V; % 形状: [N_Q x D_V]
  • 💡 直观比喻(搜索引擎):

    • Query:你在搜索框输入的关键词。

    • Key:网页的标题(用来和你的搜索词匹配)。

    • Value:网页的正文内容(当你点击标题后实际获取的信息)。

2.3 交叉注意力(Cross-Attention) vs 自注意力(Self-Attention)

  • Cross-Attention:Q 来自一个序列(如解码器),K,V 来自另一个序列(如编码器)。用于机器翻译、图文问答等。

  • Self-Attention:Q,K,V 全部来自同一个输入序列 X。


(通常简写为融合矩阵乘法:)

第三篇:Self-Attention 的局限与改进

3.1 置换等变性(Permutation Equivariance)

  • 性质:如果打乱输入序列的顺序,输出向量将完全保持不变,只是顺序也对应被打乱。即 F(σ(X))=σ(F(X))。

  • 💡 致命问题:Self-Attention 本身完全不知道序列的先后顺序!对于它来说,这句话是 "我 打 你" 还是 "你 打 我" 没有任何区别。

3.2 位置编码(Positional Encoding)

  • 解决方案:将位置信息注入到输入中。

  • RoPE(Rotary Position Embedding, 旋转位置编码):目前大模型的主流方案。通过将位置映射为角度,旋转 Query 和 Key 向量。由于旋转矩阵的性质,点积结果只依赖于相对位置差:

3.3 掩码自注意力(Masked Self-Attention)

  • 应用场景:语言模型(如 GPT),预测下一个词。

  • 做法:在计算相似度矩阵 EE 后,将右上角(代表“未来”的位置)全部替换为负无穷(−∞)。

  • 效果:经过 Softmax 后,这些位置的注意力权重变为0。这确保模型在预测当前词时,只能看到它之前的词,防止“偷看”答案。

3.4 多头自注意力(Multi-Head Self-Attention)

  • 动机:一组 Q,K,V 只能学到一种关系。我们希望模型能同时关注不同维度的信息。

  • 做法:并行运行 H 个独立的 Self-Attention 层,每个头拥有自己独立的权重矩阵​。

  • 计算流程(MATLAB格式):

    % 假设 H=8, D=512, D_H=64 Q = X * W_Q; % [H x N x D_H] K = X * W_K; % [H x N x D_H] V = X * W_V; % [H x N x D_H] E = Q * K' / sqrt(D_H); % [H x N x N] A = softmax(E, dim=3); Y = A * V; % [H x N x D_H] % 拼接多头输出并融合 Y_concat = reshape(Y, [N, H*D_H]); O = Y_concat * W_O; % [N x D]

第四篇:Transformer Block 完整架构

4.1 Transformer Block 结构

Transformer 就是堆叠相同的 Transformer Block。

  • 输入:一组向量 X。

  • Step 1: 自注意力层:所有向量通过多头自注意力交互。

  • Step 2: 残差连接 + 层归一化(LayerNorm):

    • X=X+Self-Attention(X) (残差连接,防止梯度消失)

    • X=LayerNorm(X)(对每个样本独立计算均值和方差进行归一化,不依赖 Batch Size)

  • Step 3: MLP(前馈网络):

    • 经典结构是升维再降维:D→4D→D。

    • X=X+MLP(X)(MLP 对每个向量独立操作)

    • X=LayerNorm(X)

  • 输出:一组与输入维度相同的向量 Y。

  • 💡 核心结论:整个 Block 的计算量主要来源于6 次矩阵乘法(4 次来自 Self-Attention,2 次来自 MLP)。

4.2 语言建模中的 Transformer(LLM)

  • 输入层:Embedding Matrix[V x D],将词转换为向量。

  • 核心层:堆叠 Transformer Block,内部的 Self-Attention 必须是 Masked。

  • 输出层:Projection Matrix[D x V],将隐藏状态映射回词表大小的得分向量,使用 Softmax + 交叉熵损失(Cross-Entropy Loss)预测下一个词。

第五篇:三大序列处理架构大比拼

架构处理方式优点缺点
RNN (循环神经网络)串行,有序序列理论上对长序列友好,O(N) 计算和内存无法并行化,必须等前一步算完;长距离信息容易丢失
CNN (卷积神经网络)并行,N维网格高度并行,计算效率高感受野受限,需堆叠很多层才能看到全局信息
Self-Attention (自注意力)并行,集合向量全局感受野,一步到位捕捉长距离依赖;高度并行(仅靠矩阵乘法)计算和内存复杂度为(序列长度N较大时会爆显存)
  • 💡 解决 Self-Attention 的 O(N2)O(N2) 内存瓶颈:Flash Attention。通过分块计算(Tiling)和重计算(Recomputation),将内存复杂度降到 O(N),而计算复杂度仍是,但极大提升了实际运行速度。

第六篇:Vision Transformer (ViT)

核心思想:将图像视为一系列 Patch(图像块),直接套用标准的 Transformer Encoder。

  • Step 1: Patchify(切块):将 224×224×3 的图像切成 16×16×3 的小块。序列长度。

  • Step 2: 线性投影(Flatten & Linear):将每个 16×16×3=768 维的块展平,通过线性层映射为 D 维向量。

    • 💡 等价操作:这等价于使用一个16x16卷积核,步长为16,输出通道为D的卷积层。

  • Step 3: 位置编码:加上可学习的位置嵌入(Positional Embedding),告诉 Transformer 每个 Patch 在 2D 图像中的位置。

  • Step 4: Transformer Encoder:不使用 Masking!每个图像块都可以看到所有其他图像块。

  • Step 5: 分类头:对所有输出向量进行平均池化(Average Pool),得到 1 个 D 维向量,通过线性层映射到类别数 C。

第七篇:现代 Transformer 架构优化(2024+)

7.1 Pre-Norm(前置归一化)

  • 原版(Post-Norm):X = LayerNorm(X + Attention(X))。模型很难学习恒等映射,训练不稳定。

  • 现代(Pre-Norm):X = X + Attention(LayerNorm(X))。LayerNorm 放在残差连接内部(在 Attention 和 MLP 之前)。训练更稳定,无需学习率预热(Warmup)。

7.2 QK-Norm

  • 做法:在计算注意力相似度之前,对 Q 和 K 进行归一化(通常使用 RMSNorm)。

  • 公式(RMSNorm):


其中​​。

  • 目的:防止训练过程中出现梯度尖峰(Gradient Spikes),使大模型训练更加稳定。

7.3 SwiGLU MLP

  • 经典 MLP:,参数量为 2×D×4D=8D²。

  • SwiGLU MLP(门控机制):引入第三个权重矩阵​。


其中 ⊙ 是逐元素乘法。为了保持总参数量不变,将隐藏层维度 H 设为 8D/3。这样在参数量相同的情况下,增加了非线性表达能力。(注:幻灯片幽默地提到,这种架构有效的原因“归功于神的恩典”,体现了深度学习的玄学。)

7.4 Mixture of Experts (MoE, 混合专家模型)

  • 动机:用极少的计算量增加极大的参数量。

  • 做法:

    • 在 Transformer Block 中,并行学习 E 个不同的 MLP 专家。

    • 对于每个输入 Token,通过一个路由网络(Router)选择激活其中 A 个专家(A<E\)。

  • 案例(Gemma 4 26B-A4B):

    • 128 个路由专家,每个 Token 只选择 8 个专家处理。

    • 总参数量 26B,但每个 Token 仅激活4B参数。

    • 极大地提高了模型容量,但保持了较低的推理算力需求。

💡 复习建议与核心考点:

  1. Attention 的计算过程:手推 Q, K, V 公式,理解缩放点积的作用。

  2. Self-Attention 的置换等变性:理解为什么需要位置编码。

  3. Masked Self-Attention:理解 −∞ 在 Softmax 后变成 0 的机制。

  4. Transformer Block 的 6 次矩阵乘法:理清输入输出和计算流程。

  5. 三大序列架构对比:RNN (串行)、CNN (局部并行)、Self-Attention (全局并行,但 O(N²))。

  6. ViT:Patchify 等价于 Conv2D(stride=16)。

  7. 现代优化:Pre-Norm、QK-Norm、SwiGLU、MoE(重点理解 MoE 参数大但计算量小的特性)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询