真实面经题目 · 原创解析
BERT 的 token、segment、position embedding 为什么通常相加而不是 concat?
这道题考察 BERT 输入层的维度和架构取舍。Token、segment、position embedding 相加,是为了把词义、句子归属和位置注入同一个 hidden space,保持后续 Transformer 维度、参数量和残差结构稳定;concat 虽然看似保留边界,但会放大后续 Q/K/V、FFN 参数和推理成本,通常收益不明确。
真实面经题目 · 原创解析
这道题考察 BERT 输入层的维度和架构取舍。Token、segment、position embedding 相加,是为了把词义、句子归属和位置注入同一个 hidden space,保持后续 Transformer 维度、参数量和残差结构稳定;concat 虽然看似保留边界,但会放大后续 Q/K/V、FFN 参数和推理成本,通常收益不明确。
BERT 输入通常是 token embedding、segment embedding 和 position embedding 相加,得到每个位置的 hidden vector。三者维度相同,分别表达词本身、句子归属和绝对位置。相加的好处是保持 hidden size 不变,后续 Transformer 层的 Q/K/V 投影、FFN、残差和 LayerNorm 都不用变;三类 embedding 是可训练的,模型会学习把不同信息编码到适合叠加的方向或子空间里。concat 会把输入维度扩大成多段拼接,后续参数量和计算量都会上升;如果再接线性层压回 hidden size,本质上是引入额外可学习融合,复杂度更高但不一定更好。
token embedding 表达词或子词语义,segment embedding 表达句子 A/B 或段落归属,position embedding 表达绝对位置。BERT 需要把它们合成每个 token 位置上的一个 hidden vector。
三者同维度相加后仍是 hidden size d,后续 Transformer block 的输入输出、残差连接和 LayerNorm 都保持一致。大规模预训练中,这种稳定结构很重要。
如果 concat 后维度变成 3d,那么后续 Q/K/V/O 和 FFN 参数、显存和计算都会增加;若先接线性层压回 d,又增加一层融合参数和延迟,收益需要实验证明。
embedding 是训练出来的,不是固定人工编码。模型可以把 token、segment、position 的信号放在不同方向、尺度或子空间里,后续注意力和非线性层会进一步解耦和重组。
Transformer 中大量使用同维度向量叠加,包括残差连接。输入 embedding 相加也遵循同一设计:多个信息源注入同一个 residual stream,而不是维持永久分区。
如果任务需要非常明确地保留模态或字段边界,或有证据表明相加不足,可以尝试 concat、gating 或 field-aware projection。但需要同时评估参数量、延迟、收敛和下游指标。
模型会失去显式顺序信息,很多依赖词序和位置的任务会退化。即使 token 内容相同,调换顺序后模型也更难区分语义。
concat+linear 是学习一个融合矩阵,表达更灵活但参数和计算更多;相加相当于固定同维融合,让后续 Transformer 学习组合。是否值得要看实验收益是否超过成本。
不一定。segment embedding 是可训练向量,会给属于不同句子的 token 加上不同方向的偏移,后续层可以利用这种偏移判断边界和句间关系。
二者都是把多个同维信号叠加到同一个表示流中,保持维度稳定,让后续层继续变换,而不是让每个来源永久占用独立维度块。