softmax求导

本文参考https://blog.csdn.net/cassiePython/article/details/80089760
非常好的文章

基础概念

Softmax函数的输入是N维的随机真值向量,输出是另一个N维的真值向量,
且值的范围是(0,1),和为1.0。即映射:S(a)= R N \mathbb{R}^{N} RN R N \mathbb{R}^{N} RN
S ( a ) : [ a 1 a 2 … a N ] → [ S 1 S 2 ⋯ S N ] S(\mathbf{a}):\left[\begin{array}{c}{a_{1}} \\ {a_{2}} \\ {\dots} \\ {a_{N}}\end{array}\right] \rightarrow\left[\begin{array}{c}{S_{1}} \\ {S_{2}} \\ {\cdots} \\ {S_{N}}\end{array}\right] S(a):a1a2aNS1S2SN
其中每一个元素的公式为:
S j = e a j ∑ k = 1 N e a k ∀ j ∈ 1 … N S_{j}=\frac{e^{a_{j}}}{\sum_{k=1}^{N} e^{a_{k}}} \quad \forall j \in 1 \ldots N Sj=k=1Neakeajj1N
显然 S j S_{j} Sj总是正的~(因为指数);因为所有的 S j S_{j} Sj的和为1,所以有 S j S_{j} Sj<1,因此它的范围是(0,1)。

向量计算的准备

在深入理解计算softmax的导数之前,我们先了解向量计算的一些基础知识。
Softmax从根本上来说是一种向量函数。它将向量作为输入并输出另一个向量。换言之,它有多个输入和输出,因此我们不能直接就尝试求”softmax的导数”,我们首先要明确:

  • 我们想要计算softmax的哪个组成成分(输出的某元素)的导数。
  • 由于softmax具有多个输入,所以要计算关于哪个输入元素的偏导数。

听起来好像很复杂,但这正是为什么定义向量计算的原因。 我们正在寻找的偏导数是: ∂ S i ∂ a j \frac{\partial S_{i}}{\partial a_{j}} ajSi
其中 i i i是我们要计算的组成成分(即训练数据中正确的分类),我们要使正确的分类的softmax值最大。
∂ S i ∂ a j = ∂ e a i ∑ k = 1 N e a k ∂ a j \frac{\partial S_{i}}{\partial a_{j}}=\frac{\partial \frac{e^{a_{i}}}{\sum_{k=1}^{N} e^{a_{k}}}}{\partial a_{j}} ajSi=ajk=1Neakeai
j j j= i i i
∂ e a i ∑ k = 1 N e a k ∂ a j = e a i ∑ − e a j e a i ∑ 2 \frac{\partial \frac{e^{a_{i}}}{\sum_{k=1}^{N} e^{a_{k}}}}{\partial a_{j}}=\frac{e^{a_{i}} \sum-e^{a_{j}} e^{a_{i}}}{\sum^{2}} ajk=1Neakeai=2eaieajeai
简单起见,我们使用 ∑ \sum 表示 ∑ k = 1 N e a k \sum_{k=1}^{N} e^{a_{k}} k=1Neak。继续化简下:
∂ e a i ∑ k = 1 N e a k ∂ a j = e a i ∑ − e a j e a i ∑ 2 \frac{\partial \frac{e^{a_{i}}}{\sum_{k=1}^{N} e^{a_{k}}}}{\partial a_{j}}=\frac{e^{a_{i}} \sum-e^{a_{j}} e^{a_{i}}}{\sum^{2}} ajk=1Neakeai=2eaieajeai
= e a i ∑ ∑ − e a i ∑ = S i ( 1 − S j ) \begin{aligned} &=\frac{e^{a_{i}}}{\sum} \frac{\sum-e^{a_{i}}}{\sum} \\ &=S_{i}\left(1-S_{j}\right) \end{aligned} =

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值