一、神经网络
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络。神经网络中最基本的成分是神经元模型。以下图常见的“M-P神经元模型”为例,在这个模型中,神经元接收到来自
n
n
n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元收到的总输入值将与神经元的阈值进行比较,然后通过激活函数处理以产生神经元的输出。
理想中的激活函数是左下图所示的阶跃函数,但是阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数,典型代表是对数几率函数,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为“挤压函数”。
把许多个这样的神经元按一定的层次结构连接起来,就得到了神经网络。
二、多层网络
常见的神经网络是如下图所示的层级结构,每层神经元与下一层的神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构通常称为“多层前馈神经网络”。
“前馈”并不意味着网络中信号不能向后传,而是指网络拓扑结构中不存在环或回路。
多层前馈神经网络中,输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。输入层神经元仅是接受输入,不进行函数处理,隐层与输出层包含函数功能神经元。
神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值。神经网络学到的东西,蕴涵在连接权与阈值中。
多层前馈网络有强大的表示能力(万有逼近性)
仅需一个包含足够多神经元的隐层,多层前馈神经网络就能以任意精度逼近任意复杂度的函数。
但是,如何设置隐层神经元是未解决问题,实际上常用“试错法”。
三、误差逆传播算法(BP算法)
对训练样例
(
x
k
,
y
k
)
(x_k,y_k)
(xk,yk),假定神经网络的输出为
y
^
k
=
(
y
^
1
k
,
y
^
2
k
,
⋯
,
y
^
l
k
)
\hat {y}_k=(\hat y_1^k,\hat y_2^k,\cdots,\hat y_l^k)
y^k=(y^1k,y^2k,⋯,y^lk),即
y
^
j
k
=
f
(
β
j
−
θ
j
)
\hat y_j^k=f(\beta_j-\theta_j)
y^jk=f(βj−θj)(表示的是第j个神经元关于第k个样例的输出)。神经网络在
(
x
k
,
y
k
)
(x_k,y_k)
(xk,yk)上的均方误差为
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
E_k=\frac 1 2\sum_{j=1}^l (\hat y_j^k -y_j^k)^2
Ek=21j=1∑l(y^jk−yjk)2
BP神经网络中有(d+l+1)q+l个参数需要确定:输入层到隐层的dq个权值、隐层到输出层的ql个权值、q个隐层神经元的阈值、l个输出层神经元的阈值。BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为
v
←
v
+
Δ
v
v \leftarrow v+\Delta v
v←v+Δv
BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,给定学习率
η
\eta
η
BP算法的工作流程:对于每个训练样例,BP算法先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止,例如训练误差已经达到一个很小的值。
神经网络就有强大的表示能力,BP神经网络经常出现“过拟合”的情况,其训练误差持续降低,但是测试误差却可能上升。有两种策略常用来缓解BP网络的过拟合。方法一,“早停”:将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。方法二,“正则化”:在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和,仍令
E
k
E_k
Ek表示第
k
k
k个训练样例上的误差,
w
i
w_i
wi表示连接权和阈值,则目标函数改变为:
E
=
λ
1
m
∑
k
=
1
m
E
k
+
(
1
−
λ
)
∑
i
w
i
2
E=\lambda \frac 1 m \sum_{k=1}^m E_k+(1-\lambda)\sum_i w_i^2
E=λm1k=1∑mEk+(1−λ)i∑wi2
偏好比较小的连接权和阈值,这样会使网络输出更光滑
其中 λ ∈ ( 0 , 1 ) \lambda \in(0,1) λ∈(0,1)用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证法来估计。