超详细!!! 交叉熵损失函数的反向梯度推导(基于计算图)

 

如果对DeepLearning的底层实现感兴趣,可以到我的这篇博客看看,相信会有很大帮助,谢谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
交叉熵损失函数反向传播可以使用链式法则进行推导。假设神经网络的输出为 $y_i$,真实标签为 $t_i$,则交叉熵损失函数为: $$ L = -\sum_i t_i \log y_i $$ 我们需要计算 $\frac{\partial L}{\partial y_i}$,再通过链式法则计算出其他参数的梯度。 首先,根据导数的定义,有: $$ \frac{\partial L}{\partial y_i} = -\frac{t_i}{y_i} $$ 接下来,我们需要计算 $\frac{\partial y_i}{\partial z_j}$,其中 $z_j$ 表示第 $j$ 个神经元的输入。根据 softmax 函数的定义,有: $$ y_i = \frac{e^{z_i}}{\sum_j e^{z_j}} $$ 当 $i=j$ 时有: $$ \frac{\partial y_i}{\partial z_i} = \frac{\partial}{\partial z_i} \frac{e^{z_i}}{\sum_j e^{z_j}} = \frac{e^{z_i} \sum_j e^{z_j} - e^{z_i} e^{z_i}}{(\sum_j e^{z_j})^2} = y_i (1 - y_i) $$ 当 $i \neq j$ 时有: $$ \frac{\partial y_i}{\partial z_j} = \frac{\partial}{\partial z_j} \frac{e^{z_i}}{\sum_j e^{z_j}} = -\frac{e^{z_i} e^{z_j}}{(\sum_j e^{z_j})^2} = -y_i y_j $$ 接下来,我们可以计算 $\frac{\partial L}{\partial z_j}$: $$ \frac{\partial L}{\partial z_j} = \sum_i \frac{\partial L}{\partial y_i} \frac{\partial y_i}{\partial z_j} = -\sum_i \frac{t_i}{y_i} y_i (1 - y_i) + \sum_{i \neq j} \frac{t_i}{y_i} y_i y_j = -t_j + y_j \sum_i t_i = y_j - t_j $$ 最后,根据链式法则,我们可以计算出其他参数的梯度: $$ \frac{\partial L}{\partial w_{jk}} = \frac{\partial L}{\partial z_j} \frac{\partial z_j}{\partial w_{jk}} = x_k (y_j - t_j) $$ $$ \frac{\partial L}{\partial b_j} = \frac{\partial L}{\partial z_j} \frac{\partial z_j}{\partial b_j} = y_j - t_j $$ 其中 $w_{jk}$ 表示第 $j$ 个神经元与第 $k$ 个输入之间的权重,$b_j$ 表示第 $j$ 个神经元的偏置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

轩辕十四

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

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

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

打赏作者

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

抵扣说明:

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

余额充值