softmax的导数

softmax的原函数为:
S ( x i ) = e x i e x 0 + e x 1 + . . . + e x n = e x i ∑ j = 0 n e x j S(x_i)=\frac{e^{x_i}}{e^{x_0}+e^{x_1}+...+e^{x_n}} =\frac{e^{x_i}}{\sum_{j=0}^{n}e^{x_j}} S(xi)=ex0+ex1+...+exnexi=j=0nexjexi
和普通的函数有点不太一样,它是一个输入输出均为序列的映射,每一个输入对应每一个输出都有贡献,对其求导可以看作是多元函数求偏导数的过程。如下所示:
[ x 0 x 1 x 2 . . . x n ] = > S ( x i ) = > [ e x 0 e x 0 + e x 1 + . . . + e x n e x 1 e x 0 + e x 1 + . . . + e x n e x 2 e x 0 + e x 1 + . . . + e x n . . . e x n e x 0 + e x 1 + . . . + e x n ] = [ S ( x 0 ) S ( x 1 ) S ( x 2 ) . . . S ( x n ) ] \left[ \begin{matrix} x_0\\x_1\\x_2\\.\\.\\.\\x_n \end{matrix} \right]=>S(x_i)=> \left[ \begin{matrix} \frac{e^{x_0}}{e^{x_0}+e^{x_1}+...+e^{x_n}}\\ \frac{e^{x_1}}{e^{x_0}+e^{x_1}+...+e^{x_n}}\\ \frac{e^{x_2}}{e^{x_0}+e^{x_1}+...+e^{x_n}}\\ .\\.\\.\\ \frac{e^{x_n}}{e^{x_0}+e^{x_1}+...+e^{x_n}}\\ \end{matrix} \right]= \left[ \begin{matrix} S(x_0)\\S(x_1)\\S(x_2)\\.\\.\\.\\S(x_n) \end{matrix} \right] x0x1x2...xn=>S(xi)=>ex0+ex1+...+exnex0ex0+ex1+...+exnex1ex0+ex1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Softmax函数是一种基于指数函数归一化的数学函数,它将实数向量映射到概率分布上。 给定一个N维的向量$x$,softmax函数的定义如下: $\text{softmax}(x)_i = \frac{e^{x_i}}{\sum_{j=1}^{N}e^{x_j}}$,其中$i\in \{1,2,...,N\}$。 在深度学习中,softmax函数常用于将多分类问题中的输出层输出映射为概率分布上,以便用于损失函数的计算、梯度计算等。 关于softmax函数的导数,可以使用链式法则求解。 首先,我们可以根据softmax函数的定义,表示$\text{softmax}(x)_i$来求其导数: $\text{softmax}(x)_i = \frac{e^{x_i}}{\sum_{j=1}^{N}e^{x_j}}$ $\frac{\partial{\text{softmax}(x)_i}}{\partial x_j} = \frac{\partial}{\partial x_j} \frac{e^{x_i}}{\sum_{k=1}^{N}e^{x_k}}$ 由于$j \neq i$,为了使得分子中不含$x_j$,我们需要对分子和分母分别进行变形: $\frac{e^{x_i}}{\sum_{k=1}^{N}e^{x_k}} = \frac{e^{x_i}}{e^{x_j} \cdot \sum_{k \neq j}e^{x_k} + e^{x_j} \cdot e^{x_j} + e^{x_j} \cdot \sum_{k>j}e^{x_k}} = \frac{e^{x_i-x_j}}{\sum_{k \neq j}e^{x_k-x_j} + 1 + \sum_{k>j}e^{x_k-x_j}}$ 然后,我们重新表示一下$\frac{\partial{\text{softmax}(x)_i}}{\partial x_j}$: $\frac{\partial}{\partial x_j} \frac{e^{x_i}}{\sum_{k=1}^{N}e^{x_k}} = \frac{\partial}{\partial x_j} \frac{e^{x_i-x_j}}{\sum_{k \neq j}e^{x_k-x_j} + 1 + \sum_{k>j}e^{x_k-x_j}}$ $= \frac{-e^{x_i-x_j}}{(\sum_{k \neq j}e^{x_k-x_j} + 1 + \sum_{k>j}e^{x_k-x_j})^2} \cdot (\frac{\partial}{\partial x_j}(\sum_{k \neq j}e^{x_k-x_j}) + \frac{\partial}{\partial x_j}(e^{x_j}) + \frac{\partial}{\partial x_j}(\sum_{k>j}e^{x_k-x_j}))$ $= \frac{-e^{x_i-x_j}}{(\sum_{k \neq j}e^{x_k-x_j} + 1 + \sum_{k>j}e^{x_k-x_j})^2} \cdot (-e^{x_j} + \sum_{k>j}e^{x_k-x_j})$ $= \frac{e^{x_i-x_j}}{\sum_{k=1}^{N}e^{x_k}} \cdot \frac{e^{x_j}}{\sum_{k=1}^{N}e^{x_k}}(\delta_{ij}-\frac{e^{x_i}}{\sum_{k=1}^{N}e^{x_k}})$ 其中,$\delta_{ij}$表示Kronecker delta,当$i=j$时取值为1,否则为0。 综上所述,我们可以得到: $\frac{\partial{\text{softmax}(x)_i}}{\partial x_j} = \frac{e^{x_i-x_j}}{\sum_{k=1}^{N}e^{x_k}} \cdot \frac{e^{x_j}}{\sum_{k=1}^{N}e^{x_k}}(\delta_{ij}-\frac{e^{x_i}}{\sum_{k=1}^{N}e^{x_k}})$ 这就是softmax函数的导数公式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值