1 对数交叉熵损失函数Cross-Entropy Loss
衡量模型预测的概率分布与真实标签的概率分布之间的差异
- 二分类 Binary Cross-Entropy
真实标签 yyy :000 或 111。
模型输出 y^\hat{y}y^(Sigmoid 函数激活)是一个 000 到 111 之间的概率值,表示样本属于类别 111 的概率。
对于单个样本,L=−ylog(y\^)+(1−y)log(1−y\^)L = - y \\log(\\hat{y}) + (1 - y) \\log(1 - \\hat{y})L=−ylog(y\^)+(1−y)log(1−y\^)- 当真实标签 y=1y = 1y=1 时:L=−log(y^)L = - \log(\hat{y})L=−log(y^)
- 如果模型预测 y^\hat{y}y^ 接近 111(预测对了),−log(y^)-\log(\hat{y})−log(y^) 接近 000,损失很小。
- 如果模型预测 y^\hat{y}y^ 接近 000(预测错了),−log(y^)-\log(\hat{y})−log(y^) 会趋近于正无穷,给予模型巨大的惩罚。
- 当真实标签 y=0y = 0y=0 时:L=−log(1−y^)L = - \log(1 - \hat{y})L=−log(1−y^)
- 如果模型预测 y^\hat{y}y^ 接近 000(预测对了),1−y^1-\hat{y}1−y^ 接近 111,损失接近 000。
- 如果模型预测 y^\hat{y}y^ 接近 111(预测错了),1−y^1-\hat{y}1−y^ 接近 000,损失趋近于正无穷。
- sigmod:y^=σ(z)=11+e−z\hat{y} = \sigma(z) = \frac{1}{1 + e^{-z}}y^=σ(z)=1+e−z1
- 求导:∂L∂z=y^−y\frac{\partial L}{\partial z} = \hat{y} - y∂z∂L=y^−y
- 当真实标签 y=1y = 1y=1 时:L=−log(y^)L = - \log(\hat{y})L=−log(y^)
- 多分类 Multi-Class Cross-Entropy
真实标签 yyy 通常是一个 One-Hot 编码的向量,
模型输出 y^\hat{y}y^(Softmax 函数激活)是一个概率分布向量,所有类别的预测概率之和为 100%。
对于单个样本,L=−∑c=1Myclog(y^c)L = - \sum_{c=1}^{M} y_c \log(\hat{y}_c)L=−c=1∑Myclog(y^c)MMM:总类别数
ycy_cyc:如果样本属于第 ccc 类,则 yc=1y_c = 1yc=1,否则 yc=0y_c = 0yc=0
y^c\hat{y}_cy^c:模型预测样本属于第 ccc 类 的概率- 除了真实类别外,其他的 ycy_cyc 全都是 000,所以多分类损失在本质上只关心模型在那个正确类别上的预测概率。正确类别的预测概率越接近 111,整体损失就越低。
- Softmax:y^i=ezi∑k=1Mezk\hat{y}i = \frac{e^{z_i}}{\sum{k=1}^{M} e^{z_k}}y^i=∑k=1Mezkezi
求导:∂L∂zi=y^i−yi\frac{\partial L}{\partial z_i} = \hat{y}_i - y_i∂zi∂L=y^i−yi
- 求导:∂L∂z=y^−y\frac{\partial L}{\partial \mathbf{z}} = \mathbf{\hat{y}} - \mathbf{y}∂z∂L=y^−y
为什么分类问题不用均方误差(MSE)
在回归问题中,我们常用均方误差(MSE=(y−y^)2MSE = (y - \hat{y})^2MSE=(y−y^)2)。为什么分类问题要大费周章地用对数交叉熵呢?
- 对错误惩罚更严厉(梯度消失问题):分类模型的最后一层通常是 Sigmoid 或 Softmax。如果使用 MSE,当模型预测完全错误(真值为 111,预测为 000)时,Sigmoid 的导数会趋于 000,导致梯度消失,模型很难通过反向传播来纠错。而交叉熵由于引入了 log\loglog,求导后可以完美抵消 Sigmoid 的导数项,使得预测差异越大,梯度越大,模型学得越快。
- 符合概率最大似然估计:从统计学角度来看,最小化交叉熵损失,实际上等价于最大化样本数据的似然函数,具有严谨的数学理论支撑。