1.网络结构解析
(1)图示
(2)结构解析
图中结构一共有四层,最左边为输入层,中间两层为隐藏层,最右边为输出层。通常在说神经网络层数结构的时候不包含输入层,所以输入层也被称为第
0
0
0层。
上图为三层神经网络,图中的各参数代表的意义如下:
a
i
l
a_{i}^{l}
ail:第
l
l
l层第
i
i
i个神经元的输出。
z
i
l
z_{i}^{l}
zil:第
l
l
l层第
i
i
i个神经元的未激活输出。
w
i
j
l
w_{ij}^{l}
wijl:第
l
−
1
l-1
l−1层第
j
j
j个元素到第
l
l
l层第
i
i
i个元素神经元的权重。
b
i
l
b_{i}^{l}
bil:第
l
l
l层第
i
i
i个神经元的偏置。
σ
\sigma
σ:神经元的激活函数。
各个参数的关系如下:
a
i
l
=
σ
(
z
i
l
)
=
σ
(
w
i
j
l
a
j
l
−
1
+
b
i
l
)
a_{i}^{l}=\sigma (z_{i}^{l})=\sigma (w_{ij}^{l}a_{j}^{l-1}+b_{i}^{l})
ail=σ(zil)=σ(wijlajl−1+bil)
2.前向传播
(1)前向传播原理
神经网络一共有
L
L
L层,第
l
−
1
l-1
l−1层有
n
n
n个神经元,第
l
l
l层有
m
m
m个神经元,传播过程中,第
l
l
l层的输出为:
a
l
=
σ
(
z
l
)
=
σ
(
W
l
a
l
−
1
+
b
l
)
\mathbf{a}^{l}=\sigma (\mathbf{z}^{l})=\sigma (\mathbf{W}^{l}\mathbf{a}^{l-1}+\mathbf{b}^{l})
al=σ(zl)=σ(Wlal−1+bl)
其中:
a
l
,
z
l
,
b
l
∈
R
m
×
1
,
a
l
−
1
∈
R
n
×
1
,
W
l
∈
R
m
×
n
\mathbf{a}^{l},\mathbf{z}^{l},\mathbf{b}^{l}\in R^{m\times 1},\mathbf{a}^{l-1}\in R^{n\times 1},\mathbf{W}^{l}\in R^{m\times n}
al,zl,bl∈Rm×1,al−1∈Rn×1,Wl∈Rm×n
(2)前向传播流程
a.初始化输入层:
a
0
=
x
\mathbf{a}^{0}=\mathbf{x}
a0=x
b.根据以下公式计算每一层的输出直到第
L
L
L层:
a
l
=
σ
(
z
l
)
=
σ
(
W
l
a
l
−
1
+
b
l
)
\mathbf{a}^{l}=\sigma (\mathbf{z}^{l})=\sigma (\mathbf{W}^{l}\mathbf{a}^{l-1}+\mathbf{b}^{l})
al=σ(zl)=σ(Wlal−1+bl)
3.反向传播
(1)反向传播原理
反向传播的主要作用是更新权重系数
w
w
w和偏置
b
b
b。
输出层第
L
L
L层的损失函数为
J
J
J,则第输出层的损函数为:
J
(
a
L
)
=
J
(
σ
(
z
L
)
)
=
J
(
σ
(
W
L
a
L
−
1
+
b
L
)
)
J(\mathbf{a}^{L})=J(\sigma (\mathbf{z}^{L}))=J(\sigma (\mathbf{W}^{L}\mathbf{a}^{L-1}+\mathbf{b}^{L}))
J(aL)=J(σ(zL))=J(σ(WLaL−1+bL))
a.求输出层
L
L
L层的参数
损失函数分别对权重系数
W
L
\mathbf{W}^{L}
WL和偏置
b
L
\mathbf{b}^{L}
bL求梯度,分别为标量对矩阵求导和标量对向量求导,根据链式法则:
∂
J
(
a
L
)
∂
W
L
=
∂
J
(
a
L
)
∂
z
L
(
a
L
−
1
)
T
∂
J
(
a
L
)
∂
b
L
=
∂
J
(
a
L
)
∂
z
L
E
T
=
∂
J
(
a
L
)
∂
z
L
\frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{W}^{L}}=\frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{z}^{L}}(\mathbf{a}^{L-1})^{T}\\ \frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{b}^{L}}=\frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{z}^{L}}E^{T}=\frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{z}^{L}}
∂WL∂J(aL)=∂zL∂J(aL)(aL−1)T∂bL∂J(aL)=∂zL∂J(aL)ET=∂zL∂J(aL)
以上两式中都有公共项
∂
J
(
a
L
)
∂
z
L
\frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{z}^{L}}
∂zL∂J(aL),令其为
δ
L
\delta ^{L}
δL,则:
δ
L
=
∂
J
(
a
L
)
∂
z
L
=
∂
J
(
a
L
)
∂
a
L
⊙
σ
′
(
z
L
)
\delta ^{L}=\frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{z}^{L}}=\frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{a}^{L}}\odot \sigma ^{'}(z^{L})
δL=∂zL∂J(aL)=∂aL∂J(aL)⊙σ′(zL)
例如,当损失函数为平方损失时:
J
(
a
L
)
=
1
2
(
a
L
−
y
)
2
J(\mathbf{a}^{L})=\frac{1}{2}(\mathbf{a}^{L}-\mathbf{y})^{2}
J(aL)=21(aL−y)2
此时,公共项为:
δ
L
=
∂
J
(
a
L
)
∂
a
L
⊙
σ
′
(
z
L
)
=
(
a
L
−
y
)
⊙
σ
′
(
z
L
)
\delta ^{L}=\frac{\partial J(\mathbf{a}^{L})}{\partial \mathbf{a}^{L}}\odot \sigma ^{'}(z^{L})=(\mathbf{a}^{L}-\mathbf{y})\odot \sigma ^{'}(z^{L})
δL=∂aL∂J(aL)⊙σ′(zL)=(aL−y)⊙σ′(zL)
公共项中的各项参数都是已知的,因此可以直接求出,进而求得梯度,可得输出层的参数更新为:
W
L
=
W
L
−
λ
∂
J
∂
W
L
b
L
=
b
L
−
λ
∂
J
∂
b
L
\mathbf{W}^{L}=\mathbf{W}^{L}-\lambda \frac{\partial J}{\partial \mathbf{W}^{L}}\\ \mathbf{b}^{L}=\mathbf{b}^{L}-\lambda \frac{\partial J}{\partial \mathbf{b}^{L}}
WL=WL−λ∂WL∂JbL=bL−λ∂bL∂J
b.中间层
l
l
l层的参数
中间层的公共项
δ
l
\delta ^{l}
δl也被称作误差项,根据链式法则,可以得到第
l
l
l层和第
l
+
1
l+1
l+1层的误差项为关系如下:
δ
l
=
∂
J
∂
z
l
=
∂
a
l
∂
z
l
∂
z
l
+
1
∂
a
l
∂
J
∂
z
l
+
1
=
∂
a
l
∂
z
l
∂
z
l
+
1
∂
a
l
δ
l
+
1
\delta ^{l}=\frac{\partial J}{\partial \mathbf{z}^{l}}=\frac{\partial \mathbf{a}^{l}}{\partial \mathbf{z}^{l}}\frac{\partial \mathbf{z}^{l+1}}{\partial \mathbf{a}^{l}}\frac{\partial J}{\partial \mathbf{z}^{l+1}}=\frac{\partial \mathbf{a}^{l}}{\partial \mathbf{z}^{l}}\frac{\partial \mathbf{z}^{l+1}}{\partial \mathbf{a}^{l}}\delta ^{l+1}
δl=∂zl∂J=∂zl∂al∂al∂zl+1∂zl+1∂J=∂zl∂al∂al∂zl+1δl+1
其中:
a
l
=
σ
(
z
l
)
z
l
+
1
=
σ
(
W
l
+
1
a
l
+
b
l
+
1
)
\mathbf{a}^{l}=\sigma (\mathbf{z}^{l})\\ \mathbf{z}^{l+1}=\sigma (\mathbf{W}^{l+1}\mathbf{a}^{l}+\mathbf{b}^{l+1})
al=σ(zl)zl+1=σ(Wl+1al+bl+1)
可得:
∂
a
l
∂
z
l
=
∂
σ
(
z
l
)
∂
z
l
=
d
i
a
g
(
σ
′
(
z
l
)
)
∂
z
l
+
1
∂
a
l
=
(
W
l
+
1
)
T
\frac{\partial \mathbf{a}^{l}}{\partial \mathbf{z}^{l}}=\frac{\partial \sigma (\mathbf{z}^{l})}{\partial \mathbf{z}^{l}}=diag(\sigma ^{'}(\mathbf{z}^{l}))\\ \frac{\partial \mathbf{z}^{l+1}}{\partial \mathbf{a}^{l}}=(\mathbf{W}^{l+1})^{T}\\
∂zl∂al=∂zl∂σ(zl)=diag(σ′(zl))∂al∂zl+1=(Wl+1)T
综上,可得第
l
l
l层的误差项和第
l
+
1
l+1
l+1层的误差项关系为:
δ
l
=
(
W
l
+
1
)
T
δ
l
+
1
⊙
σ
′
(
z
l
)
\delta ^{l}=(\mathbf{W}^{l+1})^{T}\delta ^{l+1}\odot \sigma ^{'}(\mathbf{z}^{l})
δl=(Wl+1)Tδl+1⊙σ′(zl)
在上一节中已经求出了输出层的误差项,根据本节的公式,可以从后向前逐步求出隐藏层的误差项
δ
l
\delta ^{l}
δl,从而得到隐藏层的梯度:
∂
J
(
a
l
)
∂
W
l
=
∂
J
(
a
l
)
∂
z
l
(
a
l
−
1
)
T
=
δ
l
(
a
l
−
1
)
T
∂
J
(
a
l
)
∂
b
l
=
∂
J
(
a
l
)
∂
z
l
E
T
=
∂
J
(
a
l
)
∂
z
l
=
δ
l
\frac{\partial J(\mathbf{a}^{l})}{\partial \mathbf{W}^{l}}=\frac{\partial J(\mathbf{a}^{l})}{\partial \mathbf{z}^{l}}(\mathbf{a}^{l-1})^{T}=\delta ^{l}(\mathbf{a}^{l-1})^{T}\\ \frac{\partial J(\mathbf{a}^{l})}{\partial \mathbf{b}^{l}}=\frac{\partial J(\mathbf{a}^{l})}{\partial \mathbf{z}^{l}}E^{T}=\frac{\partial J(\mathbf{a}^{l})}{\partial \mathbf{z}^{l}}=\delta ^{l}
∂Wl∂J(al)=∂zl∂J(al)(al−1)T=δl(al−1)T∂bl∂J(al)=∂zl∂J(al)ET=∂zl∂J(al)=δl
(2)反向传播流程
a.通过前项传播,计算出输出值
a
L
\mathbf{a}^{L}
aL
b.计算出输出层误差项
δ
L
\delta ^{L}
δL
c.对于第
L
−
1
L-1
L−1层到第
1
1
1层的所有隐藏层
l
l
l:
W
l
=
W
l
−
λ
∂
J
∂
W
l
b
l
=
b
l
−
λ
∂
J
∂
b
l
\mathbf{W}^{l}=\mathbf{W}^{l}-\lambda \frac{\partial J}{\partial \mathbf{W}^{l}}\\ \mathbf{b}^{l}=\mathbf{b}^{l}-\lambda \frac{\partial J}{\partial \mathbf{b}^{l}}
Wl=Wl−λ∂Wl∂Jbl=bl−λ∂bl∂J