用 AI 算 Focal Loss:一百个容易样本,为何不再压过一个难样本
同一批训练样本中,容易判断的项目可能数量很多。每项损失虽然小,合起来仍会盖过少数难例。要理解Focal Loss改变了哪里,可以让AI先算单张卡,再把同一种卡复制一百次,检查总贡献怎样变化。
AI模型生成的概念插图:多数浅色样本的影响被缩小,少数难样本更突出;不是筛除样本的流程图、软件截图或精确比例图。
先找真实类别对应的概率
固定二分类,模型给正类的概率记为p,给负类的概率就是1-p。损失使用的是实际标签那一类的概率pₜ:正样本取p,负样本取1-p。比如标签为负、p=0.1,这张卡的pₜ是0.9,属于容易样本,不能因为0.1很小就把它算成难例。
本文使用不带类别平衡系数的基本形式,调制参数γ=2。普通交叉熵是-ln(pₜ),Focal Loss是在它前面乘(1-pₜ)²。全部使用自然对数,只比较给定预测的损失,不训练分类器。原论文另有带αₜ的平衡版本;若采用那一版,须把系数也写出来。
同样乘一个小于一的数,缩小程度不同
容易卡取pₜ=0.9,交叉熵约0.105361;调制因子为0.1²=0.01,所以Focal Loss约0.00105361。困难卡取pₜ=0.2,交叉熵约1.609438,调制因子为0.8²=0.64,Focal Loss约1.030040。两项都比原交叉熵小,但容易卡缩成百分之一,困难卡仍保留百分之六十四。
现在放入100张相同容易卡和1张困难卡。普通交叉熵按总和计,容易卡贡献约10.536052,超过困难卡的1.609438;换成Focal Loss后,容易卡合计约0.105361,低于困难卡的1.030040。这个反转来自相对权重的改变,不能解释为困难卡的绝对损失被放大了。
若整批再统一除以101,二者的大小关系不会变。但如果一份日志按样本数平均,另一份按正样本数归一,原始数值便不能直接比较。核对报告时应连同归约分母一起抄下,不能只读训练曲线上的一个数。
让 AI 留下哪些中间量
请AI按每类卡列出标签、正类概率p、真实类别概率pₜ、交叉熵、调制因子、单卡损失、卡片数量和总贡献。人工先检查负样本有没有正确取补数,再检查乘方,最后复算数量。将γ改为0时应回到普通交叉熵,这是一个额外的边界检查。
这里展示的是损失贡献,不能把0.01直接说成梯度也缩成0.01。调制因子本身依赖预测概率,求导时它也参与变化;若AI只把交叉熵梯度乘固定权重,就漏了一项。也不能把图里的漏斗理解成真实删除了一百张容易卡,公式仍可对全部样本求值。
难例可能来自边界模糊,也可能来自错误标注。更强调难例并不会自动修好标签,γ=2也只是本练习的设定。实际使用前应检查难例来源、类别平衡与目标指标;这张计算卡能验证算式,不能替代验证集上的任务评估。
资料核对日期:2026年10月2日。算例为原创教学设定,已用独立Python计算复核,不代表真实模型训练或性能测试。


