文章目录
1. 前言
网上关于神经网络的浅显介绍已经很多了,本文不再赘述,重点是神经网络的前后向传播过程的理论推导。
2. 模型基本情况说明
2.1 网络结构
在上图所示的网络结构中,每个节点都有一个编号,输入层共有三个特征分别为:
x
1
,
x
2
,
x
3
x_1,x_2,x_3
x1,x2,x3以及一个偏置项bias(图中未画出),隐藏层有四个神经元,第
j
j
j个神经元与第
i
i
i个特征连接的权重记为
w
j
i
w_{ji}
wji,隐藏层中每个神经元的输出分别记为
a
4
,
a
5
,
a
6
,
a
7
a_4,a_5,a_6,a_7
a4,a5,a6,a7,同样的,输出层为2个节点,第
k
k
k个节点与第
j
j
j个隐藏层的权重记为
w
k
j
w_{kj}
wkj。
2.2 激活函数
输入层与隐藏层,隐藏层与输出层的激活函数均采用
s
i
g
m
o
i
d
(
x
)
=
1
1
+
e
−
x
f
(
)
(2.1)
sigmoid(x)=\frac{1}{1+e^{-x}}f() \tag{2.1}
sigmoid(x)=1+e−x1f()(2.1)
- 函数图像
- 导数性质
y = s i g m o i d ( x ) y ′ = y ( 1 − y ) y=sigmoid(x)\\ y'=y(1-y) y=sigmoid(x)y′=y(1−y)
2.3 损失函数
取网络所有输出层节点的误差平方和作为目标函数:
E
=
1
2
∑
i
∈
o
u
t
p
u
t
s
(
t
i
−
y
i
)
2
(2.3)
E=\frac{1}{2}\sum_{i\in outputs}(t_i-y_i)^2 \tag{2.3}
E=21i∈outputs∑(ti−yi)2(2.3)
t
i
t_i
ti是第
i
i
i个节点的模拟值,
y
i
y_i
yi是第
i
i
i个节点的真实值。
为什么优化公式(3.4)需要使用梯度下降算法?
神经网络的非线性导致大多数我们感兴趣的代价函数变的非凸,意味着神经网络的训练通常使用迭代的基于梯度的优化,并不能保证全局收敛。
3. 算法流程
3.1 前向传播
-
普通形式
a 4 = s i g m o i d ( w T ⋅ x ) = s i g m o i d ( w 41 x 1 + w 42 x 2 + w 43 x 3 + w 4 b ) a 5 = s i g m o i d ( w 51 x 1 + w 52 x 2 + w 53 x 3 + w 5 b ) a 6 = s i g m o i d ( w 61 x 1 + w 62 x 2 + w 63 x 3 + w 6 b ) a 7 = s i g m o i d ( w 71 x 1 + w 72 x 2 + w 73 x 3 + w 7 b ) \begin{aligned} a_4&=sigmoid(\bold{w}^T\centerdot\bold{x})\\ &=sigmoid(w_{41}x_1+w_{42}x_2+w_{43}x_3+w_{4b})\\ a_5&=sigmoid(w_{51}x_1+w_{52}x_2+w_{53}x_3+w_{5b})\\ a_6&=sigmoid(w_{61}x_1+w_{62}x_2+w_{63}x_3+w_{6b})\\ a_7&=sigmoid(w_{71}x_1+w_{72}x_2+w_{73}x_3+w_{7b})\\ \end{aligned} a4a5a6a7=sigmoid(wT⋅x)=sigmoid(w41x1+w42x2+w43x3+w4b)=sigmoid(w51x1+w52x2+w53x3+w5b)=sigmoid(w61x1+w62x2+w63x3+w6b)=sigmoid(w71x1+w72x2+w73x3+w7b)
输出层节点计算结果分别为:
y 1 = s i g m o i d ( w 84 a 4 + w 85 a 5 + w 86 a 6 + w 87 a 7 + w 8 b ) y 2 = s i g m o i d ( w 94 a 4 + w 95 a 5 + w 96 a 6 + w 97 a 7 + w 9 b ) \begin{aligned} y_1&=sigmoid(w_{84}a_4+w_{85}a_5+w_{86}a_6+w_{87}a_7+w_{8b})\\ y_2&=sigmoid(w_{94}a_4+w_{95}a_5+w_{96}a_6+w_{97}a_7+w_{9b})\\ \end{aligned} y1y2=sigmoid(w84a4+w85a5+w86a6+w87a7+w8b)=sigmoid(w94a4+w95a5+w96a6+w97a7+w9b) -
矩阵形式
x = [ x 1 x 2 x 3 1 ] w 4 T = [ w 41 , w 42 , w 43 , w 4 b ] w 5 T = [ w 51 , w 52 , w 53 , w 5 b ] w 6 T = [ w 61 , w 62 , w 63 , w 6 b ] w 7 T = [ w 71 , w 72 , w 73 , w 7 b ] f = s i g m o i d \begin{aligned} \bold{x}&=\begin{bmatrix}x_1\\x_2\\x_3\\1\end{bmatrix}\\ \bold{w}_4^T&=[w_{41},w_{42},w_{43},w_{4b}]\\ \bold{w}_5^T&=[w_{51},w_{52},w_{53},w_{5b}]\\ \bold{w}_6^T&=[w_{61},w_{62},w_{63},w_{6b}]\\ \bold{w}_7^T&=[w_{71},w_{72},w_{73},w_{7b}]\\ f&=sigmoid \end{aligned} xw4Tw5Tw6Tw7Tf=⎣⎢⎢⎡x1x2x31⎦⎥⎥⎤=[w41,w42,w43,w4b]=[w51,w52,w53,w5b]=[w61,w62,w63,w6b]=[w71,w72,w73,w7b]=sigmoid
则隐藏层的输出值可以表示为:
a 4 = f ( w 4 T ⋅ x ) a 5 = f ( w 5 T ⋅ x ) a 6 = f ( w 6 T ⋅ x ) a 7 = f ( w 7 T ⋅ x ) \begin{aligned} a_4&=f(\bold{w_4}^T\centerdot\bold{x})\\ a_5&=f(\bold{w_5}^T\centerdot\bold{x})\\ a_6&=f(\bold{w_6}^T\centerdot\bold{x})\\ a_7&=f(\bold{w_7}^T\centerdot\bold{x}) \end{aligned} a4a5a6a7=f(w4T⋅x)=f(w5T⋅x)=f(w6T⋅x)=f(w7T⋅x)
则有:
a = [ a 4 a 5 a 6 a 7 ] , W = [ w 4 T w 5 T w 6 T w 7 T ] = [ w 41 , w 42 , w 43 , w 4 b w 51 , w 52 , w 53 , w 5 b w 61 , w 62 , w 63 , w 6 b w 71 , w 72 , w 73 , w 7 b ] , f ( [ x 1 x 2 x 3 . . . ] ) = [ f ( x 1 ) f ( x 2 ) f ( x 3 ) . . . ] \bold{a}= \begin{bmatrix} a_4 \\ a_5 \\ a_6 \\ a_7 \\ \end{bmatrix}, \qquad \bold{W}= \begin{bmatrix} \bold{w}_4^T \\ \bold{w}_5^T \\ \bold{w}_6^T \\ \bold{w}_7^T \\ \end{bmatrix}= \begin{bmatrix} w_{41},w_{42},w_{43},w_{4b} \\ w_{51},w_{52},w_{53},w_{5b} \\ w_{61},w_{62},w_{63},w_{6b} \\ w_{71},w_{72},w_{73},w_{7b} \\ \end{bmatrix} ,\qquad f( \begin{bmatrix} x_1\\ x_2\\ x_3\\ .\\ .\\ .\\ \end{bmatrix})= \begin{bmatrix} f(x_1)\\ f(x_2)\\ f(x_3)\\ .\\ .\\ .\\ \end{bmatrix} a=⎣⎢⎢⎡a4a5a6a7⎦⎥⎥⎤,W=⎣⎢⎢⎡w4Tw5Tw6Tw7T⎦⎥⎥⎤=⎣⎢⎢⎡w41,w42,w43,w4bw51,w52,w53,w5bw61,w62,w63,w6bw71,w72,w73,w7b⎦⎥⎥⎤,f(⎣⎢⎢⎢⎢⎢⎢⎡x1x2x3...⎦⎥⎥⎥⎥⎥⎥⎤)=⎣⎢⎢⎢⎢⎢⎢⎡f(x1)f(x2)f(x3)...⎦⎥⎥⎥⎥⎥⎥⎤
a = f ( W ⋅ x ) \bold{a}=f(\bold{W}\centerdot \bold{x}) a=f(W⋅x)
3.2 反向传播
3.2.1 结论
-
对于输出层节点
δ i = y ^ i ( 1 − y ^ i ) ( y i − y ^ i ) (3.1) \delta_i=\hat{y}_i(1-\hat{y}_i)(y_i-\hat{y}_i) \tag{3.1} δi=y^i(1−y^i)(yi−y^i)(3.1)
其中, δ i \delta_i δi是节点的误差项, y ^ i \hat{y}_i y^i是节点的输出值, y i y_i yi是样本对应于节点 i i i的目标值(真实值)。举个例子,根据上图,对于输出层节点8来说,它的输出值是 y ^ 1 \hat{y}_1 y^1,而样本的目标值是 y 1 y_1 y1,带入上面的公式得到节点8的误差项 δ 8 \delta_8 δ8应该是:
δ 8 = y ^ 1 ( 1 − y ^ 1 ) ( y 1 − y ^ 1 ) \delta_8=\hat{y}_1(1-\hat{y}_1)(y_1-\hat{y}_1) δ8=y^1(1−y^1)(y1−y^1) -
对于隐藏层节点
δ i = a i ( 1 − a i ) ∑ k ∈ o u t p u t s w k i δ k (3.2) \delta_i=a_i(1-a_i)\sum_{k\in{outputs}}w_{ki}\delta_k \tag{3.2} δi=ai(1−ai)k∈outputs∑wkiδk(3.2)
其中, a i a_i ai是节点的输出值, w k i w_{ki} wki是节点 i i i到它的下一层节点 k k k的连接的权重, d e l t a k delta_k deltak是节点 i i i的下一层节点 k k k的误差项。例如,对于隐藏层节点4来说,计算方法如下:
δ 4 = a 4 ( 1 − a 4 ) ( w 84 δ 8 + w 94 δ 9 ) \delta_4=a_4(1-a_4)(w_{84}\delta_8+w_{94}\delta_9) δ4=a4(1−a4)(w84δ8+w94δ9) -
权重的更新
w j i ← w j i + η δ j x j i (3.3) w_{ji}\gets w_{ji}+\eta\delta_jx_{ji} \tag{3.3} wji←wji+ηδjxji(3.3)
其中, w j i w_{ji} wji是节点 i i i到节点 j j j的权重, η \eta η是一个成为学习速率的常数, δ j \delta_j δj是节点 j j j的误差项, x j i x_{ji} xji是节点 i i i传递给节点 j j j的输入。例如,- 输出层:权重
w
84
w_{84}
w84的更新方法如下:
w 84 ← w 84 + η δ 8 a 4 δ 8 = y ^ 1 ( 1 − y ^ 1 ) ( y 1 − y ^ 1 ) w_{84}\gets w_{84}+\eta\delta_8 a_4\\ \delta_8=\hat{y}_1(1-\hat{y}_1)(y_1-\hat{y}_1) w84←w84+ηδ8a4δ8=y^1(1−y^1)(y1−y^1) - 隐藏层:权重
w
41
w_{41}
w41的更新方法如下:
w 41 ← w 41 + η δ 4 x 1 δ 4 = a 4 ( 1 − a 4 ) ( w 84 δ 8 + w 94 δ 9 ) w_{41}\gets w_{41}+\eta\delta_4 x_1\\ \delta_4=a_4(1-a_4)(w_{84}\delta_8+w_{94}\delta_9) w41←w41+ηδ4x1δ4=a4(1−a4)(w84δ8+w94δ9)
- 输出层:权重
w
84
w_{84}
w84的更新方法如下:
3.2.2 推导过程
观察网络结构可知,权重
w
j
i
w_{ji}
wji净能够通过节点
j
j
j的输入来影响整个网络的其他部分,假设
j
j
j节点的加权输入记为
n
e
t
j
net_j
netj,则有:
n
e
t
j
=
w
j
⋅
x
=
∑
i
w
j
i
x
j
i
(3.4)
\begin{aligned} net_j&=\bold{w_j}\centerdot\bold{x}\\ &=\sum_{i}{w_{ji}}x_{ji} \end{aligned} \tag{3.4}
netj=wj⋅x=i∑wjixji(3.4)
例如:
n
e
t
4
=
w
41
∗
x
41
+
w
42
∗
x
42
+
w
43
∗
x
43
+
w
4
b
∗
b
i
a
s
=
∑
i
=
1
4
w
4
i
x
j
i
\begin{aligned} net_4 =&w_{41}*x_{41}+w_{42}*x_{42}+w_{43}*x_{43}+w_{4b}*bias\\ =&\sum_{i=1}^4w_{4i}x_{ji} \end{aligned}
net4==w41∗x41+w42∗x42+w43∗x43+w4b∗biasi=1∑4w4ixji
上式中,
x
j
i
x_{ji}
xji是节点
j
j
j传递给节点
i
i
i的输入值,也就是节点
i
i
i的输出值,其实,
x
j
i
=
x
i
x_{ji}=x_i
xji=xi。即有
x
41
=
x
51
=
x
61
=
x
71
=
x
1
x_{41}=x_{51}=x_{61}=x_{71}=x_1
x41=x51=x61=x71=x1。
损失函数
E
E
E是
n
e
t
j
net_j
netj的函数,
n
e
t
j
net_j
netj是
w
j
i
w_{ji}
wji的函数,根据链式求导法则,有:
∂
E
∂
w
j
i
=
∂
E
∂
n
e
t
j
∂
n
e
t
j
∂
w
j
i
=
∂
E
∂
n
e
t
j
∂
∑
i
w
j
i
x
j
i
∂
w
j
i
=
∂
E
∂
n
e
t
j
x
j
i
(3.5)
\begin{aligned} \frac{\partial{E}}{\partial{w_{ji}}}&=\frac{\partial{E}}{\partial{net_j}}\frac{\partial{net_j}}{\partial{w_{ji}}}\\ &=\frac{\partial{E}}{\partial{net_j}}\frac{\partial{\sum_{i}{w_{ji}}x_{ji}}}{\partial{w_{ji}}}\\ &=\frac{\partial{E}}{\partial{net_j}}x_{ji} \end{aligned} \tag{3.5}
∂wji∂E=∂netj∂E∂wji∂netj=∂netj∂E∂wji∂∑iwjixji=∂netj∂Exji(3.5)
对于 ∂ E ∂ n e t j \frac{\partial{E}}{\partial{net_j}} ∂netj∂E的推导,需要区分输出层和隐藏层两种情况。
3.2.2.1 输出层
对于输出层来说,
n
e
t
j
net_j
netj仅能通过节点
j
j
j的输出值
y
^
j
\hat{y}_j
y^j来影响网络其它部分,也就是说
E
E
E是
y
^
j
\hat{y}_j
y^j的函数,而
y
^
j
\hat{y}_j
y^j是
n
e
t
j
net_j
netj的函数,其中。所以我们可以再次使用链式求导法则:
∂
E
d
∂
n
e
t
j
=
∂
E
∂
y
^
j
∂
y
^
j
∂
n
e
t
j
(3.6)
\begin{aligned} \frac{\partial{E_d}}{\partial{net_j}}&=\frac{\partial{E}}{\partial{\hat{y}_j}}\frac{\partial{\hat{y}_j}}{\partial{net_j}}\\ \end{aligned} \tag{3.6}
∂netj∂Ed=∂y^j∂E∂netj∂y^j(3.6)
所以,有:
∂
E
∂
y
^
j
=
∂
∂
y
^
j
1
2
∑
i
∈
o
u
t
p
u
t
s
(
y
i
−
y
^
i
)
2
=
∂
∂
y
^
j
1
2
(
y
j
−
y
^
j
)
2
=
−
(
y
j
−
y
^
j
)
(3.7)
\begin{aligned} \frac{\partial{E}}{\partial{\hat{y}_j}}&=\frac{\partial}{\partial{\hat{y}_j}}\frac{1}{2}\sum_{i\in outputs}(y_i-\hat{y}_i)^2\\ &=\frac{\partial}{\partial{\hat{y}_j}}\frac{1}{2}(y_j-\hat{y}_j)^2\\ &=-(y_j-\hat{y}_j) \end{aligned} \tag{3.7}
∂y^j∂E=∂y^j∂21i∈outputs∑(yi−y^i)2=∂y^j∂21(yj−y^j)2=−(yj−y^j)(3.7)
借助公式(2.3)有
∂
y
^
j
∂
n
e
t
j
=
y
^
j
(
1
−
y
^
j
)
\begin{aligned} \frac{\partial{\hat{y}_j}}{\partial{net_j}}&=\hat{y}_j(1-\hat{y}_j)\\ \end{aligned}
∂netj∂y^j=y^j(1−y^j)
所以:
∂
E
∂
n
e
t
j
=
−
(
y
j
−
y
^
j
)
y
^
j
(
1
−
y
^
j
)
(3.8)
\frac{\partial{E}}{\partial{net_j}}=-(y_j-\hat{y}_j)\hat{y}_j(1-\hat{y}_j) \tag{3.8}
∂netj∂E=−(yj−y^j)y^j(1−y^j)(3.8)
因为方向是沿梯度的负方向,所以令
δ
j
=
−
∂
E
d
∂
n
e
t
j
\delta_j=-\frac{\partial{E_d}}{\partial{net_j}}
δj=−∂netj∂Ed,所以第
j
j
j个节点的误差项为:
δ
j
=
(
y
j
−
y
^
j
)
y
^
j
(
1
−
y
^
j
)
(3.9)
\delta_j=(y_j-\hat{y}_j)\hat{y}_j(1-\hat{y}_j) \tag{3.9}
δj=(yj−y^j)y^j(1−y^j)(3.9)
结合公式(3.5)和公式(3.9),则节点
i
i
i与节点
j
j
j之间的权重更新为:
w
j
i
←
w
j
i
−
η
∂
E
∂
w
j
i
=
w
j
i
+
η
(
t
j
−
y
j
)
y
j
(
1
−
y
j
)
x
j
i
=
w
j
i
+
η
δ
j
x
j
i
(3.10)
\begin{aligned} w_{ji}&\gets w_{ji}-\eta\frac{\partial{E}}{\partial{w_{ji}}}\\ &=w_{ji}+\eta(t_j-y_j)y_j(1-y_j)x_{ji}\\ &=w_{ji}+\eta\delta_jx_{ji} \end{aligned} \tag{3.10}
wji←wji−η∂wji∂E=wji+η(tj−yj)yj(1−yj)xji=wji+ηδjxji(3.10)
w
84
←
w
84
+
η
δ
8
a
4
w_{84}\gets w_{84}+\eta\delta_8 a_4
w84←w84+ηδ8a4
3.2.2.2 隐藏层
首先,我们需要定义节点的所有直接下游节点的集合
D
o
w
n
s
t
r
e
a
m
(
j
)
Downstream(j)
Downstream(j)。例如,对于节点4来说,它的直接下游节点是节点8、节点9。可以看到
n
e
t
4
net_4
net4只能通过8,9影响再影响
E
E
E。设
n
e
t
k
net_k
netk:
a
84
,
a
94
a_{84}, a_{94}
a84,a94是节点
j
j
j:(4)的下游节点(8, 9)的输入,则
E
E
E是的
n
e
t
k
net_k
netk函数,而
n
e
t
k
net_k
netk是
n
e
t
j
net_j
netj的函数。因为有多个
n
e
t
k
net_k
netk,我们应用全导数公式,可以做出如下推导:
∂
E
∂
n
e
t
j
=
∑
k
∈
D
o
w
n
s
t
r
e
a
m
(
j
)
∂
E
∂
n
e
t
k
∂
n
e
t
k
∂
n
e
t
j
=
∑
k
∈
D
o
w
n
s
t
r
e
a
m
(
j
)
−
δ
k
∂
n
e
t
k
∂
n
e
t
j
=
∑
k
∈
D
o
w
n
s
t
r
e
a
m
(
j
)
−
δ
k
∂
n
e
t
k
∂
a
j
∂
a
j
∂
n
e
t
j
=
∑
k
∈
D
o
w
n
s
t
r
e
a
m
(
j
)
−
δ
k
w
k
j
∂
a
j
∂
n
e
t
j
=
∑
k
∈
D
o
w
n
s
t
r
e
a
m
(
j
)
−
δ
k
w
k
j
a
j
(
1
−
a
j
)
=
−
a
j
(
1
−
a
j
)
∑
k
∈
D
o
w
n
s
t
r
e
a
m
(
j
)
δ
k
w
k
j
\begin{aligned} \frac{\partial{E}}{\partial{net_j}}&=\sum_{k\in Downstream(j)}\frac{\partial{E}}{\partial{net_k}}\frac{\partial{net_k}}{\partial{net_j}}\\ &=\sum_{k\in Downstream(j)}-\delta_k\frac{\partial{net_k}}{\partial{net_j}}\\ &=\sum_{k\in Downstream(j)}-\delta_k\frac{\partial{net_k}}{\partial{a_j}}\frac{\partial{a_j}}{\partial{net_j}}\\ &=\sum_{k\in Downstream(j)}-\delta_kw_{kj}\frac{\partial{a_j}}{\partial{net_j}}\\ &=\sum_{k\in Downstream(j)}-\delta_kw_{kj}a_j(1-a_j)\\ &=-a_j(1-a_j)\sum_{k\in Downstream(j)}\delta_kw_{kj} \end{aligned}
∂netj∂E=k∈Downstream(j)∑∂netk∂E∂netj∂netk=k∈Downstream(j)∑−δk∂netj∂netk=k∈Downstream(j)∑−δk∂aj∂netk∂netj∂aj=k∈Downstream(j)∑−δkwkj∂netj∂aj=k∈Downstream(j)∑−δkwkjaj(1−aj)=−aj(1−aj)k∈Downstream(j)∑δkwkj
以权重
w
41
w_{41}
w41为例:
w
41
←
w
41
+
η
δ
4
x
1
δ
4
=
a
4
(
1
−
a
4
)
(
w
84
δ
8
+
w
94
δ
9
)
w_{41}\gets w_{41}+\eta\delta_4 x_1\\ \delta_4=a_4(1-a_4)(w_{84}\delta_8+w_{94}\delta_9)
w41←w41+ηδ4x1δ4=a4(1−a4)(w84δ8+w94δ9)
4. 参考文献
- 西瓜书
- 零基础入门深度学习
- 深度学习
- 模式识别