Transformer 架构已成为现代深度学习,尤其是自然语言处理领域的基石。以下十个问题,从基础概念到深层原理,是面试中常见的考察点。
Transformer 由编码器和解码器堆叠而成。其核心是自注意力机制和前馈神经网络,并辅以残差连接与层归一化。
编码器包含一层多头自注意力机制和一个前馈网络。
解码器则包含三层:带掩码的多头自注意力、编码器-解码器注意力,以及前馈网络。
与 RNN/LSTM 的核心区别在于:
并行计算能力:RNN 必须按时间步顺序计算,而 Transformer 可以一次性处理整个序列,训练速度极大提升。
长距离依赖:RNN 在对长序列建模时,信息需跨越多个时间步,易导致梯度消失或遗忘,难以捕捉长距离依赖。Transformer 的自注意力机制直接计算序列中任意两个位置的关联,路径长度为 $O(1)$,从根本上解决了此问题。
这个问题是“开卷第一题”,旨在快速筛选出对 Transformer 仅有模糊概念和真正理解其精髓的候选人。一个差的回答可能只是零散地蹦出“Q、K、V”、“并行”等关键词;而优秀的回答会像上面这样,首先建立宏观的“编码器-解码器”堆叠结构的鸟瞰图,然后精准地将讨论引向“自注意力”这个核心引擎,并从时间复杂度和信息流动路径的底层视角,将其与 RNN 进行本质上的对比。 更深一层,可以强调这种结构差异带来的工程实践优势:RNN 的序列性使得大型模型训练几乎无法充分利用现代 GPU 的并行计算能力,而 Transformer 的诞生恰好完美匹配了硬件发展趋势,这也是它能驱动大模型时代到来的关键原因之一。考官通过此题,不仅考察知识记忆,更在看候选人是否具备架构师般的系统性思维,能否从计算本质而非仅从表面现象对比新旧技术。
自注意力机制的核心思想是,让序列中的每个词都去“关注”序列中的所有其他词,从而计算出自身的动态表示。
计算流程如下:
1、创建 Q, K, V:对于输入矩阵 $X \in \mathbb{R}^{n \times d_{model}}$,使用三个可学习的权重矩阵 $W^Q, W^K, W^V$ 将其线性变换为查询(Query)、键(Key)、值(Value)矩阵:
$$Q = XW^Q, \, K = XW^K, \, V = XW^V$$
2、 计算注意力分数:通过点积计算 $Q$ 和 $K$ 的相似度分数。为防止点积过大导致 softmax 进入梯度极小区域,需要进行缩放。公式为:
$$Scores = \frac{QK^T}{\sqrt{d_k}}$$
其中 $d_k$ 是键向量的维度。
3、 得到注意力权重:对分数矩阵进行 softmax 归一化,得到和为 1 的权重矩阵:
$$Attention\ Weights = softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)$$
4、加权求和:将注意力权重与矩阵 $V$ 相乘,得到最终的输出:
$$Attention(Q, K, V) = softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
这道题从“是什么”深入到了“怎么做”,考察的是对核心组件的肌肉记忆级理解。一个优秀的回答不应只是背诵公式,而需诠释每个步骤背后的“为什么”。例如,$\sqrt{d_k}$ 这个缩放因子必不可少,需要点明它在数学上如何稳定 softmax 梯度的方差,防止模型训练初期陷入饱和区,这是一种深刻洞见。更进一步,可以揭示这个机制是如何完美契合 GPU 的大规模矩阵乘法运算的,从硬件友好性的角度来理解其成功并非偶然。此外,Q、K、V 的角色并非死记硬背,而是一个精妙的检索式类比:查询(Query)相当于“我要找什么”,键(Key)相当于“我有什么标签”,值(Value)则是“我实际的内容”。自注意力过程本质上就是一个根据查询和键的匹配度,从值中提取信息的软性寻址过程。能答出这个层面,证明候选人将技术概念内化成了一种直观理解,这是面试官极为看重的特质。
目的:使用多头注意力的核心目的是让模型能够在不同的表示子空间里,关注不同位置的信息。单个注意力头容易聚焦于一种交互模式,而多头允许模型联合关注来自不同特征维度、不同位置的信息,极大地增强了模型的表达能力。
1、线性映射与拆分:将输入的 $Q, K, V$ 通过 $h$ 组不同的可学习权重矩阵,线性映射到 $h$ 个维度更低的空间($d_k, d_k, d_v$),形成 $h$ 个“头”。
2、 并行计算:每个头独立执行一次缩放点积注意力函数,得到 $h$ 个输出。 $$head_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$$
3、 拼接与再次投影:将所有头的输出沿着最后一个维度拼接起来,再乘以一个总的输出权重矩阵 $W^O$,得到最终的多头注意力输出。 $$\text{MultiHead}(Q, K, V) = \text{Concat}(head_1, \ldots, head_h)W^O$$
这道题考察的是对模型设计中“宽度 vs 深度”权衡的理解。一个常见的误区是以为多头仅仅是增加了参数量,但精髓在于 特征解耦与分工。通过强制将高维嵌入空间拆分为多个低维子空间,每个头可以不受干扰地学习一种特定的关系模式,例如一个头专门学习句法依存,另一个头专注长距离指代。这种结构类似于 CNN 中不同的卷积核学习不同的纹理特征,但应用在序列关系上。
从面试角度看,如果能进一步结合 可视化研究 来阐述,会非常出彩。例如,可以提到有研究观察到某些注意力头确实对应到了特定的句法结构。这体现了候选人不仅仅停留在理论,还关注领域内的实证发现。同时,可以点出并行性:由于头的计算完全独立,可以充分并行,几乎没有额外的时间开销。这道题答得好,能将一个架构细节升华到“模型能力”和“可解释性”的高度,展现候选人的研究深度。
Transformer 本身不具备处理序列顺序的能力,因为其自注意力机制是对称操作,置换输入序列会得到同样的输出。为了解决这个问题,它引入了位置编码,将位置信息注入到输入中。
位置编码主要有两种方式:
1、正弦位置编码:原始论文使用不同频率的正弦和余弦函数来生成固定位置编码: $$PE_{(pos,2i)} = \sin(pos / 10000^{2i/d_{model}})$$ $$PE_{(pos,2i+1)} = \cos(pos / 10000^{2i/d_{model}})$$ 其中 $pos$ 是位置,$i$ 是维度。此方法能处理比训练时更长的序列,且有相对位置的信息。
2、可学习位置编码:为每个位置创建一个可学习的嵌入向量,在训练中更新。像 BERT 等模型采用此法。
不直接用 RNN 的原因,如第一题所述,是因为 RNN 的顺序计算特性阻碍了并行化,且长距离依赖建模能力受限于其循环结构。
这道题直击 Transformer 的“阿喀琉斯之踵”——对顺序的无知。优秀的回答会先明确指出缺省情况下的置换等变性,从而引出位置编码的必要性,这是一个完美的“问题-解决方案”叙事逻辑。两种编码方式的选择背后,折射出 归纳偏置 的思想:正弦编码具有外推能力和相对位置感知,是一种基于数学规则的强归纳;而可学习位置编码更灵活,完全由数据驱动。
面试官常在此处追问:“为什么正弦编码能外推?”能答出因为其函数是连续的,模型可以通过学习到的线性变换来关注相对位置,这便是亮点了。更深层次地,可以对比 RNN 和 Transformer 对位置的建模:RNN 通过隐状态自动递归地编码绝对和相对顺序,信息会衰减;而 Transformer 则是显式地、无衰减地将位置信号注入每个输入 token。这解释了为什么 Transformer 能完美记忆序列中任意远距离的绝对位置,而 RNN 对此较为模糊。
Transformer 中的每个编码器和解码器层,在自注意力模块之后都会接一个位置独立的前馈神经网络。这意味着它对序列中的每个位置应用相同的两层全连接网络,但不同位置不共享参数。其公式为:
$$ FFN(x) = \max(0, xW_1 + b_1)W_2 + b_2 $$
通常使用 ReLU 或 GELU 等激活函数。
1、引入非线性:自注意力本质上是加权求和线性操作,堆叠多层自注意力如果不加 FFN,表达能力将极其有限。FFN 通过非线性激活函数为模型提供了关键的非线性变换能力。 2、信息存储与记忆:FFN 的隐藏层维度通常比输入/输出维度大 4 倍。这种“膨胀-压缩”的结构就像一个键值记忆网络,让模型能存储从数据中学到的、不依赖于上下文的知识(如“猫”是一种动物)。 3、特征空间变换:自注意力负责“组合”来自不同位置的信息,而 FFN 则负责对组合后的信息进行深度加工和空间变换。
在注意力机制的耀眼光芒下,FFN 层常被忽视,但此题恰好是区分工程师深度的地方。一个及格回答会提及非线性;优秀回答则会揭示 FFN 的参数记忆本质。自注意力是对当前输入 token 之间的关系进行动态、上下文感知的计算,权重是输入的函数;而 FFN 的权重是固定的,在推理时对所有序列一视同仁,它存储的是训练语料中的静态知识。
可以将 Transformer 比喻为一个高效运转的团队:自注意力像一个高效的“沟通会议”,让团队成员(token)两两交流,动态聚合项目信息;FFN 则像会议后的“独立思考时间”,每个成员利用自己毕生所学(网络参数)对刚刚获取的信息进行深度复盘和整理。两者交替进行,缺一不可。答到这一层,就完全说清了“为什么需要它”,而不是“它有这个操作”。