引言

在多分类问题中,一般会把输出结果传入到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=1K​ezk​ezi​​

这里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=1K​ezk​ezi​​​

这里要分两种情况,分别是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=1m​ezk​)2ezi​⋅∑k=1K​ezk​−ezi​⋅ezj​​=∑k=1m​ezk​ezi​​−∑k=1m​ezk​ezi​​⋅∑k=1m​ezk​ezj​​=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=1m​ezk​)20⋅∑k=1K​ezk​−ezi​⋅ezj​​=−∑k=1m​ezk​ezi​​⋅∑k=1m​ezk​ezj​​=−y^​i​y^​j​​

对cross-entropy求导

损失函数LLL为:

L=−∑kyklog⁡y^kL = -\sum_k y_k \log \hat y_k L=−k∑​yk​logy^​k​

其中yky_kyk​是真实类别,相当于一个常数,接下来求LLL对zjz_jzj​的导数

∂L∂zj=∂−(∑kyklog⁡y^k)zj=∂−(∑kyklog⁡y^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​∂−(∑k​yk​logy^​k​)​=∂y^​k​∂−(∑k​yk​logy^​k​)​∂zj​∂y^​k​​=−k∑​yk​y^​k​1​zj​∂y^​k​​=(−yk​⋅y^​k​(1−y^​k​)y^​k​1​)k=j​−k​=j∑​yk​y^​k​1​(−y^​k​y^​j​)=−yj​(1−y^​j​)−k​=j∑​yk​(−y^​j​)=−yj​+yj​y^​j​+k​=j∑​yk​(y^​j​)=−yj​+k∑​yk​(y^​j​)=−yj​+y^​j​=y^​j​−yj​​

这里用到了∑kyk=1\sum_{k} y_k = 1∑k​yk​=1

可以看到,求导结果非常简单,如果不推导都不敢信。

Softmax与Cross-entropy的求导相关推荐

  1. 卷积神经网络系列之softmax loss对输入的求导推导

    我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caf ...

  2. softmax loss对输入的求导推导

    转载自: https://blog.csdn.net/u014380165/article/details/79632950 我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CN ...

  3. 为什么要返回softmax_为什么softmax搭配cross entropy是解决分类问题的通用方案?

    众所周知,softmax+cross entropy是在线性模型.神经网络等模型中解决分类问题的通用方案,但是为什么选择这种方案呢?它相对于其他方案有什么优势?笔者一直也困惑不解,最近浏览了一些资料, ...

  4. softmax ce loss_手写softmax和cross entropy

    import 解释下给定的数据,x假设是fc layer的输出,可以看到这里x是(3,3)的,也就是batch_size=3,n_classes=3.但是label给出了三个数,取值是0,1,因此这里 ...

  5. 卷积神经网络系列之softmax,softmax loss和cross entropy的讲解

    我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caf ...

  6. softmax,softmax loss和cross entropy

    我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个CNN网络主要包含卷积层,池化层(pooling),全连接层,损失层等.虽然现在已经开源了很多深度学习框架(比如MxNet,Caf ...

  7. [损失函数]Softmax求导

    原文链接: https://blog.csdn.net/u014380165/article/details/79632950 我们知道卷积神经网络(CNN)在图像领域的应用已经非常广泛了,一般一个C ...

  8. Deep Learning基础--Softmax求导过程

    一.softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个 ...

  9. sigmoid函数、tanh函数、softmax函数及求导

    sigmoid函数和tanh函数都是激活函数,接收一个输入,产生一个输出.这里的求导是对激活函数求导.而softmax函数是一个多输入多输出的激活函数,这里提到的求导是对经过softmax函数后进行交 ...

  10. softmax with cross-entropy loss求导(转载+细节整理)

    softmax 函数 softmax(柔性最大值)函数,一般在神经网络中, softmax可以作为分类任务的输出层. 其实可以认为softmax输出的是几个类别选择的概率,比如我有一个分类任务,要分为 ...

最新文章

  1. php amqp扩展安装,php扩展AMQP,安装报错解决
  2. 分苹果问题的C++和Python实现
  3. Wire:Linux开源聊天应用
  4. Winform中设置ZedGraph的字体和间距不随图形的缩放而缩放
  5. codeforces1554 E. You(思维+数学+转化)
  6. 打遍天下无敌手,却说它只是个baseline!多目标跟踪FairMOT的烦恼
  7. 小tip: base64:URL背景图片与web页面性能优化(转载)
  8. swoole mysql 并发_如何用Swoole测试MySQL在特定SQL下的并发性能
  9. 微信小程序电商实战-商品详情加入购物车(下)
  10. linux qt qrc文件中 xxx.png图片无法加载的问题
  11. 1.4 px30驱动移植-网卡驱动找不到网卡解决
  12. 智能分数计算机在线使用,作业帮智能计算器在线使用
  13. 触动精灵 alilib
  14. 计算机初中毕业好学吗,初中毕业学计算机好学吗?
  15. 在lomboz eclipse 3.3中配置tomcat7/8 server运行时环境遇到的问题
  16. 一节课轻松通关 Spark
  17. WebShell箱子简介与原理
  18. RT-Thread I/O设备模型及驱动框架解析(一)
  19. [HNOI 2014] 米特运输
  20. SRT协议应用于直播加速CDN,超越RTMP,实现200ms以下的 低延时、弱网传输

热门文章

  1. 微服务实战(八):落地微服务架构到直销系统(服务高可用性)
  2. sql 分页查询 (每次6行 )
  3. JAVA bean与XML互转的利器---XStream
  4. 【Unity Shader】---UnityShader 提供的CG/HLSL语义
  5. 由scanf说起之1:scanf函数和回车、空格 及其返回值
  6. 设置VSS使支持通过Internet访问
  7. 使用ADO.NET轻松操纵数据库(二)
  8. 给ecshop后台增加管理功能页面
  9. 反转字符串中的元音字符
  10. SQL 实战教程(八)