超详细的softmax的反向传播梯度计算推导

这篇博客详细介绍了softmax激活函数在神经网络中的反向传播过程,通过具体案例展示了如何计算损失函数对输入Z的梯度,最终得出∂Z∂L=A−Y的结论。内容包括正向传播的描述,以及利用链式法则逐步求解∂zi∂L和∂zi∂ak的过程。
摘要由CSDN通过智能技术生成

Softmax及其求导

正向传播

为了方便理解,若输入,输出只有3个变量(下面的普通性情况不太理解的可以带入此特殊情况帮助理解)。

  • 输入:输出层神经元 Z = [ z 1 z_1 z1, z 2 z_2 z2, z 3 z_3 z3],分类标签 Y = [ y 1 , y 2 , y 3 y_1, y_2, y_3 y1,y2,y3](Y是one-hot标签,只有一个 y i y_i yi值为1,其他全为0)
  • 输出:A = softmax(Z) = [ a 1 , a 2 , a 3 a_1, a_2, a_3 a1,a2,a3]

更一般的,假设有n个神经元(或者说n类),softmax公式为:
a i = e z i ∑ j = 1 n e z j a_i = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}} ai=j=1nezjezi
损失函数采用交叉熵,公式为:
L = − ∑ i = 1 n y i l n a i L = -\sum_{i=1}^n y_ilna_i L=i=1nyilnai

求导

先说结论,按向量形式表示 ∂ L ∂ Z = A − Y \frac{\partial L}{\partial Z} = A - Y ZL=AY

证明:在这里我们假设第k个神经元为正确标签,即在Y = [ y 1 , y 2 , y 3 y_1, y_2, y_3 y1,y2,y3]中 y k y_k yk = 1,其他 y i y_i yi都为0。

首先求L对A的导数
∂ L ∂ a i = ∂ − ∑ i = 1 n y i l n a i ∂ a i = − y i a i \frac{\partial L}{\partial a_i} = \frac{\partial -\sum_{i=1}^n y_ilna_i}{\partial a_i}=-\frac{y_i}{a_i} aiL=aii=1nyilnai=aiyi

再求L对Z的导数,这里需要注意,在正向传播时,每一个 a i a_i ai的计算都有所有的 z j z_j zj参加(请看softmax的公式的分母,是求和)
∂ L ∂ z i = ∑ j = 1 n ∂ L a j ⋅ ∂ a j ∂ z i = ∑ j = 1 n − y j a j ⋅ ∂ a j ∂ z i \frac{\partial L}{\partial z_i} = \sum_{j=1}^n \frac{\partial L}{a_j} \cdot \frac{\partial a_j}{\partial z_i} = \sum_{j=1}^n -\frac{y_j}{ a_j} \cdot \frac{\partial a_j}{\partial z_i} ziL=j=1najLziaj=j=1na

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值