Ouput layer & 代价函数

网络结构

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

输入和输出数据

  • 每个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 以及 交叉熵损失函数 的求导

δ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

相关文章: