真实面经题目 · 原创解析

BERT 的 token、segment、position embedding 为什么通常相加而不是 concat?

这道题考察 BERT 输入层的维度和架构取舍。Token、segment、position embedding 相加,是为了把词义、句子归属和位置注入同一个 hidden space,保持后续 Transformer 维度、参数量和残差结构稳定;concat 虽然看似保留边界,但会放大后续 Q/K/V、FFN 参数和推理成本,通常收益不明确。

出现于:小米 · 算法

60 秒回答模板

BERT 输入通常是 token embedding、segment embedding 和 position embedding 相加,得到每个位置的 hidden vector。三者维度相同,分别表达词本身、句子归属和绝对位置。相加的好处是保持 hidden size 不变,后续 Transformer 层的 Q/K/V 投影、FFN、残差和 LayerNorm 都不用变;三类 embedding 是可训练的,模型会学习把不同信息编码到适合叠加的方向或子空间里。concat 会把输入维度扩大成多段拼接,后续参数量和计算量都会上升;如果再接线性层压回 hidden size,本质上是引入额外可学习融合,复杂度更高但不一定更好。

考点 三者同维进入主干
难度 真实面经题
回答目标 讲清 BERT embedding 相加的维度稳定、参数效率和可学习融合逻辑,并能解释 concat 的成本和适用边界。

深入解析

01

三类信息

token embedding 表达词或子词语义,segment embedding 表达句子 A/B 或段落归属,position embedding 表达绝对位置。BERT 需要把它们合成每个 token 位置上的一个 hidden vector。

02

相加保持维度

三者同维度相加后仍是 hidden size d,后续 Transformer block 的输入输出、残差连接和 LayerNorm 都保持一致。大规模预训练中,这种稳定结构很重要。

03

concat 的连锁成本

如果 concat 后维度变成 3d,那么后续 Q/K/V/O 和 FFN 参数、显存和计算都会增加;若先接线性层压回 d,又增加一层融合参数和延迟,收益需要实验证明。

04

相加不等于丢光信息

embedding 是训练出来的,不是固定人工编码。模型可以把 token、segment、position 的信号放在不同方向、尺度或子空间里,后续注意力和非线性层会进一步解耦和重组。

05

与残差结构一致

Transformer 中大量使用同维度向量叠加,包括残差连接。输入 embedding 相加也遵循同一设计:多个信息源注入同一个 residual stream,而不是维持永久分区。

06

什么时候考虑别的融合

如果任务需要非常明确地保留模态或字段边界,或有证据表明相加不足,可以尝试 concat、gating 或 field-aware projection。但需要同时评估参数量、延迟、收敛和下游指标。

易错点

  • 认为相加一定会完全丢掉 token、segment、position 的边界。
  • 只说 concat 表达能力强,不考虑后续层参数和延迟被放大。
  • 把 embedding 相加理解成不可学习的人工规则。
  • 忽略 hidden size、残差连接和 LayerNorm 对统一维度的要求。
  • 不区分单句任务和句对任务中 segment embedding 的贡献。

面试官追问

去掉 position embedding 会怎样?

模型会失去显式顺序信息,很多依赖词序和位置的任务会退化。即使 token 内容相同,调换顺序后模型也更难区分语义。

如果 concat 后接线性层,和相加有什么区别?

concat+linear 是学习一个融合矩阵,表达更灵活但参数和计算更多;相加相当于固定同维融合,让后续 Transformer 学习组合。是否值得要看实验收益是否超过成本。

相加是否会丢失 segment 边界?

不一定。segment embedding 是可训练向量,会给属于不同句子的 token 加上不同方向的偏移,后续层可以利用这种偏移判断边界和句间关系。

embedding 相加和残差连接有什么相似?

二者都是把多个同维信号叠加到同一个表示流中,保持维度稳定,让后续层继续变换,而不是让每个来源永久占用独立维度块。