深度学习中的损失函数都有哪些,大模型时代主要用的损失函数有哪些,中间有什么区别?
一、深度学习中常见的损失函数(按任务类型分类)
1. 回归任务
- MSE(Mean Squared Error):L2损失,对异常值敏感
- MAE(Mean Absolute Error):L1损失,鲁棒性好
- Huber Loss:MSE与MAE的折中,平滑过渡
- Log-Cosh Loss:平滑的MAE近似,二阶可导
2. 分类任务
- 交叉熵损失 Cross Entropy Loss
- 二分类:Binary Cross Entropy (BCE)
- 多分类:Categorical Cross Entropy (CCE)
- 带Softmax:Softmax + CCE(最常用)
- Hinge Loss:SVM风格,用于最大间隔分类
- Focal Loss:解决类别不平衡(RetinaNet提出)
- Label Smoothing Cross Entropy:防止过拟合,提升泛化
3. 序列/生成任务
- CTC Loss(Connectionist Temporal Classification):用于语音识别等输入输出不对齐场景
- 负对数似然(NLL Loss):常与LogSoftmax配合
二、大模型时代主要使用的损失函数
核心答案:大模型(尤其是LLM)几乎统一使用「带Label Smoothing的交叉熵损失」
1. 标准形式:
loss = CrossEntropyLoss(logits, labels, label_smoothing=0.1)
2. 为什么是它?
- 理论基础扎实:最大化似然 = 最小化交叉熵,符合语言建模本质(预测下一个token的概率分布)
- 梯度性质好:配合Softmax,梯度计算稳定,适合大规模优化
- 可扩展性强:适用于自回归(GPT)、自编码(BERT)、Encoder-Decoder(T5)等所有主流架构
- Label Smoothing加持:
- 防止模型对“正确标签”过度自信 → 提升泛化能力
- 缓解过拟合,尤其在数据量巨大但存在噪声时效果显著
- 原理:将one-hot标签 [0,0,1,0] → [ε/K, ε/K, 1-ε, ε/K](K为词表大小)
3. 其他相关变体(面试加分项)
- Token-level vs Sequence-level Loss:大模型通常按token计算loss,忽略padding
- Masked Language Modeling Loss(BERT):只计算被mask位置的交叉熵
- 对比学习损失(Contrastive Loss):如InfoNCE,在多模态大模型(CLIP)中常用
- RLHF阶段的损失:PPO中的策略梯度损失 + KL散度约束(非监督学习阶段)
三、与传统损失函数的区别
核心目标 | 分类准确、回归拟合 | 语言建模、序列生成、世界知识压缩 |
损失函数 | MSE, Hinge, Focal等任务定制 | 统一使用带Label Smoothing的交叉熵 |
输出空间 | 固定类别/数值 | 超大词表(50K~100K+ token) |
优化重点 | 防止欠拟合、调参 | 防止过拟合、提升泛化、稳定训练 |
正则化手段 | Dropout, L2正则 | Label Smoothing + 大数据 + 大模型容量 |
梯度特性要求 | 一般 | 必须稳定、可并行、支持超长序列 |
✅ 关键区别总结:大模型不再追求“任务特异性损失”,而是回归“语言建模本质”——用最基础、最通用的概率建模损失(交叉熵)+ 正则化技巧(Label Smoothing),靠数据和规模取胜。
四、面试回答技巧(STAR结构 + 亮点提炼)
✅ 标准回答模板:
“在深度学习中,损失函数根据任务类型分为回归类(如MSE、MAE)、分类类(如交叉熵、Hinge Loss)和序列类(如CTC)。但在大模型时代,尤其是LLM(如GPT、LLaMA、BERT),几乎全部采用带Label Smoothing的交叉熵损失函数。”
“这是因为语言建模本质是下一个token的条件概率预测,交叉熵天然适配概率建模目标;而Label Smoothing通过软化one-hot标签,有效缓解大模型在海量数据下的过拟合问题,提升泛化能力。”
“相比传统任务中使用的Focal Loss或Hinge Loss,大模型更强调通用性、稳定性和可扩展性,交叉熵+Label Smoothing在超大词表、超长序列、千亿参数下表现稳健,已成为工业界和学术界的默认选择。”
“当然,在RLHF阶段会切换为PPO等强化学习损失,但在预训练和SFT阶段,交叉熵仍是绝对主流。”
✅ 高阶加分回答(体现深度):
- “其实交叉熵等价于最小化模型分布与经验分布的KL散度,这在信息论角度是最自然的语言建模目标。”
- “Label Smoothing可以看作是在标签空间引入均匀分布先验,避免模型熵坍缩(entropy collapse)。”
- “最近也有工作探索替换交叉熵,比如用序列级损失(如BLEU优化)或对比损失,但在大规模预训练中尚未取代交叉熵的地位。”
- “在MoE模型中,辅助损失(如负载均衡loss)会与交叉熵联合优化,但主损失仍是交叉熵。”
五、可能的追问 & 应对
Q:为什么不用MSE做分类? → A:MSE假设输出是连续值,且误差服从高斯分布;分类是离散概率分布,交叉熵更符合信息度量本质,梯度也更合理。
Q:Label Smoothing的ε怎么选? → A:经验上0.05~0.2,LLaMA用0.1,太大会模糊标签,太小没效果。可作为超参调优。
Q:交叉熵和NLL Loss区别? → A:NLL作用于log概率,常与LogSoftmax配对;交叉熵内部包含Softmax+log+NLL,二者在数值上等价。
Q:大模型有没有尝试不用交叉熵的? → A:有,比如用对比学习(CLIP)、MAE式重建损失(非自回归)、甚至强化学习直接优化任务reward,但预训练阶段交叉熵仍是基石。
✅ 总结一句话应答(电梯演讲版):
“大模型时代,损失函数高度统一:带Label Smoothing的交叉熵损失,因其完美契合语言建模的概率本质、梯度稳定、泛化强,成为千亿参数时代的默认选择。”