qinghuan
← 模型训练与评估契约目录

MODEL TRAINING / 补充讲义 2 / 7

互斥分类与多标签目标的损失契约

区分单类索引与多标签向量,检查融合损失的输入以及极端分数的有限值。

在最小分类训练循环之后,先把任务的标签含义写清楚,再选择损失。FashionMNIST 等互斥单标签任务继续沿用原来的分类主线;本节用虚构商户标签说明允许多个答案同时成立的任务。

单个类别与多个标签是两份契约

互斥分类中,每个样本只有一个真实类别。普通二维批次可用 logits [N,C] 和 long 类别索引 [N] 调用 CrossEntropyLoss。软标签是另一种表示,但每行仍应是一份合法的类别概率分布。交叉熵输入说明

多标签分类允许同一样本的多个标签同时成立。例如“有停车位/可外带/可预约”的标签 [1,1,0],前两个条件都应保留。可将各输出定义为逐标签二元预测,使用 BCEWithLogitsLoss;普通二维批次的 logits 与浮点目标均为 [N,C],硬标签取 0 或 1。每行无需和为 1,不应使用 argmax 压成一个标签。BCEWithLogitsLoss

这类似单个枚举字段与标签集合的区别,但后端字段校验不能代替概率目标和梯度计算。逐标签损失也不证明现实中的标签在统计上独立。

把原始分数交给融合损失

BCEWithLogitsLoss 将 sigmoid 与二元交叉熵结合计算,使用稳定形式处理原始分数。训练时直接传 logits;先 sigmoid 一次再传给它,会把概率误当作新的 logits。数值稳定性与目标范围

接口允许 0 到 1 的连续目标,也不意味着缺失标签、未知标签或越界数值都能当成可靠监督。标签顺序、缺失值含义和训练目标必须由数据契约确定。

练习一 保留同一样本的多个正标签

建立一份小数据,至少包含标签 [1,1,0],保存三个标签的固定顺序。训练前检查:

  1. logits 与目标是否都为 [N,C],目标是否为浮点类型。
  2. 每个目标是否位于约定范围;错形状和越界值应由入口校验明确拒绝。
  3. 同一样本的两个正标签是否都保留。解释将其变成 argmax=0 后丢掉了哪条监督信息。
  4. 未知标签是否有独立处理规则,不能因张量需要数字就随意填 0。

这些是应用层应实现的检查,不声称库会自动替你完成全部语义校验。

练习二 极端 logits 的有限值检查

用固定 float32 logits -100 与 100,分别配 0、1 目标。检查融合损失及反向梯度是否均为有限值,再与手写 sigmoid 后取 log 的朴素公式对照,保存实际结果。

正确且十分确定的预测可能出现极小或为零的数值梯度;本项要求有限值,不要求梯度一定非零。对照应保持同一输入与目标,不能把“先 sigmoid 再传融合损失”的错误路径当成等价实现。

适用范围与来源

本节补任务语义与损失匹配,前置可阅读既有交叉熵入口验收。阈值、校准、缺失标签屏蔽、权重和跨批汇总分别需要自己的验收。

两项练习均未运行,不代表训练效果。来源为 PyTorch 2.14 BCEWithLogitsLoss 与 CrossEntropyLoss。原核查为 2026-10-24 18:10 JST;本次 2026-10-30 复核输入、目标和稳定计算相关段落,独立发布日期未标明。