Transformer面试题总结97道¶
1、请简述Transformer的整体架构,并说明其与RNN/LSTM的核心区别。¶
答案:
Transformer由Encoder和Decoder两部分组成(若仅用于BERT等预训练模型,可单独使用Encoder)。
- Encoder:由N个相同的层堆叠而成,每层包含两个子层:
- 多头自注意力:捕捉输入序列中任意两个位置间的依赖关系。
- 前馈神经网络:对每个位置的表示进行非线性变换。
-
每个子层后都接有残差连接和层归一化。
-
Decoder:同样由N个相同的层堆叠而成,每层包含三个子层:
- 掩码多头自注意力:防止在预测当前位置时看到未来位置的信息。
- 交叉注意力:将Encoder的输出作为K、V,Decoder的当前状态作为Q,实现信息交互。
- 前馈神经网络。
核心区别:
-
并行计算:RNN/LSTM按时间步顺序计算,无法并行;Transformer通过自注意力一次性处理整个序列,可并行计算,训练速度更快。
-
长程依赖:RNN/LSTM存在梯度消失/爆炸问题,难以捕捉长距离依赖;Transformer中任意两个位置的距离均为1,能有效建模长程依赖。
-
架构组成:RNN/LSTM依赖循环单元;Transformer完全基于注意力机制,无循环结构。
2、详细解释Self-Attention的计算过程,并写出其公式。¶
答案:
Self-Attention的核心是将输入序列的每个元素与序列中所有元素进行交互,通过加权求和得到新的表示。计算步骤如下:
- 线性变换:对输入矩阵 X∈Rn×dX∈Rn×d(nn为序列长度,dd为嵌入维度),通过三个权重矩阵

- 计算注意力分数:通过 QQ 与 KK 的点积计算相似度,并除以 dkdk(dkdk 是每个头的维度,用于防止点积结果过大导致梯度消失):

- Softmax归一化:对每一行(即每个查询位置)应用Softmax,得到注意力权重:

- 加权求和:将注意力权重与 VV 相乘,得到最终输出:

3、为什么要使用多头注意力(Multi-Head Attention)?它的作用是什么?¶
答案: 多头注意力是将 Q,K,VQ,K,V 分别线性投影到 hh 个不同的低维空间,分别进行注意力计算,然后将结果拼接并再次投影。
作用:
-
捕捉多种语义关系:不同的头可以关注不同的信息(例如,有的头关注句法结构,有的头关注长程依赖,有的头关注局部信息),使模型能从多个角度理解序列。
-
增强表示能力:通过多个头,模型可以学习到更丰富的特征表示,提升泛化能力。
-
稳定训练:将高维注意力分解为多个低维头,避免了单头注意力在高维空间可能出现的梯度问题。
公式:

4、为什么Transformer需要位置编码?有哪些常见的位置编码方式?¶
答案:
Transformer的注意力机制是置换不变的,即交换输入序列中两个token的位置,输出也会相应交换,这导致模型无法感知token的顺序信息。因此需要显式注入位置信息。
常见位置编码方式:
- 正弦/余弦位置编码(原始Transformer):使用不同频率的三角函数:

-
优点:无需学习,能外推到更长的序列。
-
可学习位置编码:将位置编码作为可训练参数,如BERT、GPT中使用。优点:灵活,适合固定长度序列。
-
相对位置编码:编码token之间的相对距离,如Transformer-XL、T5、RoPE(旋转位置编码)等。能更好地处理长序列和泛化。
5、在Decoder中,为什么要使用Masked Self-Attention?具体是如何实现的?¶
答案: 原因:在自回归生成任务中(如机器翻译、文本生成),模型在预测第 tt 个输出时,只能依赖前 t−1t−1 个已生成的token,不能看到未来位置的信息。否则会造成信息泄露,导致训练和推理不一致。
实现方式: 在计算注意力分数 S=QKTS=QKT 后,对未来的位置(即 j>ij>i 的位置)施加一个极大的负数掩码(如 −∞−∞),使得经过Softmax后这些位置的权重接近0。具体公式:

其中 MM 是一个上三角矩阵,上三角部分为 −∞−∞,其余为0。
6、Transformer中为什么使用Layer Normalization(层归一化)而不是Batch Normalization?¶
答案:
-
序列长度可变:Batch Normalization依赖批次维度进行统计,而Transformer中不同样本的序列长度可能不同,导致padding token影响统计量,不稳定。
-
并行性:Layer Normalization在每个样本的每个层内部独立归一化,不依赖批次大小,训练和推理一致。
-
缓解梯度问题:Transformer层数深,Layer Normalization有助于稳定训练,防止梯度爆炸或消失。
-
适用性:LN在RNN、Transformer等变长序列模型中表现优于BN。
7、请说明Transformer中Feed-Forward Network(FFN)的作用和结构。¶
答案:
FFN是一个全连接前馈网络,作用于每个位置的表示,且位置间参数共享。结构为:

或使用GELU等激活函数。
作用:
-
非线性变换:自注意力是线性组合,FFN引入非线性,增强模型表达能力。
-
特征映射:将注意力层输出的特征映射到更高维空间(通常中间维度为 4d4d),再投影回原维度,增加模型容量。
-
位置独立:每个位置独立计算,保持位置间的独立性。
8、在Transformer的训练和推理过程中,为什么推理速度通常比训练慢?如何优化?¶
答案:
-
训练:可并行处理整个序列,所有位置的注意力计算同时进行,效率高。
-
推理:自回归生成,每次只能生成一个token,且需要将当前生成的token作为下一步输入,导致:
- 串行计算:生成 nn 个token需 nn 次前向传播。
- 重复计算:每次生成新token时,之前token的Key和Value会被重复计算。
优化方法:
-
KV缓存:在推理时,缓存已生成token的 KK 和 VV,每次只需计算新token的 Q,K,VQ,K,V,并与缓存的 K,VK,V 拼接,避免重复计算。这是Decoder推理的标准优化。
-
模型量化:将浮点运算转为低精度(如INT8),减少计算量和显存。
-
算子融合:将多个连续操作(如Layer Norm + Attention)合并为单个算子,减少内核启动开销。
-
批处理:将多个请求合并为批次,提高GPU利用率。
9、相比原始Transformer,后续模型(如BERT、GPT、T5)做了哪些主要改进?¶
答案:
- BERT(Encoder-Only):
- 使用可学习位置编码,并引入 Segment Embeddings 处理句子对任务。
- 预训练任务为掩码语言建模(MLM) 和下一句预测(NSP)。
-
去除了Decoder,只使用Encoder,适合理解类任务。
-
GPT(Decoder-Only):
- 使用单向掩码注意力,保留Decoder结构,适合生成任务。
-
采用更大的参数量和更大量的数据进行预训练,引入上下文学习能力。
-
T5(Encoder-Decoder):
- 统一了NLP任务为“文本到文本”框架。
-
使用相对位置编码,并在预训练中引入跨度掩码(Span Corruption)。
-
其他改进:
- RoPE(旋转位置编码):如LLaMA、ChatGLM等,结合绝对位置和相对位置优点。
- SwiGLU激活:替代ReLU,提升效果。
- Pre-LN:将层归一化放在残差连接之前,稳定训练,允许更深的网络。
10、Transformer的时间复杂度和空间复杂度是多少?如何理解其“长序列”限制?¶
答案:
-
时间复杂度:O(n2⋅d)O(n2⋅d),其中 nn 是序列长度,dd 是维度。主要来自 QKTQKT 的计算。
-
空间复杂度:O(n2+n⋅d)O(n2+n⋅d),主要来自存储注意力矩阵(n×nn×n)。
长序列限制: 当 nn 很大时(如处理长文档、高分辨率图像),n2n2 的计算和显存开销变得不可接受。例如,n=4096n=4096 时,注意力矩阵就有1600万个元素,导致显存爆炸。
常见改进方法:
-
稀疏注意力:如Longformer、BigBird,将全连接注意力限制为局部窗口 + 全局token。
-
线性注意力:如Performer、Linformer,将复杂度降至 O(nd2)O(nd2)。
-
分块处理:将长序列切分为块,分别处理后再聚合。
-
RAG(检索增强生成):引入外部知识库,避免将超长上下文全部放入Transformer。
答案: 使用缩放点积是因为当 dkdk 较大时,点积的结果值会变得很大,使得Softmax函数进入梯度极小的饱和区域(梯度接近0),导致梯度消失。缩放因子 dkdk 能将点积结果的方差稳定在1左右,保持梯度的稳定流动。数学上,若 q,kq,k 的均值为0、方差为1,则点积的方差为 dkdk,除以 dkdk 后方差恢复为1。
11、在Transformer中,残差连接(Residual Connection)的作用是什么?为什么在残差连接后要进行Layer Norm?¶
答案:
-
残差连接:缓解深层网络中的梯度消失问题,使信息能够跨层直接传播,同时让模型更容易优化,允许构建更深的网络。
-
先残差后Layer Norm(Post-LN) vs 先Layer Norm后残差(Pre-LN):原始Transformer采用Post-LN,但训练不稳定;后续模型(如GPT-3、LLaMA)多采用Pre-LN,即先归一化再进行子层操作,最后加残差。Pre-LN能稳定梯度,避免训练初期的梯度爆炸,且能支持更深层。
12、请对比Transformer中的交叉注意力(Cross-Attention)与自注意力(Self-Attention)。¶
答案:
-
自注意力:Q,K,VQ,K,V 均来自同一输入序列,捕捉序列内部元素间的关系。
-
交叉注意力:QQ 来自Decoder当前层,K,VK,V 来自Encoder的输出,实现Decoder对输入序列的关注,让Decoder在生成每个token时能动态聚焦于输入序列的不同部分。
-
在计算上,二者公式相同,仅输入来源不同。交叉注意力是Encoder-Decoder架构的关键信息桥梁。
13、为什么Transformer的Encoder和Decoder都需要多层堆叠?每一层捕捉的信息有何不同?¶
答案:
-
多层堆叠可以逐步提取和抽象特征。浅层倾向于捕捉局部、语法层面的信息(如词性、短语结构),深层则能捕捉更抽象、语义层面的全局依赖关系。
-
每一层通过自注意力和前馈网络对表示进行非线性变换,堆叠更多层增加了模型的容量和表达能力,使其能学习复杂模式。
-
实际研究中,深层模型(如BERT-large 24层,GPT-3 96层)性能显著优于浅层模型,但也带来训练和推理开销。
14、如何处理Transformer中的变长序列?Padding和Attention Mask是如何工作的?¶
答案:
-
变长序列需通过填充(Padding)将同一批次内的序列对齐到相同长度(通常填充特殊token
[PAD])。 -
Attention Mask:在计算注意力时,将填充位置的注意力分数设为 −∞−∞(或极小值),使Softmax后对应权重为0,避免模型关注无意义的填充位。
-
在Decoder中,还需使用上三角掩码(未来掩码)防止看到未来信息,通常与填充掩码结合使用。
15、Transformer中前馈神经网络(FFN)的隐藏层维度通常为什么设置为4倍嵌入维度?¶
答案:
-
这是原始Transformer论文中设定的经验值(dff=4dmodeldff=4dmodel),在实践中被广泛沿用。
-
增大FFN维度可以为模型提供更多参数和容量,提升非线性表达能力;而4倍被认为是在性能和计算开销之间的平衡点。
-
在LLaMA等模型中,这一比例有所调整(例如 83d38d 或 23⋅4d32⋅4d),结合了SwiGLU等激活函数进行优化。
16、什么是Flash Attention?它是如何优化Transformer的注意力计算的?¶
答案:
Flash Attention是一种高效的注意力实现,通过分块计算和重计算减少显存访问次数,显著提升训练和推理速度。
核心思想:
-
标准注意力需要将完整的 n×nn×n 注意力矩阵写入显存,导致显存瓶颈和IO开销。
-
Flash Attention将 Q,K,VQ,K,V 分块,在SRAM(高速缓存)中完成注意力计算,仅将最终结果写回显存,避免存储中间矩阵。
-
通过重计算,在反向传播时重新计算注意力分数,而不是存储,进一步降低显存占用。
-
可带来2-4倍的训练加速,并支持更长序列。
17、Transformer中的参数初始化通常采用什么方法?为什么?¶
答案:
-
原始Transformer使用Xavier初始化(Glorot初始化),使各层输出的方差保持一致,避免梯度爆炸或消失。
-
后续模型如BERT、GPT,常采用截断正态分布初始化,权重范围 ∼N(0,0.02)∼N(0,0.02),并设置小的标准差,因为深层网络对初始值敏感。
-
对于残差分支,有时会进行缩放初始化,如将残差投影层的权重初始化为0,使训练初期更稳定。
18、在Transformer中,如何理解“注意力矩阵的秩”对模型表达能力的限制?¶
答案:
-
自注意力输出是 VV 的加权组合,相当于将 VV 的行向量投影到由注意力权重张成的空间中。
-
若注意力矩阵 A∈Rn×nA∈Rn×n 的秩较低,则输出信息的自由度受限,可能无法充分表示复杂的依赖关系。
-
多头注意力通过多个头的拼接提升了有效秩,缓解了这一问题。这也解释了为什么多头注意力优于单头。
19、请说明Transformer在计算机视觉中的应用(如ViT),并指出其与NLP Transformer的主要差异。¶
答案:
-
ViT(Vision Transformer):将图像划分为固定大小的patch,线性投影为序列,送入标准Transformer Encoder。分类时使用
[CLS]token或全局平均池化。 -
主要差异:
- 输入构建:NLP输入是词嵌入 + 位置编码;ViT输入是patch嵌入 + 位置编码。
- 归纳偏置:CNN天然具有局部性和平移等变性,ViT缺乏这些偏置,需要大量数据预训练才能超越CNN。
- 位置编码:ViT常使用可学习位置编码或相对位置编码,以适应不同分辨率图像。
- 计算复杂度:ViT的序列长度 = patch数,对于高分辨率图像依然面临 O(n2)O(n2) 问题,衍生出Swin Transformer等分层架构。
20、为什么Transformer在机器翻译等任务上最初需要“warmup”学习率调度?¶
答案:
-
Transformer训练初期梯度可能不稳定,因为自注意力和深层堆叠导致参数更新幅度难以控制。
-
Warmup(如线性增长到峰值,再余弦衰减)使学习率从小值开始,让模型平稳度过早期的不稳定阶段,防止梯度爆炸。
-
后续研究发现,采用Pre-LN + AdamW优化器时,warmup的必要性降低,但仍常用于大规模训练中以保证稳定性。
21、在Transformer中,如果取消所有的Layer Norm和残差连接,会发生什么?¶
答案:
-
取消残差连接:梯度无法跨层直接传播,导致深层网络梯度消失,训练几乎无法收敛;同时信息无法绕过子层,使得网络难以优化。
-
取消Layer Norm:内部协变量偏移加剧,各层输出分布不稳定,训练易发散或收敛缓慢,尤其在深层网络中,数值范围可能失控。 残差连接和Layer Norm是Transformer能够堆叠数十层甚至上百层的关键,缺一不可。实践中,即使保留其一,也难以训练深层模型。
什么是ALiBi(Attention with Linear Biases)?它解决了什么问题?¶
答案:
ALiBi是一种相对位置编码方案,不向token嵌入添加位置编码,而是直接在注意力分数上施加与距离成正比的惩罚(偏置):
scoreij=qi⋅kj−m⋅∣i−j∣scoreij=qi⋅kj−m⋅∣i−j∣
其中 mm 是头相关的斜率。
解决的问题:
-
传统绝对位置编码外推能力差,训练长度固定,推理时遇到更长序列性能下降。
-
ALiBi无需学习位置参数,能平滑外推到更长的序列,在长文本生成任务中表现优异(如BLOOM模型采用此方法)。
Transformer-XL中是如何解决长序列分段训练时的上下文碎片问题的?¶
答案:
-
问题:标准Transformer将长序列切分为固定长度的段,段之间无信息传递,导致模型无法捕捉超过段长的依赖。
-
Transformer-XL引入段级循环(Segment-Level Recurrence):在训练下一段时,缓存上一段的隐藏状态,作为当前段的扩展上下文(类似RNN的记忆传递)。
-
同时采用相对位置编码,避免因循环引入的位置歧义。这使得模型能处理更长的依赖关系,且推理时可逐步扩展。
稀疏注意力(Sparse Attention)有哪些常见模式?分别适用于哪些场景?¶
答案:
-
滑动窗口注意力:每个token只关注其前后 ww 个邻居。适用于局部依赖强的数据,如文本、音频。复杂度 O(n⋅w)O(n⋅w)。
-
固定步长/跨步注意力:每隔固定步长采样注意力。适用于全局稀疏模式,如Longformer。
-
全局注意力:选择少量token(如
[CLS]或特殊token)与所有token交互,其他token只与邻居交互。适用于需要全局信息但不密集的场景。 -
随机/哈希注意力:通过哈希函数随机分组,组内全连接。如Reformer,适用于超长序列但精度要求不太高的场景。
-
可学习稀疏模式:如Routing Transformer,让模型自己学习哪些位置需要关注。
在Transformer的训练中,如何避免过拟合?常用的正则化手段有哪些?¶
答案:
-
Dropout:在注意力权重、FFN输出、残差连接前等多处应用dropout(通常取0.1)。
-
权重衰减:AdamW优化器中引入,对参数施加L2正则化。
-
标签平滑:将one-hot标签替换为平滑分布(如 1−ϵ1−ϵ 给正确类,ϵ/(K−1)ϵ/(K−1) 给其他类),防止模型过度自信,提升泛化。
-
早停:基于验证集性能停止训练。
-
数据增强:在NLP中可通过回译、随机替换等扩充数据。
如何评估Transformer模型的计算量(FLOPs)和参数量?¶
答案: 以 nn 为序列长度,dd 为嵌入维度,hh 为头数,dk=d/hdk=d/h,dffdff 为FFN中间维度(通常 4d4d)。
-
自注意力参数量:WQ,WK,WV,WOWQ,WK,WV,WO 共 4d24d2。
-
FFN参数量:两个线性层,共 d⋅dff+dff⋅d=2d⋅dffd⋅dff+dff⋅d=2d⋅dff(忽略偏置)。
-
单层总参数量:4d2+2d⋅dff4d2+2d⋅dff,乘以层数。
-
计算量(FLOPs):
- QKTQKT:n⋅d⋅nn⋅d⋅n(点积),约 n2dn2d。
- Softmax:O(n2)O(n2)。
- 加权求和:n2dn2d。
- FFN:n⋅(2d⋅dff)n⋅(2d⋅dff)。
- 总体约 O(n2d+nd2)O(n2d+nd2),实际中 n2dn2d 项占主导(长序列时)。
在分布式训练Transformer时,通常采用哪些并行策略?¶
答案:
-
数据并行:每个GPU持有完整模型副本,处理不同批次数据,梯度同步。
-
模型并行:将模型参数分片到不同设备,适用于单卡放不下巨型模型。
-
流水线并行:将模型按层切分到多个设备,实现微批次流水线,减少设备空闲。
-
张量并行:将单个算子(如注意力、FFN)的矩阵乘法切分到多个设备,如Megatron-LM方案。
-
混合并行:结合上述多种策略,如GPT-3训练使用数据并行 + 流水线并行 + 张量并行。
什么是“注意力坍塌”?如何避免?¶
答案:
注意力坍塌指在深层网络中,注意力权重趋于均匀分布(所有位置权重相同),失去对重要信息的聚焦能力。
原因:随着层数加深,残差连接和归一化可能导致表示退化,注意力分布变得平滑。
避免方法:
-
使用Pre-LN结构。
-
在注意力计算前增加非线性(如SwiGLU)。
-
适当增加头数或采用多头注意力。
-
在训练中引入正则化(如dropout)防止过度平滑。
请解释Transformer中“瓶颈结构”的作用,以及与“宽度”和“深度”的关系。¶
答案:
-
Transformer的瓶颈主要体现在注意力模块:将 dd 维映射到 h⋅dkh⋅dk(d=h⋅dkd=h⋅dk),再投影回 dd。这一结构降低了计算复杂度。
-
宽度:指嵌入维度 dd,影响模型的表示容量。宽度越大,每个token的表达越丰富,但计算量 O(nd2)O(nd2) 也随之增长。
-
深度:指层数,影响模型提取抽象特征的能力。深度增加可提升性能,但需配合残差和归一化稳定训练。
-
实践中,宽度和深度需根据任务和资源权衡。例如,ViT倾向于更宽(大 dd)而非更深,而BERT则较深(24层)且较宽(1024维)。
近年Transformer有哪些重要的改进方向(如MoE、线性注意力、长上下文)?请简述。¶
答案:
-
混合专家(MoE):将FFN替换为多个专家网络,通过路由机制每次激活部分专家,在增加参数量的同时控制计算量(如Switch Transformer、Mixtral 8x7B)。
-
线性注意力:通过核技巧或低秩分解,将 O(n2)O(n2) 降为 O(n)O(n) 或 O(nlogn)O(nlogn),如Performer、RWKV、Mamba(虽为SSM,但受Transformer启发)。
-
长上下文扩展:通过位置编码改进(如RoPE扩展、ALiBi)、注意力稀疏化、上下文压缩等技术,将上下文窗口从几k扩展到百万级(如Claude 3、Gemini 1.5)。
-
多模态融合:将Transformer扩展为统一处理文本、图像、视频、音频的多模态架构,如Flamingo、GPT-4V。
-
高效推理:量化(INT8/FP8)、稀疏化、投机解码(Speculative Decoding)等,降低推理延迟和显存。
BERT的输入表示由哪几部分组成?它们的作用分别是什么?¶
答案:BERT的输入表示由三部分相加组成:
-
Token Embeddings:将token映射为向量。
-
Segment Embeddings:用于区分两个句子(A/B),帮助模型理解句子对关系。
-
Position Embeddings:可学习的位置编码,表示token在序列中的位置。 三者相加后经过Layer Norm,作为Transformer Encoder的输入。
GPT系列模型与BERT在训练任务和注意力掩码上有何本质区别?¶
答案:
-
BERT:使用双向注意力(无掩码),预训练任务为掩码语言模型(MLM)和下一句预测(NSP),适合理解类任务。
-
GPT:使用单向(因果)注意力(上三角掩码),预训练任务为自回归语言模型(预测下一个token),适合生成类任务。
T5模型将所有的NLP任务统一成什么格式?它的位置编码有何特点?¶
答案:T5将所有任务统一为“文本到文本”(Text-to-Text)格式,输入和输出均为文本字符串,不同任务通过前缀区分。位置编码采用相对位置编码(Relative Position Embeddings),对注意力分数施加与相对距离相关的偏置,并且不同层的偏置共享,支持更好的外推能力。
Swin Transformer是如何引入图像层级结构的?它解决了ViT的什么问题?¶
答案:Swin Transformer通过移动窗口注意力(Shifted Window Attention)和分层下采样构建层级特征。它将图像划分为局部窗口,仅在窗口内计算注意力,并通过窗口移动实现跨窗口交互。这解决了ViT计算复杂度随图像分辨率平方增长的问题,使Transformer能作为通用视觉骨干网络。
什么是“Prefix Tuning”和“P-Tuning”?它们与全参数微调有何区别?¶
答案:
-
Prefix Tuning:在输入序列前添加一组可训练的连续向量(prefix),固定预训练模型参数,仅优化prefix。
-
P-Tuning:将可训练的连续向量作为提示嵌入到输入中,同样不更新模型主体。
-
区别:全参数微调需更新所有模型参数,开销大;这类方法仅引入少量参数,适合轻量级适配和多任务共享。
请解释Transformer中的“激活函数”演进:从ReLU到GELU再到SwiGLU,各自优势是什么?¶
答案:
-
ReLU:简单高效,但存在神经元“死亡”问题。
-
GELU:引入随机正则效果,平滑非饱和,在BERT等模型中表现优于ReLU。
-
SwiGLU:GLU变体,采用门控线性单元,增强非线性表达能力,在LLaMA等模型中替代FFN,提升了性能和训练稳定性。
为什么有些Transformer模型采用“Pre-LN”而不是“Post-LN”?¶
答案:Pre-LN将Layer Norm放在残差连接之前,即先归一化再进行子层计算,最后加残差。它能稳定梯度,避免Post-LN在深层网络中出现的梯度爆炸或消失,允许训练更深网络,且对学习率warmup依赖更低。大多数现代大模型(如GPT-3、LLaMA)均采用Pre-LN。
什么是“多查询注意力”(Multi-Query Attention)?它如何提升推理速度?¶
答案:多查询注意力中,多个注意力头共享同一组键(K)和值(V),仅查询(Q)保持独立。这大幅减少了KV缓存的大小(从 n⋅d⋅hn⋅d⋅h 降至 n⋅dn⋅d),在自回归推理时降低了内存带宽和访存开销,从而提升吞吐量。PALM等模型采用了此设计。
分组查询注意力(Grouped-Query Attention)与多查询注意力有何区别?¶
答案:分组查询注意力是多查询注意力的折中方案。它将查询头分为若干组,每组共享一个KV投影,而非所有头共享。这样在保持一定性能的同时,比标准多头注意力减少KV缓存,比多查询注意力保留更多表达能力。LLaMA 2/3采用了此机制。
请说明Transformer模型中“参数共享”的几种方式。¶
答案:
-
层间参数共享:如ALBERT,所有Transformer层共享参数,大幅减少参数量,但性能略有下降。
-
注意力头间共享:如多查询注意力,各头共享KV。
-
Encoder-Decoder参数共享:在一些小型模型中,Encoder和Decoder共享部分或全部参数,减少模型规模。
什么是“交叉注意力”?它在Transformer中是如何实现的?¶
答案:交叉注意力用于Decoder中,其Q来自Decoder当前层的输入,K和V来自Encoder的输出。通过计算Decoder位置与Encoder各位置的注意力权重,实现解码时对输入序列的动态对齐。公式与自注意力相同,只是输入来源不同。
注意力机制中的“缩放因子”如果设置得过大或过小会有什么后果?¶
答案:
-
过小:点积值被压缩,Softmax输出趋向均匀分布,注意力难以聚焦关键信息。
-
过大:点积值过大,Softmax输出接近one-hot,梯度极小,导致模型难以更新;同时可能引发数值溢出。
如何理解“注意力矩阵”的稀疏性?在长序列场景下如何利用稀疏性优化?¶
答案:在训练收敛后,注意力矩阵往往呈现稀疏模式(少数位置权重极高)。利用这一点,可以设计稀疏注意力(如滑动窗口、全局token),减少计算量。在推理时,可通过剪枝或基于阈值的采样,只保留重要位置的注意力计算。
请解释“相对位置偏差”(Relative Position Bias)在注意力中的应用。¶
答案:相对位置偏差是在注意力分数上添加一个与相对距离相关的可学习偏置,而非在输入中加入位置编码。公式为:scoreij=qi⋅kj+b∣i−j∣scoreij=qi⋅kj+b∣i−j∣。这种方法被Swin Transformer、T5等采用,能更好地处理不同长度的序列。
什么是“稀疏混合专家注意力”(Sparse MoE Attention)?¶
答案:将注意力头替换为多个专家,每个token根据路由选择少数专家进行计算,实现稀疏激活。这可以在增加模型参数量的同时保持计算量可控,常见于大规模多模态模型(如Switch Transformer)。
在Transformer中,“门控注意力”(Gated Attention)是如何工作的?¶
答案:门控注意力在标准注意力输出上增加一个门控机制,如 Output=σ(Wg⋅X)⊙Attention(X)Output=σ(Wg⋅X)⊙Attention(X),其中 σσ 为sigmoid。这允许模型动态调整注意力信息流,可增强模型对噪声的鲁棒性。
能否用数学解释为什么多头注意力比单头注意力更有表达能力?¶
答案:多头注意力将高维空间分解为多个子空间,每个子空间学习不同的线性投影。整体输出为各头输出的拼接再投影,相当于将低秩分解扩展到多个子空间,能捕捉更丰富的交互模式。从秩的角度看,单头注意力矩阵的秩受限于 dkdk,而多头拼接后的秩可以更高。
什么是“无限注意力”(Infinite Attention)?它如何突破序列长度限制?¶
答案:无限注意力通过压缩历史信息为固定大小的状态(如记忆矩阵)来近似无限长序列的注意力。代表性工作包括Transformer-XL的循环机制、Memorizing Transformer、以及RMT(Recurrent Memory Transformer)。它们将历史压缩为记忆,与当前输入共同参与注意力计算,从而实现理论上无限的上下文。
RoPE(旋转位置编码)的原理是什么?相比绝对位置编码有何优势?¶
答案:RoPE通过旋转矩阵将位置信息融入查询和键的向量中,使内积自动包含相对位置依赖。具体地,对每个位置 ii,将 qq 和 kk 按维度旋转 iθiθ 角度。优势:可外推至更长序列(通过调整旋转频率),且相对位置编码天然集成,无需额外参数。
如何将RoPE扩展到二维(如图像)或多维?¶
答案:对于二维,可在两个维度分别应用RoPE(如沿高度和宽度方向独立旋转),或使用笛卡尔积将两个维度的旋转合并。多模态模型(如Fuyu-8B)采用类似方法处理图像patch序列。
在相对位置编码中,“偏置”与“嵌入”两种形式有何区别?¶
答案:
-
偏置:直接在注意力分数上加一个与距离相关的标量偏置(如T5、ALiBi)。
-
嵌入:为每个相对距离学习一个向量,与 QKTQKT 的对应维度相加或拼接(如Transformer-XL)。 偏置形式参数更少,外推性好;嵌入形式更灵活,但需预设最大距离。
为什么绝对位置编码在长文本外推中表现不佳?¶
答案:绝对位置编码(如正弦或可学习位置)在训练时使用的最大长度固定,推理时遇到更长序列时,位置编码超出训练范围,导致模型无法正确处理超出位置的信息,外推能力差。相对位置编码(如RoPE、ALiBi)天然依赖相对距离,对外推更友好。
在Transformer中,如果将位置编码加到输入嵌入后,再通过多层注意力,位置信息是否会逐渐被“稀释”?¶
答案:会存在一定稀释,但残差连接能保留位置信息。此外,深层注意力仍可基于相对距离建模,因为查询和键的点积能保留相对位置信息(特别是RoPE等显式相对编码)。在实践中,多层后位置信息仍有效。
有哪些方法可以在不修改模型结构的情况下,让已训练的Transformer支持更长的上下文?¶
答案:
-
位置编码插值:如NTK-aware scaling,通过调整RoPE的旋转频率使模型适应更长序列。
-
上下文扩展微调:在更长序列上继续训练少量步数。
-
基于检索的增强:将长文本分段,通过检索相关段落作为上下文(RAG)。
在训练Transformer时,如何选择批大小和学习率?二者有何关系?¶
答案:通常线性缩放法则:批大小增大 kk 倍,学习率也相应增大 kk 倍(或线性增大,取决于优化器)。实际中,大模型(如GPT-3)使用超大批大小(数百万token)和学习率warmup,以平衡收敛速度和稳定性。
什么是“梯度累积”?它在大模型训练中起什么作用?¶
答案:梯度累积是在多个小批次上累加梯度后再更新参数,用于模拟更大的有效批大小,克服单卡显存限制。它使大模型训练能在有限显存下使用大有效批大小,提升训练稳定性和吞吐量。
混合精度训练(AMP)如何加速Transformer训练?需要注意哪些问题?¶
答案:AMP使用FP16/BF16进行前向和反向计算,用FP32累积梯度更新。优点:减少显存占用,加速矩阵运算。注意事项:避免下溢(使用动态损失缩放),确保BN/LN在FP32下计算,以及某些操作(如Softmax)需保持高精度。
什么是“ZeRO优化”?它如何实现大模型训练?¶
答案:ZeRO(Zero Redundancy Optimizer)将模型状态(参数、梯度、优化器状态)分片到多个GPU,消除冗余,实现数据并行下的内存优化。ZeRO-3将参数也分片,极大降低单卡显存需求,支持训练百亿至万亿参数模型。
在Transformer训练中,过拟合通常表现为验证损失不再下降但训练损失继续下降。如何检测并缓解?¶
答案:检测方法:观察验证集与训练集损失差距是否持续扩大。缓解方法:增加dropout、权重衰减、标签平滑;使用早停;数据增强;减小模型规模或采用更早的早停;集成学习。
为什么大模型训练时常采用“余弦退火”学习率调度?¶
答案:余弦退火在训练初期保持较高学习率快速收敛,后期平滑降低学习率,有助于模型在局部最优附近微调。相比线性衰减,余弦退火能更好地避免过早陷入锐利局部最优,提升泛化能力。
什么是“模型蒸馏”?如何用教师Transformer训练学生Transformer?¶
答案:模型蒸馏通过让学生模型模仿教师模型的输出分布(软标签)来压缩模型。具体:学生模型同时学习硬标签和教师输出的软标签(使用温度系数平滑)。在Transformer蒸馏中,常用中间层特征对齐(如TinyBERT)、注意力矩阵蒸馏等,以保持性能。
在分布式训练中,如何计算“MFU”(Model FLOPs Utilization)?¶
答案:MFU = 实际计算量 / (设备峰值算力 × 时间)。用于衡量硬件利用率。实际计算量为模型前反向的理论FLOPs,设备峰值算力为GPU理论FP16/FP32吞吐量。MFU受通信、显存带宽、算子效率等影响,大模型训练通常MFU在30%-50%左右。
如何处理Transformer训练中的“数值不稳定”问题(如NaN loss)?¶
答案:
-
检查梯度是否爆炸:使用梯度裁剪(clipping)。
-
确保Layer Norm的epsilon不为0。
-
使用混合精度训练时,启用动态损失缩放。
-
避免过大的学习率和warmup。
-
检查数据是否存在NaN或inf。
什么是“激活检查点”(Activation Checkpointing)?如何降低显存?¶
答案:激活检查点在反向传播时重新计算中间激活,而非在前向时全部保存,从而用计算换显存。在Transformer中,可对每层或每几层的激活进行重计算,显著降低显存占用,允许训练更大模型或更长序列。
请详细说明KV缓存的实现原理及在推理时的内存布局。¶
答案:KV缓存指在自回归生成时,将已生成token的键(K)和值(V)保存下来,每次生成新token时只需计算新token的Q、K、V,将新K、V追加到缓存中,并与之前缓存的K、V一起用于注意力计算。内存布局通常为张量形状 [batch_size,num_heads,seq_len,head_dim][batchsize,numheads,seqlen,headdim],以支持高效追加操作。
什么是“投机解码”(Speculative Decoding)?它如何加速LLM推理?¶
答案:投机解码使用一个快速的小模型(draft model)一次性生成多个候选token,再由目标大模型并行验证。若验证通过,则一次性接受多个token,减少串行生成步数。可提升推理吞吐量2-3倍,且不损失生成质量。
在部署Transformer时,常用的量化方法有哪些?INT8量化可能带来哪些精度损失?¶
答案:常用方法有:
-
训练后量化(PTQ):如权重量化、激活量化,使用校准集确定缩放因子。
-
量化感知训练(QAT):在训练中模拟量化效果,恢复精度。
-
INT8量化可能损失精度的原因:异常值(outlier)导致量化范围大、细粒度低;Softmax等层对精度敏感。GPTQ、AWQ等算法通过分组量化和混合精度缓解。
什么是“连续批处理”(Continuous Batching)?它与静态批处理有何不同?¶
答案:连续批处理是一种推理调度策略,在请求到达时动态插入批次中,而非等待固定批次大小。它允许新请求在生成完当前token后加入,提高GPU利用率,尤其适合延迟敏感场景(如聊天机器人)。vLLM、TensorRT-LLM均支持此机制。
如何减小Transformer模型在推理时的显存占用?¶
答案:
-
使用KV缓存,但需管理缓存大小(如滑动窗口)。
-
采用多查询注意力或分组查询注意力减少缓存。
-
模型量化(INT8/FP8)。
-
使用PagedAttention(vLLM)将KV缓存分页存储,避免碎片。
-
减小批大小,或采用流式推理。
PagedAttention是什么?它解决了什么问题?¶
答案:PagedAttention是vLLM中提出的注意力算法,将KV缓存划分为固定大小的块(pages),类似于操作系统虚拟内存。它解决了传统KV缓存因变长序列导致的内存碎片和浪费问题,提高了显存利用率,支持高吞吐量推理。
在服务多个LLM实例时,如何实现“模型并行”与“数据并行”的结合?¶
答案:可以采用张量并行(单模型跨GPU)与数据并行(多实例复制)的组合。例如,使用Megatron-LM张量并行切分模型,同时通过Ray Serve等框架复制多个模型实例,处理不同请求,实现高吞吐。
什么是“FlashAttention-2”?它相比第一代有哪些改进?¶
答案:FlashAttention-2进一步优化了GPU线程块调度,减少了非矩阵运算开销,提高了对非方阵序列的支持,并更好地利用新硬件(如H100)的特性,速度提升约2倍,且支持更长的序列。
在实现Transformer时,如何处理批次内不同序列长度导致的填充计算浪费?¶
答案:使用填充掩码让模型忽略填充位置;在注意力计算中,通过mask机制避免无效计算。对于极长序列,可使用动态批处理(按长度分组)或打包(packing)技术,将多个短序列拼接成一个批次,减少填充比例。
Transformer的参数量计算公式是什么?以一个12层、768维、12头的BERT-base为例,计算总参数量。¶
答案:单层参数:自注意力 4d24d2(Q,K,V,OQ,K,V,O)+ FFN 2d⋅dff2d⋅dff(假设 dff=4ddff=4d),则FFN参数 8d28d2。单层合计 12d212d2。加上Embedding层(vocab_size × d)和Layer Norm参数(忽略不计)。BERT-base:d=768d=768,层数12,vocab_size=30522,总参数量 ≈ 12×12×7682+30522×76812×12×7682+30522×768 ≈ 110M。
如何在PyTorch中实现一个高效的注意力层?有哪些注意事项?¶
答案:可使用torch.nn.functional.scaled_dot_product_attention(PyTorch 2.0+)自动调用FlashAttention。若手动实现,注意:
-
使用
torch.bmm或einsum进行批量矩阵乘法。 -
避免创建过大的中间矩阵(如
QK^T),可分段计算。 -
使用
torch.where或masked_fill应用掩码。 -
使用
half精度和amp加速。
什么是“算子融合”(Operator Fusion)?在Transformer中常融合哪些算子?¶
答案:算子融合将多个连续操作合并为一个内核,减少内存读写和内核启动开销。常见融合:
-
Attention + MatMul + Softmax:如FlashAttention融合了注意力计算。
-
Layer Norm + 线性层:减少访存。
-
激活函数 + 矩阵乘法:如融合GELU和线性层。
在分布式训练中,如何高效实现“All-Reduce”通信?¶
答案:All-Reduce通常通过Ring-AllReduce算法实现,每个GPU将数据分块,形成环状拓扑,通过多轮传输聚合梯度。NCCL库提供了高度优化的实现,利用NVLink、InfiniBand等硬件加速。
如何计算Transformer模型的推理延迟(latency)和吞吐量(throughput)?¶
答案:
-
延迟:单个请求从输入到输出首token(首包延迟)或完整生成的时间。通常通过单次请求测量。
-
吞吐量:单位时间内处理的token数(总输出token数 / 总时间)。可通过批量请求测量,或使用生成总token数除以总计算时间(包括预填充和生成阶段)。
如何评估Transformer语言模型的“困惑度”(Perplexity)?它和生成质量是否完全正相关?¶
答案:困惑度定义为 2H2H,其中 HH 是交叉熵损失。它衡量模型对测试集的平均不确定性。困惑度越低,模型对数据建模越好。但困惑度与生成质量(如多样性、事实性)并不完全正相关,因为困惑度主要关注局部token概率,而生成质量涉及长程一致性和语义。
在机器翻译任务中,BLEU和chrF++分别衡量什么?它们的优缺点是什么?¶
答案:
-
BLEU:基于n-gram精确匹配,计算参考译文与候选译文的相似度。优点:简单快速;缺点:忽略语义,对同义词惩罚过高。
-
chrF++:基于字符级n-gram的F-score,对形态丰富语言更友好,且能部分捕捉词形变化。
什么是“思维链”(Chain-of-Thought)评估?它在LLM评测中起什么作用?¶
答案:思维链评估通过要求模型输出推理步骤来衡量其逻辑推理能力,而不仅仅是最终答案。常用数据集如GSM8K(数学推理)、Big-Bench Hard。它反映了模型在多步推理中的表现,是衡量大模型智能的重要维度。
如何评测长文本理解能力?常用的长文本基准有哪些?¶
答案:长文本基准包括:
-
LONG BENCH:涵盖问答、摘要、代码等任务,上下文长度达32k。
-
ZeroSCROLLS:聚焦于超长文档(如书籍、法律文书)的推理任务。
-
Needle in a Haystack:测试模型在长上下文中提取特定信息的能力。
为什么在某些任务上,小型Transformer微调能超过大模型的零样本性能?¶
答案:小型Transformer经过任务特定数据微调,可以针对目标任务分布优化,而大模型零样本虽泛化能力强,但未专门适配。当目标任务有足够训练数据且与预训练分布差异较大时,微调的小模型可能更优。
在对比不同Transformer变体时,除了参数量和计算量(FLOPs),还应关注哪些效率指标?¶
答案:还应关注:
-
内存占用:训练和推理时显存消耗。
-
吞吐量:每秒处理的token数。
-
延迟:首包延迟和每个token生成时间。
-
能效:每token能耗(焦耳/token)。
-
训练成本:所需GPU小时和碳足迹。
什么是“状态空间模型”(State Space Models,如Mamba)?它与Transformer有何本质不同?¶
答案:状态空间模型(如Mamba)使用线性递归机制替代注意力,将序列处理为状态演化,计算复杂度 O(n)O(n),适合超长序列。本质区别在于:Transformer依赖注意力矩阵捕捉全局依赖,而SSM通过可控的状态维度线性建模上下文。Mamba引入了选择机制,使其在长文本上媲美Transformer。
“Retentive Network”(RetNet)如何结合循环与注意力机制?它的优势是什么?¶
答案:RetNet通过保留机制(Retention)实现训练时并行、推理时循环的双模式。它使用可学习的衰减矩阵,在训练时用并行计算加速,在推理时转化为循环递归,实现 O(1)O(1) 内存占用。优势是兼具Transformer的高效训练和RNN的低推理成本。
什么是“多模态Transformer”?举例说明其输入表示的对齐方式。¶
答案:多模态Transformer(如Flamingo、BLIP-2)统一处理文本、图像、视频等模态。输入表示通常通过各模态的编码器提取特征后,通过投影层对齐到同一空间,并在序列中拼接或交叉注意力融合。例如,Flamingo在文本token之间插入视觉特征,并用交叉注意力对齐。
如何将Transformer用于图结构数据(如图神经网络)?¶
答案:将图视为节点序列,可通过以下方式应用Transformer:
-
图Transformer:将节点特征作为输入,使用注意力机制捕捉全局节点关系,同时引入图结构偏置(如相对位置编码、邻接矩阵掩码)。
-
Graph-BERT:利用采样子图,将图转换为序列,进行预训练。
大模型上下文窗口的扩展有哪些主流技术?¶
答案:
-
位置编码改进:RoPE扩展(如NTK插值)、ALiBi。
-
稀疏/分段注意力:如滑动窗口、全局token。
-
压缩记忆:如Transformer-XL的循环、Memorizing Transformer。
-
长上下文微调:在更长数据上继续训练。
-
基于检索的增强:外部知识库检索动态注入。
未来Transformer可能被何种架构取代?你如何看待这一趋势?¶
答案:目前,Transformer在多数NLP任务中仍占主导,但状态空间模型(SSM)、线性注意力、混合架构(如Jamba、Samba)正展现出在长序列、低延迟场景的优势。未来可能形成混合架构格局:Transformer依然在需要高度交互、短到中等长度任务中保持优势;SSM或线性注意力模型在超长上下文、资源受限场景中崛起;多模态统一架构也将继续演进。完全取代尚早,但架构多元化将是趋势。
在训练大语言模型时,为什么常采用“因果掩码”(Causal Masking)?它与“填充掩码”在实现上有何不同?¶
答案:
-
因果掩码:用于自回归模型(如GPT),确保每个位置只能看到其之前的token(即当前位置不能利用未来信息),避免信息泄露。实现上是一个上三角矩阵,上三角部分设为 −∞−∞,其余为0。
-
填充掩码:用于处理变长序列,将padding位置对应的注意力分数设为 −∞−∞,使模型忽略填充token。
-
结合方式:实际训练时,通常将因果掩码与填充掩码进行“或”运算(或相加),得到一个综合掩码矩阵,既屏蔽未来位置,又屏蔽填充位置。
什么是“专家并行”(Expert Parallelism)?它在MoE模型中如何工作?¶
答案:
专家并行是混合专家(MoE)模型的一种分布式策略,将不同的专家(通常为FFN层)放置在不同的GPU上。
工作流程:
-
每个token通过路由(门控网络)计算出要分配给哪些专家。
-
根据分配结果,token被发送到对应专家所在的设备。
-
专家并行执行计算,得到输出。
-
输出通过通信聚合回原设备。 这种策略使得可以在不增加单卡显存的情况下,容纳大量专家参数,但会引入跨设备通信开销。
为什么Transformer中常用“AdamW”而不是Adam优化器?¶
答案:
AdamW修正了Adam中权重衰减的实现方式。
-
在Adam中,权重衰减作为梯度的一部分(gt←gt+λwtgt←gt+λwt),与自适应学习率耦合,导致实际衰减效果不理想。
-
AdamW将权重衰减与梯度更新解耦,在参数更新后独立应用衰减(wt←wt−ηλwtwt←wt−ηλwt),使正则化更稳定,尤其适合Transformer这类大模型,能有效提升泛化能力和训练稳定性。
在Transformer的推理阶段,如何实现“流式输出”(Streaming)?前端通常如何对接?¶
答案:
流式输出指逐token返回生成结果,而不是等待完整序列生成完毕。
实现方式:
-
后端通过KV缓存逐步生成token,每生成一个token立即通过Server-Sent Events(SSE)或WebSocket推送到前端。
-
前端接收到数据后实时追加到显示区域,提升用户体验。 关键点:
-
推理引擎需支持增量解码(即不重复计算已生成部分)。
-
需要处理好连接管理和超时控制,避免长连接中断。
什么是“令牌化”(Tokenization)的粒度?Transformer对子词(Subword)分词器(如BPE、SentencePiece)有何依赖性?¶
答案:
-
粒度:Tokenization将文本切分为模型可处理的基本单元,粒度可以是字符、子词、词等。子词粒度平衡了词表大小和未登录词问题。
-
依赖性:Transformer的词嵌入矩阵大小与词表直接相关;分词边界影响注意力分布,不同分词器会导致模型性能差异。例如,BPE常用于GPT,Unigram常用于T5。大多数大模型使用SentencePiece,它支持多语言且无需预分词,统一了训练和推理的分词逻辑。
请解释Transformer在强化学习中的应用(如Decision Transformer)。它如何将序列决策建模为序列预测?¶
答案:
Decision Transformer将强化学习问题转换为条件序列建模。
-
输入序列:将历史轨迹表示为交替的“状态-动作-回报”三元组,并加入目标回报(Return-to-Go)作为条件。
-
模型结构:使用因果Transformer,以状态和回报为输入,预测动作。
-
训练:通过最大化动作预测的似然来学习,无需传统的策略梯度。
-
推理:指定期望的目标回报,模型自回归生成动作,实现离线强化学习,展现出强大的轨迹模仿能力。
如何对Transformer进行“知识蒸馏”中的“特征蒸馏”?有哪些常用的对齐方式?¶
答案:
特征蒸馏让学生模型模仿教师模型的中间层表示,常用对齐方式:
-
硬对齐:最小化学生与教师隐藏层输出的MSE损失。
-
注意力蒸馏:让学生模仿教师的注意力矩阵(如KL散度或MSE)。
-
软对齐:使用教师输出的软标签(经温度平滑)与硬标签结合训练学生。
-
对比蒸馏:拉近学生与教师同一层正样本表示,推远不同层或不同样本的负样本。 TinyBERT、DistilBERT等模型均结合了多种特征蒸馏方法,实现模型压缩而保持性能。