Softmax反向传播

softmax 公式:

假设有一个向量\textbf{x},其长度为nx_{i}表示\textbf{x}中的第i个元素,那么这个元素的softmax值为: 

y_{i}=\frac{e^{x_{i}}}{\sum{}_{j=1}^{k}e^{x_{j}}}

Softmax反向传播

当j!=i时,\frac{\partial l}{\partial x_{i}} =\sum_{j=0,j!=i}^{n}\frac{\partial l}{\partial y_{j}}\frac{\partial y_{j}}{\partial x_{i}}=\sum_{j=0,j!=i}^{n}\frac{\partial l}{\partial y_{j}}\frac{-e^{x_{i}}\cdot e^{x_{j}}}{\sum{}_{k=0}^{n}e^{x_{k}}\cdot\sum{}_{k=0}^{n}e^{x_{k}}}

当j=i时,\frac{\partial l}{\partial x_{i}} =\frac{\partial l}{\partial y_{i}}\frac{\partial y_{i}}{\partial x_{i}}=\frac{\partial l}{\partial y_{i}}\frac{e^{x_{i}}\sum{}_{k=0}^{n}e^{x_{k}}-e^{x_{i}}\cdot e^{x_{i}}}{\sum{}_{k=0}^{n}e^{x_{k}}\cdot\sum{}_{k=0}^{n}e^{x_{k}}}

 

所以 将上面两个式子加起来得到

 \frac{\partial l}{\partial x_{i}} =\sum_{j=0,j!=i}^{n}\frac{\partial l}{\partial y_{j}}\frac{\partial y_{j}}{\partial x_{i}}+\frac{\partial l}{\partial y_{i}}\frac{\partial y_{i}}{\partial x_{i}}=\sum_{j=0,j!=i}^{n}\frac{\partial l}{\partial y_{j}}\frac{-e^{x_{i}}\cdot e^{x_{j}}}{\sum{}_{k=0}^{n}e^{x_{k}}\cdot\sum{}_{k=0}^{n}e^{x_{k}}}+\frac{\partial l}{\partial y_{i}}\frac{e^{x_{i}}\sum{}_{k=0}^{n}e^{x_{k}}-e^{x_{i}}\cdot e^{x_{i}}}{\sum{}_{k=0}^{n}e^{x_{k}}\cdot\sum{}_{k=0}^{n}e^{x_{k}}}=\sum_{j=0}^{n}\frac{\partial l}{\partial y_{j}}\frac{-e^{x_{i}}\cdot e^{x_{j}}}{\sum{}_{k=0}^{n}e^{x_{k}}\cdot\sum{}_{k=0}^{n}e^{x_{k}}}+\frac{\partial l}{\partial y_{i}}\frac{e^{x_{i}}\sum{}_{k=0}^{n}e^{x_{k}}}{\sum{}_{k=0}^{n}e^{x_{k}}\cdot\sum{}_{k=0}^{n}e^{x_{k}}}

=-\sum_{j=0}^{n}\frac{\partial l}{\partial y_{j}}\cdot y_{j}\cdot y_{i}+\frac{\partial l}{\partial y_{i}}\cdot y_{i}

=-(\sum_{j=0}^{n}\frac{\partial l}{\partial y_{j}}\cdot y_{j})\cdot y_{i}+\frac{\partial l}{\partial y_{i}}\cdot y_{i}

注意上式括号里面的量与x_{i}无关,并且其值为\frac{\partial l}{\partial y_{j}}y_{j}的逐元素乘积之和,设为\delta的乘积之和,设其为\sigma

{\frac{\partial l}{\partial \mathbf{x}}} = -\sigma \cdot \mathbf{y}+{\frac{\partial l}{\partial \mathbf{y}}} \cdot \mathbf{y}= \mathbf{y}\cdot({\frac{\partial l}{\partial \mathbf{y}}}-\sigma )

 

有人问这有什么意义?

其实这样就说明softmax的反向传播在编程的时候并不需要 分i=j和i!=j的情况来计算。

以caffe为例子 bottom_diff = top_data * (top_diff - sum(top_diff * top_data))  其中*表示点乘。

可以看出这样来计算backward不需要 gemm矩阵乘,只需要点乘即可完成。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Softmax函数在神经网络中常用于多分类任务的输出层,它将一组实数转化为概率分布。反向传播(backpropagation)是一种用于训练神经网络的方法,通过计算损失函数关于网络参数的梯度来更新参数。 在Softmax函数的反向传播过程中,我们首先计算损失函数关于Softmax输出的梯度。假设Softmax输出为向量 $y$,目标标签为向量 $t$,损失函数为交叉熵损失函数(Cross-Entropy Loss),则Softmax输出的梯度可以通过以下方式计算: $$ \frac{\partial L}{\partial y_i} = y_i - t_i $$ 其中,$L$ 表示损失函数。这里的梯度计算是通过对每个类别的输出与目标标签之间的差异进计算得到的。 接下来,我们需要将这个梯度传播到Softmax函数的输入。假设Softmax函数的输入为向量 $x$,则Softmax对输入的梯度可以通过以下方式计算: $$ \frac{\partial L}{\partial x_i} = \sum_{j=1}^{N} \frac{\partial L}{\partial y_j} \frac{\partial y_j}{\partial x_i} $$ 其中,$N$ 表示类别的数量。注意到对于不同的 $i$ 和 $j$,$\frac{\partial y_j}{\partial x_i}$ 的计算结果为: $$ \frac{\partial y_j}{\partial x_i} = y_j \cdot (\delta_{ij} - y_i) $$ 其中,$\delta_{ij}$ 是克罗内克(Kronecker)符号,表示当 $i=j$ 时为1,否则为0。 最后,我们可以通过反向传播算法将Softmax对输入的梯度继续传播到其他网络层,以更新网络参数。 需要注意的是,Softmax函数的反向传播过程中,通常与损失函数和其他网络层的梯度计算一起进,以实现端到端的参数更新。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值