【豆包写的】二分类交叉熵损失函数(BCE Loss)详细推导

二分类交叉熵损失函数(BCE Loss)详细推导

二分类交叉熵损失函数的推导,核心是基于极大似然估计(Maximum Likelihood Estimation, MLE),结合二分类任务的概率特性(伯努利分布),最终将"最大化样本出现概率"的目标,转化为"最小化负对数似然"的损失函数。

结合你的数学背景,推导过程分为 5个核心步骤,从概率基础到损失函数成型,再到梯度计算,全程严谨拆解。

一、前置知识与符号定义

1. 任务场景

二分类任务中,每个样本的真实标签 yyy 只有两种取值:

y∈{0,1}y \in \{0, 1\}y∈{0,1}

  • y=1y=1y=1 :样本属于正类

  • y=0y=0y=0 :样本属于负类

模型的预测目标 是输出样本属于正类的概率 y^\hat{y}y^ ,满足:

0≤y^≤10 \le \hat{y} \le 10≤y^≤1

由于概率的归一性,样本属于负类的概率为 1−y^1-\hat{y}1−y^ 。

2. 概率分布:伯努利分布

二分类任务的样本标签服从伯努利分布(Bernoulli Distribution),其概率质量函数为:

P(y∣y^)=y^y⋅(1−y^)(1−y)P(y|\hat{y}) = \hat{y}^y \cdot (1-\hat{y})^{(1-y)}P(y∣y^)=y^y⋅(1−y^)(1−y)

  • 当 y=1y=1y=1 时, P(y=1∣y^)=y^1⋅(1−y^)0=y^P(y=1|\hat{y}) = \hat{y}^1 \cdot (1-\hat{y})^0 = \hat{y}P(y=1∣y^)=y^1⋅(1−y^)0=y^ ;

  • 当 y=0y=0y=0 时, P(y=0∣y^)=y^0⋅(1−y^)1=1−y^P(y=0|\hat{y}) = \hat{y}^0 \cdot (1-\hat{y})^1 = 1-\hat{y}P(y=0∣y^)=y^0⋅(1−y^)1=1−y^ 。

这个公式的巧妙之处在于:用一个表达式同时描述了正类和负类的概率

二、步骤1:构建似然函数

假设我们有 mmm 个独立同分布的训练样本 (x1,y1),(x2,y2),...,(xm,ym){(x_1,y_1), (x_2,y_2), ..., (x_m,y_m)}(x1,y1),(x2,y2),...,(xm,ym) ,模型对第 iii 个样本的正类预测概率为 y^i\hat{y}_iy^i 。

似然函数 的定义是:在给定模型参数的情况下,观测到这组样本的概率。由于样本独立,似然函数是所有样本概率的乘积:

L(y^1,y^2,...,y^m)=∏i=1mP(yi∣y^i)=∏i=1m[y^iyi⋅(1−y^i)1−yi]\mathcal{L}(\hat{y}_1,\hat{y}_2,...,\hat{y}m) = \prod{i=1}^m P(y_i|\hat{y}i) = \prod{i=1}^m \left[ \hat{y}_i^{y_i} \cdot (1-\hat{y}_i)^{1-y_i} \right]L(y^1,y^2,...,y^m)=∏i=1mP(yi∣y^i)=∏i=1m[y^iyi⋅(1−y^i)1−yi]

三、步骤2:对数似然函数(简化计算)

似然函数是乘积形式 ,直接求导和优化会非常复杂(涉及乘积的导数法则)。为了简化计算,我们对似然函数取自然对数 ,利用对数的性质 log⁡(ab)=log⁡a+log⁡b\log(ab)=\log a + \log blog(ab)=loga+logb ,将乘积转换为求和

log⁡L=∑i=1mlog⁡[y^iyi⋅(1−y^i)1−yi]\log\mathcal{L} = \sum_{i=1}^m \log\left[ \hat{y}_i^{y_i} \cdot (1-\hat{y}_i)^{1-y_i} \right]logL=∑i=1mlog[y^iyi⋅(1−y^i)1−yi]

展开对数项( log⁡(ab)=blog⁡a\log(a^b)=b\log alog(ab)=bloga ):

log⁡L=∑i=1m[yilog⁡y^i+(1−yi)log⁡(1−y^i)]\log\mathcal{L} = \sum_{i=1}^m \left[ y_i \log\hat{y}_i + (1-y_i) \log(1-\hat{y}_i) \right]logL=∑i=1m[yilogy^i+(1−yi)log(1−y^i)]

数学意义:对数函数是单调递增函数 ,最大化 L\mathcal{L}L 等价于最大化 log⁡L\log\mathcal{L}logL ,优化目标不变。

四、步骤3:负对数似然 → 交叉熵损失

机器学习的优化目标是最小化损失函数 ,而我们的目标是最大化对数似然 。因此,只需对对数似然函数取负号,就得到了需要最小化的损失函数。

1. 单个样本的损失函数

对于单个样本 iii ,负对数似然就是单个样本的二分类交叉熵损失 LiL_iLi :

Li=−[yilog⁡y^i+(1−yi)log⁡(1−y^i)]L_i = - \left[ y_i \log\hat{y}_i + (1-y_i) \log(1-\hat{y}_i) \right]Li=−[yilogy^i+(1−yi)log(1−y^i)]

2. 整个训练集的代价函数

对 mmm 个样本的损失取平均,得到代价函数 (Cost Function) JJJ ,也就是我们最终优化的目标:

J=1m∑i=1mLi=−1m∑i=1m[yilog⁡y^i+(1−yi)log⁡(1−y^i)]J = \frac{1}{m} \sum_{i=1}^m L_i = -\frac{1}{m} \sum_{i=1}^m \left[ y_i \log\hat{y}_i + (1-y_i) \log(1-\hat{y}_i) \right]J=m1∑i=1mLi=−m1∑i=1m[yilogy^i+(1−yi)log(1−y^i)]

这就是二分类交叉熵损失函数的最终形式

3. 直观理解损失值

  • 当 yi=1y_i=1yi=1 时,损失简化为 Li=−log⁡y^iL_i = -\log\hat{y}_iLi=−logy^i : y^i\hat{y}_iy^i 越接近1,损失越小; y^i\hat{y}_iy^i 接近0,损失趋近于无穷大。

  • 当 yi=0y_i=0yi=0 时,损失简化为 Li=−log⁡(1−y^i)L_i = -\log(1-\hat{y}_i)Li=−log(1−y^i) : y^i\hat{y}_iy^i 越接近0,损失越小; y^i\hat{y}_iy^i 接近1,损失趋近于无穷大。

五、步骤4:结合Sigmoid的梯度推导(优化关键)

模型的原始输出(如神经网络最后一层)是一个无界的实数 ** ziz_izi (可能是任意值),而交叉熵损失要求 y^i\hat{y}_iy^i 是0-1之间的概率。因此,我们需要用 Sigmoid函数**将 ziz_izi 映射为概率 y^i\hat{y}_iy^i :

y^i=σ(zi)=11+e−zi\hat{y}_i = \sigma(z_i) = \frac{1}{1+e^{-z_i}}y^i=σ(zi)=1+e−zi1

Sigmoid函数有一个关键导数性质,这是梯度计算的核心:

σ′(zi)=σ(zi)⋅(1−σ(zi))=y^i⋅(1−y^i)\sigma'(z_i) = \sigma(z_i) \cdot (1-\sigma(z_i)) = \hat{y}_i \cdot (1-\hat{y}_i)σ′(zi)=σ(zi)⋅(1−σ(zi))=y^i⋅(1−y^i)

我们的目标是最小化代价函数 ** JJJ ** 对模型参数的导数 ,而参数通过 ziz_izi 影响 y^i\hat{y}_iy^i ,因此需要计算损失对 ** ziz_izi ** 的梯度 ∂J∂zi\frac{\partial J}{\partial z_i}∂zi∂J (链式法则):

  1. 先计算单个样本损失对 y^i\hat{y}_iy^i 的导数:

    ∂Li∂y^i=−(yiy^i−1−yi1−y^i)\frac{\partial L_i}{\partial \hat{y}_i} = -\left( \frac{y_i}{\hat{y}_i} - \frac{1-y_i}{1-\hat{y}_i} \right)∂y^i∂Li=−(y^iyi−1−y^i1−yi)

  2. 再结合链式法则 ∂Li∂zi=∂Li∂y^i⋅∂y^i∂zi\frac{\partial L_i}{\partial z_i} = \frac{\partial L_i}{\partial \hat{y}_i} \cdot \frac{\partial \hat{y}_i}{\partial z_i}∂zi∂Li=∂y^i∂Li⋅∂zi∂y^i ,代入 y^i=σ(zi)\hat{y}_i = \sigma(z_i)y^i=σ(zi) 和其导数:

    KaTeX parse error: {align*} can be used only in display mode.

这个梯度结果极其简洁 : ∂Li∂zi=y^i−yi\frac{\partial L_i}{\partial z_i} = \hat{y}_i - y_i∂zi∂Li=y^i−yi ,这也是交叉熵损失在二分类任务中收敛速度快的核心原因------梯度直接与预测误差成正比,无复杂计算。

六、推导总结

二分类交叉熵损失的推导逻辑链:

伯努利分布→似然函数→对数似然(简化)→负对数似然(损失)→结合Sigmoid求梯度\text{伯努利分布} \rightarrow \text{似然函数} \rightarrow \text{对数似然(简化)} \rightarrow \text{负对数似然(损失)} \rightarrow \text{结合Sigmoid求梯度}伯努利分布→似然函数→对数似然(简化)→负对数似然(损失)→结合Sigmoid求梯度

核心本质:交叉熵损失是二分类任务下的负对数似然函数,其优化目标等价于最大化样本观测概率,且梯度计算简洁高效。


我可以帮你推导多分类交叉熵损失,对比它和二分类版本的异同点,方便你串联两类损失的逻辑。需要吗?

(注:文档部分内容可能由 AI 生成)

相关推荐
冰西瓜6002 小时前
从项目入手机器学习——(二)数据预处理(中)泰坦尼克号
人工智能·机器学习
有为少年2 小时前
PyTorch 的统计三剑客:bucketize, bincount 与 histogram
pytorch·python·学习·机器学习·统计
这儿有一堆花2 小时前
从文本到像素:AI图像生成的底层逻辑解析
人工智能·机器学习·计算机视觉
码农三叔3 小时前
(8-3-01)自动驾驶中的无地图环境路径探索:D* Lite路径规划系统(1)
机器学习·机器人·自动驾驶·pygame·d stasr lite
万行3 小时前
机器人系统ros2&期末速通2
前端·人工智能·python·算法·机器学习
万行3 小时前
机器人系统ros2&期末速通&1
人工智能·python·机器学习·机器人
Yuer20253 小时前
pip 能跑 Demo,为什么跑不了真正的模型训练?
深度学习·机器学习·计算机视觉·edca os
咚咚王者3 小时前
人工智能之核心基础 机器学习 第十三章 自监督学习
人工智能·学习·机器学习
liliangcsdn3 小时前
LLM训练中batchsize与过拟合和泛化的关系
人工智能·算法·机器学习