深度学习中的反向传播过程详解
综述
反向传播过程就是一个复合函数求导的过程,反向传播算法就是一个帮助我们求导的算法。多层神经网络的本质就是一个复合函数。
1. 为什么叫反向传播?
这个跟前向传播对应。在前向传播中,上一层中的权重是通过输出,来影响下一层的,因此在求隐藏层中w的导数时,是通过隐藏层的输出作为中间的桥梁来进行转换,这一点恰恰是沿着前向传播的路返回的。
2. 为什么不直接进行求导,而要使用复合函数求导(反向传播)的方法?
因为最后的损失函数是在输出层中产生的,求输出层中权重的导数时,可以直接求。但是如果要计算隐藏层中的导数的话,就需要写出复杂的函数表达式,才能够直接进行求导。
3. 反向传播的详细过程
为了讲清楚什么叫反向传播,以及反向传播到底是怎么计算的。首先构建如下神经网络模型:

这个神经网络包含三层,输入层为i1,i2,隐含层只有一层,为h1,h2,输出层为o1,o2。为一个全连接的网络。其中b1为第一隐含层的bias,b2为输出层的bias.
假设训练样本仅有1个,i1 = 0.05,i2 = 0.1.
初始化权重参数:
w1 = 0.15, w2 = 0.20, w3 = 0.25, w4 = 0.30
w5 = 0.40 w6 = 0.45, w7 = 0.50, w8 = 0.55
初始化bias参数:b1=0.35,b2=0.60
目标输出:targeto1=0.01,targeto2=0.99
-
The forward pass(前向传播过程)
neth1=w1×i1+w2×i2+1∗b1=0.15×0.05+0.2∗0.1+1×0.35=0.3775
outh1=sigmoid(neth1)=1+e−neth11=1+e−0.37751=0.593269992
neth2=w3×i1+w4×i2+1×b2=0.25×0.05+0.30×0.1+1∗0.35=0.3925
outh2=sigmoid(neth2)=1+e−neth21=1+e−0.39251=0.596884378
neto1=w5×outh1+w6×outh2+1∗b2=0.40×0.593269992+0.45∗0.596884378+1×0.60=1.105905967
outo1=sigmoid(neto1)=1+e−neto11=1+e−1.1059059671=0.75136507
neto2=w7×outh1+w8×outh2+1∗b2=0.50×0.593269992+0.55∗0.596884378+1×0.60=1.2249214
outo2=sigmoid(neto2)=1+e−neto21=1+e−1.22492141=0.772928465
calculating the total error
Etotal=∑21(target−ouput)2
target is desired output.
output is what we get through the neuron
(这里的1/2主要是为了求导的时候能够将指数消掉,仅此而已。因为后来修改权重的时候,也是要乘以学习率,所以这里是不影响的,而且还可以简化计算)

-
BackPropagation(BP) 反向传播

可视化图形如下:


接下来计算隐藏层参数的导数,可视化图形如下:





如有错误,欢迎交流指正