《neural network and deep learning》题解——ch03 交叉熵代价函数

http://blog.csdn.net/u011239443/article/details/75091283

问题一

验证 σ(z)=σ(z)(1σ(z))

σ(z)=11+ez

σ(z)=(11+ez)=ez(1+ez)2=11+ezez1+ez=σ(z)(1σ(z))

问题二

一个⼩问题就是刚接触交叉熵时,很难⼀下⼦记住那些诸如 y 和 a 的表达式对应的角色。又比如说,表达式的正确形式是[ylna(1y)ln(1a)] 还是 [alny+(1a)ln(1y)]。在 y = 0 或者 1 的时候第二个表达式的结果怎样?这个问题会困扰第一个表达式吗?为什么?

在 y = 0 或者 1 的时候,In中的值为0,第二个表达式非法。这个问题不会困扰第一个表达式,因为a在(0,1),只会趋近0或1,所以a1-a不会等于0

问题三

在对单个神经元讨论中,我们指出如果对所有的训练数据有 σ(z) ≈ y,交叉熵会很小。这个论断其实是和 y 只是等于 1 或者 0 有关。这在分类问题一般是可行的,但是对其他的问题(如回归问题)y 可以取 0 和 1 之间的中间值的。证明,交叉熵对所有训练输入在σ(z) = y 时仍然是最小化的。此时交叉熵的表示是:
C=1n[ylny+(1y)ln(1y)]
而其中 [ylny+(1y)ln(1y)] 有时候被称为二元熵。

y 不只是等于 1 或者 0,我们可以把y看成一个常量,对C关于a进行求导。

Ca=1nx[ya+1y1a]

Ca=aayy+aya(1a)=aya(1a)

a(0,1)a(1a)>0

a(0,y)C;[y,1)C

σ(z)=y

问题四

用上一章的定义符号,证明对二次代价函数,关于输出层的权重的偏导数为
CwLjk=1nxaL1k(ajyj)σ(zLj)

CwLjk=1nx(ajyj)σ(zLj)ajwLjk

=1nx(ajyj)σ(zLj)(aL1kwLjk+bLj)wLjk

=1nxaL1k(ajyj)σ(zLj)

σ(zLj)会在一个输出神经元困在错误值时导致学习速度的下降。证明对于交叉熵代价函数,针对一个训练样本 x 的输出误差 δ L 为
δL=aLy

δL=CaLσ(zL)
=1nx[yaL1y1aL]aL(1aL)
=1nx[y(1aL)(1y)aL]
=1nx[aLy]

δL=aLy

使用这个表达式来证明关于输出层的权重的偏导数为
CwLjk=1nxaL1k(ajyj)

由(BP4)得
CwLjk=al1kδLj
=al1k(aLjyj)
=1nxaL1k(ajyj)

问题五

假设我们有一个多层多神经元网络,最终输出层的神经元都是线性神经元,输出不再是 S 型函数作用的结果,而是 aLj=zj 。证明
如果我们使用二次代价函数,那么对单个训练样本 x 的输出误差就是
δL=aLy

δL=CaLσ(zL)
=CaL
=j(yjaLj)
=aLy

类似于前一个问题,使用这个表达式来证明关于输出层的权重和偏置的偏导数为
CwLjk=1nxaL1k(ajyj)
CbLj=1nx(ajyj)

由(BP4)得
CwLjk=al1kδLj
=al1k(aLjyj)
=1nxaL1k(aLjyj)

由(BP3)得
CbLj=δLj
=aLy
=1nx(aLjyj)

问题六

我们已经深入讨论了使用二次代价函数的网络中在输出神经元饱和时候学习缓慢的问题,另一个可能会影响学习的因素就是在方程 (61) 中的 x j 项。由于此项,当输入 x j 接近 0 时,对应的权重 w j 会学习得相当缓慢。解释为何不可以通过改变代价函数来消除 x j 项的影响。

我们本身就像想通过xj的数据输入来学习,如歌可以通过改变代价函数来消除xj项的影响,那么训练数据对学习就无任何意义了。

问题七

构造例子表明在使用 S 型输出层的网络中输出**值 aLj 的和并不会确保为 1。

x=(0,1),w1=(1,1),w2=(1,1),b=(1,1)
σ(xw1+b0)=σ(1+1)=11+e2
σ(xw2+b0)=σ(1+1)=11+e2
21+e21

问题八

S 型层的一个好处是输出 aLj 是对应带权输入 aj=σ(zj) 的函数。解释为何对于柔性最大值层来说,并不是这样的情况:任何特定的输出**值 aj 依赖所有的带权输入。

从公式(78)的分母部分可知,aj以来所有的带权输入

问题九

假设我们有一个使用柔性最大值输出层的神经网络,然后**值 aLj已知。证明对应带权输入的形式为zLj=lnaLj+C,其中常量 C 是独立于 j 的。

对公式(78)两边去对数,得:

InaLj=zLjIn(kezlk)

=>InaLj+In(kezlk)=zLj

=>zLj=lnaLj+C

问题十

推导方程 (81) 和 (82)

待解

问题十一

假设我们改变一下柔性最大值函数,使得输出**值定义如下
aLj=eczLjkeczLk
其中 c 是正的常量。注意 c = 1 对应标准的柔性最大值函数。但是如果我们使用不同的 c得到不同的函数,其本质上和原来的柔性最大值函数是很相似的。特别地,证明输出**值也会形成一个概率分布,正如通常的柔性最大值函数。

jaLj=jeczLjkeczLk=1

正如通常的柔性最大值函数。假设我们允许 c 足够大,比如说 c → ∞。那么输出**值aLj 的极限值是什么?

将上题的式子中,分母分子各除以eczLj得:

limc+aLj=limc+1kec(zLkzLj)

zLj是输入中的最大值,则aLj 的极限值为1,否则aLj 的极限值为0

问题十二

为了应用在柔性最大值层的网络上,我们需要搞清楚最后一层上误差的表示 δLjCzLj 。证明形式如下:
δLj=aLjyj

由(BP3)与 公式(81),可证明。

《neural network and deep learning》题解——ch03 交叉熵代价函数