Softmax与Cross-entropy的求导
引言
在多分类问题中,一般会把输出结果传入到softmax函数中,得到最终结果。并且用交叉熵作为损失函数。本来就来分析下以交叉熵为损失函数的情况下,softmax如何求导。
对softmax求导
softmax函数为:
y^i=ezi∑k=1Kezk\hat y_i = \frac{e^{z_i}}{\sum_{k=1}^K e^{z_k}} y^i=∑k=1Kezkezi
这里KKK是类别的总数,接下来求y^i\hat y_iy^i对某个输出zjz_jzj的导数,
∂y^i∂zj=∂ezi∑k=1Kezk∂zj\frac{\partial \hat y_i}{\partial z_j} = \frac{\partial \frac{e^{z_i}}{\sum_{k=1}^K e^{z_k}}}{\partial z_j} ∂zj∂y^i=∂zj∂∑k=1Kezkezi
这里要分两种情况,分别是i=ji=ji=j与i≠ji \neq ji=j。当i=ji=ji=j时,ezie^{z_i}ezi对zjz_jzj的导数为ezie^{z_i}ezi,否则当i≠ji \neq ji=j时,导数为000。
当i=ji = ji=j,
∂y^i∂zj=ezi⋅∑k=1Kezk−ezi⋅ezj(∑k=1mezk)2=ezi∑k=1mezk−ezi∑k=1mezk⋅ezj∑k=1mezk=y^i−y^i2=y^i(1−y^i)\begin{aligned} \frac{\partial \hat y_i}{\partial z_j} &= \frac{e^{z_i}\cdot \sum_{k=1}^K e^{z_k} - e^{z_i} \cdot e^{z_j} }{(\sum_{k=1}^m e^{z_k})^2} \\ &= \frac{e^{z_i}}{\sum_{k=1}^m e^{z_k}} - \frac{e^{z_i}}{\sum_{k=1}^m e^{z_k}} \cdot \frac{e^{z_j}}{\sum_{k=1}^m e^{z_k}} \\ &= \hat y_i - \hat y_i^2 = \hat y_i(1 - \hat y_i) \end{aligned} ∂zj∂y^i=(∑k=1mezk)2ezi⋅∑k=1Kezk−ezi⋅ezj=∑k=1mezkezi−∑k=1mezkezi⋅∑k=1mezkezj=y^i−y^i2=y^i(1−y^i)
当i≠ji \neq ji=j,
∂y^i∂zj=0⋅∑k=1Kezk−ezi⋅ezj(∑k=1mezk)2=−ezi∑k=1mezk⋅ezj∑k=1mezk=−y^iy^j\begin{aligned} \frac{\partial \hat y_i}{\partial z_j} &= \frac{0 \cdot \sum_{k=1}^K e^{z_k} - e^{z_i} \cdot e^{z_j}}{(\sum_{k=1}^m e^{z_k})^2} \\ &= - \frac{e^{z_i}}{\sum_{k=1}^m e^{z_k}} \cdot \frac{e^{z_j}}{\sum_{k=1}^m e^{z_k}} \\ &= - \hat y_i \hat y_j \end{aligned} ∂zj∂y^i=(∑k=1mezk)20⋅∑k=1Kezk−ezi⋅ezj=−∑k=1mezkezi⋅∑k=1mezkezj=−y^iy^j
对cross-entropy求导
损失函数LLL为:
L=−∑kyklogy^kL = -\sum_k y_k \log \hat y_k L=−k∑yklogy^k
其中yky_kyk是真实类别,相当于一个常数,接下来求LLL对zjz_jzj的导数
∂L∂zj=∂−(∑kyklogy^k)zj=∂−(∑kyklogy^k)∂y^k∂y^k∂zj=−∑kyk1y^k∂y^kzj=(−yk⋅y^k(1−y^k)1y^k)k=j−∑k≠jyk1y^k(−y^ky^j)=−yj(1−y^j)−∑k≠jyk(−y^j)=−yj+yjy^j+∑k≠jyk(y^j)=−yj+∑kyk(y^j)=−yj+y^j=y^j−yj\begin{aligned} \frac{\partial L}{\partial z_j} &= \frac{\partial -(\sum_k y_k \log \hat y_k)}{z_j}\\ &= \frac{\partial -(\sum_k y_k \log \hat y_k)}{\partial \hat y_k} \frac{\partial \hat y_k}{\partial z_j} \\ &= -\sum_k y_k \frac{1}{\hat y_k} \frac{\partial \hat y_k}{z_j} \\ &= \left(-y_k \cdot \hat y_k(1 - \hat y_k) \frac{1}{\hat y_k} \right)_{k=j} - \sum_{k \neq j} y_k \frac{1}{\hat y_k} (-\hat y_k \hat y_j) \\ &= - y_j (1 -\hat y_j) - \sum_{k \neq j} y_k (-\hat y_j) \\ &= - y_j + y_j \hat y_j + \sum_{k \neq j} y_k (\hat y_j) \\ &= - y_j + \sum_{k} y_k (\hat y_j) \\ &= - y_j +\hat y_j \\ &= \hat y_j -y_j \end{aligned} ∂zj∂L=zj∂−(∑kyklogy^k)=∂y^k∂−(∑kyklogy^k)∂zj∂y^k=−k∑yky^k1zj∂y^k=(−yk⋅y^k(1−y^k)y^k1)k=j−k=j∑yky^k1(−y^ky^j)=−yj(1−y^j)−k=j∑yk(−y^j)=−yj+yjy^j+k=j∑yk(y^j)=−yj+k∑yk(y^j)=−yj+y^j=y^j−yj
这里用到了∑kyk=1\sum_{k} y_k = 1∑kyk=1
可以看到,求导结果非常简单,如果不推导都不敢信。
Softmax与Cross-entropy的求导相关推荐
- 卷积神经网络系列之softmax loss对输入的求导推导
我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caf ...
- softmax loss对输入的求导推导
转载自: https://blog.csdn.net/u014380165/article/details/79632950 我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CN ...
- 为什么要返回softmax_为什么softmax搭配cross entropy是解决分类问题的通用方案?
众所周知,softmax+cross entropy是在线性模型.神经网络等模型中解决分类问题的通用方案,但是为什么选择这种方案呢?它相对于其他方案有什么优势?笔者一直也困惑不解,最近浏览了一些资料, ...
- softmax ce loss_手写softmax和cross entropy
import 解释下给定的数据,x假设是fc layer的输出,可以看到这里x是(3,3)的,也就是batch_size=3,n_classes=3.但是label给出了三个数,取值是0,1,因此这里 ...
- 卷积神经网络系列之softmax,softmax loss和cross entropy的讲解
我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caf ...
- softmax,softmax loss和cross entropy
我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caf ...
- [损失函数]Softmax求导
原文链接: https://blog.csdn.net/u014380165/article/details/79632950 我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个C ...
- Deep Learning基础--Softmax求导过程
一.softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个 ...
- sigmoid函数、tanh函数、softmax函数及求导
sigmoid函数和tanh函数都是激活函数,接收一个输入,产生一个输出.这里的求导是对激活函数求导.而softmax函数是一个多输入多输出的激活函数,这里提到的求导是对经过softmax函数后进行交 ...
- softmax with cross-entropy loss求导(转载+细节整理)
softmax 函数 softmax(柔性最大值)函数,一般在神经网络中, softmax可以作为分类任务的输出层. 其实可以认为softmax输出的是几个类别选择的概率,比如我有一个分类任务,要分为 ...
最新文章
- php amqp扩展安装,php扩展AMQP,安装报错解决
- 分苹果问题的C++和Python实现
- Wire:Linux开源聊天应用
- Winform中设置ZedGraph的字体和间距不随图形的缩放而缩放
- codeforces1554 E. You(思维+数学+转化)
- 打遍天下无敌手,却说它只是个baseline!多目标跟踪FairMOT的烦恼
- 小tip: base64:URL背景图片与web页面性能优化(转载)
- swoole mysql 并发_如何用Swoole测试MySQL在特定SQL下的并发性能
- 微信小程序电商实战-商品详情加入购物车(下)
- linux qt qrc文件中 xxx.png图片无法加载的问题
- 1.4 px30驱动移植-网卡驱动找不到网卡解决
- 智能分数计算机在线使用,作业帮智能计算器在线使用
- 触动精灵 alilib
- 计算机初中毕业好学吗,初中毕业学计算机好学吗?
- 在lomboz eclipse 3.3中配置tomcat7/8 server运行时环境遇到的问题
- 一节课轻松通关 Spark
- WebShell箱子简介与原理
- RT-Thread I/O设备模型及驱动框架解析(一)
- [HNOI 2014] 米特运输
- SRT协议应用于直播加速CDN,超越RTMP,实现200ms以下的 低延时、弱网传输