一.BP神经网络简介
1.发展背景
??
B
P
(
B
a
c
k
w
a
r
d
P
r
o
p
a
g
a
t
i
o
n
)
BP(Backward Propagation)
BP(BackwardPropagation)神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,是深度学习算法的基础。感知器的结构简单,只有输入层和输出层,不能解决非线性问题的,能够求解非线性问题的网络应该具有隐藏层,但是对隐藏层神经元的学习规则还没有完善。感知器的学习规则,其权值的调整取决于期望输出与实际输出之差:
Δ
w
i
=
η
(
t
?
y
)
x
i
\Delta w_i = \eta(t-y)x_i
Δwi?=η(t?y)xi?,但是对于各个隐藏层的节点来说,不存在已知的期望输出,因而该学习规则不能用于隐藏层的权值调整,这时候就要用到
B
P
BP
BP 神经网络的学习规则来调整隐藏层的权值。
2.算法思想
??
B
P
BP
BP 算法学习过程由信号的正向传播和误差的反向传播两个过程组成。 ??正向传播时,把样本的特征从输入层进行输入,信号经各个隐藏层处理后,通过逐层计算,最后从输出层传出。反向传播时,对于网络的期望输出与实际输出之间的误差,把误差从最后一层逐层反传,从而获得各个层的误差学习信号,再根据误差学习信号来修正各个层神经元的权值。 ??这种信号正向传播与误差反向传播,然后各个层调整权值的过程是周而复始的进行的,权值不断调整的过程也就是网络训练学习的过程。此过程直到网络输出误差减小到预先设置的阈值以下,或者是达到预先设置的最大训练次数就算学习结束。
3.BP网络模型
??不同于简单的感知器结构,
B
P
BP
BP 算法是在Delta学习规则基础上进一步的推广,是对多层神经网络定义了计算流程和代价函数,然后使用梯度下降法来最小化代价函数。
B
P
BP
BP 网络由输入层、输出层、隐藏层、组成,下面为简单神经网络示意图。
4.BP神经网络更深的意义
??在一定范围内,使用更“深”的网络模型,主要由以下两点原因。
二.Delta学习规则
??
δ
(
D
e
l
t
a
)
δ (Delta)
δ(Delta) 学习规则是一种利用梯度下降法来最小化代价函数的学习规则,也可以称为连续感知器学习规则,本质就是利用梯度下降法来最小化代价函数,
B
P
BP
BP 网络的训练就是采用这种规则。
??假设样本的代价函数为均方差
M
S
E
MSE
MSE:
E
=
1
2
(
T
?
Y
)
2
=
1
2
(
t
?
y
)
2
=
1
2
(
t
?
f
(
W
X
)
)
2
E = \frac{1}{2}(T-Y)^2 = \frac{1}{2}(t-y)^2 = \frac{1}{2}(t-f(WX))^2
E=21?(T?Y)2=21?(t?y)2=21?(t?f(WX))2 ??误差
E
E
E 是关于
W
W
W 的函数,使用梯度下降法来最小化
E
E
E 的值,权值矩阵变化
Δ
W
\Delta W
ΔW 等于负学习率
?
η
-\eta
?η 乘以
E
E
E 对
W
W
W 求导:
矩
阵
形
式
:
Δ
W
=
?
η
E
′
=
η
X
T
(
t
?
y
)
f
′
(
W
X
)
=
η
X
T
δ
矩阵形式:\Delta W = -\eta E' = \eta X^T(t-y)f'(WX) = \eta X^T \delta
矩阵形式:ΔW=?ηE′=ηXT(t?y)f′(WX)=ηXTδ
代
数
形
式
:
Δ
w
i
=
?
η
E
′
=
η
x
i
(
t
?
y
)
f
′
(
W
X
)
=
η
x
i
δ
代数形式:\Delta w_i = -\eta E' = \eta x_i(t-y)f'(WX) = \eta x_i \delta
代数形式:Δwi?=?ηE′=ηxi?(t?y)f′(WX)=ηxi?δ
??其中
δ
\delta
δ 表示
(
t
?
y
)
f
′
(
W
X
)
(t-y)f'(WX)
(t?y)f′(WX),没有特殊意义,
f
′
(
W
X
)
f'(WX)
f′(WX) 表示激活函数求导的值。
??回顾一下感知器,其学习规则为
Δ
w
i
=
η
(
t
?
y
)
x
i
\Delta w_i = \eta (t-y)x_i
Δwi?=η(t?y)xi?,不难发现对应的
f
′
(
W
X
)
=
1
f'(WX)=1
f′(WX)=1 ,是因为感知器中最常用的激活函数为
y
=
x
y=x
y=x 线性激活函数。那么对于复杂的深层次的
B
P
BP
BP 神经网络,采取什么样的激活函数才合适呢?
三.激活函数
??激活函数(Activate Function)是在神经网络的神经元上运行的函数,功能类似于生物神经元信号在轴突上进行的线性或非线性的变化,负责将神经网络神经元的输入以某种形式映射到输出端。
1.激活函数的意义
- 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
- 激活函数可以引入非线性因素。如果不使用激活函数,输出信号只是一个简单的线性函数,线性功能从数据中学习复杂函数映射的能力很小,如果没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如语音、图像、视频等。
- 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
2.非线性激活函数的意义
??神经网络中的激活函数一般都是非线性的,主要有两个原因。
- 假设网络中全都是线性元件,那么组合之后依然是线性的,与一个单独的线性网络毫无区别,这样神经网络就无法逼近任意函数了。
- 使用非线性激活函数,可以使网络更加强大,可以学习更加复杂的事物,更加复杂的数据,可以使输入与输出之间生成非线性映射。
4.激活函数的选取
- 隐藏层:优先
R
e
l
u
Relu
Relu,其次
L
e
a
k
y
R
e
l
u
LeakyRelu
LeakyRelu,可以
t
a
n
h
tanh
tanh,不能使用
s
i
g
m
o
i
d
sigmoid
sigmoid
- 输出层:
- 二分类:
s
i
g
m
o
i
d
sigmoid
sigmoid
- 多分类:
s
o
f
t
m
a
x
softmax
softmax
- 回归:线性
- 其他:
t
a
n
h
tanh
tanh
- 遇到死神经元问题:使用
L
e
a
k
y
R
e
l
u
LeakyRelu
LeakyRelu
四.BP网络模型和公式推导
1.简单网络模型计算
??假设现在有如下所示的一个BP网络结构:
网络的参数如下:
-
X
=
(
x
0
,
x
1
,
x
2
,
.
.
.
,
x
n
)
X=(x_0,x_1,x_2,...,x_n)
X=(x0?,x1?,x2?,...,xn?):输入向量,
x
0
=
1
x_0=1
x0?=1 表示输入层的偏置。
-
Y
1
=
(
y
0
1
,
y
1
1
,
y
2
1
,
.
.
.
,
y
m
1
)
Y^1=(y_0^1,y_1^1,y_2^1,...,y_m^1)
Y1=(y01?,y11?,y21?,...,ym1?):隐藏层的输出向量,
y
0
1
=
1
y_0^1=1
y01?=1 表示隐藏层的偏置。
-
Y
2
=
(
y
1
2
,
y
2
2
,
.
.
.
,
y
l
2
)
Y^2=(y_1^2,y_2^2,...,y_l^2)
Y2=(y12?,y22?,...,yl2?):输出层的输出向量。
-
T
=
(
t
1
,
t
2
,
.
.
.
,
t
l
)
T=(t_1,t_2,...,t_l)
T=(t1?,t2?,...,tl?):真实期望输出。
-
W
1
W^1
W1:输入层到隐藏层的权重;
W
i
j
1
W_{ij}^1
Wij1?:
W
1
W^1
W1矩阵中第
i
i
i 行第
j
j
j 列的权值。
-
W
2
W^2
W2:隐藏层到输出层的权重;
W
j
k
2
W_{jk}^2
Wjk2?:
W
2
W^2
W2矩阵中第
j
j
j 行第
k
k
k 列的权值。
-
f
f
f:激活函数。
再定义:
-
n
e
t
1
net^1
net1:隐藏层中权值
W
1
W^1
W1 乘以输入信号
X
X
X 的总和。
-
n
e
t
j
1
net_j^1
netj1?:隐藏层中第
j
j
j 个神经元得到的输入信号
X
X
X 的总和。
-
n
e
t
2
net^2
net2:输出层中权值
W
2
W^2
W2 乘以隐藏信号
Y
1
Y^1
Y1 的总和。
-
n
e
t
k
2
net_k^2
netk2?:输出层中第
k
k
k 个神经元得到的输入信号的总和。
可以得出:
-
对于隐藏层:
-
n
e
t
j
1
=
∑
i
=
0
n
w
i
j
1
x
i
j
=
1
,
2
,
.
.
.
,
m
net_j^1=\sum_{i=0}^{n}w_{ij}^1x_i \quad j=1,2,...,m
netj1?=∑i=0n?wij1?xi?j=1,2,...,m
-
y
j
1
=
f
(
n
e
t
j
1
)
j
=
1
,
2
,
.
.
.
,
m
y_j^1=f(net_j^1) \quad j=1,2,...,m
yj1?=f(netj1?)j=1,2,...,m
-
对于输出层:
-
n
e
t
k
2
=
∑
j
=
0
m
w
j
k
2
y
j
1
k
=
1
,
2
,
.
.
.
,
l
net_k^2=\sum_{j=0}^{m}w_{jk}^2y_j^1 \quad k=1,2,...,l
netk2?=∑j=0m?wjk2?yj1?k=1,2,...,l
-
y
k
2
=
f
(
n
e
t
k
2
)
k
=
1
,
2
,
.
.
.
,
l
y_k^2=f(net_k^2) \quad k=1,2,...,l
yk2?=f(netk2?)k=1,2,...,l
2.算法推导
??(1).当网络输出与期望输出不同时,会存在输出误差
E
E
E。假定单个样本的均方误差为:
E
=
1
2
(
T
?
Y
2
)
2
=
1
2
∑
k
=
1
l
(
t
k
?
y
k
2
)
2
(
注
意
Y
2
和
y
k
2
是
上
文
网
络
模
型
计
算
中
的
含
义
,
并
不
是
平
方
的
意
思
)
E=\frac{1}{2}(T-Y^2)^2=\frac{1}{2}\sum_{k=1}^{l}(t_k-y_k^2)^2 \\(注意Y^2和y_k^2是上文网络模型计算中的含义,并不是平方的意思)
E=21?(T?Y2)2=21?k=1∑l?(tk??yk2?)2(注意Y2和yk2?是上文网络模型计算中的含义,并不是平方的意思)??(2).将以上误差公式展开到隐藏层:
E
=
1
2
∑
k
=
1
l
(
t
k
?
f
(
n
e
t
k
2
)
)
2
=
1
2
∑
k
=
1
l
(
t
k
?
f
(
∑
j
=
0
m
w
j
k
2
y
j
1
)
)
2
E=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(net_k^2))^2=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2y_j^1))^2
E=21?k=1∑l?(tk??f(netk2?))2=21?k=1∑l?(tk??f(j=0∑m?wjk2?yj1?))2??(3).再进一步展开到输入层:
E
=
1
2
∑
k
=
1
l
(
t
k
?
f
(
∑
j
=
0
m
w
j
k
2
f
(
n
e
t
j
1
)
)
)
2
=
1
2
∑
k
=
1
l
(
t
k
?
f
(
∑
j
=
0
m
w
j
k
2
f
(
∑
i
=
0
n
w
i
j
1
x
i
)
)
)
2
E=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2f(net_j^1)))^2=\\\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2f(\sum_{i=0}^{n}w_{ij}^1x_i)))^2
E=21?k=1∑l?(tk??f(j=0∑m?wjk2?f(netj1?)))2=21?k=1∑l?(tk??f(j=0∑m?wjk2?f(i=0∑n?wij1?xi?)))2??从公式(6)可以看出,网络的误差
E
E
E 和 网络各层的权值
w
i
j
1
,
w
i
j
2
w_{ij}^1,w_{ij}^2
wij1?,wij2? 相关,因此调整各层的权值就可以改变误差的值。调整的目的是得到较小的误差
E
E
E,所以可以采用梯度下降法来进行调整,根据梯度下降法可以得到:
Δ
w
i
j
1
=
?
η
?
E
?
w
i
j
1
i
=
0
,
1
,
.
.
.
,
n
;
j
=
1
,
2
,
.
.
.
,
m
\Delta w_{ij}^1=-\eta\frac{\partial E}{\partial w_{ij}^1}\\i=0,1,...,n;j=1,2,...,m
Δwij1?=?η?wij1??E?i=0,1,...,n;j=1,2,...,m
Δ
w
j
k
2
=
?
η
?
E
?
w
j
k
2
j
=
0
,
1
,
.
.
.
,
m
;
k
=
1
,
2
,
.
.
.
,
l
\Delta w_{jk}^2=-\eta\frac{\partial E}{\partial w_{jk}^2}\\j=0,1,...,m;k=1,2,...,l
Δwjk2?=?η?wjk2??E?j=0,1,...,m;k=1,2,...,l??(4).由于
n
e
t
j
1
=
∑
i
=
0
n
w
i
j
1
x
i
,
n
e
t
k
2
=
∑
j
=
0
m
w
j
k
2
y
j
1
net_j^1=\sum_{i=0}^{n}w_{ij}^1x_i,net_k^2=\sum_{j=0}^{m}w_{jk}^2y_j^1
netj1?=∑i=0n?wij1?xi?,netk2?=∑j=0m?wjk2?yj1?,根据微积分链式法则可以得到:
对
于
隐
藏
层
:
Δ
w
i
j
1
=
?
η
?
E
?
n
e
t
j
1
?
n
e
t
j
1
?
w
i
j
1
=
?
η
?
E
?
n
e
t
j
1
x
i
对于隐藏层:\Delta w_{ij}^1=-\eta\frac{\partial E}{\partial net_j^1}\frac{\partial net_j^1}{\partial w_{ij}^1}=-\eta\frac{\partial E}{\partial net_j^1}x_i
对于隐藏层:Δwij1?=?η?netj1??E??wij1??netj1??=?η?netj1??E?xi?
对
于
输
出
层
:
Δ
w
j
k
2
=
?
η
?
E
?
n
e
t
k
2
?
n
e
t
k
2
?
w
j
k
2
=
?
η
?
E
?
n
e
t
k
2
y
j
1
对于输出层:\Delta w_{jk}^2=-\eta\frac{\partial E}{\partial net_k^2}\frac{\partial net_k^2}{\partial w_{jk}^2}=-\eta\frac{\partial E}{\partial net_k^2}y_j^1
对于输出层:Δwjk2?=?η?netk2??E??wjk2??netk2??=?η?netk2??E?yj1???(5).由于
y
j
1
=
f
(
n
e
t
j
1
)
,
y
k
2
=
f
(
n
e
t
k
2
)
y_j^1=f(net_j^1),y_k^2=f(net_k^2)
yj1?=f(netj1?),yk2?=f(netk2?),根据微积分链式法则可以得到:
对
于
隐
藏
层
:
Δ
w
i
j
1
=
?
η
?
E
?
y
j
1
?
y
j
1
?
n
e
t
j
1
x
i
=
?
η
?
E
?
y
j
1
f
′
(
n
e
t
j
1
)
x
i
对于隐藏层:\Delta w_{ij}^1=-\eta\frac{\partial E}{\partial y_j^1}\frac{\partial y_j^1}{\partial net_j^1}x_i=-\eta\frac{\partial E}{\partial y_j^1}f'(net_j^1)x_i
对于隐藏层:Δwij1?=?η?yj1??E??netj1??yj1??xi?=?η?yj1??E?f′(netj1?)xi?
对
于
输
出
层
:
Δ
w
j
k
2
=
?
η
?
E
?
y
k
2
?
y
k
2
?
n
e
t
k
2
y
j
1
=
?
η
?
E
?
y
k
2
f
′
(
n
e
t
k
2
)
y
j
1
对于输出层:\Delta w_{jk}^2=-\eta\frac{\partial E}{\partial y_k^2}\frac{\partial y_k^2}{\partial net_k^2}y_j^1=-\eta\frac{\partial E}{\partial y_k^2}f'(net_k^2)y_j^1
对于输出层:Δwjk2?=?η?yk2??E??netk2??yk2??yj1?=?η?yk2??E?f′(netk2?)yj1???(6).由于
E
=
1
2
∑
k
=
1
l
(
t
k
?
y
k
2
)
2
E=\frac{1}{2}\sum_{k=1}^{l}(t_k-y_k^2)^2
E=21?∑k=1l?(tk??yk2?)2,对于输出层来说:
Δ
w
j
k
2
=
?
η
?
E
?
y
k
2
f
′
(
n
e
t
k
2
)
y
j
1
=
η
(
t
k
?
y
k
2
)
f
′
(
n
e
t
k
2
)
y
j
1
\Delta w_{jk}^2=-\eta\frac{\partial E}{\partial y_k^2}f'(net_k^2)y_j^1\\=\eta(t_k-y_k^2)f'(net_k^2)y_j^1
Δwjk2?=?η?yk2??E?f′(netk2?)yj1?=η(tk??yk2?)f′(netk2?)yj1???(7).由于
E
=
1
2
∑
k
=
1
l
(
t
k
?
y
k
2
)
2
,
n
e
t
k
2
=
∑
j
=
0
m
w
j
k
2
y
j
1
,
y
k
2
=
f
(
n
e
t
k
2
)
E=\frac{1}{2}\sum_{k=1}^{l}(t_k-y_k^2)^2,net_k^2=\sum_{j=0}^{m}w_{jk}^2y_j^1,y_k^2=f(net_k^2)
E=21?∑k=1l?(tk??yk2?)2,netk2?=∑j=0m?wjk2?yj1?,yk2?=f(netk2?),对于隐藏层来说:
?
E
?
y
j
1
=
?
1
2
∑
k
=
1
l
(
t
k
?
f
(
∑
j
=
0
m
w
j
k
2
y
j
1
)
)
2
?
y
j
1
=
?
∑
k
=
1
l
(
t
k
?
f
(
∑
j
=
0
m
w
j
k
2
y
j
1
)
)
f
′
(
w
j
k
2
y
j
1
)
w
j
k
2
=
?
∑
k
=
1
l
(
t
k
?
y
k
2
)
f
′
(
n
e
t
k
2
)
w
j
k
2
\frac{\partial E}{\partial y_j^1}=\frac{\partial\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2y_j^1))^2}{\partial y_j^1}\\=- \sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2y_j^1))f'(w_{jk}^2y_j^1)w_{jk}^2\\=-\sum_{k=1}^{l}(t_k-y_k^2)f'(net_k^2)w_{jk}^2
?yj1??E?=?yj1??21?∑k=1l?(tk??f(∑j=0m?wjk2?yj1?))2?=?k=1∑l?(tk??f(j=0∑m?wjk2?yj1?))f′(wjk2?yj1?)wjk2?=?k=1∑l?(tk??yk2?)f′(netk2?)wjk2???代入公式(11)得到:
Δ
w
i
j
1
=
η
(
∑
k
=
1
l
(
t
k
?
y
k
2
)
f
′
(
n
e
t
k
2
)
w
j
k
2
)
f
′
(
n
e
t
j
1
)
x
i
\Delta w_{ij}^1=\eta(\sum_{k=1}^{l}(t_k-y_k^2)f'(net_k^2)w_{jk}^2)f'(net_j^1)x_i
Δwij1?=η(k=1∑l?(tk??yk2?)f′(netk2?)wjk2?)f′(netj1?)xi???(8).接下来便是激活函数求导的计算 ??当激活函数为
s
i
g
m
o
i
d
sigmoid
sigmoid 时,其导数为
f
′
(
t
)
=
f
(
t
)
(
1
?
f
(
t
)
)
f'(t)=f(t)(1-f(t))
f′(t)=f(t)(1?f(t)),因此:
f
′
(
n
e
t
k
2
)
=
y
k
2
(
1
?
y
k
2
)
f
′
(
n
e
t
j
1
)
=
y
j
1
(
1
?
y
j
1
)
f'(net_k^2)=y_k^2(1-y_k^2)\\f'(net_j^1)=y_j^1(1-y_j^1)
f′(netk2?)=yk2?(1?yk2?)f′(netj1?)=yj1?(1?yj1?)??(9).将公式(16)代入公式(13)和(15)可得:
Δ
w
j
k
2
=
η
(
t
k
?
y
k
2
)
y
k
2
(
1
?
y
k
2
)
y
j
1
\Delta w_{jk}^2=\eta(t_k-y_k^2)y_k^2(1-y_k^2)y_j^1
Δwjk2?=η(tk??yk2?)yk2?(1?yk2?)yj1?
Δ
w
i
j
1
=
η
(
∑
k
=
1
l
(
t
k
?
y
k
2
)
y
k
2
(
1
?
y
k
2
)
w
j
k
2
)
y
j
1
(
1
?
y
j
1
)
x
i
\Delta w_{ij}^1=\eta(\sum_{k=1}^{l}(t_k-y_k^2)y_k^2(1-y_k^2)w_{jk}^2)y_j^1(1-y_j^1)x_i
Δwij1?=η(k=1∑l?(tk??yk2?)yk2?(1?yk2?)wjk2?)yj1?(1?yj1?)xi???令
δ
k
2
=
(
t
k
?
y
k
2
)
y
k
2
(
1
?
y
k
2
)
\delta _k^2=(t_k-y_k^2)y_k^2(1-y_k^2)
δk2?=(tk??yk2?)yk2?(1?yk2?),称其为学习信号,则公式(22)简化为:
Δ
w
i
j
1
=
η
(
∑
k
=
1
l
δ
k
2
w
j
k
2
)
y
j
1
(
1
?
y
j
1
)
x
i
\Delta w_{ij}^1=\eta(\sum_{k=1}^{l}\delta _k^2w_{jk}^2)y_j^1(1-y_j^1)x_i
Δwij1?=η(k=1∑l?δk2?wjk2?)yj1?(1?yj1?)xi?
3.复杂网络模型推导
??网络模型一般有很多层隐藏层,设置多层网络的参数如下:
-
m
1
,
m
2
,
.
.
.
,
m
h
m_1,m_2,...,m_h
m1?,m2?,...,mh?:各隐藏层的节点数。 -
n
n
n:输入神经元个数。 -
l
l
l:输出神经元个数。 -
Y
1
,
Y
2
,
.
.
.
,
Y
h
Y_1,Y_2,...,Y_h
Y1?,Y2?,...,Yh?:各隐藏层的输出。 -
X
X
X:输入层输入。 -
Y
h
+
1
Y^{h+1}
Yh+1:输出层输出。 -
W
1
,
W
2
,
.
.
.
,
W
h
W^1,W^2,...,W^h
W1,W2,...,Wh:各隐藏层的节点数;
W
h
+
1
W^{h+1}
Wh+1:最后一个隐藏层到输出层的权值矩阵。 -
δ
1
,
δ
2
,
.
.
.
,
δ
h
+
1
\delta^1,\delta^2,...,\delta^{h+1}
δ1,δ2,...,δh+1:各层学习信号,
δ
h
+
1
\delta^{h+1}
δh+1 表示输出层计算出的学习信号。
??根据公式(17)可以推导出输出层的权值计算公式:
Δ
w
j
k
h
+
1
=
η
(
t
k
?
y
k
h
+
1
)
y
k
h
+
1
(
1
?
y
k
h
+
1
)
y
j
h
j
=
0
,
1
,
2
,
.
.
.
,
m
h
;
k
=
1
,
2
,
.
.
.
,
l
\Delta w_{jk}^{h+1}=\eta(t_k-y_k^{h+1})y_k^{h+1}(1-y_k^{h+1})y_j^h\\j=0,1,2,...,m_h;k=1,2,...,l
Δwjkh+1?=η(tk??ykh+1?)ykh+1?(1?ykh+1?)yjh?j=0,1,2,...,mh?;k=1,2,...,l ??根据公式(19)可以推导出第
h
h
h 个隐藏层的权值计算公式:
Δ
w
i
j
h
=
η
(
∑
k
=
1
l
δ
k
h
+
1
w
j
k
h
+
1
)
y
j
h
(
1
?
y
j
h
)
y
i
h
?
1
i
=
0
,
1
,
2
,
.
.
.
,
m
h
?
1
;
j
=
1
,
2
,
.
.
.
,
m
h
\Delta w_{ij}^h=\eta(\sum_{k=1}^{l}\delta _k^{h+1}w_{jk}^{h+1})y_j^h(1-y_j^h)y_i^{h-1}\\i=0,1,2,...,m_{h-1};j=1,2,...,m_h
Δwijh?=η(k=1∑l?δkh+1?wjkh+1?)yjh?(1?yjh?)yih?1?i=0,1,2,...,mh?1?;j=1,2,...,mh?
4.BP算法推导总结
??现采用矩阵表达形式,根据公式(20)和(21),并将其中激活函数求导的结果还原,得到权值调整公式,
°
\circ
° 表示矩阵中的元素对应相乘。
Δ
W
h
=
η
(
Y
h
?
1
)
T
δ
h
?
?
?
?
权
值
调
整
公
式
\Delta W^h = \eta (Y^{h-1})^T \delta^h----权值调整公式
ΔWh=η(Yh?1)Tδh????权值调整公式
δ
h
=
δ
h
+
1
(
W
h
+
1
)
T
°
f
′
(
Y
h
?
1
W
h
)
?
?
?
?
第
h
层
隐
藏
层
学
习
信
号
\delta^h=\delta^{h+1}(W^{h+1})^T\circ f'(Y^{h-1}W^h)----第 h 层隐藏层学习信号
δh=δh+1(Wh+1)T°f′(Yh?1Wh)????第h层隐藏层学习信号
δ
h
+
1
=
(
T
?
Y
h
+
1
)
°
f
′
(
Y
h
W
h
+
1
)
?
?
?
?
输
出
层
学
习
信
号
\delta^{h+1}=(T-Y^{h+1})\circ f'(Y^hW^{h+1})----输出层学习信号
δh+1=(T?Yh+1)°f′(YhWh+1)????输出层学习信号??在使用
B
P
BP
BP 算法的时候,需要先根据网络预测的误差计算出输出层的学习信号
δ
h
+
1
\delta^{h+1}
δh+1,然后再计算出最后一个隐藏层的学习信号,再计算倒数第二个隐藏层的学习信号,以此类推,从后向前计算,因此
B
P
BP
BP 算法也叫做误差反向传播算法。计算到每一层的学习信号以后,再根据公式(22)来调整每一层的权值即可更新网络参数。
四.梯度消失和梯度爆炸
??从公式(22)、(23)、(24)可知,权值的调整和激活函数的导数密切相关,激活函数的导数值越大,
Δ
W
\Delta W
ΔW 的值越大,反之越小。
1.梯度消失(Vanishing Gradient)
??当使用
s
i
g
m
o
i
d
,
t
a
n
h
sigmoid,tanh
sigmoid,tanh 等作为激活函数时,它们的导数值最大不超过1,学习信号
δ
\delta
δ 乘以一个小于1的数时就会减小。学习信号从输出层一层层向前传播时,会导致学习信号慢慢变小,最终接近于0,
Δ
W
\Delta W
ΔW 接近于0的话意味着整个网络不能再继续优化了。学习信号随着网络传播逐渐减小的问题称为梯度消失问题。
??
s
i
g
m
o
i
d
sigmoid
sigmoid 函数导数图:
??
t
a
n
h
tanh
tanh 函数导数图:
2.梯度爆炸(Exploding Gradient)
??当使用
s
i
g
m
o
i
d
,
t
a
n
h
sigmoid,tanh
sigmoid,tanh 作为激活函数时,它们的导数值最大不超过1,会导致梯度消失,但是有些激活函数的导数值会大于1,学习信号
δ
\delta
δ 乘以一个大于1的数时就会变大。学习信号从输出层一层层向前传播时,会导致学习信号慢慢变大,最终接近无穷大,
Δ
W
\Delta W
ΔW 接近于无穷大的话,意味着该层的参数处于一种极不稳定的状态,此时网络就不能正常工作了。学习信号随着网络传播逐渐增大的问题称为梯度爆炸问题。
3.问题解决
-
梯度剪切:对梯度设定阈值 ??梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内,这可以防止梯度爆炸。 -
权重正则化 ??权重正则化(weithts regularization)也是一种解决梯度爆炸的手段,正则化主要是通过对网络权重做正则来限制过拟合。如果发生梯度爆炸,那么权值就会变的非常大,反过来,通过正则化项来限制权重的大小,也可以在一定程度上防止梯度爆炸的发生。比较常见的是
L
1
L1
L1 正则和
L
2
L2
L2 正则,在各个深度框架中都有相应的API可以使用正则化。 -
选择
r
e
l
u
relu
relu 等梯度大部分落在常数上的激活函数 ??
r
e
l
u
relu
relu 激活函数的导数在正数部分恒等于1,因此在深层网络中使用relu激活函数就不会导致梯度消失和爆炸的问题。 -
BatchNormalization ??
B
N
BN
BN 就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响,进而解决梯度消失和爆炸的问题。
|