首先这里是在知道代价函数怎么得出 了解什么是前馈神经网络以及其过程的前提下讨论反向传播(也即已经知道什么是权重 什么是偏置值 以及激活函数的作用 怎么求得代价函数)
为什么要用反向传播 以及其过程
这里和书中一样采用三层网络结构的神经网络 第一层是输入层(这里可以看作是输入每个带数字的图片并且由其像素点而对应组成的向量)接着一层隐含层(中间既不是输出层也不是输入层的都是叫隐含层) 最后是输出层(输出也是以向量形式输出 通过这条向量可以表示输出对应的数字是多少 注意:输出层的所表示的数字并不一定正确 所以才要不断做训练)然后为了能更好的理解隐含层 我会先把其当做是一个中介 无论是留学中介还是买房中介 你把自己目前的状况(输入给她)告诉对方让她帮你去申请处理 把这个过程留给她完成 接下来输出就是要看结果怎样
好了 现在回到正题 为什么要做反向传播 其实整个过程的目的都是想代价函数值最小 使得输出结果的正确率高 那么中间我们能不断优化改变的有两个变量 一个是权重一个是偏置值 我们试着按照正常思路去不断优化这两个变量 走一遍流程
step1.
假设我们对第一层网络中的 w 做一点小小 的变动 ∆w(这里
w
j
k
l
w^{l}_{jk}
wjkl表示从第l-1层的第k个神经元到l层的 j 个神经元的链接上的权重 比如:下面图一所在的链接指,
w
21
2
w^{2}_{21}
w212代表从第1层的第2个神经元到2层的 1个神经元的链接上的权重):
这个改变会导致在输出的第二层激活值的相应改变:
然后,会产生对下一层所有激活值(这里也就是第三层输出层)的改变,最终影响代价函数:
代价函数改变的∆C和第一层权重改变的∆w会按照下面的公式关联起来,得
∆
C
≈
∂
C
∂
w
j
k
l
∆
w
j
k
l
(1)
∆C\approx\frac{\partial C}{\partial w^{l}_{jk}}∆w^{l}_{jk} \tag{1}
∆C≈∂wjkl∂C∆wjkl(1)
为什么呢?我们再一层层来看会好理解一点
∆
w
21
2
∆w^{2}_{21}
∆w212导致了在
2
t
h
2^{th}
2th层
1
t
h
1^{th}
1th神经元的激活值的变化
∆
a
1
2
∆a^{2}_{1}
∆a12 ,也即有
∆
a
1
2
≈
∂
a
1
2
∂
w
21
2
∆
w
21
2
(2)
∆a^{2}_{1}\approx\frac{\partial a^{2}_{1}}{\partial w^{2}_{21}}∆w^{2}_{21} \tag{2}
∆a12≈∂w212∂a12∆w212(2)
(上面是由导数的定义可以得出)
然后接着
∆
a
1
2
∆a^{2}_{1}
∆a12的变化将会导致下一层(这里也就是第三层) 的所有激活值的变化
聚焦到其中一个激活值上看 看影响的情况,比如第三层最后一个神经元
a
3
3
a^{3}_{3}
a33
同样会导致下面的变化
∆
a
3
3
≈
∂
a
3
3
∂
a
1
2
∆
a
1
2
(3)
∆a^{3}_{3}\approx\frac{\partial a^{3}_{3}}{\partial a^{2}_{1}}∆a^{2}_{1} \tag{3}
∆a33≈∂a12∂a33∆a12(3)
然后结合方程(2)(3) 我们连列方程得到:
∆
a
3
3
≈
∂
a
3
3
∂
a
1
2
∂
a
1
2
∂
w
21
2
∆
w
21
2
(4)
∆a^{3}_{3}\approx\frac{\partial a^{3}_{3}}{\partial a^{2}_{1}}\frac{\partial a^{2}_{1}}{\partial w^{2}_{21}}∆w^{2}_{21} \tag{4}
∆a33≈∂a12∂a33∂w212∂a12∆w212(4)
同时结合一开始的方程(1)我们连列方程也会得到:
∆
C
≈
∂
C
∂
a
3
3
∂
a
3
3
∂
a
1
2
∂
a
1
2
∂
w
21
2
∆
w
21
2
(5)
∆C\approx\frac{\partial C}{\partial a^{3}_{3}}\frac{\partial a^{3}_{3}}{\partial a^{2}_{1}}\frac{\partial a^{2}_{1}}{\partial w^{2}_{21}}∆w^{2}_{21} \tag{5}
∆C≈∂a33∂C∂a12∂a33∂w212∂a12∆w212(5)
这个变化其实可以一直衍生下去的,但是这里只有三层,也方便给大家展示。其实,整个网络中存在很多
w
j
k
l
w^{l}_{jk}
wjkl可以传播而影响代价函数的路径,这里我们就看其中一条。
为了计算 C 的全部改变,我们就需要对 所有可能的路径进行求和,即,
∆
C
≈
∑
m
=
1
,
n
=
1
m
=
3
,
n
=
4
∂
C
∂
a
m
3
∂
a
m
3
∂
a
n
2
∂
a
n
2
∂
w
j
k
2
∆
w
j
k
2
(6)
∆C\approx\sum_{m=1,n=1}^{m=3,n=4}\frac{\partial C}{\partial a^{3}_{m}}\frac{\partial a^{3}_{m}}{\partial a^{2}_{n}}\frac{\partial a^{2}_{n}}{\partial w^{2}_{jk}}∆w^{2}_{jk} \tag{6}
∆C≈m=1,n=1∑m=3,n=4∂am3∂C∂an2∂am3∂wjk2∂an2∆wjk2(6)
相对于(6)有:
∆
C
∆
w
j
k
2
=
∂
C
∂
w
j
k
2
≈
∑
m
=
1
,
n
=
1
m
=
3
,
n
=
4
∂
C
∂
a
m
3
∂
a
m
3
∂
a
n
2
∂
a
n
2
∂
w
j
k
2
(7)
\frac{∆C}{∆w^{2}_{jk}}=\frac{\partial C}{\partial w^{2}_{jk}}\approx\sum_{m=1,n=1}^{m=3,n=4}\frac{\partial C}{\partial a^{3}_{m}}\frac{\partial a^{3}_{m}}{\partial a^{2}_{n}}\frac{\partial a^{2}_{n}}{\partial w^{2}_{jk}} \tag{7}
∆wjk2∆C=∂wjk2∂C≈m=1,n=1∑m=3,n=4∂am3∂C∂an2∂am3∂wjk2∂an2(7)
现在只有三层比较好表示出来 但是实际需要的神经网络都比较复杂
两个之间的神经元之间的连接,其实是与一个变化率因子相关联的,这仅仅是一个神经元的激活值相对于其他神经元的激活值的偏导数。从第一个权重到第一个神经元的变化率因子是
∂
a
l
j
∂
w
j
k
l
\frac{\partial a^{j}_{l}}{\partial w^{l}_{jk}}
∂wjkl∂alj。路径的变化率因子其实就是这条路径上的众多因子的乘积。而整个的变化率
∂
C
∂
w
j
k
l
\frac{\partial C}{\partial w^{l}_{jk}}
∂wjkl∂C就是对于所有可能的从初始权重到最终输出的代价函数的路径的变化率因子的和。如图:
经过上面的过程你发现了没有,自己其实就是在做反向传播!所以你可以将反向传播想象成一种计算所有可能的路径变化率的求和的方式。或者,可以这样想,反向传播就是一种巧妙地追踪权重(和偏置)微小变化的传播,抵达输出层影响代价函数的技术。
为了理解代价随前面层的权重和偏置变化的规律, 我们需要重复作用链式法则。希望这样理解反向传播会让读者好理解一点,如果有什么不足和问题可以留言下方,希望在这个平台上一起成长
下一章有关于反向传播四个基本公式以及相关代码