【面试题】Transformer应用实践专题
1. 如何使用Transformer实现Zero-shot Learning?
✅ 核心思想:利用预训练语言模型(PLM)的通用语义理解能力 + Prompt工程,在不更新参数的情况下完成新任务。
方法一:Prompt-based Zero-shot(如GPT-3、T0、FLAN-T5)
- 将任务转化为“填空”或“选择”形式:
- 分类任务:“这句话的情感是[MASK]。选项:正面、负面。”
- NLI任务:“前提:… 假设:… 关系是[MASK]。选项:蕴含、矛盾、中立。”
- 模型通过预训练获得的“世界知识”和“指令遵循能力”直接预测答案。
方法二:Instruction Tuning + Zero-shot泛化(如FLAN、OPT-IML)
- 在多任务上微调模型,输入为“指令 + 输入”,输出为“答案”
- 模型学会“遵循指令”,从而泛化到未见过的任务
- 示例指令:“将以下句子翻译成法语:Hello →”
方法三:检索增强生成(RAG) + Zero-shot
- 用检索器从外部知识库获取相关文档
- 将文档 + 问题输入大模型,生成答案
- 不更新模型参数,实现开放域Zero-shot QA
方法四:思维链(Chain-of-Thought, CoT)Prompting
- 对复杂推理任务,引导模型“逐步思考”:
- “Q: 小明有5个苹果,吃了2个,又买了3个,现在有几个?A: 首先…然后…所以答案是6。”
- 显著提升数学、逻辑类任务的Zero-shot表现
📌 关键成功因素:
- 模型规模(>10B参数效果显著)
- Prompt设计(清晰、结构化、带示例Few-shot更好)
- 任务与预训练数据分布接近
✅ 工业推荐:使用 FLAN-T5-XXL / LLaMA-3-70B + 精心设计Prompt + CoT
2. 描述至少2种对不同训练模型训练出来的Embeddings进行相似度比较的方法。
✅ 目标:比较来自不同模型(如BERT-base vs RoBERTa-large vs Sentence-T5)的句子/词向量是否“语义对齐”。
方法一:Procrustes Analysis(正交变换对齐)
- 假设两个嵌入空间存在旋转/反射关系
- 学习一个正交矩阵 WWW,使 X1W≈X2X_1 W \approx X_2X1W≈X2
- 用SVD求解:W∗=argminW∥X1W−X2∥F2, s.t. WTW=IW^* = \arg\min_W \|X_1 W - X_2\|_F^2,\ s.t.\ W^T W = IW∗=argminW∥X1W−X2∥F2, s.t. WTW=I
- 对齐后,用余弦相似度比较
✅ 适用于:词向量对齐(如跨语言词嵌入)、模型蒸馏前的表示对齐
方法二:Canonical Correlation Analysis(CCA)及其变体SVCCA、PWCCA
- 寻找两个空间中的最大相关投影方向
- SVCCA(Singular Vector CCA):先对每个矩阵做SVD降噪,再做CCA
- PWCCA(Projection Weighted CCA):按神经元重要性加权
- 输出“相似度分数” ∈ [0,1],越高表示表示越相似
✅ 适用于:比较不同层、不同模型、不同训练阶段的表示相似性(如BERT layer 6 vs layer 12)
方法三(Bonus):Centered Kernel Alignment(CKA)
- 计算两个表示矩阵的相似性核,再计算核对齐度
- 对表示尺度、旋转不变
- 公式:
CKA(X,Y)=∥YTX∥F2∥XTX∥F⋅∥YTY∥F \text{CKA}(X, Y) = \frac{\|Y^T X\|_F^2}{\|X^T X\|_F \cdot \|Y^T Y\|_F} CKA(X,Y)=∥XTX∥F⋅∥YTY∥F∥YTX∥F2 - 广泛用于神经网络表示相似性分析(如 Comparing DNN Representations)
✅ 推荐工具:
svcca
,PWCCA
,linear_CKA
fromrepresentation-similarity
包
3. 如何使得小模型例如LSTM具有大模型例如Bert的能力?
✅ 核心策略:知识蒸馏(Knowledge Distillation) + 架构/训练优化
方法一:Logits蒸馏(Hinton 2015)
- 用大模型(Teacher)的Softmax输出(带Temperature)作为监督信号
- 小模型(Student)最小化KL散度:
LKD=α⋅KL(pteacher∣∣pstudent)+(1−α)⋅Ltask \mathcal{L}_{KD} = \alpha \cdot \text{KL}(p_{\text{teacher}} || p_{\text{student}}) + (1-\alpha) \cdot \mathcal{L}_{\text{task}} LKD=α⋅KL(pteacher∣∣pstudent)+(1−α)⋅Ltask
方法二:表示蒸馏(Representation Distillation)
- 对齐中间层表示(如BERT [CLS] 或平均池化向量)
- 使用MSE或Cosine损失:
Lrep=∥fteacher(x)−fstudent(x)∥22 \mathcal{L}_{rep} = \| f_{\text{teacher}}(x) - f_{\text{student}}(x) \|_2^2 Lrep=∥fteacher(x)−fstudent(x)∥22 - 如 TinyBERT、DistilBERT
方法三:关系蒸馏(Relation Distillation)
- 蒸馏Attention矩阵、层间关系、token间交互
- 如 MiniLM:蒸馏Teacher的Self-Attention分布和Value-Value关系
方法四:架构适配 + 训练技巧
- 给LSTM加残差连接、LayerNorm、更深的堆叠
- 使用预训练词向量(如GloVe) + 字符级CNN
- 训练时用更大的batch、更长的warmup、标签平滑
方法五:Prompt + 外部检索增强
- 即使小模型,也可通过Prompt调用外部知识(如RAG)
- 例:LSTM + Elasticsearch检索Top-K文档 → 拼接输入 → 分类
✅ 工业推荐方案:
DistilBERT(或蒸馏版RoBERTa)> LSTM 若必须用LSTM:Logits蒸馏 + 表示蒸馏 + 预训练嵌入 + 深层堆叠
4. 训练后的BERT模型泛化能力的限制是什么?
✅ BERT泛化瓶颈主要来自:预训练目标、架构设计、数据偏差
(1)预训练任务局限
- MLM:只预测被mask的token,忽略全局句子结构
- NSP:过于简单(50%负样本是随机句子),易被shortcut利用(如主题匹配)
- → 导致对篇章级、逻辑推理、数值推理任务泛化差
(2)静态表示
- BERT输出是上下文感知但静态的(无自回归生成能力)
- 无法处理生成任务、长程依赖建模、动态状态跟踪
(3)位置编码限制
- 绝对位置编码 → 外推能力差(长文本性能下降)
- 无显式相对位置建模(虽Attention可学习,但效率低)
(4)数据领域偏差
- 预训练数据(Books, Wiki)≠ 下游任务(医疗、法律、金融)
- 导致领域迁移能力弱,需大量领域微调
(5)缺乏世界知识更新机制
- 知识固化于预训练数据(如BERT知识截止于2019)
- 无法像检索增强模型(如RAG)那样动态获取新知识
✅ 改进方向:
- 用Span Prediction、Sentence Order Prediction替代NSP(如ALBERT, RoBERTa)
- 引入动态记忆/检索(如REALM, RAG)
- 使用相对位置编码(如DeBERTa, RoPE)
- 持续预训练(Continual Pretraining) on domain data
5. GPT的auto-regressive语言模型架构在信息表示方面有什么缺陷?
✅ 核心缺陷:单向性导致表示不完整、注意力受限、无法建模双向依赖
(1)仅使用左侧上下文(单向掩码)
- 每个token只能看到历史,看不到未来
- → 对需要全局理解的任务(如填空、指代消解、语义相似度)表示能力弱
- 例:“The bank is next to the river. I deposited money at the ___.” → “bank”需右侧信息消歧
(2)注意力模式受限
- 早期token对后期token无直接交互(梯度路径长)
- 长序列中,开头token信息易被稀释
(3)缺乏显式双向交互机制
- BERT可通过双向Attention建模“bank”与“river/deposited”的关系
- GPT只能依赖隐式记忆,效率低、易出错
(4)表示不一致
- 同一token在不同生成步的表示不同(因历史不同)
- 不适合做句子表示、聚类、检索等任务
(5)训练-推理不一致(Exposure Bias)
- 训练时用真实历史,推理时用自生成历史 → 误差累积
✅ 解决方案:
- 双向预训练 + 自回归微调(如Prefix-LM:T5、GLM)
- 检索增强(如RETRO):引入右侧文档信息
- Encoder-Decoder架构(如BART、T5):编码时双向,解码时自回归
- Permutation Language Modeling(如XLNet):随机排列顺序,模拟双向
6. 描述BERT中MLM实现中的缺陷及可能的解决方案。
✅ MLM(Masked Language Modeling)是BERT核心,但存在多个缺陷
缺陷一:预训练-微调不一致(Pretrain-Finetune Mismatch)
- 预训练时输入含
[MASK]
,微调时无[MASK]
- 模型从未学习如何处理“真实文本”
解决方案:
- Dynamic Masking(RoBERTa):每epoch重新mask,增加多样性
- Replace instead of Mask(如ELECTRA):用生成器替换token,判别器判断是否被替换 → 无[mask]符号
缺陷二:独立性假设(每个[mask]独立预测)
- MLM假设被mask的token之间条件独立
- 忽略token间依赖(如“New York”应联合预测)
解决方案:
- Span Masking(如SpanBERT):mask连续片段,预测整个span
- N-gram Masking(如ERNIE):按短语/实体mask
- Whole Word Masking(BERT-WWM):mask整个词(中文按字)
缺陷三:低效率(仅15% token被预测)
- 85% token不参与损失计算 → 训练效率低
解决方案:
- ELECTRA:判别式任务,所有token参与计算(是否被替换)
- MPNet:Masked and Permuted Pre-training → 联合建模被mask和未mask位置
缺陷四:Mask策略引入噪声
[MASK]
是人工符号,破坏自然语言分布
解决方案:
- Cloze-based Prompting(如PET):用自然语言模板(“This is a great [MASK]” → “movie”)
- Generative Pre-training(如T5):用“fill in the blank”格式,不引入[mask]
缺陷五:对位置敏感任务建模弱
- MLM不显式建模位置、顺序、结构
解决方案:
- StructBERT:加入“词序预测”和“句子结构预测”任务
- DeBERTa:显式建模token位置和内容,使用分离的位置编码
✅ 当前最优MLM改进方案:ELECTRA(判别式) + Span Masking + Dynamic Masking