正向传播和反向传播数学推导
这里我们使用两个输入、1个隐含层(两个神经元)、两个输出,其中隐含层和输出层都有偏置,结构如下:
x表示输入,w为权重系数,z为隐藏层神经元的输入,a为隐藏层神经元的输出,output即为最终的输出,b为偏置。
注意,x1,x2表示一个样本的两个特征,而不是两个样本,也就是说每个样本都要独自走一遍上述的网络。
有的时候输出层后面还会加一个激活函数,就是下面这个样子:
中间的竖线即为激活函数。本文为了简化讲解过程,本文假设输出层后面 不加激活函数。
正向传播
(1)输入层–>隐藏层:
z
=
w
x
+
b
1
z = wx+b1
z=wx+b1
其中
z
、
z、
z、
w
、
w、
w、
x
x
x均为向量(知识点:线性代数矩阵乘法)。
(2)隐藏层:
隐藏层神经元内的竖线可以理解为激活函数,激活函数有很多种,常见的有ReLU函数、Leaky-ReLU函数等,我们用
f
f
f来表示,
a
=
f
(
z
)
a=f(z)
a=f(z)
a
a
a和
z
z
z均为向量。
(3)隐藏层到输出层:
o
u
t
p
u
t
=
w
a
+
b
2
output = wa+b2
output=wa+b2
注意,这里的矩阵
w
w
w和前面的矩阵
w
w
w值是不一样的
(4)计算损失函数
损失函数有很多种,这里我们以常见的绝对值损失函数为例,绝对值损失函数是计算预测值与目标值的差的绝对值:
E
(
Y
,
o
u
t
p
u
t
)
=
∣
Y
−
o
u
t
p
u
t
∣
E(Y,output) = |Y-output|
E(Y,output)=∣Y−output∣
output为样本预测值,Y为样本标签(即样本实际值),因为本文的神经网络有两个输出,所以损失函数可表示为:
E
(
Y
,
o
u
t
p
u
t
)
=
∣
y
1
−
o
u
t
p
u
t
1
∣
+
∣
y
2
−
o
u
t
p
u
t
2
∣
E(Y,output)=|y1-output1|+|y2-output2|
E(Y,output)=∣y1−output1∣+∣y2−output2∣
注意,此时计算的L是单一样本对应的损失值。
注意,每一个样本都有一个自己的损失值,计算 总损失函数时要将每个样本的损失函数值求和。
至此,正向传播的过程已经完毕。
反向传播(单一样本的反向传播过程)
反向传播是根据链式求导法则对参数(
w
w
w 和
b
b
b)进行更新。假设计算的某单一样本损失函数为E
(1)我们以w5的更新为例:
观察由w5计算到E的过程 (观察网络中的线的走向):(w5)–>(output1)–>E
所以总损失函数E对w5的链式求导即为:
∂
E
∂
w
5
=
∂
E
∂
o
u
t
p
u
t
1
⋅
∂
o
u
t
p
u
t
1
∂
w
5
\frac{\partial E}{\partial w5}=\frac{\partial E}{\partial output1} \cdot \frac{\partial output1}{\partial w5}
∂w5∂E=∂output1∂E⋅∂w5∂output1
有了这个损失函数E对w5的偏导值后,就可以更新w5了:
w
5
∗
=
w
5
−
η
⋅
∂
E
∂
w
5
w5^{*}=w5-\eta \cdot \frac{\partial E}{\partial w5}
w5∗=w5−η⋅∂w5∂E
同理,也可以对w6,w7,w8求偏导进行更新了。
(2)下面我们再以w1的更新为例:
观察由w1计算到E的过程 (观察网络中的线的走向),一共有两条路:(w1)–>(z1)–>(a1)–>(w5)–>(output1)–>E,
另外一条路:(w1)–>(z1)–>(a1)–>(w6)–>(output2)–>E,所以由链式求导法则:
∂
E
∂
w
1
=
∂
E
∂
o
u
t
p
u
t
1
∂
o
u
t
p
u
t
1
∂
w
5
∂
w
5
∂
a
1
∂
a
1
∂
z
1
∂
z
1
∂
w
1
+
∂
E
∂
o
u
t
p
u
t
2
∂
o
u
t
p
u
t
2
∂
w
6
∂
w
6
∂
a
1
∂
a
1
∂
z
1
∂
z
1
∂
w
1
\frac{\partial E}{\partial w1}=\frac{\partial E}{\partial output1}\frac{\partial output1}{\partial w5}\frac{\partial w5}{\partial a1}\frac{\partial a1}{\partial z1}\frac{\partial z1}{\partial w1}+\frac{\partial E}{\partial output2}\frac{\partial output2}{\partial w6}\frac{\partial w6}{\partial a1}\frac{\partial a1}{\partial z1}\frac{\partial z1}{\partial w1}
∂w1∂E=∂output1∂E∂w5∂output1∂a1∂w5∂z1∂a1∂w1∂z1+∂output2∂E∂w6∂output2∂a1∂w6∂z1∂a1∂w1∂z1
然后更新w1:
w
1
∗
=
w
1
−
η
⋅
∂
E
∂
w
1
w1^{*}=w1-\eta\cdot \frac{\partial E}{\partial w1}
w1∗=w1−η⋅∂w1∂E
η
\eta
η为学习率。
同理,可以对w2,w3,w4求偏导进行更新。
总结:反向求导过程中,观察网络中线的走向,进行链式求导(知识点:高等数学-链式求导法则)