手撕损失函数:交叉熵(CE / BCE)

转载自公众号“浪猿” 引言 在机器和深度学习中,损失函数(loss function)是非常重要的概念,它的值(loss)定量表达了实际模型与理想模型的差异,而它的导数(梯度)又为模型更新提供了方向及大小。 交叉熵(Cross Entropy)损失函数是最经典也最常用的选择之一:从逻辑回归到深度神经网络,从二分类到多分类任务,都有它的身影。 本文将解析: 为什么需要损失函数 什么是信息量、什么是信息熵 什么是相对熵(KL 散度) 什么是交叉熵 Binary Cross Entropy(BCE)和 Cross Entropy(CE)的区别 为什么需要损失函数 机器学习和深度学习的本质,是利用有限样本数据,学习一个「参数化模型」,使其概率分布尽可能逼近真实数据分布。 如何评估图上(C)模型分布与(B)有限样本分布是否相似呢? 这就需要损失函数(Loss Function),它用一个数值(损失函数的值:loss)来衡量模型预测结果与样本规律之间的差距,数值越小,说明模型越接近真实数据。 而交叉熵损失函数的值正是用来衡量两个概率模型的差异大小的。 什么是信息量、信息熵 什么是信息量 信息量用于衡量一个特定事件发生所带来的信息多少。 即一个事件发生的概率越小,它发生后带来的「信息量」就越大(比如“太阳从西边出来”比“太阳从东边出来”的信息量大得多)。 对于一个事件 $a$,发生概率为 $P_a$,信息量为 $I_a$,公式如下: $$ I_a=-\log P_a $$它的函数图像如下: x 轴为 $a$ 事件发生的概率,y 轴为对应的信息量。 这时你是不是有个疑问,为什么使用 $-\log$ 函数来定义信息量?随便定义一个线性函数不是也可以嘛,例如以下线性函数,它也满足概率越小,它发生后带来的信息量就越大: $$ I_a=1-P_a $$ $I_a=1-P_a$ 线性函数图。 这是因为信息量还需要满足另一个自治。 假设你正准备报考一个岗位,需要面试 + 笔试,如下图: 笔试通过发生概率 80%,面试通过发生概率 60%,入围发生概率就为 $0.8 \times 0.6=0.48$,很好理解吧? 我现在来考虑这个过程「信息量」的变化,我们假设还不知道「信息量」的定义,所以设一个 $X$ 函数来表示计算「信息量」的函数。 笔试通过的「信息量」为 $I_{\text{笔试通过}}$: $$ I_{\text{笔试通过}}=X(P_{\text{笔试通过}}) $$面试通过的「信息量」为 $I_{\text{面试通过}}$: ...

July 11, 2026 · 3 min