Softmax 以及 交叉熵损失函数 的求导

Ouput layer & 代价函数

网络结构

Output later 有K个神经元,有K个输入和输出。为了分别标记输入和输出,用 ai[1,K] 来表示Output layer的输入数据, yj[1,K] 来表示Output layer输出点数据。每个输入数据 ai[1,K] 和隐藏层的H个块之间是全连接的。
这里写图片描述

输入和输出数据

  • 每个Output layer层的输入数据是 ai=Hh=1whibh
  • 当使用softmax输出函数的时候,每个Output layer层的输出数据就为 yj=eajKj=1eaj
  • 当使用交差熵代价函数的时候 L(x,z)=Kj=1zjlnyj ,这里 zj 是各个输出点的目标分类结果,在训练数据中已经给出来了。

求导数

这里要求的是代价函数对每个输入数据的导数 δi=L(x,z)ai 。在反向传播中 δi 会传播给后续网络。

首先复习一下会用到的基本的微积分知识:

(uv)=uv+uvln(x)=1x

交叉熵的导数:

对于任意一个输出 yj 的导数

L(x,z)yj=Kj=1zjlnyjyj=zjyjjjyj0j=jzjlnyjyj=zjyj

Softmax函数的导数:

首先准备一下在计算时会反复用到的部分:

1Kj=1eajaj=1Kj=1eajKj=1eajKj=1eajaj=1(Kj=1eaj)2Kj=1eajaj=1(Kj=1eaj)2eajj=1Keajjjeaj+eajeajeaj

在求导数时,根据i和j是否相等分开进行讨论:
当i=j时,求导数公式如下:
eaiKj=1eajai=eaieai1Kj=1eaj+eai1Kj=1eajai=eai1Kj=1eaj+eai(1(Kj=1eaj)2eai)=eaiKj=1eaj(1eaiKj=1)=yi(1yi)(uv)=uv+uvsoftmaxyi=eaiKj=1eaj

ij 的求导数公式如下:
eajKj=1eajai=eaj1Kj=1eajeai=eaj(1(Kj=1eaj)2eai)=eajKj=1eajeaiKj=1eaj=yjyieajeai

输出层的梯度 δi 的推导

L 受所有的输出数据 yj 影响,而任意一个输入数据 ai 会影响到所有的输出数据 yj ,因此在 L 对任意一个 ai 求导数时,要把所有的 yj 的导数都传递给 ai ,并把它们累加起来。
这里写图片描述

δi=Lai=Ly1y1ai+Ly2y2ai++Lyjyjai++LyKyKai=j=1KLyjyjai=jiKLyjyjai+Lyiyiaiij

ij 时:

jiKLyjyjai=jiK[zjyj(yiyj)]

当i=j时:

Lyiyiai=ziyi[yi(1yi)]

把这两个部分加起来:

δi=Lai=jiKLyjyjai+Lyiyiai=jiK[zjyj(yiyj)]+{ziyi[yi(1yi)]}=yi{jiK[zjyj(yj)]ziyi(1yi)}=yi{jiKzjziyi+zi}=yi1ziyi=yiziijyizjzj1jiKzj+zi=1

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值