交叉熵损失函数的优势
一、交叉熵损失函数简介
def compute_cost(A, Y, parameters):"""计算成本:param A: -- 输出层的输出结果:param Y: -- 标签:param parameters: w,b"""m = Y.shape[1]logprobs = np.log(A) * Y + np.log(1 - A) * (1 - Y)cost = -np.sum(logprobs) / mreturn cost
变量含义
- Y:真实标签矩阵(如二分类中的0/1)
- A:模型预测的概率输出(需经过Sigmoid激活,值在[0,1]区间)
- m:样本数量(用于平均损失)
计算逻辑
- 核心公式:logprobs = Y * log(A) + (1-Y) * log(1-A)
- 此公式是二元交叉熵损失的逐样本计算
物理意义:
- 当真实标签Y=1时,损失简化为
-log(A2)
:预测概率A2越接近1,损失越小(对数函数单调递增)。 - 当真实标签Y=0时,损失简化为
-log(1-A2)
:预测概率A2越接近0,损失越小。 - 归一化:
np.sum(logprobs)/m
对所有样本的损失求和后取平均,确保损失与批量大小无关。
二、交叉熵损失的核心优势
1. 梯度性质优异,加速收敛
与激活函数解耦:
dw = A-Y
,梯度仅取决于预测值与真实值的误差(A2-Y),与激活函数的导数无关
对比均方误差(MSE):
dw = (A−Y)⋅σ ′ (z)
其中σ’(z)是激活函数导数。当输出值接近饱和区(如Sigmoid两端),σ'(z)→0
,导致梯度消失,收敛缓慢
影响:交叉熵损失在误差较大时提供更大梯度,避免梯度消失,显著提升收敛速度
2. 对错误预测的惩罚更强
非线性惩罚机制:
当预测严重错误时(如Y=1但A→0),损失-log(A)→∞
,梯度急剧增大,迫使模型快速修正
反之,MSE的惩罚是二次函数((A2-Y)^2)
,在严重错误时梯度反而较小(如下图)。
3. 概率分布导向,适合分类任务
量化分布差异:
交叉熵直接衡量预测概率分布A2与真实分布Y的差异,与分类任务目标一致
与Softmax/Sigmoid天然兼容:当输出层使用Softmax(多分类)或Sigmoid(二分类)时,交叉熵损失的梯度计算简单高效: L=A2−Y
其中z是未激活的Logits,梯度可直接反向传播
4. 数值稳定性与实现简洁性
代码实现简单:如您所示,核心计算仅需1~2行
防数值溢出:实际实现时需对A2做数值裁剪(如np.clip(A2, 1e-12, 1-1e-12)),避免log(0)导致NaN