大模型训练的损失是什么
P0 · llm_training
📊 考点:training
🏷 标签:loss-function, cross-entropy, language-model
1️⃣ 考察意图
面试官想确认你是否真正理解LLM训练的核心机制,而非死记硬背“交叉熵”三个字。考察类型是概念+工程取舍。刁钻点在于:多数人只答“交叉熵损失”,但面试官期待你区分不同架构(自回归 vs 掩码)、点出损失函数对训练动态的影响(如长尾词惩罚、梯度主导),以及实际训练中如何调优(如标签平滑、辅助损失)。答好了能展示你对LLM底层原理的硬核理解,而非调包侠。
2️⃣ 标准答
大模型训练的损失函数本质是最大化似然,但不同架构有具体变体。核心是交叉熵损失(Cross-Entropy Loss),但需分场景展开。
自回归语言模型(GPT系列)
- 标准形式:对每个位置t,计算预测token分布与真实token的负对数似然:
Loss = -Σ log P(token_t | context_{<t}),然后对所有位置取平均。 - 为什么用交叉熵:它等价于最小化预测分布与真实分布的KL散度,直接优化模型对下一个token的预测能力。相比MSE,交叉熵对概率分布的梯度更陡,加速收敛。
- 工程取舍:交叉熵对高频token(如“the”)和低频token(如“epistemology”)一视同仁,但低频token的梯度贡献小,导致模型倾向忽略长尾词。实际训练中,常用标签平滑(Label Smoothing),将真实标签概率从1.0降低到0.9,剩余0.1均匀分配给其他token,防止过拟合,提升泛化能力。例如,GPT-3训练时使用了ε=0.1的标签平滑。
- 实际坑:直接计算全词表(如50k tokens)的softmax在GPU上开销大。解法:使用FlashAttention的变体或分块softmax(如Megatron-LM的tensor并行),减少显存占用。
掩码语言模型(BERT系列)
- MLM损失:只计算被mask位置的损失,公式同上,但只对15%被mask的token求平均。这迫使模型利用双向上下文,但训练效率低(仅15% token有梯度)。
- 工程取舍:MLM损失导致每个step的梯度稀疏,收敛慢。实际中,BERT使用AdamW优化器和warmup策略,并加入NSP损失(下一句预测)作为辅助,但后续研究(如RoBERTa)证明NSP无用,直接去掉。
其他变体
- 对比学习损失:如SimCSE,用于句子嵌入训练。公式为
-log(exp(sim(x,x+)/τ) / Σ exp(sim(x,xi)/τ)),其中τ是温度系数。取舍:τ越小,模型越关注难负例,但易导致训练不稳定;τ越大,梯度平滑,但区分度下降。经验值τ=0.05。 - 排序损失:用于Reward Model训练,如RLHF中的Bradley-Terry模型:
Loss = -log(σ(r(x,y_w) - r(x,y_l))),其中y_w是偏好回答。坑:排序损失对标注噪声敏感,需用数据清洗(如过滤不一致标注)和正则化(如L2权重衰减)防止过拟合。
损失函数的影响
- 交叉熵的局限:它鼓励模型输出概率分布,但无法直接优化下游指标(如BLEU)。实际中,训练后会用强化学习(如PPO)或直接偏好优化(DPO) 微调,对齐人类偏好。
- 辅助损失:如KL散度,用于防止模型偏离预训练分布。例如,RLHF中PPO的损失包含
-KL(π_θ || π_ref),平衡探索与稳定性。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,核心是交叉熵损失,自回归模型对每个位置计算负对数似然,掩码模型只算mask位置;第二,工程上需注意标签平滑防止过拟合、分块softmax降低显存,以及对比损失的温度系数调参;第三,损失函数影响训练动态,交叉熵忽略长尾词,需辅助损失如KL散度。总结一句:损失函数是LLM训练的基石,但需根据架构和任务灵活调整。”
4️⃣ 高频追问 & 应对
追问 1:为什么交叉熵损失比MSE更适合语言模型?
交叉熵的梯度与预测概率成反比,当模型预测错误(如真实token概率低)时梯度大,加速纠正;MSE的梯度与误差线性相关,对概率分布不敏感,收敛慢。此外,交叉熵直接优化似然,与语言模型的目标(最大化下一个token概率)一致。实际中,MSE在分类任务上会导致梯度消失,尤其当softmax输出接近0或1时。
追问 2:训练GPT时,如果loss不下降,你会怎么排查?
首先检查数据:是否有大量重复或噪声(如HTML标签),用perplexity监控异常token。其次检查学习率:过大导致震荡,过小收敛慢,用余弦退火或warmup(如前1000步线性增长)。然后检查梯度:用梯度裁剪(如max_norm=1.0)防止爆炸。最后检查损失函数:是否用了标签平滑(ε过大可能抑制学习),或尝试梯度累积增加batch size。
追问 3:对比学习损失中的温度系数τ如何调优?
τ控制对难负例的惩罚强度。τ越小,模型越聚焦于相似样本,但易过拟合;τ越大,梯度平滑,但区分度下降。经验做法:在SimCSE中,τ=0.05是默认值;若数据噪声大,调高到0.1;若任务需要细粒度区分(如语义相似度),调低到0.02。实际中,用网格搜索或贝叶斯优化在验证集上调参。
5️⃣ 避坑 · 常见错误答法
- ❌ 只答“交叉熵损失”,不提架构差异(自回归 vs 掩码) → ✅ 必须区分GPT和BERT的损失形式,并解释为什么不同。
- ❌ 说“损失越小越好”,忽略过拟合风险 → ✅ 强调标签平滑、KL散度等正则化手段,防止模型记忆噪声。
- ❌ 把交叉熵和困惑度混淆,认为两者等价 → ✅ 明确困惑度是交叉熵的指数形式(PPL = exp(Loss)),但训练时直接优化交叉熵。
6️⃣ 简历呼应
- 如果你有RAG项目:从检索增强的损失设计切入,比如对比学习损失用于优化query-doc嵌入,或排序损失用于reranker训练,强调交叉熵在生成阶段的作用。
- 如果你只做过传统NLP:用文本分类的交叉熵类比,但点出LLM的序列级损失(每个位置独立计算)和标签平滑的差异,展示迁移能力。
- 如果你是校招无项目:聚焦论文复现,比如在WikiText-103上训练小GPT-2,对比标准交叉熵和标签平滑后的perplexity变化,并附上代码片段(如PyTorch的
CrossEntropyLoss+label_smoothing参数)。
7️⃣ 延伸阅读
- 《Attention Is All You Need》——Transformer损失函数基础
- 《Language Models are Few-Shot Learners》(GPT-3论文)——标签平滑和训练细节
- 《BERT: Pre-training of Deep Bidirectional Transformers》——MLM损失设计
- 《SimCSE: Simple Contrastive Learning of Sentence Embeddings》——对比损失和温度系数
- 《Direct Preference Optimization》——DPO损失替代RLHF