You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C分类单样本交叉熵公式、二分类形式及批量损失计算是否正确

Binary Cross Entropy Formula

1. 单样本C分类交叉熵公式正确性

你给出的公式是正确的,这是C类别场景下单样本多分类交叉熵(Categorical Cross Entropy)的标准形式:
式中$y_{i,c}$代表第i个样本在类别c上的真实标注(采用独热编码时,只有样本真实归属类别的位置值为1,其余类别位置均为0),$\hat{y}_{i,c}$是模型预测的样本i属于类别c的概率,所有类别的预测概率之和为1。
顺带提一句,你贴的图备注写的是二分类交叉熵,但这个带类别维度求和的形式是多分类通用写法,二分类只是C=2时的特殊情况。

2. 二分类场景是否可直接取C=1移除类别求和项

不可以直接这么做:

  • 二分类如果沿用独热编码逻辑,本质就是C=2的特殊多分类场景,把C=2代入原公式展开可得:
    $L_i = -[y_{i,0}\log(\hat{y}{i,0}) + y{i,1}\log(\hat{y}{i,1})]$
    由于二分类的标签满足$y
    {i,1} = 1 - y_{i,0}$,模型输出的预测概率也满足$\hat{y}{i,1}=1-\hat{y}{i,0}$,可以把双维度的计算合并成单维度形式,也就是大家平时见的二分类交叉熵简化写法:
    $L_i = -[y_i\log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)]$
    这个简化式看起来没有类别求和,是因为两个类别的计算项被合并了,不是直接把C设为1删掉求和项得到的。
  • 要是硬取C=1,相当于只计算了单个类别的对数损失,完全漏掉了另一个类别的损失贡献,算出来的结果是错的。
3. M个样本的小批量/全数据集损失计算

你的理解完全正确。
交叉熵损失默认是逐样本计算后取平均,针对样本量为M的小批量(mini-batch)或者全数据集,整体损失公式为:

L_total = -(1/M) * Σ(i=1到M) Σ(c=1到C) y_{i,c} * log(ŷ_{i,c})

补充一个工程实现上的细节:部分深度学习框架会提供求和模式的损失接口(也就是不乘1/M这个系数),这种模式下梯度的量级会和batch size正相关,只要同步调整学习率也能正常训练,但行业内默认的标准写法就是你提到的——逐样本计算损失求和后,乘以1/M做归一化得到平均损失。

内容的提问来源于stack exchange,提问作者user3352632

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:09:18