交叉熵损失函数的导数推导

本文详细推导了交叉熵损失函数在深度学习中的导数,适用于多分类问题。导数公式为y_i/p_i,有助于理解模型参数的优化过程。并提供Python代码示例进行验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

交叉熵损失函数是深度学习中常用的一种损失函数,尤其在分类问题中被广泛应用。在本文中,我们将推导交叉熵损失函数的导数,并提供相应的源代码实例。

交叉熵损失函数用于衡量模型预测值与真实标签之间的差异。假设我们有一个分类问题,有C个类别,每个样本的真实标签表示为one-hot编码的形式。假设模型的输出为预测概率分布,表示为一个C维的向量。交叉熵损失函数可以定义为:

L = -∑(y_i * log(p_i))

其中,y_i表示真实标签中第i个类别的值(0或1),p_i表示模型的预测概率分布中第i个类别的概率。

为了推导交叉熵损失函数的导数,我们需要计算L对于每个预测概率p_i的偏导数。由于损失函数中存在log运算,我们可以使用链式法则来计算导数。具体来说,我们需要计算dL/dp_i。

首先,我们将交叉熵损失函数展开:

L = -∑(y_i * log(p_i))
= -∑(y_i * (log(e)/log(p_i)))
= -∑(y_i * (log(e) - log(p_i)))
= -∑(y_i * log(e)) + ∑(y_i * log(p_i))
= -log(e) * ∑(y_i) + ∑(y_i * log(p_i))
= -log(e) * 1 + ∑(y_i * log(p_i))


### 交叉熵损失函数及其导数公式的数学推导深度学习中,当采用sigmoid作为激活函数时,在|Z|较大情况下其导数值较小,导致模型容易进入饱和区,从而减缓了学习速度[^1]。为了克服这一问题并简化梯度计算过程,引入了交叉熵损失函数。 对于二分类问题中的单个样本而言,假设预测概率为 \( a \),真实标签为 \( y \in {0, 1} \),那么对应的交叉熵损失函数定义如下: \[ L(a,y) = -y\log(a)-(1-y)\log(1-a) \] 接着考虑权重参数 \( w \) 对于该损失的影响程度,即求解关于 \( w \) 的偏导数。由于输出层的线性组合形式通常写作 \( z=w^Tx+b \),而经过Sigmoid变换后的结果记作 \( a=\sigma(z) \),因此有: \[ \frac{\partial L}{\partial w_j}=-(y/a+(1-y)/(1-a))\cdot\frac{\partial a}{\partial z}\cdot x_j=-(y/(a)+(1-y)/(1-a))\cdot a(1-a)x_j=(a-y)x_j \] 这里利用到了 Sigmoid 函数自身的性质:\( \sigma'(z)=\sigma(z)(1-\sigma(z)) \)。最终得出的结果正是所希望的形式——去除了激活函数导数部分的影响,仅保留了误差项与输入特征之间的简单乘法关系。 ```python import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z)) def cross_entropy_derivative(a, y, x): """ 计算交叉熵损失相对于权值w的导数 参数: a : float or array-like of shape (n_samples,) 预测的概率值 y : int or array-like of shape (n_samples,) 实际类别标签(取值范围应为{0, 1}) x : array-like of shape (n_features,) 或者 (n_samples, n_features) 输入数据 返回: dL_dw : ndarray of same shape as `x` 权重更新方向向量 """ error_term = a - y if isinstance(error_term, (int, float)): return error_term * x elif len(x.shape)==1 and len(y.shape)==1: # 单一样本情况下的处理 return error_term.reshape((-1, 1)).dot(x.reshape((1,-1))).flatten() else: # 批次训练的情况 return np.dot(error_term.T, x).T ``` 通过上述分析可以看出,使用交叉熵损失不仅能够有效缓解因激活函数带来的梯度消失现象,而且还能让反向传播过程中涉及的微分运算更加简洁高效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值