几种主流大模型的 loss 了解过吗 有哪些异同

模型与算力

面向算法学习者梳理主流大模型损失函数的设计思路、适用条件与常见坑,给出一套可落地的对照与排查顺序。

你大概遇到过这种情况:模型跑起来了,loss 曲线也在动,但说不清它到底在优化什么,换了个任务就不知道该不该动损失函数。这篇不讲公式推导,而是把主流大模型在预训练、对齐和推理几个阶段各自用的损失设计摊开对照,讲清它们为什么这么选、什么时候不适用,以及你在读论文或改代码时该按什么顺序去核对。

你大概遇到过这种情况:模型跑起来了,loss 曲线也在动,但你说不清它到底在优化什么,换个任务就不知道该不该动损失函数。更麻烦的是,读论文时看到一堆目标函数的缩写,看着眼熟,真让自己写却对不上号。这篇不讲公式推导,而是把主流大模型在预训练、对齐和推理几个阶段各自用的 loss 设计摊开对照,讲清它们为什么这么选、什么时候不适用。

读的时候建议带着一个具体任务来,比如「我在做一个客服问答微调」,边看边往自己场景里套;对不上的地方,多半就是你要调整的地方。文中凡是涉及价格、跑分这类会变的数字,都只提站内页面,具体数值去页面上核对当时的版本。

先搞清 loss 在大模型里到底管什么

loss 是训练目标的数学表达,它决定模型把什么当「对」,而不是决定模型能力上限。能力上限更多由数据规模、模型结构和训练步数决定,loss 解决的是「往哪个方向拉」的问题。同一个任务换一种 loss,收敛速度、训练稳定性、最终输出风格都会跟着变,所以把它当成一个可调的方向盘,而不是一个固定零件。

读论文时有一个很实用的技巧:先定位 loss 那一节,再回头看摘要里的创新点。如果创新点不在目标函数上,那 loss 部分通常只是沿用前人的写法,你不用花太多精力;如果创新点恰好就在 loss 上,那这一节就是全文的核心,值得逐句抠。这样能省下大量读论文的时间。

  • loss 决定模型把什么当「对」,不决定能力上限;能力上限看数据、结构、步数
  • 同一个任务换 loss,收敛速度、稳定性、输出风格都会变,属于可调方向盘
  • 读论文先定位 loss 章节,再判断创新点是否真在目标函数上,节省时间
  • 大模型是多阶段训练,预训练、对齐、推理各用各的 loss,别拿预训练的 loss 去解释对齐后的行为

自回归预训练:最主流的那一类目标

自回归预训练的核心是逐 token 预测下一个词,本质是对整个词表做一次分类式的概率拟合。它的好处是数据几乎不用人工标注,任何一段文本都能自动变成监督信号,这也是它能吃到海量数据的原因。工程上真正需要关心的,往往不是公式本身,而是加权方式、标签平滑、哪些位置要忽略这些细节。

这类目标也有明显的边界。如果你需要严格的结构化输出,比如固定字段的 JSON、带括号配对的代码,单靠逐 token 预测约束不住全局一致性;模型可能在局部每一步都「像那么回事」,但整体结构是塌的。遇到这种情况,通常要在后处理或约束解码上另想办法,而不是硬改预训练 loss。

逐 token 预测
每个位置都预测下一个词,等价于对词表做分类,损失是交叉熵
忽略位
把填充、指令模板等不该被学习的位置排除掉,避免模型去拟合无意义的符号
标签平滑
不把正确词的概率压到极端,缓解过拟合,但会轻微影响置信度校准
加权
对不同 token 给不同重要性,常见于长文档或指令微调场景

掩码与去噪类目标:为什么没成为大模型主线

随机遮盖一部分内容再让模型还原,这种思路在理解类任务上曾经非常主流,因为它逼着模型同时看左右两边上下文。但对生成式交互来说它不太友好:你没法自然地用「遮盖再还原」去驱动一段对话生成,推理时也没有对应的遮盖动作。相比之下,逐词预测的推理流程和训练目标是对齐的。

去噪目标则常见于扩散类模型,优化的是重建质量,而不是序列概率。它擅长连续信号,比如图像、音频,把它们一步步从噪声里还原出来。所以判断标准很简单:看下游是不是生成式交互。是,优先考虑自回归那类;不是,比如纯检索、分类、编码,那掩码和去噪反而很能打。

目标类型典型擅长明显不适用
逐词预测长文续写、对话生成严格结构化、全局一致性要求高的输出
掩码还原检索、分类、语义编码开放式对话、长文本生成
去噪重建图像、音频等连续信号纯文本序列的概率建模

对齐阶段:从「像人写的」到「人选哪个」

到了对齐阶段,信号不再是一个标准答案,而是成对比较的偏好排序:同一问题给两个回答,人来判断哪个更好。训练时通常先训一个打分模型去学这种偏好,再用它来约束策略模型的输出分布,让模型更倾向于产出被打分高的回答。这跟预训练那种「预测下一个词」是完全不同的目标形态。

这里有一个关键约束不能忽略:别让模型跑太偏。如果只一味追求高分,模型很容易钻打分模型的空子,输出表面客气、实际信息量下降的内容。所以实践中一般会加一项限制,让新模型不要偏离原模型太远。这项约束的权重是调参重点,太紧学不到东西,太松会退化。

  1. 先确认有没有偏好数据成对比较的数据量不够时,硬上对齐 loss 基本是在放大噪声,先补数据再谈目标函数
  2. 再训打分模型用偏好数据训练打分模型,并用留出集确认它判断偏好的一致性是否可用
  3. 最后约束策略模型在优化偏好得分的同时,加上限制新模型偏离原模型的项,并调好这项的权重
  4. 验证方式不要只看 loss 数值,用人工或评测集对比新旧模型的回答质量,尤其看信息量有没有掉

多模态模型的 loss 通常是拼出来的

多模态模型的损失一般不是单一目标,而是几路拼起来:图文对齐要有一项,图像重建或特征还原要有一项,文本生成可能还要一项,最后按权重相加。权重怎么分,直接决定模型是偏「会说话」还是偏「看得准」。这也是多模态训练里调参最花时间的地方之一。

排查时有个固定顺序:先看哪一路 loss 不降,再去看它对应的数据管道是不是有问题,比如某一路的标注缺失、预处理写错、批次里样本比例失衡。多数「某一路怎么都不收敛」的情况,根源在数据管道,而不是权重设得不好。只有确认数据没问题,再去动权重。

  • 先分别打印每一路 loss 的曲线,别只看加总后的总 loss
  • 定位不降的那一路,检查它对应的标注是否缺失、预处理是否正确
  • 确认各模态样本在批次里的比例是否失衡,比例失衡会让某一路长期主导
  • 数据确认无误后,再调各路的权重,每次只动一路,便于归因

看 loss 曲线判断训练状态

看曲线第一件事是分清训练 loss 还是验证 loss。两者一起降是正常;训练一直降、验证先降后升,通常意味着泛化出了问题,这时候加数据或加正则比改目标函数更对症。还有一种情况是 loss 数值不降,但你的任务指标在涨,这往往说明 loss 的设计跟你真正关心的评估口径不够贴合。

曲线出现尖刺、NaN、突然抬升时,排查优先级依次是学习率、异常样本、数值精度。学习率过大会让 loss 反复横跳;数据里混进异常样本会让曲线出现孤立尖峰;数值精度不够则容易在长训练后累积出溢出。稳定下降不等于训得好,一定要跟你的评测集表现交叉看。

曲线现象优先怀疑下一步动作
训练降、验证升泛化问题加数据或正则,暂不动 loss
loss 不降但指标涨评估口径不匹配对齐 loss 与你的任务指标
反复横跳的尖刺学习率偏大调小学习率,观察是否平滑
孤立尖峰数据里的异常样本定位并清洗对应样本
NaN 或持续抬升数值精度或溢出检查精度设置与梯度范围

什么情况下不该动损失函数

任务效果差,但你的数据量小、标注还脏,这时候先修数据,动 loss 基本是白费功夫。因为 loss 只是告诉模型往哪优化,数据本身含混的话,优化方向再对也学不出你要的东西。另一种常见误区是拿官方权重做微调时改 loss,这很容易破坏原有的对齐行为,让模型在通用场景下明显变差。

还有一种情况:你只是想调某类输出风格,比如更简洁或更正式。这种需求用提示词或者少量偏好数据往往就能解决,成本比换 loss 低得多。真要动 loss,也应该放在最后一步。一个稳妥的决策顺序是:先看数据质量,再看任务与目标的匹配度,然后调超参,最后才考虑改损失函数。

效果不好先怀疑数据,再怀疑超参,最后才怀疑损失函数——顺序反过来,通常白忙一场。

一份可执行的对照与排查清单

最后给一份能直接照着做的清单。先用一句话写下你的任务目标,同时写清模型「错」的表现是什么,是格式错、事实错还是风格不对。这决定了你该往哪一类 loss 上靠。接着把候选模型的训练目标去站内资料里逐个核对,记下各自适用的阶段,别把预训练目标和最终行为混为一谈。

  1. 写清目标和错误表现一句话写清任务,再写清模型错在哪,格式错、事实错还是风格错,这决定目标函数的方向
  2. 核对候选模型的目标到站内模型资料库逐个核对训练目标与适用阶段,记录到自己的表格里,便于横向对比
  3. 改前先定评测集固定一个评测集,改 loss 前后各跑一次,只对比这一组数字,别混入其他变量
  4. 记录关键三项把权重、忽略位、数值精度这三项记下来,它们是不复现失败最常见的原因
  5. 确认边界如果数据量小或标注脏,回到第一步修数据,先别改 loss
下一步把你手头那个任务的目标函数和候选模型对一遍,再去站内资料库核对各模型的训练目标与适用阶段,别只凭记忆判断。

常见问题

大模型的 loss 和普通深度学习模型的 loss 有什么本质区别?

数学形式大多还是交叉熵那一套,区别在于大模型的监督信号来自海量无标注文本,且训练分多个阶段、每个阶段目标不同。所以你不能只看一个 loss 公式就判断模型在学什么,得先确认它处在哪个训练阶段。

为什么有些模型公开的 loss 设计看起来很复杂,实际用起来没差别?

很多复杂度是为了解决训练稳定性或数据配比问题,在推理阶段是看不出来的。如果你的任务只是拿现成权重做微调或调用,这些差异对你的实际效果影响很小,不必过度纠结。

改损失函数和调超参,哪个对效果影响更大?

大多数情况下调超参和数据的影响更直接,改 loss 属于结构性调整,风险高、复现难。建议先把数据和学习率这两件事做扎实,再考虑动目标函数。具体你怎么排优先级,可以结合站内的训练相关页面一起看。

多模态模型里几路 loss 权重怎么定?

没有通用答案,取决于你的任务偏哪一侧。如果偏文本生成,通常让文本那一路权重更高;如果偏识别对齐,就反过来。实操上从小幅调整开始,每次只动一个权重并记录评测变化。

loss 一直不降是不是说明模型有问题?

不一定。先判断是训练集 loss 不降还是验证集不降,前者通常是学习率、数据格式或数值问题,后者多半是过拟合或数据分布不一致。别急着换损失函数,先按这两条分叉排查。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。