第5章 神经网络
5.1神经元模型
神经网络中最基本的成分是神经元模型。
“M-P神经元模型”,又称“阈值逻辑单元”
在模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。
实际常用Sigmoid函数作为激活函数,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此也称“挤压函数”
将许多这样的神经元按一定的层次结构连接起来即可得到神经网络。我们可以将神经网络视为包含了许多参数的数学模型,该模型是若干函数(如
y
j
=
f
(
∑
i
w
i
x
i
−
θ
j
)
y_j=f(\sum_{i}w_ix_i-\theta_j)
yj=f(∑iwixi−θj))相互嵌套带入而得。
5.2感知机与多层网络
感知机由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层为M-P神经元。
感知机可实现逻辑与、或、非运算
给定训练数据集,权重
w
i
w_i
wi及阈值
θ
\theta
θ通过学习得到。
将阈值
θ
\theta
θ看作一个固定输入为-1.0的“哑结点”,对应连接权重
w
n
+
1
w_{n+1}
wn+1,这样权重和阈值的学习就可统一为权重的学习。
感知机的学习规则:
训练样例(x,y),若当前感知机输出为
y
^
\hat{y}
y^,则感知机权重调整如下,其中
η
ϵ
(
0
,
1
)
\eta \epsilon (0,1)
ηϵ(0,1)为学习率
感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,学习能力有限。
事实,前述的与、或、非问题都是线性可分的问题。若两类模式是线性可分的,即存在一个线性超平面能将他们分开,感知机的学习过程一定会收敛求得适当的权向量
w
=
(
w
1
;
w
2
;
.
.
.
;
w
n
+
1
)
w=(w_1;w_2;...;w_{n+1})
w=(w1;w2;...;wn+1)(如图a-c),否则感知机学习过程会发生震荡,不能求得合适解(如图d)。
如何解决非线性可分问题?–考虑使用多层功能神经元。
如下两层感知机解决异或问题,输出层与输入层之间的一层神经元被称为隐层或隐含层,隐含层和输出层神经元都是拥有激活函数的功能神经元
常见的神经网络每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”。其中输入层神经元接受外界输入,隐层与输出层包含功能神经元对信号进行加工,最终结果由输出层神经元输出。
神经网络的学习过程即是根据训练数据调整神经元之间的“连接权”以及每个功能神经元的阈值;换言之,神经网络“学”到的东西蕴含在连接权与阈值中。
5.3误差逆传播算法
训练多层网络多用误差逆传播算法简称BP算法。
训练集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
,
x
i
ϵ
R
d
,
y
i
ϵ
R
l
D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\},x_i\epsilon R^d,y_i\epsilon R^l
D={(x1,y1),(x2,y2),...,(xm,ym)},xiϵRd,yiϵRl,即输入示例有d个属性描述、输出l维实值向量。
如图一个d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈网络结构。
输出层第j个神经元的阈值用
θ
j
\theta_j
θj表示,隐层第h个神经元的阈值用
γ
h
\gamma_h
γh表示。输入层第i个神经元与隐层第h个神经元之间的连接权为
v
i
h
v_{ih}
vih,隐层第h个神经元与输出层第j个神经元之间的连接权为
w
h
j
w_{hj}
whj。
记隐层第h个神经元接收到的输入为
α
h
=
∑
i
=
1
d
v
i
h
x
i
\alpha_h=\sum_{i = 1}^dv_{ih}x_i
αh=∑i=1dvihxi,输出层第j个神经元接收到的输入为
β
j
=
∑
h
=
1
q
w
h
j
b
h
\beta_j=\sum_{h = 1}^qw_{hj}b_h
βj=∑h=1qwhjbh,其中
b
h
b_h
bh为隐层第h个神经元的输出。设隐层和输出层神经元均使用Sigmoid函数。
在BP网络中,我们需要确定的参数有:输入层到隐层d×q个权值、隐层到输出层的q×l个权值、q个隐层神经元的阈值、l个输出层神经元的阈值。
BP是迭代学习算法,在迭代每一轮对参数进行更新估计,任意参数v更新估计式子为
下面以隐层到输出层的连接权
w
h
j
w_{hj}
whj为例推导。
BP算法-基于梯度下降策略,以目标负梯度方向对参数进行调整。
对于误差
E
k
E_k
Ek,给定学习率
η
\eta
η,则有
并且我们知道,对于连接权
w
h
j
w_{hj}
whj,它会先影响第j个输出层神经元的输入值
β
j
\beta_j
βj,随后再影响到该输出层神经元的输出值
y
^
j
k
\hat{y}_j^k
y^jk,进而影响到输出的均方误差
E
k
E_k
Ek,因此可以这样写
然后由于定义输出层第j个神经元接收到的输入为
β
j
=
∑
h
=
1
q
w
h
j
b
h
\beta_j=\sum_{h = 1}^qw_{hj}b_h
βj=∑h=1qwhjbh,因此有
已知Sigmoid函数有性质:
再根据神经网络的误差式以及输出式,可以得出如下推导
同理可得
Δ
θ
j
\Delta\theta_j
Δθj,
Δ
v
i
h
\Delta v_{ih}
Δvih,
Δ
γ
h
\Delta\gamma_h
Δγh。(p103)
学习率
η
ϵ
(
0
,
1
)
\eta\epsilon(0,1)
ηϵ(0,1)控制迭代的更新步长,太大容易震荡,太小收敛速度过慢。一般常设置为0.1
BP算法工作流程如下
先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;
然后计算输出层的误差(第 4-5 行) ,再将误差逆向传播至隐层神经元(第6行) ,最后根据隐层神经元的误差来对连接权和阈值进行调整(第7行).
该迭代过程循环进行,直到达到某些停止条件为止,例如训练误差已达到一个很小的值。
以上算法更新规则基于单个
E
k
E_k
Ek推导而得,称“标准BP算法”。
类似推导出基于累积误差最小化的更新规则,得到累积误差逆传播算法。
标准BP算法参数更新非常频繁。累积BP算法直接针对累积误差最小化,在读取整个训练集D一遍后才对参数进行更新,故参数更新的频率低得多。
当包含足够多神经元的隐层,多层前馈网络能以任何精度逼近任意复杂度的连续函数。至于如何设置隐层神经元的个数,常靠“试错法”调整。
由于强大的表示能力, BP 神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升。
缓解BP网络的过拟合:
1、“早停”:将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,返回具有最小验证集误差的连接权和阈值。
2、“正则化”:其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分。
例如,误差目标函数改变为
E
k
E_k
Ek表示第k个训练样例上的误差,
w
i
w_i
wi表示连接权和阈值。其中
λ
∈
(
0
,
1
)
\lambda\in(0,1)
λ∈(0,1)用于对经验误差与网络复杂度这两项进行折中。(理解:增加连接权与阈值平方和这一项后,训练过程会偏好比较小的连接权和阈值,使网络输出更加“光滑”,从而缓解过拟合)
5.4全局最小与局部最小
E表示神经网络在训练集上的误差,其显然关于连接权
w
w
w和阈值
θ
\theta
θ的函数。神经网络的训练过程相当于在参数空间中,寻找一组最优参数使得E最小。
“最优”:包括“局部极小”和“全局最小”
1、局部极小解,是参数空间中的某个点,其邻域点的误差函数值均不小于该点的函数值;
2、全局最小解则是指参数空间中所有点的误差函数值均不小于该点的误差函数值.两者对应的
E
(
w
∗
;
θ
∗
)
E(w^*;\theta^*)
E(w∗;θ∗)分别称为误差函数的局部极小值和全局最小值.
可能存在多个“局部极小”,但只会有一个全局最小值,在参数寻优过程中是希望找到全局最小。
常用的参数寻优方法-基于梯度的搜索:
每次迭代,我们计算误差函数在当前的梯度,然后根据梯度确定搜索方向,负梯度方向为函数值下降最快的方向,故梯度下降法即是沿着负梯度方向搜索最优解。