原文地址
第二章 反向传播算法是如何工作的
作者: Michael Nielsen
简介
在上一章的内容中并没有介绍代价函数的梯度是如何计算的,本章就将介绍反向传播算法,因此本章将更加偏向数学。
基于矩阵来计算神经网络的输出
首先介绍基本的标识符,如图
尽管现在看起来这样的定义方式有些怪异,稍微会解释合理性。
对于网络的weight和bias,同样给出标识符,如图
b23
表示神经网络中第2层,第3个神经元的bias,
a31
表示神经网络中第3层,第2个神经元的激活函数,有了这样的定义,函数式就可以写成
alj=σ(∑kwljkal−1k+blj),(23)
还有一种更加简洁的写法,可以写成矩阵乘法的方式,这也就是为什么weight要被定义成如此奇怪形式的原因
al=σ(wlal−1+bl).(25)
定义
zlj=∑kwljkal−1k+blj
那么我们就有
al=σ(zl)
这也是本章内容的基础。
代价函数
C=12n∑x∥y(x)−aL(x)∥2,(26)
随后引入哈达马积,例如:
[12]⊙[34]=[1∗32∗4]=[38].(28)
即矩阵对应位置相乘。
四个基本等式
于是我们就有了算法流程:
反向传播算法的重点
为了解释这个算法的行为,假设我们对网络中的权值进行了修改
这样的修改会对最后的输出造成影响
由于权重的变化造成了损失函数的变化,很自然地我们想要去求它的偏导数。
由于信息是一层一层向下传播的,改变的权重在神经网络中有多条路径通向最后的输出
ΔC≈∑mnp…q∂C∂aLm∂aLm∂aL−1n∂aL−1n∂aL−2p…∂al+1q∂alj∂alj∂wljkΔwljk,(52)
移项之后得到
∂C∂wljk=∑mnp…q∂C∂aLm∂aLm∂aL−1n∂aL−1n∂aL−2p…∂al+1q∂alj∂alj∂wljk.(53)