Softmax代价函数求导过程

本文探讨了Softmax回归的Cost Function,并详细解析了其求导过程。介绍了Softmax函数中,输入x对应类别j的概率表示,以及对参数θj的偏导数计算。

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

Cost Function

参考UFLDL的Softmax回归,SoftMax回归的的损失函数形为:

J(θ)=1Ni=1mj=1kI(y(i)=k)logeθTjx(i)kl=1eθTjx(i)(1.1)

有:

J(θ)==1Ni=1mj=1k(I(y(i)=k)(logeθTjx(i)log
### Softmax 损失函数的导数推导 对于多分类问题中的Softmax损失函数,通常采用的是交叉熵作为损失函数。设模型输出为向量 \(\mathbf{z}\),经过Softmax变换后的概率分布表示为\(\mathbf{\hat{y}}\),而真实的标签one-hot编码形式记作\(\mathbf{y}\)。 #### 软Max函数定义 给定输入向量 \(\mathbf{z}=(z_1, z_2,...,z_n)\),Softmax 函数可以被定义如下: \[ \sigma(z_i)=\frac{e^{z_i}}{\sum_{j=1}^{n}{e^{z_j}}} \] 这使得每一个分量都被映射到(0,1)区间内,并且所有分量之和等于1[^1]。 #### 交叉熵损失函数表达式 针对单个样本而言,其对应的交叉熵损失可写作: \[ L=-\sum_k y_k log (\hat{y}_k ) \] 其中 \(y_k\) 是真实类别下标的指示变量(即只有当预测类别的索引与实际相符时才取值为1),\(log(\hat{y}_k)\) 则是对该位置上通过Softmax转换得到的概率取自然对数的结果。 #### 导数推导过程 为了简化说明,在此假设只有一个训练样例的情况下考虑偏导数 \(\partial L / \partial z_i\) 的情况。根据链式法则有: \[ \frac{\partial L } {\partial z_i}= \sum _ { k }\left[\frac{\partial L } {\partial \hat{y}_{k }} * \frac{\partial \hat{y}_{k }} {\partial z_i}\right]\] 由于仅在第i项处存在非零贡献,因此上述方程进一步化简为: \[ \frac{\partial L } {\partial z_i}= -\frac{{y_i}}{{\hat{y}_i}}*\frac{\partial \hat{y}_i}{\partial z_i}-\sum_{j≠i}\frac{{y_j}}{{\hat{y}_j}}* \frac{\partial \hat{y}_j}{\partial z_i}\] 利用Softmax性质可知: - 当 \( j=i \): \[ \frac{\partial \hat{y}_i}{\partial z_i}=\hat{y}_i (1-\hat{y}_i)\] - 对于其他所有的 \( j ≠ i \): \[ \frac{\partial \hat{y}_j}{\partial z_i}=-\hat{y}_i \cdot \hat{y}_j \] 最终得出结论: \[ \frac{\partial L } {\partial z_i} = \hat{y}_i-y_i [^2]\] 这意味着对于任意维度上的梯度都可以简单地由Softmax输出减去目标值得到。 ```python def softmax_grad(s): """ 计算softmax函数关于输入s的雅克比矩阵 参数: s -- 输入数组 返回: jacobi_matrix -- 雅克比矩阵 """ # 获取softmax输出 sm = np.exp(s)/np.sum(np.exp(s)) # 初始化雅克比矩阵 n_features = len(sm) J = np.zeros((n_features,n_features)) for i in range(n_features): for j in range(n_features): if i==j: J[i][j]=sm[i]*(1-sm[j]) else: J[i][j]=-sm[i]*sm[j] return J def cross_entropy_loss_gradient(y_true,y_pred): """ 计算交叉熵损失相对于网络输出的梯度 参数: y_true -- 真实标签 onehot 编码 y_pred -- 预测结果 经过softmax处理过的概率分布 返回: gradient -- 损失函数相对于每个神经元输出的梯度 """ return -(y_true/y_pred)+1*(1-y_true)/(1-y_pred) ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值