一、整体架构(1--9)
1. 简单描述 Transformer 模型结构与核心思想
Transformer 出自 2017 年论文 Attention Is All You Need ,是一个完全基于自注意力机制的 Seq2Seq 模型,不再依赖 RNN 循环结构。
整体结构:
- 输入:词嵌入 + 位置编码
- Encoder 层(N=6 层堆叠)
- Decoder 层(N=6 层堆叠)
- 最后的线性层 + Softmax 输出概率分布
核心思想:
- 用自注意力 替代循环,实现并行计算
- 直接建模任意两个 token 之间的依赖,解决长距离依赖问题
- 依靠多头注意力、残差、层归一化实现深度网络稳定训练
2. Transformer Encoder 每一层详细结构
Encoder 一层包含:
- 多头自注意力层(Multi-Head Self-Attention)
- 残差连接 + 层归一化(LayerNorm)
- 前馈网络(Feed Forward Network,FFN)
- 残差连接 + 层归一化
顺序固定:Attention → Add&Norm → FFN → Add&Norm。
3. Transformer Decoder 每一层详细结构
Decoder 一层包含:
- 掩码多头自注意力(Masked Multi-Head Attention)
- 残差 + LayerNorm
- 交叉注意力(Encoder-Decoder Attention)
- 残差 + LayerNorm
- 前馈网络 FFN
- 残差 + LayerNorm
多了掩码 和交叉注意力两个关键模块。
4. Encoder 和 Decoder 的区别是什么?
- Encoder 是双向注意力 ,可以看到整个输入序列;Decoder 是单向掩码注意力,看不到未来位置。
- Encoder 只有自注意力;Decoder 多一层交叉注意力,用来对齐 Encoder 的输出。
- Encoder 用于理解输入(如文本分类、编码);Decoder 用于生成输出(翻译、对话、写作)。
5. Transformer 相比 RNN/LSTM 有哪些优势?
- 并行计算RNN 必须按时间步依次计算,Transformer 可一次性处理整个序列,训练速度大幅提升。
- 长距离依赖建模更强注意力路径长度 O (1),RNN 是 O (n),长序列梯度更容易消失。
- 全局感受野每个 token 都能直接和全序列交互,无需像 RNN 逐步传递信息。
- 特征更丰富多头注意力可以同时捕捉语法、语义、指代等多种依赖关系。
6. Transformer 相比 CNN 的优势?
- CNN 感受野由卷积核大小和层数决定,需要很深才能覆盖全局;Transformer 天然全局。
- CNN 对位置关系建模固定,注意力是动态权重,更灵活。
- Transformer 更适合长序列、强语义依赖任务。
7. Transformer 有什么缺点?
- 复杂度 O (n²),序列变长时计算和显存开销急剧上升。
- 没有天然位置信息,必须手动加入位置编码。
- 局部建模(如短语、字符级结构)效率不如 CNN。
- 对低资源任务容易过拟合,需要大量数据。
8. 为什么 Transformer 可以训练得很深?
主要依靠:
- 残差连接(Residual Connection):避免梯度消失
- 层归一化(LayerNorm):稳定训练,减少内部协变量偏移
- 注意力机制梯度传播路径更友好
9. Transformer 中 Add & Norm 是什么?
- Add :残差连接,
输出 = 子层输出 + 输入 - Norm:LayerNorm,对每个样本在特征维度做归一化
作用:让深层网络可以稳定收敛,缓解梯度消失。
二、自注意力机制(10--22)
10. 什么是自注意力(Self-Attention)?
自注意力是让序列中每个 token 都和序列内所有 token 计算相关性,根据相关性大小加权聚合信息,得到融合上下文的表示。
区别于普通注意力:
- 普通注意力:Q 来自目标,K/V 来自源
- 自注意力:Q、K、V 都来自同一序列
11. Scaled Dot-Product Attention 计算步骤
- 根据输入 X 分别线性投影得到 Q、K、VQ = XW_Q,K = XW_K,V = XW_V
- 计算 Q 和 K 的相似度矩阵:
Q @ K.T - 缩放 :除以
√d_k - 如有需要,加入 Mask 遮挡无效位置
- Softmax 归一化得到注意力权重
- 权重与 V 加权求和得到最终输出
12. 写出注意力公式
Attention(Q,K,V)=softmax(dkQKT)V
13. 为什么要除以 √d_k?
当维度 d_k 较大时,QK^T 的内积会变得很大,导致 Softmax 输出趋近于 one-hot 分布,进入饱和区,梯度几乎为 0,无法训练。
除以 √d_k 可以将方差控制在 1 左右,保证 Softmax 梯度正常回传。
14. 什么是多头注意力(Multi-Head Attention)?
将 Q、K、V 通过线性层映射到低维,切分成 h 个 "头",每个头独立计算自注意力,最后把所有头的结果拼接,再经过一次线性投影输出。
论文默认 h=8。
15. 多头注意力详细计算流程
- 输入 X 做线性变换得到 Q、K、V
- 按头切分:
(batch, seq_len, d_model) → (batch, h, seq_len, d_k)其中 d_model = h × d_k - 每个头分别计算 Scaled Dot-Product Attention
- 把 h 个头的输出在最后一维拼接
- 经过一个线性层投影回 d_model 维度
16. 多头注意力为什么比单头效果好?
单头注意力只能学习一种语义关联模式;多头可以并行学习:
- 语法结构依赖
- 语义相似依赖
- 指代关系(如代词指向名词)
- 局部 / 全局不同粒度依赖
表达能力更强,特征更丰富。
17. 什么是交叉注意力(Cross Attention)?
出现在 Decoder 中,也叫 Encoder-Decoder Attention。
- Q 来自上一层 Decoder
- K、V 来自Encoder 的最终输出
作用:让生成的每个位置,都能对齐并关注输入序列的相关部分,类似传统注意力机器翻译。
18. 自注意力、交叉注意力、掩码注意力区别
- 自注意力:Q/K/V 同源,双向可见
- 交叉注意力:Q 来自 Decoder,K/V 来自 Encoder
- 掩码注意力:Q/K/V 同源,但用 mask 遮住未来位置,只能看左边
19. 自注意力时间复杂度与空间复杂度
设序列长度 n,模型维度 d。
- 时间复杂度:**O(n²·d)**QK^T 是 n×n 矩阵乘法,是主要开销。
- 空间复杂度:**O(n²)**存储注意力权重矩阵。
20. 为什么不直接用余弦相似度做注意力?
余弦相似度需要归一化,计算更复杂;点积 + 缩放计算高效、可微、易于 GPU 加速,效果足够好。
21. 注意力权重为什么会出现大量接近 0?
长序列中很多 token 语义无关,Softmax 后权重被 "稀释",大量权重趋近于 0,这也是稀疏优化、FlashAttention 的动机。
22. 自注意力如何理解 "关注"?
权重大小代表关注程度:
- 权重高 = 该位置对当前 token 语义重要
- 权重低 = 无关或次要本质是一种动态加权池化。
三、Mask 机制(23--27)
23. Transformer 中有几种 Mask?分别作用
两种核心 Mask:
- Padding Mask 对句子填充的
<pad>token 做遮挡,不让注意力关注无效位置。 - Sequence Mask(Look-ahead Mask) Decoder 中使用,把当前位置右侧所有位置遮住,防止模型看到未来信息。
24. Look-ahead Mask 如何实现?
构建一个上三角矩阵(含对角线),未来位置设为 -inf,经过 Softmax 后概率变为 0。例如序列长度 3:
plaintext
[[0, -inf, -inf],
[0, 0, -inf],
[0, 0, 0]]
25. Padding Mask 如何实现?
根据真实序列长度生成 mask,pad 位置为 True,在计算注意力时将这些位置设为 -inf。
26. 为什么 Decoder 必须用 Mask?
Transformer 是自回归生成模型(autoregressive),生成第 t 个 token 时,只能依赖 1~t-1,不能依赖 t+1...... 否则相当于 "偷看答案",无法真实推理。
27. Encoder 为什么不需要 Sequence Mask?
Encoder 任务是理解整个句子,需要双向上下文,比如 "我喜欢苹果" 中 "苹果" 和 "我" 互相相关。
四、位置编码 & 嵌入(28--35)
28. Transformer 为什么需要位置编码?
自注意力是排列等变的,打乱序列顺序输出不变,但语言是有序的,必须显式注入位置信息。
29. 论文中位置编码公式
使用正弦余弦位置编码:PEpos,2iPEpos,2i+1=sin(pos/100002i/dmodel)=cos(pos/100002i/dmodel)
- pos:位置
- i:维度下标
- 偶数维度 sin,奇数维度 cos
30. 为什么用正弦余弦位置编码?
- 可以外推到比训练更长的序列
- 相对位置信息可通过三角函数恒等变换表达
- 无需学习,节省参数
31. 绝对位置编码 vs 相对位置编码
- 绝对位置:直接编码每个位置的序号(如正弦、可学习位置嵌入)
- 相对位置:编码两个位置之间的距离
主流大模型(GPT、LLaMA、RoPE)都偏向相对位置编码,更长序列泛化更好。
32. 位置编码如何加入模型?
直接与词嵌入按元素相加 :输入 = 词嵌入 + 位置编码
33. 可学习位置编码 vs 正弦编码
- 可学习:数据驱动,效果通常略好,但不能外推更长序列
- 正弦编码:无需训练,泛化强,支持任意长度
34. 什么是 RoPE 位置编码?
旋转位置编码,Rotary Position Embedding:
- 将 Q、K 按位置做旋转
- 注意力内积自然包含相对位置信息
- 长序列效果优秀,LLaMA、GPT-NeoX 等均使用
35. ALiBi 位置编码是什么?
Attention with Linear Biases,不使用显式位置嵌入,而是在注意力权重上直接加距离偏置,距离越远偏置越小,训练稳定、支持超长序列。
五、LayerNorm、FFN、残差(36--42)
36. 为什么用 LayerNorm 而不是 BatchNorm?
- 序列长度不固定,BatchNorm 在批次上归一化不稳定
- NLP 中样本长度差异大,Batch 维度统计不可靠
- LayerNorm 对单个样本在特征维度归一化,更适合序列任务
37. Pre-Norm 和 Post-Norm 区别
- Post-Norm(原始 Transformer):子层 → Add → Norm
- Pre-Norm(主流大模型):Norm → 子层 → Add
Pre-Norm 训练更稳定,更容易深层训练,GPT、LLaMA 都用 Pre-Norm。
38. 残差连接为什么重要?
深层网络梯度容易消失,残差提供一条直连通路,梯度可以直接回传到底层,保证深度模型可训练。
39. 前馈网络 FFN 结构
两层线性变换 + 激活函数:FFN(x)=max(0,xW1+b1)W2+b2
原始用 ReLU,现在多用 GELU、Swish。
40. FFN 作用是什么?
注意力负责 ** token 之间信息交互 **,FFN 对每个 token 单独做非线性特征变换,提升模型表达能力。
41. FFN 中间维度为什么通常是 4×d_model?
经验设计,扩大维度可以学习更丰富的特征映射,压缩回来保留关键信息。
42. 为什么 Transformer 不怎么用卷积?
注意力已经可以灵活建模全局与局部依赖;但后续有融合范式,如 Transformer + CNN(CoAtNet)。
六、训练、优化、初始化(43--48)
43. Transformer 用什么优化器?
原始论文用 Adam,参数:
- β1=0.9,β2=0.98
- ε=1e-9并使用学习率预热策略。
44. 什么是学习率预热(Warmup)?
训练初期学习率从 0 逐步升高到最大值,再缓慢衰减。原因:
- 初期参数随机,大步长易不稳定
- 预热让模型平稳进入训练状态
45. Transformer 标签平滑是什么?
Label Smoothing:把真实标签 1 换成 1−ε,错误类别分配 ε/(n−1),防止模型过于自信,缓解过拟合。
46. 为什么 Transformer 初始化很重要?
Q、K 内积量级受初始化影响大,初始化不当会导致 Softmax 饱和或梯度爆炸。
通常采用 ** Xavier 或 He 初始化 **。
47. 共享权重是什么?
- 词嵌入矩阵与输出线性层共享权重
- 部分模型 Encoder 和 Decoder 嵌入共享
减少参数量,同时提升 embedding 质量。
48. 梯度裁剪有什么用?
注意力和残差可能导致梯度突然变大,梯度裁剪防止梯度爆炸,保证训练稳定。
七、经典变体与大模型(49--58)
49. 什么是 BERT 式 Transformer?
只用 Encoder,双向 Transformer,做掩码语言模型 MLM,擅长理解类任务:分类、抽取、推理。
50. 什么是 GPT 式 Transformer?
只用 Decoder,单向自回归,擅长生成类任务:对话、写作、翻译、代码。
51. 什么是 T5?
完整 Encoder-Decoder 结构,统一所有 NLP 任务为 "文本到文本" 模式。
52. 什么是 ViT(Vision Transformer)?
把图片切成 patch 展平成序列,用纯 Transformer 做图像分类,开创视觉大模型时代。
53. 长序列 Transformer 优化思路
- 稀疏注意力(Longformer、BigBird)
- 线性复杂度注意力(Performer、Linformer)
- 分块注意力(FlashAttention、PagedAttention)
- 滑动窗口注意力
54. FlashAttention 核心思想
- 分块计算注意力,减少 HBM 与 SRAM 数据搬运
- 时间复杂度不变,但实际速度大幅提升
- 支持极长序列,是当前大模型训练标配
55. 为什么现在大模型多用 Decoder-only?
- 统一自回归范式,简单易扩展
- scaling 规律稳定,参数越大效果越好
- 适合多任务通用生成
56. Transformer 为什么能成为大模型基座?
- 可并行、易缩放
- 表达能力强,适配多模态
- 深度可训练,性能随参数指数级提升
57. 注意力机制存在的意义是什么?
提供一种可微、动态、全局的信息聚合方式,让模型自动学习 "该关注什么"。
58. 未来 Transformer 可能怎么演进?
- 更低复杂度的线性注意力
- 与 MLP、CNN、State Space 模型融合
- 动态稀疏激活
- 多模态统一架构