前言
本文基于三层神经网络结构,对神经网络的反向传播算法进行简单的公式推导,旨在加深对反向传播算法原理的理解。如有错误,欢迎指正。
首先对公式推导中的一些常量和符号进行定义:
网络层 | 下标 | 神经元数量 |
---|---|---|
输入层 | i | l |
隐含层 | j | m |
输出层 | k | n |
简化结构图如下:
除此之外,权重记为w,如输入层到隐含层的权重为
w
i
j
w_{ij}
wij,隐含层到输出层的权重为
w
j
k
w_{jk}
wjk; 偏置记为b,如隐含层的偏置记为
b
j
b_j
bj,输出层的偏置记为
b
k
b_k
bk;误差记为E;u代表权重与输入的乘积,y代表输入u经过激励函数 f 而得到的结果,即 y = f(u) 。
定义 δ
=
∂
E
∂
y
⋅
∂
y
∂
u
=
∂
E
∂
u
= \frac{∂E}{∂y}·\frac{∂y}{∂u} = \frac{∂E}{∂u}
=∂y∂E⋅∂u∂y=∂u∂E
在反向传播开始之前,神经元的损失函数与激励函数已经确定,训练过程中只有权重 w 与 b 在动态变化,故对于输出层: ∂ E ∂ y k \frac{∂E}{∂y_k} ∂yk∂E与 ∂ y k ∂ u j k \frac{∂y_k}{∂u_{jk}} ∂ujk∂yk皆为定值,即 δ k = ∂ E ∂ y k ⋅ ∂ y k ∂ u k = ∂ E ∂ u k = 常量 δ_k = \frac{∂E}{∂y_k}·\frac{∂y_k}{∂u_k} = \frac{∂E}{∂u_k} = 常量 δk=∂yk∂E⋅∂uk∂yk=∂uk∂E=常量
一、输出层梯度推导
注意:图中的u_k代表 u k u_k uk,y_k代表 y k y_k yk
权重
输出层梯度推导过程如下:
∂
E
∂
w
j
k
=
∂
E
∂
y
k
⋅
∂
y
k
∂
w
j
k
=
∂
E
∂
y
k
⋅
∂
y
k
∂
u
k
⋅
∂
u
k
∂
w
j
k
=
δ
k
⋅
∂
u
k
∂
w
j
k
=
δ
k
⋅
∂
(
∑
q
=
1
m
y
q
w
q
k
+
b
k
)
∂
w
j
k
=
δ
k
⋅
y
j
\frac{∂E}{∂w_{jk}} = \frac{∂E}{∂y_k}·\frac{∂y_k}{∂w_{jk}} = \frac{∂E}{∂y_k}·\frac{∂y_k}{∂u_k}·\frac{∂u_k}{∂w_{jk}} = δ_k·\frac{∂u_k}{∂w_{jk}} \\ = δ_k · \frac{∂(\sum_{q=1}^m y_q w_{qk}+b_k)}{∂w_{jk}} = δ_k·y_j
∂wjk∂E=∂yk∂E⋅∂wjk∂yk=∂yk∂E⋅∂uk∂yk⋅∂wjk∂uk=δk⋅∂wjk∂uk=δk⋅∂wjk∂(∑q=1myqwqk+bk)=δk⋅yj
偏置
∂ E ∂ b k = ∂ E ∂ y k ⋅ ∂ y k ∂ b k = ∂ E ∂ y k ⋅ ∂ y k ∂ u k ⋅ ∂ u k ∂ b k = δ k ⋅ ∂ u k ∂ b k = δ k ⋅ ∂ ( ∑ q = 1 m y q w q k + b k ) ∂ b k = δ k ⋅ 1 = δ k \frac{∂E}{∂b_k} = \frac{∂E}{∂y_k}·\frac{∂y_k}{∂b_k} = \frac{∂E}{∂y_k}·\frac{∂y_k}{∂u_k}·\frac{∂u_k}{∂b_k} = δ_k·\frac{∂u_k}{∂b_k} \\ = δ_k· \frac{∂(\sum_{q=1}^m y_q w_{qk}+b_k)}{∂b_k} = δ_k· 1 = δ_k ∂bk∂E=∂yk∂E⋅∂bk∂yk=∂yk∂E⋅∂uk∂yk⋅∂bk∂uk=δk⋅∂bk∂uk=δk⋅∂bk∂(∑q=1myqwqk+bk)=δk⋅1=δk
( δ k δ_k δk在前言中已知为常量)
二、隐含层梯度推导
权重
∂
E
∂
w
i
j
=
∂
E
∂
y
j
⋅
∂
y
j
∂
w
i
j
=
∂
E
∂
y
j
⋅
∂
y
j
∂
u
j
⋅
∂
u
j
∂
w
i
j
=
δ
j
⋅
∂
u
j
∂
w
i
j
=
δ
j
⋅
∂
u
j
∂
w
i
j
=
δ
j
⋅
∂
(
∑
p
=
1
l
y
p
w
p
j
+
b
j
)
∂
w
i
j
=
δ
j
⋅
y
i
\frac{∂E}{∂w_{ij}} = \frac{∂E}{∂y_j}·\frac{∂y_j}{∂w_{ij}} = \frac{∂E}{∂y_j}·\frac{∂y_j}{∂u_j}·\frac{∂u_j}{∂w_{ij}} = δ_j·\frac{∂u_j}{∂w_{ij}} \\ = δ_j·\frac{∂u_j}{∂w_{ij}} = δ_j· \frac{∂(\sum_{p=1}^l y_p w_{pj}+b_j)}{∂w_{ij}} = δ_j·y_i
∂wij∂E=∂yj∂E⋅∂wij∂yj=∂yj∂E⋅∂uj∂yj⋅∂wij∂uj=δj⋅∂wij∂uj=δj⋅∂wij∂uj=δj⋅∂wij∂(∑p=1lypwpj+bj)=δj⋅yi
其中,
δ
j
=
∂
E
∂
u
j
=
∂
E
∂
y
j
⋅
∂
y
j
u
j
=
(
∑
k
=
1
n
∂
E
∂
u
k
⋅
∂
u
k
∂
y
j
)
⋅
∂
y
j
∂
u
j
=
(
∑
k
=
1
n
δ
k
⋅
∂
u
k
∂
y
j
)
⋅
∂
y
j
∂
u
j
=
(
∑
k
=
1
n
δ
k
⋅
∂
(
y
1
w
1
k
+
y
2
w
2
k
+
.
.
.
+
y
n
w
n
k
+
b
k
)
∂
y
j
)
⋅
∂
y
j
∂
u
j
=
(
∑
k
=
1
n
δ
k
⋅
w
j
k
)
⋅
∂
y
j
∂
u
j
δ_j = \frac{∂E}{∂u_j}= \frac{∂E}{∂y_j}·\frac{∂y_j}{u_j} =(\sum_{k=1}^n\frac{∂E}{∂u_k}·\frac{∂u_k}{∂y_j})·\frac{∂y_j}{∂u_j} \\ = ( \sum_{k=1}^n δ_k· \frac{∂u_k}{∂y_j}) · \frac{∂y_j}{∂u_j} \\ = (\sum_{k=1}^n δ_k ·\frac{∂( y_1w_{1k} + y_2 w_{2k}+...+y_n w_{nk}+b_k)}{∂y_j}) · \frac{∂y_j}{∂u_j} \\ =( \sum_{k=1}^n δ_k · w_{jk}) · \frac{∂y_j}{∂u_j}
δj=∂uj∂E=∂yj∂E⋅uj∂yj=(k=1∑n∂uk∂E⋅∂yj∂uk)⋅∂uj∂yj=(k=1∑nδk⋅∂yj∂uk)⋅∂uj∂yj=(k=1∑nδk⋅∂yj∂(y1w1k+y2w2k+...+ynwnk+bk))⋅∂uj∂yj=(k=1∑nδk⋅wjk)⋅∂uj∂yj
注意:将求和公式的下标记为k是为了直接与 k 层相关联,使表达式更清晰。
至此,求得
∂
E
∂
w
i
j
=
δ
j
⋅
y
i
=
(
(
∑
k
=
1
n
δ
k
⋅
w
j
k
)
⋅
∂
y
j
∂
u
j
)
⋅
y
i
\frac{∂E}{∂w_{ij}} = δ_j·y_i = ( (\sum_{k=1}^n δ_k · w_{jk} )· \frac{∂y_j}{∂u_j}) · y_i
∂wij∂E=δj⋅yi=((k=1∑nδk⋅wjk)⋅∂uj∂yj)⋅yi
偏置
∂ E ∂ b j = ∂ E ∂ u j ⋅ ∂ u j ∂ b j = δ j ⋅ ∂ ( y 1 w 1 j + y 2 w 2 j + . . . + y l w l j + b j ) ∂ b j = δ j ⋅ 1 = δ j = ( ∑ k = 1 n δ k ⋅ w j k ) ⋅ ∂ y j ∂ u j \frac{∂E}{∂b_j} = \frac{∂E}{∂u_j}·\frac{∂u_j}{∂b_j} = δ_j · \frac{∂(y_1w_{1j}+y_2w_{2j}+...+y_lw_{lj}+b_j)}{∂b_j}=δ_j ·1 = δ_j \\ = ( \sum_{k=1}^n δ_k · w_{jk}) · \frac{∂y_j}{∂u_j} ∂bj∂E=∂uj∂E⋅∂bj∂uj=δj⋅∂bj∂(y1w1j+y2w2j+...+ylwlj+bj)=δj⋅1=δj=(k=1∑nδk⋅wjk)⋅∂uj∂yj