跳转至

07 - Transformer 架构面试题

注意力机制、位置编码、多头注意力

📖 章节概述

本章将深入探讨 Transformer 架构的面试题,包括注意力机制、位置编码、多头注意力等核心内容。

🎯 学习目标

完成本章后,你将能够:

  • 深入理解 Transformer 架构
  • 掌握注意力机制的原理
  • 了解各种位置编码方法
  • 能够回答相关面试题

1. 注意力机制

Q1: 什么是自注意力机制

解答: 自注意力机制允许序列中的每个位置都关注序列中的所有其他位置,计算它们之间的相关性。

核心步骤: 1. 线性变换:将输入 X 通过三个线性变换得到 Q 、 K 、 V 2. 计算注意力分数: Q 和 K 的点积 3. 缩放:除以√d_k ,控制点积方差,避免 softmax 分布过尖 4. Softmax 归一化:得到注意力权重 5. 加权求和:用注意力权重对 V 进行加权求和

公式

Text Only
Attention(Q, K, V) = softmax(QK^T / √d_k) V

Q2: 多头注意力的优势是什么

解答: 多头注意力将注意力机制并行执行多次,每个头学习不同的表示。

优势: 1. 捕获不同特征:每个头可以关注不同的子空间 2. 提高表达能力:组合多个头的输出 3. 并行计算:多个头可以并行计算 4. 更好的泛化:避免单一注意力的局限性

计算公式

Text Only
MultiHead(Q, K, V) = Concat(head_1, ..., head_h) W^O
head_i = Attention(Q W_i^Q, K W_i^K, V W_i^V)

Q3: 为什么需要缩放因子

解答: 缩放因子 1/√d_k 用于防止点积过大导致 Softmax 梯度消失。

原因: 1. 点积值过大:当 d_k 较大时, QK^T 的值会很大 2. Softmax 梯度消失:大的输入会导致 Softmax 梯度接近 0 3. 训练不稳定:梯度消失导致训练困难

解决方案: - 除以√d_k 缩放点积,控制数值尺度 - 使 Softmax 输入保持在合理范围 - 保证梯度稳定

2. 位置编码

Q4: 为什么需要位置编码

解答: Transformer 的自注意力机制本身没有位置信息,需要显式添加位置编码。

原因: 1. 置换不变性:自注意力对输入顺序不敏感 2. 需要位置信息:语言任务依赖词序 3. 显式编码:通过位置编码注入位置信息

Q5: 常见的位置编码方法有哪些

解答: 常见的位置编码方法:

  1. 正弦/余弦位置编码
  2. 使用固定正弦余弦函数
  3. 不同维度使用不同频率
  4. 可以处理未见过的位置

  5. 可学习位置嵌入

  6. 将位置编码为可学习参数
  7. 简单有效
  8. 限制最大序列长度

  9. 相对位置编码

  10. T5 Bias
  11. Transformer-XL
  12. 可以处理更长序列

  13. 旋转位置编码( RoPE )

  14. 通过旋转矩阵编码相对位置
  15. 在近年不少大语言模型中较常见
  16. 兼容性好

Q6: RoPE 相比其他位置编码的优势

解答: RoPE ( Rotary Positional Embedding )的优势:

  1. 相对位置:自然编码相对位置信息
  2. 数值稳定:避免数值溢出问题
  3. 长度外推通常更稳健:相较绝对位置嵌入,很多场景下更容易扩到更长上下文,但并不保证无限外推
  4. 计算高效:可以与注意力计算融合
  5. 兼容性好:可以与现有模型无缝集成

3. 架构组件

Q7: 前馈网络的作用是什么

解答: 前馈网络( FFN )对每个位置的表示进行非线性变换。

作用: 1. 增加模型容量:提供额外的参数 2. 非线性变换:激活函数引入非线性 3. 特征提取:提取更高级的特征

结构

Text Only
FFN(x) = max(0, xW_1 + b_1) W_2 + b_2

Q8: 残差连接和层归一化的作用

解答: 残差连接和层归一化是 Transformer 的关键组件。

残差连接: - 作用:缓解梯度消失问题 - 原理: x + F(x) - 优势:允许梯度直接流过网络

层归一化: - 作用:稳定训练过程 - 原理:归一化层输入 - 优势:加速收敛,提高稳定性

Q9: Encoder 和 Decoder 的区别是什么

解答: Encoder 和 Decoder 的主要区别:

特性 Encoder Decoder
注意力类型 自注意力 自注意力 + 编码-解码注意力
掩码 不需要 需要因果掩码
应用 理解输入 生成输出
输入 源序列 目标序列 + 编码输出

4. 练习题

基础练习

  1. 实现自注意力
Python
# 练习: 实现自注意力
def self_attention(Q, K, V, mask=None):
    # 你的代码
    pass
  1. 实现位置编码
Python
# 练习: 实现正弦位置编码
def sinusoidal_positional_encoding(seq_len, d_model):
    # 你的代码
    pass

进阶练习

  1. 实现多头注意力
Python
# 练习: 实现多头注意力
class MultiHeadAttention(nn.Module):
    def __init__(self, d_model, num_heads):
        # 你的代码
        pass

    def forward(self, x, mask=None):
        # 你的代码
        pass
  1. 实现 RoPE
Python
# 练习: 实现旋转位置编码
def rotate_positional_embeddings(x, cos, sin):
    # 你的代码
    pass

5. 答题建议

✅ 面试技巧

  1. 深入理解
  2. 理解每个组件的作用
  3. 掌握数学原理
  4. 了解设计决策

  5. 代码实现

  6. 准备关键代码
  7. 理解实现细节
  8. 能够解释代码

  9. 对比分析

  10. 对比不同方法
  11. 分析优缺点
  12. 说明适用场景

❌ 避免做法

  1. 表面理解
  2. 不要只记概念
  3. 理解原理和公式
  4. 能够灵活应用

  5. 忽视细节

  6. 注意技术细节
  7. 理解设计权衡
  8. 了解典型进展与设计权衡

  9. 缺乏实践

  10. 结合代码实现
  11. 动手实践验证
  12. 积累项目经验

6. 总结

本章介绍了 Transformer 架构的面试题:

  • 注意力机制: 自注意力、多头注意力、缩放因子
  • 位置编码: 正弦编码、可学习编码、 RoPE
  • 架构组件: FFN 、残差连接、层归一化、 Encoder vs Decoder

深入理解这些内容是面试的关键。

7. 下一步

继续学习08-预训练和微调面试题,了解预训练和微调的相关知识。

⚠️ 核验说明(2026-04-03):本页已完成 2026-04-03 人工复核。注意力缩放因子、RoPE 边界和架构组件作用已按更准确的数学与工程表述修订。


最后更新日期: 2026-04-03