softmax梯度推导以及注意事项

\large p_{i}=Softmax(z_{i})=\frac{e^{z_{i}}}{\sum_{c=1}^{C}e^{z_{c}}}

当求p_{i}对每个节点z_{j}的偏导时,要区分i=ji\neq j两种情况。

\boldsymbol{i=j}

\large \large \frac{\partial p_{i}}{\partial z_{j}}=\frac{\partial }{z_{j}}(\frac{e^{z_{i}}}{\sum_{c=1}^{C}e^{z_{c}}})=\frac{(e^{z_{i}})'\sum_{c=1}^{C}e^{z_{c}}-e^{z_{i}}(\sum_{c=1}^{C}e^{z_{c}})'}{(\sum_{c=1}^{C}e^{z_{c}})^{2}}

因为是对z_{j}求偏导,分子中对\sum_{c=1}^{C}e^{z_{c}}求导时,除了e^{z_{j}}项求导结果还是e^{z_{j}},其它项都是常数,求导结果为0。因此

\large \frac{\partial y_{i}}{\partial z_{j}}=\frac{e^{z_{i}}\sum_{c=1}^{C}e^{z_{c}}-e^{z_{i}}e^{z_{i}}}{(\sum_{c=1}^{C}e^{z_{c}})^{2}}=p_{i}(1-p_{i})

\boldsymbol{i\neq j}

e^{z_{i}^{}}项对z_{j}求导结果为0,则

\large \frac{\partial p_{i}}{\partial z_{j}}=\frac{0\times \sum_{c=1}^{C}e^{z_{c}}-e^{z_{i}}e^{z_{j}}}{(\sum_{c=1}^{C}e^{z_{c}})^{2}}=-p_{i}p_{j}

因此

\large {\color{DarkOrange} \LARGE \frac{\partial p_{i}}{\partial z_{j}}=\left\{\begin{matrix} p_{i}(1-p_{i}) & j=i\\ -p_{i}p_{j} & j\neq i \end{matrix}\right.}

softmax后面接交叉熵损失函数时

\large L=-\sum_{c=1}^{C}y_{c}log(p_{c})

其中y_{c}是标签,在多分类中,label一般采用one-hot编码,即只有对应的类别值为1,其它类别的值都为0。p_{c}就是softmax函数的输出,则损失L对网络输出z_{j}的偏导为

\large \frac{\partial L}{\partial z_{j}}=-\sum_{c=1}^{C}y_{c}\frac{\partial log(p_{c})}{\partial z_{j}}=-\sum_{c=1}^{C}y_{c}\frac{\partial log(p_{c})}{\partial p_{c}}\frac{\partial p_{c}}{\partial z_{j}}=-\sum_{c=1}^{C}y_{c}\frac{1}{p_{c}}\frac{\partial p_{c}}{\partial z_{j}}

其中\frac{\partial p_{c}}{\partial z_{j}}就是我们上面推导出的softmax的偏导,这里同样分为c=jc\neq j两种情况,带入得到

\frac{\partial L}{\partial z_{j}}=-y_{j}\frac{1}{p_{j}}p_{j}(1-p_{j})-\sum_{c\neq j}^{}y_{c}\frac{1}{p_{c}}(-p_{c}p_{j})=-y_{j}(1-p_{j})+\sum_{c\neq j}^{}y_{c}p_{j}

提取公共项p_{j}

\large \frac{\partial L}{\partial z_{j}}=p_{j}(y_{j}+\sum_{c\neq j}^{}y_{c})-y_{j}

前面提到多分类问题中标签采用one-hot编码,则

\large \sum_{c=1}^{C}y_{c}=1

\large y_{j}+\sum_{c\neq j}^{C}y_{c}=1

则最终结果为

\large {\color{DarkOrange} \frac{\partial L}{\partial z_{j}}=p_{j}-y_{j}}

Appendix

因为softmax中采用了指数形式\large e^{z_{i}},当\large z_{i}比较大时,\large e^{z_{i}}可能会出现溢出的情况。解决方法是

\large softmax(z_{i})=\frac{e^{z_{i}-max(z)}}{\sum_{c=1}^{C}e^{z_{c}-max(z)}}=\frac{e^{-max(z)}\cdot e^{z_{i}}}{e^{-max(z)}\cdot \sum_{c=1}^{C}e^{z_{c}}}

参考

https://zhuanlan.zhihu.com/p/105722023

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

00000cj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值