softmax交叉熵损失求导

softmax为激活函数,C = softmax(o)为输出,真实标签为y, 用交叉熵作为损失函数L,给出损失函数定义,并且给出损失函数Lo的求导

交叉熵损失函数定义如下:

L = − ∑ i = 1 C y i log ⁡ ( c i ) L = -\sum_{i=1}^C y_i\log(c_i) L=i=1Cyilog(ci)

其中, y y y表示真实标签, c c c表示模型的预测输出, C C C表示类别数。

假设模型的输出为 o o o,则将 o o o输入softmax函数得到预测输出 c c c

c i = e o i ∑ j = 1 C e o j c_i = \frac{e^{o_i}}{\sum_{j=1}^C e^{o_j}} ci=j=1Ceojeoi

将预测输出 c c c代入交叉熵损失函数中,可得到:

L = − ∑ i = 1 C y i log ⁡ ( e o i ∑ j = 1 C e o j ) = − ∑ i = 1 C y i ( o i − log ⁡ ∑ j = 1 C e o j ) L = -\sum_{i=1}^C y_i\log\left(\frac{e^{o_i}}{\sum_{j=1}^C e^{o_j}}\right) = -\sum_{i=1}^C y_i(o_i - \log\sum_{j=1}^C e^{o_j}) L=i=1Cyilog(j=1Ceojeoi)=i=1Cyi(oilogj=1Ceoj)

接下来,我们对 L L L o k o_k ok求导数:

∂ L ∂ o k = − ∑ i = 1 C y i ∂ ( o i − log ⁡ ∑ j = 1 C e o j ) ∂ o k \frac{\partial L}{\partial o_k} = -\sum_{i=1}^C y_i \frac{\partial(o_i - \log\sum_{j=1}^C e^{o_j})}{\partial o_k} okL=i=1Cyiok(oilogj=1Ceoj)

i = k i=k i=k时,

∂ ( o i − log ⁡ ∑ j = 1 C e o j ) ∂ o k = 1 − e o k ∑ j = 1 C e o j = 1 − c k \frac{\partial(o_i - \log\sum_{j=1}^C e^{o_j})}{\partial o_k} = 1 - \frac{e^{o_k}}{\sum_{j=1}^C e^{o_j}} = 1 - c_k ok(oilogj=1Ceoj)=1j=1Ceojeok=1ck

i ≠ k i \neq k i=k时,

∂ ( o i − log ⁡ ∑ j = 1 C e o j ) ∂ o k = − e o i e o k ( ∑ j = 1 C e o j ) 2 = − c i c k \frac{\partial(o_i - \log\sum_{j=1}^C e^{o_j})}{\partial o_k} = -\frac{e^{o_i}e^{o_k}}{(\sum_{j=1}^C e^{o_j})^2} = -c_ic_k ok(oilogj=1Ceoj)=(j=1Ceoj)2eoieok=cick

因此,

∂ L ∂ o k = − y k ( 1 − c k ) − ∑ i ≠ k y i ( − c i c k ) = c k − y k \frac{\partial L}{\partial o_k} = -y_k(1-c_k) - \sum_{i\neq k}y_i(-c_ic_k) = c_k - y_k okL=yk(1ck)i=kyi(cick)=ckyk

综上所述,我们可以使用交叉熵损失函数和softmax作为激活函数,并且可以使用上述公式计算梯度,以便进行反向传播和模型参数更新。

接着上面的假设,若 :
o = p x + b o = px+b o=px+b
那么根据链式法则,损失Lp的求导结果为

x ( c k − y k ) x(c_k - y_k) x(ckyk)

损失Lb的求导结果为
c k − y k c_k - y_k ckyk

深度学习中,交叉熵损失函数常用于多分类问题中衡量模型输出与真实标签之间的差异。对于使用softmax作为激活函数的输出层,我们可以使用交叉熵损失函数进行优化。 设模型的输出为$y=(y_1,y_2,\dots,y_n)$,其中$y_i$表示模型对第$i$类的预测概率。设真实标签为$z=(z_1,z_2,\dots,z_n)$,其中$z_i$表示第$i$类的真实标签(通常取值为0或1)。 交叉熵损失函数定义如下: $$L(y,z)=-\sum_{i=1}^n z_i \log(y_i)$$ 接下来,我们来求解交叉熵对每个预测值的导数。 计算$L$对$y_k$的偏导数: $$\frac{\partial L}{\partial y_k} = -\frac{\partial}{\partial y_k} \sum_{i=1}^n z_i \log(y_i)$$ 由于交叉熵对于除$y_k$以外的其他预测值$y_i$的偏导数为0(可以通过计算验证),因此只需计算$L$对$y_k$的偏导数。 我们可以使用链式法则来进行求导: $$\frac{\partial L}{\partial y_k} = -\sum_{i=1}^n \frac{\partial}{\partial y_k} (z_i \log(y_i))$$ 当$i\neq k$时,$\frac{\partial}{\partial y_k}(z_i \log(y_i))=0$,因此上式可以简化为: $$\frac{\partial L}{\partial y_k} = -\frac{\partial}{\partial y_k} (z_k \log(y_k)) = -\frac{z_k}{y_k}$$ 综上所述,我们得到交叉熵损失函数对于softmax模型输出的偏导数为: $$\frac{\partial L}{\partial y_k} = \begin{cases} y_k-z_k, & \text{if $k=j$}\\ y_k, & \text{if $k\neq j$} \end{cases}$$ 其中$j$表示真实标签为1的类别。这样,我们就可以利用该导数来进行反向传播,更新模型参数,从而优化模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

高山莫衣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值