Transformer 架构与预训练原理
本章聚焦 Transformer 核心组件拆解、预训练目标设计、关键参数调优及面试高频追问。面试中常见的提问路径如下(红色箭头指向高频追问方向)。
面试问答卡片
面试官考察点:对核心组件理解的深度,能否清晰描述矩阵计算与缩放点积注意力的细节。
回答框架:先概述 Encoder 由 N 个相同层组成,每层包含多头自注意力 + 前馈网络 + 残差连接 + 层归一化;再重点展开注意力:Q/K/V 来自同一输入,先做线性投影,分 h 个头,每个头内做缩放点积注意力,最后拼接并线性变换。
简短示例回答(60-100字):“Encoder 每层包括多头自注意力与 FFN,外加残差连接和层归一。注意力中,将输入分别映射为 Q/K/V,按头数分割后计算 softmax(Q·K^T/√d_k)·V,其中缩放因子 √d_k 用于稳定梯度。最后拼接所有头输出并通过线性层。”
可能追问:① 为什么需要除以 √d_k?② 多头机制如何实现?③ 为什么使用残差连接?
避坑提醒:不要只背公式,要结合代码或训练经验说明缩放因子对 softmax 梯度的影响。回答时用具体数字举例(如 d_k=64,头数=12)更有说服力。
面试官考察点:对预训练范式的理解,能否从训练目标推导模型架构设计决策。
回答框架:先点明 BERT 使用 MLM(掩码语言模型)+ NSP(下一句预测),适合双向编码理解任务; 使用自回归语言模型(从左到右预测下一个词),适合生成任务。再说明目标差异导致 BERT 用 Encoder、 用 Decoder(因果掩码)。
简短示例回答(60-100字):“BERT 的 MLM 要求模型从双向上下文预测被掩码的词,因此采用双向 Encoder; 用自回归语言模型,只能看到左侧上下文,所以用带因果掩码的 Decoder。NSP 进一步增强了句子级别理解,而 的生成目标天然支持文本续写。”
可能追问:① BERT 为什么弃用 NSP(RoBERTa 实验)?② 去噪自编码(如 T5)与 MLM 的异同?③ 训练时如何构造数据?
避坑提醒:不要只说名称,要讲清楚“预测目标迫使模型学习何种表征”。提到 RoBERTa 对 NSP 的消融实验可体现前沿理解。
面试官考察点:参数设计的经验直觉,能否说出常见配置(如 BERT-base 12层/768维/12头)及背后 trade-off。
回答框架:先给出典型计算:参数量 ≈ N×(4d² + 8d²)(注意力+FFN),其中 N 层数,d 隐藏维度。通常头数 h 取 12 或 16,且 d/h 为 64 或 128。再说明层数影响深度、维度影响表达能力,两者需平衡显存与计算。
简短示例回答(60-100字):“以 BERT-base 为例:12 层、768 维、12 头,每头 64 维。层数多能提取更深语义,但需更多显存;维度大则词嵌入更丰富,但计算量平方增长。经验法则:保持 d/h ≈ 64~128,确保每个头有足够容量。”
可能追问:① 如何选取 layer_norm_epsilon?② dropout 一般设多少?③ 如果显存不够,你优先减层数还是减维度?
避坑提醒:不要只给出公式,要结合训练稳定性讨论。例如说“dim 太大易导致 attention 分布过度尖锐,需配合合适的初始化方案”。
项目案例
- 为什么不直接微调通用 BERT 而要领域预训练?—— 通用模型在金融实体识别 F1 低 15%,领域预训练后提升至 88%。
- 长文档处理如何设计 loss?—— 将文档切为多个 512 段,每个段单独预测,同时增加跨段注意力(但训练成本高)。
- 训练不稳定怎么排查?—— 先看梯度 norm,若爆炸则增大梯度裁剪阈值;若 loss 跳变,检查数据是否混入噪声。
- “当通用模型在特定领域效果不佳时,优先考虑领域词汇扩充与继续预训练,而非简单微调。我们在 FinBERT 中首先分析 tokenization 的 OOV 率,然后从零预训练了领域词表。”
- “长文本处理是常见痛点,我的经验是分段训练 + 全局 pooling,或使用 Longformer 等稀疏注意力。具体选择取决于显存预算。”