Transformer 与模型架构原理

整体架构

Transformer 采用 Encoder-Decoder 架构,但两者都由相同的 Layer 堆叠而成。

输入部分 :包括输入嵌入(Input Embedding)位置编码(Positional Encoding)

Encoder(编码器)

  • 由 � 个相同的 Encoder Layer 堆叠(原论文 �=6)
  • 每个 Encoder Layer = Multi-Head Self-Attention + Feed-Forward Network (FFN)(两层的全连接层,第一层激活函数为 ReLU 即 max(0,x),第二层没有激活函数,不改变矩阵维度) + 两个残差连接 + LayerNorm(即 AddNorm)

Decoder(解码器)

  • 由 � 个相同的 Decoder Layer 堆叠
  • 每个 Decoder Layer = Masked Multi-Head Self-Attention + Cross-Attention (使用 Encoder 的输出)+ FFN + 三个残差连接 + LayerNorm

输出部分:包括一个线性层(Linear)和 Softmax 层,用于计算下一个 token 的概率分布。

各部件作用与原理

组件 作用 底层原理
Self-Attention 建立序列内任意位置的直接依赖,捕获全局上下文 通过 Q/K/V 计算相似度加权,实现"全连接"的序列建模,时间复杂度 �(�2)
Multi-Head 将高维空间切分为多个子空间,并行学习不同语义关系 类似 CNN 的多通道,增强表达能力,H 个 head 关注不同 aspect(语法/语义/指代等)
FFN 对 Attention 输出进行非线性变换,增强模型容量 两个线性层夹激活函数:���(�)=max(0,��1+�1)�2+�2,逐位置独立计算
残差连接 缓解梯度消失,支持深层堆叠 ���������(�+��������(�)),保留浅层信息,梯度可直接回传
LayerNorm 稳定训练,加速收敛 对单样本特征维度归一化:��(�)=��−��+�,比 BN 更适合变长序列
Positional Encoding 注入位置信息(模型本身无位置感知) 正弦/余弦函数或学习式嵌入,编码绝对/相对位置

各部分作用及底层原理

  • 位置编码 :由于 Attention 机制本身是位置无关的(即对打乱的序列会产生相同的结果),位置编码的作用是注入序列的顺序信息
  • 多头自注意力核心是让序列中的每个位置都能关注到序列中所有其他位置的信息,从而捕捉全局依赖关系。底层通过计算 Query(查询)、Key(键)和 Value(值)之间的相似度来实现。
  • 前馈网络(FFN) :这是一个两层的全连接网络,对每个位置的向量独立地进行非线性变换。其作用是对注意力层输出的特征进行进一步的处理和投影,增强模型的表达能力
  • 残差连接 & 层归一化:残差连接帮助梯度在深层网络中直接流动,防止梯度消失;层归一化则稳定了每一层的输入分布,加速模型收敛。
  • 掩码多头自注意力:在解码器中,为了防止模型在预测当前词时"看到"未来的信息,掩码机制将当前位置之后的位置的注意力分数设置为负无穷(经过Softmax后变为0)。
  • cross-attention :它接收解码器前一层的输出作为 Query,接收编码器的输出作为 Key 和 Value。这使得解码器在生成每个词时,都能关注到输入序列的哪些部分与之最相关,起到了信息交互的作用。

关键原理总结

  • Attention Is All You Need:完全抛弃 RNN/CNN,仅靠 Attention 机制建模序列关系
  • 并行计算:相比 RNN 的时序依赖,Self-Attention 可一次性计算整个序列,充分利用 GPU 并行性

2. Transformer 的 forward 计算包含哪些部件?非线性由什么提供?

Forward 计算包含的部件

  1. 输入部件:Token 嵌入查找和位置编码叠加。
  2. 多头注意力部件:���线性投影、点积相似度计算、Softmax、加权求和、多头拼接、输出线性投影。
  3. Add & Norm 部件:残差相加和层归一化。
  4. 前馈网络(FFN)部件:第一个线性层、非线性激活函数、第二个线性层。
  5. 输出部件:最后的线性层和 Softmax。

非线性的提供

Transformer 中的非线性主要由两个部分提供:

  1. 前馈网络(FFN)的激活函数 :这是最主要的非线性来源。在 Transformer Base 版本中使用的是 ReLU(或 GELU、SwiGLU 等变体),它对每个位置的向量进行独立的高维映射和非线性筛选。
  2. Self-Attention 中的 Softmax:Softmax 操作本身也是一种非线性函数,它将点积分数转换为非线性的概率分布。

Forward 流程(以 Encoder 为例)

复制代码

|---|-----------------------------------------------|
| | Input Embedding + Positional Encoding |
| | |
| | [Encoder Layer × N] |
| | ├─ Multi-Head Self-Attention |
| | │ ├─ Linear 投影得到 Q, K, V |
| | │ ├─ Scaled Dot-Product Attention (Softmax) |
| | │ ├─ Concat + Linear |
| | │ └─ Dropout |
| | ├─ Add & LayerNorm (残差1) |
| | ├─ FFN |
| | │ ├─ Linear₁ (升维,通常 4×) |
| | │ ├─ Activation (ReLU/GELU/SwiGLU) |
| | │ ├─ Linear₂ (降维) |
| | │ └─ Dropout |
| | └─ Add & LayerNorm (残差2) |
| | |
| | Output |

非线性来源

位置 非线性操作 说明
FFN 激活函数 ReLU / GELU / SwiGLU 主要非线性来源,逐位置独立变换
Attention Softmax Softmax(���/��) 提供概率分布的"软性选择"非线性
LayerNorm 含可学习参数的缩放/偏移 轻微非线性,主要起稳定作用

重点 :FFN 的激活函数是主要非线性来源,没有它模型退化为线性变换的堆叠。

3. Transformer 为什么能替代 RNN?核心优势是什么?

Transformer 能替代 RNN 的核心在于它解决了 RNN 的两大痛点:无法并行长距离遗忘

RNN 的致命缺陷

  1. 长距离依赖困难:梯度需经过长链反向传播,存在梯度消失/爆炸,难以建模远距离关系
  2. 串行计算:时间步 � 依赖 �−1 的隐状态,无法并行,GPU 利用率低
  3. 计算复杂度高:序列长度 �,计算复杂度 �(�⋅�2),但常数因子大且无法加速

Transformer 的核心优势

优势 具体表现
全局依赖建模 Self-Attention 任意两位置直接交互,距离为 �(1),彻底解决长程依赖
完全并行化 Attention 计算可矩阵化,整个序列一次性处理,�(1) 时间步(忽略 Softmax 规约)
计算效率 虽然复杂度也是 �(�2⋅�),但矩阵乘法高度优化,实际速度远超 RNN
可解释性强 Attention 权重直观展示模型"关注"位置,便于调试和分析
堆叠扩展性 残差连接 + LayerNorm 支持深层网络(100+ 层),表达能力随深度指数增长

一句话总结 :Transformer 用 空间换时间 ,通过 �(�2) 的 attention 计算换取了并行性长程建模能力,在硬件加速时代这是更优的 trade-off。

4. 详细介绍 Self-Attention 机制,包括本质、数学解释、具体计算步骤,及时间复杂度。

参考博客:百度 | Transformer 模型详解

本质 :Self-Attention 的本质是 "用序列中的其他元素来增强目标元素的语义表示",通过计算序列中每个元素与所有元素之间的相关性(注意力权重),然后基于这些权重对相关信息进行聚合,从而让模型更好地理解上下文。

将序列中每个位置与所有位置进行相似度比较,根据相似度加权聚合信息,实现"动态全连接图"的构建。

数学解释及具体计算步骤

给定输入序列 �=[�1,�2,...,��],其中 �� 是维度为 ������ 的向量。

  1. 计算 Q, K, V :通过三个可训练的权重矩阵 ��,��,��∈�������×�� 对输入 � 进行线性变换,得到 Query、Key、Value 矩阵。

    �=���,�=���,�=���

  2. 计算相似度(点积):计算 Query 矩阵与 Key 矩阵的点积,得到一个 �×� 的注意力分数矩阵 �。���=��⋅��� 表示第 � 个词对第 � 个词的关注程度。

  3. 缩放(Scale) :将注意力分数除以 ��,防止点积结果过大导致 Softmax 梯度消失。

    �������=�����

  4. 应用 Softmax :对缩放后的矩阵在最后一个维度(即对每个 Query 对应的所有 Key 的分数)进行 Softmax 归一化,得到最终的注意力权重矩阵 �(概率分布)。

    �=�������(�����)

  5. 加权求和 :将注意力权重矩阵 � 与 Value 矩阵 � 相乘,得到最终的输出矩阵 �。

    �=��

时间复杂度

Self-Attention 的时间复杂度是 �(�2⋅�),其中 � 是序列长度,� 是向量维度。

  • �⋅�� 计算量为 �(�2⋅�)。
  • 加权求和 �⋅� 计算量为 �(�2⋅�)。

时间复杂度分析

这里直接利用结论:m×n 矩阵与 n×k 矩阵相乘的时间复杂度是 O(mnk),因为最终结果矩阵里有 m×k 个元素,每个元素是通过 n 次乘法 + (n-1) 次加法得到的。

操作 计算复杂度 说明
Q/K/V 投影 �(3⋅�⋅������⋅��) 三个矩阵乘法
��� �(�2⋅��) 核心瓶颈,序列长度的平方
Softmax �(�2) 逐行计算
加权 V �(�2⋅��) (一般)假设 ��=��=������/ℎ
总计 �(�2⋅�) 与 RNN 的 �(�⋅�2) 对比,�≪� 时更优

空间复杂度:�(�2) 存储 Attention 矩阵,这是长文本(如 100K token)的主要挑战。

5. 为什么要用 Multi-Head Attention?切分为多头的作用是什么?

使用 Multi-Head Attention 的核心原因是 让模型能够从不同角度、关注不同子空间的信息

切分为多头的作用

  1. 捕获多维度的特征关系:类似于卷积神经网络(CNN)中多个卷积核的作用,不同的注意力头可以学习到不同类型的依赖关系。例如,一个头可能主要关注语法结构(如名词-动词关系),另一个头可能关注长距离的语义指代(如代词与其先行词),还有一个头可能关注相邻词的局部信息。
  2. 降低单次注意力的偏重风险:如果不切分多头,整个模型只能在一个单一的语义空间内计算平均的注意力权重,这可能导致模型过度关注自身或其他一两个词,而忽略了其他有用的信息。
  3. 增强模型表达能力:多头机制允许模型联合处理来自不同表示子空间的信息。最后将所有头的信息拼接起来,通过一个线性变换融合成一个更丰富、更强大的特征表示。

实现上:Multi-Head 并不是循环计算多个头,而是通过对 ������ 维度的切分,将原来的大矩阵乘法变成多个小矩阵的并行乘法,从而保持计算效率与单头相似。


核心动机:单头 Attention 的表达能力有限,难以同时捕捉不同类型的语义关系。

具体作用

作用 解释
多子空间并行学习 将 ������ 维空间切分为 ℎ 个 �� 维子空间(��=������/ℎ),每个 head 独立学习不同 aspect
增强表达能力 类似 CNN 的多通道特征,不同 head 可关注:语法关系、语义相似、指代消解、位置邻近等
计算效率 虽然总参数量相同,但每个 head 的矩阵更小,可并行计算,且注意力矩阵更小(�×� 但维度降低)

计算流程

复制代码

|---|--------------------------------------------------------------------------------------------------|
| | head_i = Attention(XW_i^Q, XW_i^K, XW_i^V) # [n, d_k] |
| | MultiHead(Q,K,V) = Concat(head_1,...,head_h)W^O # [n, h*d_k] @ [h*d_k, d_model] = [n, d_model] |

总参数量:4⋅������2(Q/K/V/O 各 ������×������),与单头相同,但分布更优。

实际观察

  • 不同 head 确实学到不同模式:有的关注局部(相邻词),有的关注全局(远距离依赖),有的关注特定语法关系
  • Head Pruning:可裁剪冗余 head 而不显著损失性能,证明存在分工

6. 计算 Attention 的 Softmax 之前为什么要除以根号 ��?

这是为了防止梯度消失,也被称为缩放点积注意力(Scaled Dot-Product Attention)

原因:假设 � 和 � 是独立的随机变量,均值为0,方差为1。那么它们的点积 �⋅�=∑�=1������ 的均值为0,但方差变为 ��。

  • 未缩放时:当 �� 很大时,点积结果会非常大(方差大),导致 Softmax 函数的输入落入梯度极小的饱和区域。这意味着 Softmax 之后,正确的词概率接近1,错误的词概率接近0,但反向传播时梯度会非常小,模型几乎无法学习。
  • 缩放后:除以 ��,可以将点积的方差拉回 1,使得 Softmax 的输入落在梯度敏感的区域,保证了训练过程的稳定性。

7. 介绍一下 Transformer 的位置编码(Positional Encoding),还了解其他位置编码吗?

原始 Transformer 的位置编码

原论文使用了三角函数的绝对位置编码(Sinusoidal Positional Encoding)

��(���,2�)=���(���/100002�/������)

��(���,2�+1)=���(���/100002�/������)

其中 ��� 是位置索引,� 是维度索引。

  • 作用 :通过不同频率的正余弦函数,为每个位置生成一个唯一的向量。这种设计的优势在于,它能够让模型轻易地学习到相对位置关系,因为对于固定的偏移量 �,�����+� 可以表示为 ����� 的线性变换。

其他位置编码

随着发展,出现了很多更先进的编码方式,主要分为绝对编码和相对编码:

  1. 可学习位置编码(Learned Positional Embedding) :将位置编码视为可训练的参数矩阵。如 BERT、GPT 等模型使用。优点是灵活,但缺点是外推性差,即无法处理比训练时更长的序列。
  2. 旋转位置编码(RoPE) :是目前大模型(如 LLaMA, ChatGLM)最常用的方法之一。它通过旋转矩阵乘法将相对位置信息直接注入到 Query 和 Key 的向量表示中。RoPE 具有良好的相对位置感知能力较好的外推性
  3. ALiBi(Attention with Linear Biases) :这种方法不直接对 Embedding 加位置信息,而是在 Attention 分数计算完成后,根据 Query 和 Key 的距离加上一个预设的、不可学习的线性偏置项 。其优点是极强的外推能力和极高的计算效率,广泛应用于 BLOOM 等模型中。

8. 介绍 QKV 的计算。如果在 Transformer 中去掉 K,变成 QQV,会有什么问题?(仅考虑编码器内部)

QKV 计算详解

在 Transformer 中,�,�,� 是通过输入矩阵 � 分别与三个不同的权重矩阵 ��,��,�� 相乘得到的。

  • �=���:代表当前词在询问什么
  • �=���:代表当前词有什么特征被询问。
  • �=���:代表当前词实际提供的信息内容

如果去掉 K,变成 QQV(仅考虑 Encoder 内部)

计算形式:Attention=softmax(�����)�

问题分析

问题 具体说明
对称性过强 ��� 是对称矩阵,���=���,强制双向关系对称,但语言中关系常不对称(A 关注 B ≠ B 关注 A)
缺乏内容索引 Q 既当"查询"又当"索引",导致查询与内容耦合。无法区分"我要找 X"和"我有 X",检索逻辑混乱
表达能力骤降 参数量减少(少一个 ��),且 ��� 的秩受限(rank ≤ ��),无法建模复杂关系
训练不稳定 ��� 的数值动态范围更难控制,Softmax 更容易饱和
等价于线性 Attention 退化 数学上近似于对 V 做固定的二次型加权,失去灵活性

本质 :K 的存在实现了内容与查询的解耦,是 Attention 机制"检索-读取"逻辑的关键。去掉 K,模型退化为固定的自相关计算,失去动态路由能力。

9. Transformer 是 Encoder-Decoder 架构,而 GPT 是 Decoder-only 架构,为什么会演变成这种形式?为什么生成式任务(如 GPT)通常舍弃 Encoder?

演变原因

这种演变主要源于预训练任务目标下游任务形式的变化。

  • 原始 Transformer:诞生于机器翻译任务,这是一个典型的 Seq2Seq 任务,输入(源语言)和输出(目标语言)是完整的、但内容不同的句子。Encoder 负责理解整个输入句子,Decoder 则负责基于输入理解逐个生成输出词。
  • GPT 的 Decoder-only :GPT 开创了"自回归语言建模"的预训练范式,即 "预测下一个词" 。这个任务天然适合 Decoder-only 架构:模型只能看到当前词之前的词(通过 Masked Attention),然后预测下一个词,完美契合了生成任务的本质。
  • BERT 的 Encoder-only:BERT 使用的预训练任务是 Masked Language Model(完形填空),需要同时利用一个词的左右两侧上下文信息来预测被遮住的词,因此它只需要 Encoder 来理解完整的上下文。

生成式任务舍弃 Encoder 的原因

  1. 任务本质匹配 :生成式任务的本质是无条件或基于提示(Prompt)的续写。这本质上就是一个自回归过程。Decoder-only 架构的 Masked Self-Attention 天生就是为此设计的:它在生成时只能看到历史信息,符合因果推断的逻辑。
  2. 架构简化与扩展:舍弃 Encoder 极大地简化了模型结构,使得堆叠更多层、训练更大规模的模型变得更加容易和稳定。GPT 系列的成功证明了这种简洁架构的扩展能力。
  3. 统一的任务表示:Decoder-only 架构可以将各种不同的任务(翻译、问答、摘要等)都统一为"文本生成"的格式。只需要将任务描述和输入拼接成 Prompt 喂给模型,模型就能以续写的方式生成答案,实现大一统的通用能力。
  4. 上下文学习(In-Context Learning):Decoder-only 架构在推理时,能够灵活地利用输入 Prompt 中的示例来调整输出,这种能力被称为上下文学习。Encoder-Decoder 模型由于对输入和输出的处理方式不同,实现这种能力相对复杂。

10. Transformer 的 FFN 层为什么会逐渐演变成 MOE 层?

(这个我不懂,虽然可以背过,但不确定是正确的)

传统 Transformer 中的 FFN 层是密集的前馈网络,参数量与隐层维度相关,随着模型规模扩大,其计算和参数量急剧增加。

MoE(混合专家)层通过将单个 FFN 替换为多个并行的专家网络和一个门控网络,实现稀疏激活:每个 token 仅激活 top-k 个专家,在保持计算量基本不变的前提下大幅增加模型参数量,从而提升模型容量和性能。

这种演变是为了在有限计算资源下扩大模型规模,例如 Switch Transformer、GShard 等模型通过 MoE 结构显著提升了大语言模型的能力。

11. MOE 层的负载均衡具体是怎么做的?偏置项 b 是怎么训练的?如何保证偏置项得到变换?

负载均衡

  • Router 可能总是选少数几个"受欢迎"专家,导致其他专家闲置(Collapse 问题)。
  • 为避免某些专家过载而其他闲置,通常采用辅助损失(auxiliary loss) 鼓励各专家被选中的次数均匀,例如计算每个专家被选中的概率与均匀分布的交叉熵;
  • 同时,引入专家容量(expert capacity) 限制每个专家处理的 token 数量,超出部分被丢弃或重新路由;还可通过动态调整门控的偏置项实现均衡。

偏置项 b 的训练:偏置项是门控网络中每个专家对应的可学习参数,初始为 0。在前向时,门控输出 logits 加上偏置后经 softmax 得到选择概率,反向传播中通过梯度下降更新偏置项,使其参与优化。

保证偏置项变换:偏置项作为模型参数,通过常规优化器更新。负载均衡损失会间接影响偏置项,使其向平衡专家负载的方向调整。此外,有些方法(如 GShard)会根据专家实际处理 token 数量与均值的偏差,直接更新偏置项以实现负载均衡。

(这两个看不懂)

12. 如何降低 Transformer 的计算复杂度?常见的稀疏注意力变体有哪些?

Transformer 的自注意力复杂度为 O(n²d),n 为序列长度。可通过稀疏注意力、低秩近似等方法降低。

常见稀疏注意力变体包括:

  • 局部注意力:如滑动窗口注意力(Longformer),每个 token 只关注附近窗口内的 token。
  • 分块注意力:如 Reformer 的 LSH 注意力,将序列分块并在块内或块间进行注意力。
  • 全局+局部注意力:如 BigBird 和 Longformer,结合全局 token(如 [CLS])与局部窗口。
  • 随机注意力 :如 BigBird 中部分 token 随机连接,增加信息流动。
  • 低秩近似:如 Linformer 通过投影将序列长度降维,复杂度 O(n)。
  • 核化方法:如 Performer 使用随机特征映射(FAVOR+)近似注意力,复杂度 O(n)。

这些方法通过减少注意力矩阵的计算量或近似计算来降低复杂度。

13. 分析一下 Transformer 训练过程中显存占用和计算复杂度。

  • 显存占用:主要包括模型参数、梯度、优化器状态和中间激活值。对于 Transformer 层,中间激活值(尤其是 attention 权重矩阵 ��� 形状为 [batch, heads, seq_len, seq_len])是长序列下的主要瓶颈。此外,FFN 的中间层激活也占用显存。例如,对于批次大小 b、序列长度 n、隐层维度 d、头数 h,单层注意力权重占用 b×h×n² 个浮点数,在长序列时极大。
  • 计算复杂度:每层自注意力为 O(n²d)(计算 QK 乘积和加权求和),FFN 为 O(nd²)。总体每层复杂度 O(n²d + nd²)。对于大模型,d 较大,但长序列时 n² 项主导。

显存占用拆解(训练时)

模型状态(Model States)- ZeRO 论文分类

  1. 参数(Parameters):2×params 字节(FP16/BF16)
  2. 梯度(Gradients):2×params 字节
  3. 优化器状态(Optimizer States):Adam 需要 12×params 字节(FP32 拷贝 + 动量 + 二阶矩)

激活值(Activations)- 与 batch size 和序列长度相关

  • Attention 矩阵:�(�2⋅�⋅�),�=batch size, �=层数
  • 每层激活:�(�⋅�⋅������)

具体显存占用情况(以 7B 模型为例)CSDN | LLM 微调基础:加载 / 微调一个 7B 模型,到底需要多少显存?

计算复杂度(FLOPs)

前向传播每层

  • Self-Attention:4⋅�⋅�2⋅�+2⋅�⋅�⋅�2(投影+Attention计算+输出投影)
  • FFN:8⋅�⋅�⋅�2(通常 ���=4�)
  • 总计:�(���2+��2�)

关键结论

  • 短序列(�<�):FFN 主导,�(�⋅�2)
  • 长序列(�>�):Attention 主导,�(�2⋅�)
  • 训练时反向传播额外 2 倍计算量

14. Self-Attention 机制在多模态对齐上是否存在瓶颈?有没有实际场景里注意力权重完全偏掉的情况?

总之是存在的。不同模态之间,特征分布差异大,直接 attention 到一起可能会出问题?不懂多模态,这些答案我不知道是否正确。

  • 多模态对齐瓶颈:Self-Attention 处理单一模态内部的依赖,无法直接建模跨模态对应关系。多模态任务通常需要跨模态注意力(cross-attention)或专用融合模块。此外,不同模态特征分布、位置编码方式差异大,直接拼接后使用 self-attention 难以有效对齐,且长序列(如图像 patch)会加剧计算负担。
  • 注意力权重偏掉的情况:实际训练中可能因初始化不当、数据分布不均或训练不稳定,导致注意力权重集中在少数 token 上,甚至完全偏向某一位置(如 [CLS] 或 [SEP]),造成信息丢失。例如,模型过拟合或容量不足时,注意力可能坍塌为稀疏分布。

多模态对齐的瓶颈

1. 模态异构性(Modality Gap)

  • 视觉特征(CNN/ViT 输出)与文本特征(Token Embedding)分布差异大
  • 直接拼接导致注意力"选择性失明":某一模态主导,另一模态被忽略

2. 粒度不匹配

  • 图像:全局特征([CLS])或 patch 级(16x16 区域)
  • 文本:token 级(词/子词)
  • 注意力权重在不对齐的粒度上难以建立有效关联

3. 训练目标冲突

  • 对比学习(CLIP)拉近跨模态距离,但生成任务(VQA)需要细粒度对齐
  • 单一注意力机制难以同时满足两种需求

实际场景:注意力权重完全偏掉的案例(不确定是不是 LLM 生成的幻觉)

案例 1:CLIP 的"bag of words"问题

  • 图像中有"红色球在蓝色盒子旁边",文本问"球在哪里"
  • 注意力权重均匀分布在所有物体上,无法精确定位空间关系
  • 原因:全局对比学习缺乏细粒度监督

案例 2:多模态大模型(BLIP-2/LLaVA)的幻觉

  • 图像实际内容:一只猫在沙发上
  • 模型生成:"猫在桌子上"(错误)
  • 注意力分析:文本生成时,视觉 token 的注意力权重被语言先验压制,模型依赖训练记忆而非图像内容

案例 3:视频-文本对齐的时间偏置

  • 视频理解任务中,模型过度关注开头帧,忽略后续关键信息
  • 原因:位置编码累积 + 自回归生成导致的注意力漂移

解决方案

  • 跨模态注意力:Q 来自文本,KV 来自视觉(Flamingo 的 Gated Cross-Attention)
  • 细粒度对齐:区域-词级别匹配(GLIP)
  • 对比学习+生成联合训练:BLIP 的 ITC+ITM+LM 三任务

15. 如何解决梯度消失和梯度爆炸问题?

梯度消失(Vanishing Gradient)

原因:激活函数的导数 < 1(Sigmoid/Tanh),多层连乘后梯度指数级减小

解决方案

方法 原理 应用
残差连接(Residual Connection) �+�(�),梯度可直接回传 Transformer 每层必备
LayerNorm 稳定每层的分布,防止激活值过小 放在残差前或后(Pre/Post Norm)
更好的初始化 Xavier/Glorot、He 初始化,保持方差恒定 第一层 embedding
ReLU/GELU 替代 Sigmoid 导数在正区间为 1 或接近 1 替代 Sigmoid
门控机制 LSTM/GRU 的遗忘门控制信息流 RNN 时代方案,不过最近也有 Gated Attention(没看过 不懂)

梯度爆炸(Exploding Gradient)

原因:梯度 > 1,多层连乘后指数级增大

解决方案

方法 原理 关键参数
梯度裁剪(Gradient Clipping) 设定阈值,超过则缩放 max_norm=1.0 常见
权重衰减(Weight Decay) L2 正则化限制权重大小 �=0.01
更小的学习率 直接限制参数更新幅度 Warmup 策略

Transformer 中的具体实践

常用方法包括:

  • 激活函数:使用 ReLU、Leaky ReLU 等避免梯度饱和。
  • 残差连接:允许梯度直接跳过非线性层,缓解消失。
  • 归一化层:BatchNorm 或 LayerNorm 稳定前向传播和梯度。
  • 权重初始化:如 Xavier 或 He 初始化,使各层输出方差稳定。
  • 梯度裁剪:限制梯度范数防止爆炸。
  • 优化器:如 Adam 自适应调整学习率,稳定训练。
  • 预训练:通过预训练获得良好初始化,减少梯度问题。

在 Transformer 中,残差连接和 LayerNorm 是核心手段。

Pre-Norm vs Post-Norm

  • Post-Norm(原始):�+LayerNorm(Attention(�)),深层易梯度消失
  • Pre-Norm(主流):LayerNorm(�+Attention(�)),训练更稳定,但可能表达能力略降

关键背诵点:现代 LLM(GPT-3/LLaMA)都用 Pre-Norm + 梯度裁剪 + Warmup 组合。

16. 介绍一下 LayerNorm 和 BatchNorm 的区别?

  • 计算维度:BatchNorm 对每个特征维度在 batch 上归一化(计算 batch 均值和方差);LayerNorm 对每个样本的所有特征维度归一化(跨特征维度 计算样本内均值和方差)。
  • 适用场景:BatchNorm 适用于 CV 等固定尺寸输入,对 batch size 敏感;LayerNorm 适用于 NLP 等变长序列,所需要的 �,� 统计量单样本独立,不依赖 batch,因此 Transformer 采用 LayerNorm。
  • 训练与推理:BatchNorm 在训练时使用 batch 统计量,推理时使用全局统计量;LayerNorm 训练和推理一致。
  • 依赖关系:BatchNorm 依赖 batch 内样本,LayerNorm 不依赖 batch。

为什么 Transformer 不用 BN?

  1. 序列长度可变:不同样本长度不同,batch 统计无意义
  2. 自回归生成:推理时逐个生成 token,无法预计算 batch 统计
  3. 独立同分布假设破坏:序列中不同位置 token 分布不同

RMSNorm(LLaMA 使用)

  • 去掉均值中心化,只保留方差归一化:�=�Mean(�2)⋅�
  • 更快,效果相当

17. 在 Agent 多轮对话任务中,Attention 的局限性体现在哪些方面?

  • 长程依赖:标准 self-attention 复杂度高,难以处理超长对话历史,导致早期信息丢失。
  • 记忆能力不足:注意力缺乏显式记忆机制,关键信息可能被遗忘,尤其在多轮中。
  • 上下文漂移:注意力易偏向近期对话,忽略早期上下文,造成状态不一致。
  • 推理效率低:每次生成需重新计算整个历史,延迟高。
  • 状态管理困难:难以维护动态更新的对话状态,需结合外部记忆或状态追踪。
  • 知识更新局限:无法动态整合新知识,需借助检索增强生成等方法。

核心局限

1. 上下文长度限制(Context Window Limitation)

  • 标准 LLM 支持 4K-128K token,多轮对话 + 工具调用历史 + 长文档容易溢出
  • 表现:早期对话信息被挤出窗口,模型"失忆"

2. 注意力稀释(Attention Dilution)

  • 长序列中,Softmax 归一化导致每个 token 的注意力权重被稀释
  • 表现:关键决策信息(如用户初始需求)在后续轮次中被大量中间 token 淹没
  • 令我联想到 Gated Attention 解决到 attention sink 问题。

3. 位置编码的远程衰减

  • RoPE/ALiBi 等相对位置编码,远距离 token 的相对位置表示能力弱
  • 表现:模型更关注近期对话,忽略早期关键约束

4. 缺乏显式状态管理

  • 每轮都重新计算全量 Attention,没有 RNN 的隐状态压缩机制
  • 表现:重复信息反复计算,无法像人类一样形成"记忆摘要"

5. 工具调用历史的噪声干扰

  • Agent 执行多步工具调用,返回的中间结果(如 API 返回的 JSON)包含大量噪声
  • 表现:注意力被无关字段分散,难以聚焦关键结果

解决方案(前沿方向)

方案 原理
RAG / 外部记忆 将历史对话编码存入向量库,按需检索
Summarization 压缩 定期将早期对话摘要化为 system prompt
Memory Transformer 显式记忆槽(如 � 个可学习的记忆 token)
Streaming Attention 滑动窗口 + 全局摘要 token(如 LongLLaMA)
Hierarchical Attention 先段内、后段间的层次化注意力
相关推荐
带娃的IT创业者2 小时前
NCT 是什么——让 AI 拥有意识的尝试
人工智能·深度学习·神经网络·科普·技术分享·ai架构·nct
萧逸才2 小时前
【learn-claude-code】S07TaskSystem - 任务系统:大目标拆成小任务,持久化到磁盘
java·人工智能·ai
做萤石二次开发的哈哈2 小时前
AI+台球 | 萤石点亮智慧台球厅,让娱乐更智能
人工智能
qq_235132172 小时前
五金制造行业ERP系统多少钱?易呈erp五金行业版功能模块详解与成功案例分享
大数据·运维·人工智能·制造·智能制造
SmartBrain2 小时前
基于华为管理理念刨析:三医领域数字化转型战略规划研究报告
人工智能·华为
云栖梦泽2 小时前
【AI】AI安全工具:AI模型安全检测工具的实战使用
人工智能·安全·机器学习
Ashmcracker2 小时前
Codex Desktop如何接入Azure OpenAI?AI Foundry部署GPT‑5.3‑codex 实操
人工智能·gpt·microsoft·azure
Datawhale2 小时前
Claude AI 全套课程,如何从零开始构建并自动化各种项目!
运维·人工智能·自动化
与遨游于天地2 小时前
AI的细胞哲学:从单体闭环到协同进化生态
人工智能