《PyTorch 深度修炼》损失函数:模型到底是怎么知道自己错了
10 / 13 章
Loss 不是训练日志上的数字。Loss 是模型学习的方向盘。 1. 模型本来不知道对错 模型只会输出数字。图片进来,它吐出 logits;文本进来,它吐出分数;表格进来,它吐出预测值。 这些数字没有天然意义。Loss 的作用,就是把“预测
Loss 不是训练日志上的数字。Loss 是模型学习的方向盘。
1. 模型本来不知道对错
模型只会输出数字。图片进来,它吐出 logits;文本进来,它吐出分数;表格进来,它吐出预测值。
这些数字没有天然意义。Loss 的作用,就是把“预测”和“真实答案”放在一起比较,变成一个可以反向传播的标量。
Loss 小,说明预测更接近目标。Loss 大,说明偏离目标更远。
一句话:Loss 把业务目标翻译成数学目标。
2. Loss 在训练循环中的位置
训练不是模型自己变聪明。训练是一个闭环:先预测,再计算损失,再反传梯度,最后更新参数。
这条链路从 loss.backward() 开始往回走。没有 Loss,Autograd 不知道该从哪一个标量出发。
所以训练代码里最关键的不是 optimizer.step(),而是你到底定义了什么 Loss。
3. 先按任务选 Loss,不要先背 API
选 Loss 的第一原则:先看任务。
预测连续数值,是回归。预测一个类别,是多分类。预测每个标签是否存在,是多标签。
Loss 选错,模型就会沿着错误目标优化。表面上 loss 也会下降,但业务结果可能完全不对。
4. 回归 Loss:预测一个数,惩罚一个距离
回归任务最直观:预测值和真实值之间有一个距离。
MSELoss 用平方惩罚误差。错得越大,惩罚越重。它适合大多数普通回归任务。
L1Loss 用绝对值惩罚误差。它对异常点更稳,不容易被极端样本带偏。
HuberLoss 是折中:小误差像 MSE,大误差像 L1。
回归记忆法:MSE 怕大错,L1 不怕异常点,Huber 两边都要。
5. 多分类 Loss:CrossEntropyLoss
多分类的目标是:多个类别中,选一个正确答案。
CrossEntropyLoss 的输入是 logits。logits 是模型的原始分数,不要求大于 0,也不要求加起来等于 1。
最常用的 target 是类别索引。例如 0 表示猫,1 表示狗,2 表示鸟。
不要提前对 logits 做 softmax。CrossEntropyLoss 内部已经包含稳定版的 LogSoftmax 和 NLLLoss 逻辑。
6. CrossEntropyLoss 的核心:LogSoftmax + NLLLoss
Softmax 把 logits 变成概率。LogSoftmax 是在概率上取 log,但会用更稳定的方式计算。
NLLLoss 的意思是 Negative Log Likelihood,也就是“正确类别的 log 概率取负”。
如果正确类别的分数高,Loss 小。
如果错误类别的分数高,Loss 大。
所以 CrossEntropyLoss 的本质不是“看最大值对不对”,而是惩罚整个类别分布。
7. shape 规则:大多数报错都来自这里
CrossEntropyLoss 有两种 target 形式。
第一种是类别索引:input 是 [N, C],target 是 [N],target 必须是 long。这个最常用,性能也更好。
第二种是类别概率:input 和 target 形状相同,target 是 float。它适合 soft label、label smoothing 和知识蒸馏。
如果你把类别索引写成 [N, 1],或者把 target 写成 float,就很容易报错或走错逻辑。
8. 二分类与多标签:BCEWithLogitsLoss
二分类不是一定要用 CrossEntropyLoss。
如果模型只输出一个 logit,表示“是正类的倾向”,就用 BCEWithLogitsLoss。
多标签也用 BCEWithLogitsLoss。因为每个标签都是独立判断:这张图可以既有猫,也有狗,也可能是室外。
BCEWithLogitsLoss 把 Sigmoid 和 BCELoss 合成一个函数,数值上更稳定。
口诀:互斥类别用 CrossEntropyLoss;独立标签用 BCEWithLogitsLoss。
9. 四个常用调节参数
reduction 控制输出形态。none 返回每个位置的 Loss,mean 返回平均值,sum 返回总和。默认用 mean。
weight 是类别权重。类别不平衡时,少数类可以给更高权重。
ignore_index 用来忽略某些标签。语义分割里,边界、无效像素、未标注区域经常要忽略。
label_smoothing 会把硬标签变软。它让模型不要过度自信,分类任务常用。
10. Loss 也是 nn.Module
从源码看,PyTorch 的很多 Loss 类都继承自 _Loss,而 _Loss 又继承自 Module。
_WeightedLoss 会把 weight 注册成 buffer。这样 weight 会跟着 state_dict 保存,也会跟着 .to(device) 迁移。
以 CrossEntropyLoss 为例,它的 forward 只做一件事:把 input、target、weight、ignore_index、reduction、label_smoothing 传给 F.cross_entropy。
functional.cross_entropy 再处理 torch_function 分发、旧参数兼容和 reduction 枚举,最后调用 torch._C._nn.cross_entropy_loss。
这个 _C._nn 入口已经进入 C++ 绑定。真正高性能计算在底层 kernel 中完成,Autograd 记录相关计算,等待 loss.backward() 触发反向传播。
源码主线:Module 负责封装,functional 负责调度,C++/ATen 负责真正计算。
11. 实战常见坑
第一个坑:CrossEntropyLoss 前手动 softmax。这样会重复处理概率,梯度也更弱。
第二个坑:target 的 dtype 错。CrossEntropyLoss 的类别索引 target 要 long;BCEWithLogitsLoss 的 target 通常是 float。
第三个坑:把多标签当多分类。多分类只能选一个类,多标签可以同时选多个类。
第四个坑:只看 loss 数值,不看业务指标。不同 reduction、batch size、类别权重,都会改变 loss 的量级。
12. 总结
Loss 是训练目标。你怎么定义 Loss,模型就怎么学习。
回归任务先看 MSELoss、L1Loss、HuberLoss。
多分类默认用 CrossEntropyLoss,直接输入 logits。
二分类和多标签默认用 BCEWithLogitsLoss,直接输入 logits。
源码上,Loss 类本质仍然是 nn.Module,forward 通常下沉到 torch.nn.functional,再进入 C++/ATen kernel。
相关推荐

阿里发布Qwen-Robot系列具身大模型:三大模型协同攻克异构机器人适配痛点
6月16日,阿里巴巴正式发布千问具身智能大模型Qwen-Robot系列,该系列由VLA操作模型Qwen-RobotManip、VLN移动模型Qwen-RobotNav以及世界模型Qwen-RobotWorld三大核心矩阵组成。 这一战略动作标志着大厂在具身智能基础模型领域的布局进一步深化,实现了机器人操控、导航与物理规律推理的协同运转。 针对传统VLA模型换

斥资 36 亿美元,Salesforce 吞并 AI 客服平台 Fin
人工智能赛道又迎来了重量级并购。近日,企业服务巨头 Salesforce 正式宣布,将以36亿美元的价格收购 AI 客户服务平台 Fin 。此次收购不仅是 Salesforce 在智能服务领域的一次重大布局,也标志着其对进一步优化企业自动化能力的决心。 Fin 的前身为知名互动平台 Intercom,凭借其强大的 AI 智能体技术在行业内崭露头角。该平台能够
大模型应用日志体系、Callback 源码链路、Trace 复盘、企业级落地
开篇:AI 应用没有日志,就是黑盒 大模型应用最怕的不是慢,也不是贵。最怕的是:用户说答案错了,你不知道错在哪。 普通业务系统出了问题,看接口日志、SQL 日志、异常堆栈,大多能定位。但大模型应用不一样。一次回答背后可能经过问题改写、意图识
《PyTorch》Transforms:数据增强不是锦上添花,是训练基本功
“模型不是直接学习真实世界,模型学习的是被 Transforms 处理后的 Tensor 世界。” 上一章讲了 Dataset 和 DataLoader。Dataset 负责取样本,DataLoader 负责拼 batch。中间还缺一个关键
《LangChain 系列》LangSmith:如何调试、追踪、评测一个 Agent?
开篇:Agent 能跑起来,不等于能上线 前面我们已经讲了 Tools、Agent、Memory、LangGraph、Middleware 和 Streaming。到这里,很多人会以为:Agent 跑起来了,项目就完成了。 错。真正难的地方

溢价数倍势在必得,高通正洽谈最高百亿美元收购 AI 芯片初创公司
据海外知名媒体披露,全球芯片巨头高通公司目前正在展开一场重磅收购谈判,其目标直指人工智能芯片设计领域的明星初创企业 Tenstorrent。这笔潜在的交易如果最终达成,将成为近年来半导体行业瞩目的焦点事件。 巨额溢价彰显势在必得 知情人士透露,高通为本次收购开出了极为丰厚的条件,双方商讨的收购对价区间预计在 80 亿至 100 亿美元之间。相较于 Tenst
阅读补充
一句话看懂
Loss 不是训练日志上的数字。Loss 是模型学习的方向盘。 1. 模型本来不知道对错 模型只会输出数字。图片进来,它
事件背景
这篇内容围绕“PyTorch”展开,热闻岛基于公开信息整理事件背景、主要进展与可继续关注的方向。
事件时间线
发布
相关信息进入公开传播
更新
热闻岛对内容进行整理与补充。
看点
- · PyTorch的最新进展是什么
- · 相关信息对用户或行业会带来哪些影响
- · 后续是否会有新的回应或处理结果
后续关注
- · 后续官方回应或权威通报
- · 相关主体的进一步说明
- · 事件对普通用户和平台传播的持续影响
免责声明:本文仅代表作者观点,不构成投资建议、法律建议、医疗建议。财经类内容尤其需要注意风险;爆料类信息请以权威通报为准。
评论 (0)
登录后即可发表评论
去登录