4. 深度学习基础:Transformer 与注意力机制

本章聚焦:Transformer 是 NLP 领域的基石,面试高频覆盖 原理推导、多头变体、位置编码设计 及 计算复杂度分析。掌握结构化回答框架可帮助你在 3 分钟内展示深度理解。
Transformer 核心组件回答框架 ① 自注意力 ② 多头并行 ③ 位置编码 ④ 残差连接 & LayerNorm ⑤ FFN(全连接层) 推导顺序:输入 → 自注意力计算 QKV → 多头拼接 → 加位置编码 → 残差归一化 → FFN

3 个高频面试问答

面试问题:请推导 Transformer 中 Self-Attention 的计算过程,并给出时间复杂度。

面试官考察点:是否理解 QKV 来源、attention 矩阵计算、复杂度与序列长度的关系。

回答框架:1) 输入 X 经线性映射得 Q,K,V;2) 计算注意力得分 = Q×K^T / √d;3) Softmax 归一化后与 V 加权求和;4) 时间复杂度 O(n²·d)。

简短示例回答:“Self-Attention 先将输入 X 分别乘以 Wq、Wk、Wv 得到 Q、K、V。注意力矩阵 A = softmax(QK^T/√d),输出 Z = A·V。计算复杂度 O(n²·d),n 为序列长度,d 为隐层维度。”

可能追问:为何要除以 √d?如何优化长序列?(如 FlashAttention、稀疏注意力)

避坑提醒:勿漏掉缩放因子;推导时需强调 batch 和 head 维度;不要混淆自注意力与交叉注意力。

面试问题:Multi-Head Attention 如何实现?为什么比单头好?

面试官考察点:多头并行机制、参数共享、表达能力差异。

回答框架:1) 将 d_model 拆成 h 个头,每个头维度 d_k = d_model/h;2) 各头独立做 Self-Attention;3) 拼接后经线性层输出;4) 多头可以关注不同子空间特征,增强模型容量。

简短示例回答:“将 Q、K、V 沿最后一维分割为 h 个头,每个头做独立注意力后拼接,再经 W_o 映射。多头使模型并行学习不同表示子空间,提升对位置、句法、语义等多角度信息的捕获能力。”

可能追问:头数如何选择?头之间是否存在冗余?(可以通过 HeadPruning 分析)

加分点:可提到“多头可以看作集成学习”,且头数增加不显著增加参数量(仅增加输出映射矩阵宽度)。

面试问题:Transformer 为什么需要位置编码?常见变体有哪些?

面试官考察点:自注意力的置换不变性、位置编码的设计动机与实现区别。

回答框架:1) Self-Attention 不具备序列顺序信息;2) 常见方案:正弦/余弦编码、可学习位置编码、相对位置编码(如 T5 的偏置项);3) 对比优缺点。

简短示例回答:“自注意力对输入顺序不敏感,需要位置编码注入相对或位置。原版用 sin/cos 固定编码,无需训练且可外推;BERT 使用可学习编码;T5 采用相对位置偏置,能更好建模序列内距离关系。”

可能追问:相对位置编码为什么比好?RoPE(旋转位置编码)的原理是什么?

避坑提醒:不要只说“加一个位置向量”,要明确指出加在输入层还是每层;对于可学习编码要阐明长度限制。

项目实战案例:基于 Transformer 的对话意图识别系统

项目名称多轮对话意图分类模型(工业级)
业务背景服务于金融客服机器人,需对用户 200+ 意图进行实时识别,支持上下文建模。
规模指标训练数据 800 万条对话,单轮平均 1.2 秒推理(GPU T4),准确率 96.5%,延迟 <300ms。
技术栈PyTorch / Transformers 库 / 12 层 BERT 基座 / TorchServe 部署 / ONNX 优化
核心难点1) 长对话历史压缩(窗口截断丢失信息);2) 细粒度意图区分(相似意图仅差一个实体);3) 推理速度与准确率平衡。
面试高频追问• 如何处理超长输入?(使用滑窗或片段级注意力) • 如何处理未见意图?(加入快速适应层或原型网络) • 如何降低显存?(梯度检查点 / 混合精度)
可迁移回答话术“我们采用 分层注意力:先用轻量级模型做候选意图过滤,再用 BERT 精排。为解决长上下文,引入 记忆增强:将历史对话摘要编码为 级记忆向量。”
关键面试话术总结:在回答 Transformer 相关问题时,始终围绕 “计算 - 容量 - 位置” 三角展开:先推导矩阵运算(计算),再分析多头能力(容量),最后解释位置编码必要性(位置)。项目经验中突出 “压缩 - 推理优化 - 冷启动” 三个工业落地痛点。