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

Ouput layer & 代价函数

网络结构

Output later 有K个神经元,有K个输入和输出。为了分别标记输入和输出,用 ai[1,K] 来表示Output layer的输入数据, yj[1,K] 来表示Output layer输出点数据。每个输入数据 ai[1,K] 和隐藏层的H个块之间是全连接的。
Softmax 以及 交叉熵损失函数 的求导_第1张图片

输入和输出数据

  • 每个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 ,并把它们累加起来。
Softmax 以及 交叉熵损失函数 的求导_第2张图片

δ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

你可能感兴趣的:(AI)