第五章 神经网络
5.1 神经元模型
神经网络(nenural networks):由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界所作出的交互反应。
M-P神经元模型:神经元接收来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”处理以产生神经元的输出。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2809f2fe10294af871becd511a4eec47.png)
5.2 感知机与多层网络
感知机(Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元,亦称“阈值逻辑单元”(threshold logic unit)
更一般地,给定训练数据集,权重 ω i ( i = 1 , 2 , … … , n ) \omega_{i}\left( i = 1,2,\ldots\ldots,n \right) ωi(i=1,2,……,n)以及阈值 θ \theta θ可通过学习得到。阈值 θ \theta θ可看着一个固定输入为-1.0的“哑结点”(dummy node)所对应的连接权重 ω n + 1 \omega_{n + 1} ωn+1。
对训练样例 ( x , y ) \left( x,y \right) (x,y),若当前感知机的输出为 y ~ \tilde{y} y~,则感知机权重将这样调整:
ω i ← ω i + △ ω i \omega_{i} \leftarrow \omega_{i} + \bigtriangleup \omega_{i} ωi←ωi+△ωi
ω i = η ( y − y ~ ) x i \omega_{i} = \eta\left( y - \tilde{y} \right)x_{i} ωi=η(y−y~)xi
其中 η ∈ ( 0 , 1 ) \eta \in \left( 0,1 \right) η∈(0,1)称为学习率(learning rate)
注意:感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力有限。
输出层与输入层之间的一层神经元,被称之为隐层或隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元。
一般地,每层神经元与下一层神经元互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks),其中输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。
神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight)以及每个功能神经元的阈值。
5.3 误差逆传播算法
误差逆传播(Back Propagation, BP)算法是最成功的神经网络学习算法。
BP网络:BP算法训练的多层前馈神经网络
给定训练集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
m
,
y
m
)
}
,
x
y
∈
R
d
,
y
i
∈
R
l
D = \left\{ \left( x_{1},y_{1} \right),\left( x_{2},y_{2} \right),\ldots,\left( x_{m},y_{m} \right) \right\},x_{y} \in \mathbb{R}^{d},y_{i} \in \mathbb{R}^{l}
D={(x1,y1),(x2,y2),…,(xm,ym)},xy∈Rd,yi∈Rl,即输入示例由d个属性描述,输出l维实值向量。
图中给出了一个拥有d个输入神经元、l个输出神经元、q个隐层神经元的多层前馈网络结构,其中输出层第j个神经元与隐层第h个神经元之间的连接权为
v
ih
v_{\text{ih}}
vih,隐层第h个神经元与输出层第j个神经元之间的连接权为
ω
h
j
\omega_{hj}
ωhj。记隐层第h个神经元接收到的输入为
α
h
=
∑
i
=
1
d
v
ih
x
i
\alpha_{h} = \sum_{i = 1}^{d}{v_{\text{ih}}x_{i}}
αh=∑i=1dvihxi,输出层第j个神经元接收到的输入为
β
j
=
∑
h
=
1
q
ω
hj
b
h
\beta_{j} = \sum_{h = 1}^{q}{\omega_{\text{hj}}b_{h}}
βj=h=1∑qωhjbh其中
b
h
b_{h}
bh为隐层第h个神经元的输出。
对训练例 ( x k , y k ) \left( x_{k},y_{k} \right) (xk,yk),假定神经网络的输出为 y ~ = ( y ~ 1 k , y ~ 2 k , … , y ~ l k ) \tilde{y} = \left( {\tilde{y}}_{1}^{k},{\tilde{y}}_{2}^{k},\ldots,{\tilde{y}}_{l}^{k} \right) y~=(y~1k,y~2k,…,y~lk),即 y ~ j k = f ( β j − θ j ) {\tilde{y}}_{j}^{k} = f\left( \beta_{j} - \theta_{j} \right) y~jk=f(βj−θj)
则网络在 ( x k , y k ) \left( x_{k},y_{k} \right) (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}\left( {\tilde{y}}_{j}^{k} - y_{j}^{k} \right)^{2} Ek=21j=1∑l(y~jk−yjk)2
参数:
输入层到隐层的d*q个权值
隐层到输出层的q*l个权值
q个隐层神经元的阈值
l个输出层神经元的阈值
任意参数v的更新估计式:
v ← v + v v \leftarrow v + v v←v+v
BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整。对均方误差 E k E_{k} Ek,给定学习率 η \eta η,有
Δ ω h j = − η ∂ E k ∂ ω h j \Delta\omega_{hj} = - \eta\frac{\partial E_{k}}{\partial\omega_{hj}} Δωhj=−η∂ωhj∂Ek
ω h j \omega_{hj} ωhj先影响到第j个输出层神经元的输入值 β j \beta_{j} βj,再影响到其输出值 y ~ j k {\tilde{y}}_{j}^{k} y~jk,然后影响到 E k E_{k} Ek,有
∂ E k ∂ ω h j = ∂ E k ∂ y ~ j k ∗ ∂ y ~ j k ∂ β j ∗ ∂ β j ∂ ω h j \frac{\partial E_{k}}{\partial\omega_{hj}} = \frac{\partial E_{k}}{\partial{\tilde{y}}_{j}^{k}}*\frac{\partial{\tilde{y}}_{j}^{k}}{\partial\beta_{j}}*\frac{\partial\beta_{j}}{\partial\omega_{hj}} ∂ωhj∂Ek=∂y~jk∂Ek∗∂βj∂y~jk∗∂ωhj∂βj
根据 β j \beta_{j} βj的定义,有
∂ β j ∂ ω h j = b h \frac{\partial\beta_{j}}{\partial\omega_{hj}} = b_{h} ∂ωhj∂βj=bh
Sigmoid函数的性质:
f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f^{'\left( x \right)} = f\left( x \right)\left( 1 - f\left( x \right) \right) f′(x)=f(x)(1−f(x))
g i = − ∂ E k ∂ y ~ j k ∗ ∂ y ~ j k ∂ β j = − ( y ~ j k − y j k ) f ′ ( β j − θ j ) = y ~ j k ( 1 − y ~ j k ) ( y j k − y ~ j k ) g_{i} = - \frac{\partial E_{k}}{\partial{\tilde{y}}_{j}^{k}}*\frac{\partial{\tilde{y}}_{j}^{k}}{\partial\beta_{j}} = - \left( {\tilde{y}}_{j}^{k} - y_{j}^{k} \right)f'\left( \beta_{j} - \theta_{j} \right) = {\tilde{y}}_{j}^{k}\left( 1 - {\tilde{y}}_{j}^{k} \right)\left( y_{j}^{k} - {\tilde{y}}_{j}^{k} \right) gi=−∂y~jk∂Ek∗∂βj∂y~jk=−(y~jk−yjk)f′(βj−θj)=y~jk(1−y~jk)(yjk−y~jk)
BP算法的更新公式:
ω hj = η g i b h \omega_{\text{hj}} = \eta g_{i}b_{h} ωhj=ηgibh
Δ θ j = − η g i \Delta\theta_{j} = - \eta g_{i} Δθj=−ηgi
v ih = η e h x i v_{\text{ih}} = \eta e_{h}x_{i} vih=ηehxi
γ h = − η e h \gamma_{h} = - \eta e_{h} γh=−ηeh
其中
e h = − ∂ E k ∂ b h ∗ ∂ b h ∂ α h = − ∑ j = 1 l ∂ E k ∂ β j ∗ ∂ β j ∂ α h f ′ ( α h − γ h ) e_{h} = - \frac{\partial E_{k}}{\partial b_{h}}*\frac{\partial b_{h}}{\partial\alpha_{h}} = - \sum_{j = 1}^{l}{\frac{\partial E_{k}}{\partial\beta_{j}}*\frac{\partial\beta_{j}}{\partial\alpha_{h}}}f'(\alpha_{h} - \gamma_{h}) eh=−∂bh∂Ek∗∂αh∂bh=−j=1∑l∂βj∂Ek∗∂αh∂βjf′(αh−γh)
= ∑ j = 1 l ω hj g j f ( α h − γ h ) = b h ( 1 − b h ) ∑ j = 1 l ω hj g j = \sum_{j = 1}^{l}{\omega_{\text{hj}}g_{j}f\left( \alpha_{h} - \gamma_{h} \right) = b_{h}\left( 1 - b_{h} \right)}\sum_{j = 1}^{l}{\omega_{\text{hj}}g_{j}} =j=1∑lωhjgjf(αh−γh)=bh(1−bh)j=1∑lωhjgj
输入:训练集
D
=
{
(
x
k
,
y
k
)
}
k
=
1
m
D = \left\{ \left( x_{k},y_{k} \right) \right\}_{k = 1}^{m}
D={(xk,yk)}k=1m,学习率
η
\eta
η
过程:
在(0,1)范围内随机初始化网络中所有连接权和阈值
repeat
for all
(
x
k
,
y
k
)
∈
D
\left( x_{k},y_{k} \right) \in D
(xk,yk)∈D do
根据当前参数和
y
~
j
k
=
f
(
β
j
−
θ
j
)
{\tilde{y}}_{j}^{k} = f\left( \beta_{j} - \theta_{j} \right)
y~jk=f(βj−θj)计算当前样本的输出
y
~
j
k
{\tilde{y}}_{j}^{k}
y~jk
根据
g
i
=
y
~
j
k
(
1
−
y
~
j
k
)
(
y
j
k
−
y
~
j
k
)
g_{i} = {\tilde{y}}_{j}^{k}\left( 1 - {\tilde{y}}_{j}^{k} \right)\left( y_{j}^{k} - {\tilde{y}}_{j}^{k} \right)
gi=y~jk(1−y~jk)(yjk−y~jk)计算输出层神经元的梯度项
g
i
g_{i}
gi
根据
e
h
=
b
h
(
1
−
b
h
)
∑
j
=
1
l
ω
hj
g
j
e_{h} = b_{h}\left( 1 - b_{h} \right)\sum_{j = 1}^{l}{\omega_{\text{hj}}g_{j}}
eh=bh(1−bh)∑j=1lωhjgj计算隐层神经元的梯度项
e
h
e_{h}
eh
根据BP算法的更新公式更新连接权
ω
hj
,
v
ih
\omega_{\text{hj}},v_{\text{ih}}
ωhj,vih与阈值
θ
j
,
γ
h
\theta_{j},\gamma_{h}
θj,γh
end for
until 达到停止条件
输出:连接权与阈值确定的多层前馈神经网络
BP算法的目标是要最小化数据集D上的累积误差
E = 1 m ∑ k = 1 m E k E = \frac{1}{m}\sum_{k = 1}^{m}E_{k} E=m1k=1∑mEk
缓解BP网络过拟合策略
1、“早停”(early stopping):将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
2、“正则化”(regularization):在误差目标函数中增加一个用于描述网络复杂度的部分
5.4 全局最小和局部极小
若用E表示神经网络在训练集上的误差,则它显然是关于连接权 ω \omega ω和阈值 θ \theta θ的函数。
神经网络的训练过程可看作一个参数寻优过程。
局部极小最优解:参数空间中的某个点,其领域点的误差函数值均不小于该点的函数值
全局最小解:参数空间中所有点的误差函数均不小于这个点的误差函数值
参数寻优法(基于梯度下降)
从初始解开始,迭代寻找最优参数值
迭代:先计算误差函数当前的梯度,然后根据结果确定搜索方向
模拟退火技术:
模拟退火在每一步都以一定的概率接受当前解更差的结果,从而有助于跳出局部极小。
遗传算法常用来训练神经网络以更好地逼近全局最小
5.5 其他常见神经网络
5.5.1 RBF网络
径向基函数(Radial Basis Function, RBF)网络
RBF网络是单隐层前馈神经网络,使用径向基函数作为隐层神经元激活函数,而输出层是对隐层神经元输出的线性组合。
假定输入为d维向量x,输出为实值,则RBF网络可表示为
φ ( x ) = ∑ i = 1 q ω i ρ ( x , c i ) \varphi\left( x \right) = \sum_{i = 1}^{q}{\omega_{i}\rho\left( x,c_{i} \right)} φ(x)=i=1∑qωiρ(x,ci)
其中q为隐层神经元个数, ω i \omega_{i} ωi和 c i c_{i} ci分别是第i个隐层神经元所对应的中心和权重, ρ ( x , c i ) \rho\left( x,c_{i} \right) ρ(x,ci)是径向基函数
径向基函数:样本x到数据中心 c i c_{i} ci之间欧式距离的单调函数。
高斯径向基函数
ρ ( x , c i ) = e − β i ∥ x − c i ∥ 2 \rho\left( x,c_{i} \right) = e^{- \beta_{i}\left\| x - c_{i} \right\|^{2}} ρ(x,ci)=e−βi∥x−ci∥2
5.5.2 ART网络
竞争型学习是神经网络中一种常用的无监督学习策略
自适应谐振理论(Adaptive Resonance Theory,
ART)网络由比较层、识别层、识别层阈值和重置模块构成。
竞争方式:计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜。
可塑性:神经网络要学习新知识的能力
稳定性:神经网络在学习新知识时要保存对旧知识的记忆。
5.5.3 SOM网络
自组织映射(Self-Origanizing Map)网络
SOM网络时一种竞争学习型的无监督神经网络,将高维输入数据映射到低维空间,同时保持输入数据在高维空间的拓扑结构。
SOM的训练目标
为了每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。
SOM训练过程
在接收到一个训练样本后,每个输出层神经元会计算该样本与自身携带的权向量之间的距离,距离越近的神经元成为竞争获胜者,称为最佳匹配单元(best matching unit)
5.5.4 级联相关网络
结构自适应网络:通过训练样本来确定合适的连接权、阈值等参数,同时也学习网络结构。
级联:建立层次连接的层级结构
相关:通过最大化神经元的输出与网络误差之间的相关性来训练相关的参数
5.5.5 Elman网络
递归神经网络(recurrent neural networks)允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。
Elman网络的结构与多层前馈网络相似,但隐层神经元的输出被反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入。
5.5.6 Boltzmann机
Boltzmann机是一种“基于能量的模型”,其神经元分为两层:显层和隐层。
显层用于表示数据的输入与输出,隐层则被理解为数据的内在表达。
令向量 s ∈ { 0 , 1 } n s \in \left\{ 0,1 \right\}^{n} s∈{0,1}n表示n个神经元的状态, ω ij \omega_{\text{ij}} ωij表示神经元i和j之间的连接权, θ i \theta_{i} θi表示神经元i的阈值,则状态向量s所对应的Boltzmann机能量定义为
E ( s ) = − ∑ i = 1 n − 1 ∑ j = i + 1 n ω ij s i s j − ∑ i = 1 θ θ i s i E\left( s \right) = - \sum_{i = 1}^{n - 1}{\sum_{j = i + 1}^{n}{\omega_{\text{ij}}s_{i}s_{j} - \sum_{i = 1}^{\theta}{\theta_{i}s_{i}}}} E(s)=−i=1∑n−1j=i+1∑nωijsisj−i=1∑θθisi
受限Boltzmann机常用对比散度(Contrastive Divergence, CD)算法来进行训练。
令v和h分别表示显层和隐层的状态向量,则由于同一层内不存在连接,有:
P ( v ∣ h ) = ∏ i = 1 d P ( v i ∣ h ) P\left( v \middle| h \right) = \prod_{i = 1}^{d}{P\left( v_{i} \middle| h \right)} P(v∣h)=i=1∏dP(vi∣h)
P ( h ∣ v ) = ∏ j = 1 q P ( h i ∣ v ) P\left( h \middle| v \right) = \prod_{j = 1}^{q}{P\left( h_{i} \middle| v \right)} P(h∣v)=j=1∏qP(hi∣v)
连接权的更新公式:
ω = η ( v h T − v ′ h ′ T ) \omega = \eta\left( vh^{T} - v'{h'}^{T} \right) ω=η(vhT−v′h′T)
5.6 深度学习
深度学习模型就是很深层的神经网络,对神经网络模型提高容量的一个简单办法就是增加隐层的数目,隐层多了,相应的神经元连接权、阈值等参数就会更多。
无监督逐层训练时多隐层网络训练的有效手段,其基本思想:每次训练一层隐结点,训练时将上一次隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,这称为预训练;在预训练全部完成后,再对整个网络进行微调训练。
CNN(Convolutional Neural Networks)网络节省开销的策略是权共享,即让一组神经元使用相同的连接权。
CNN复合多个卷积层和采样层对输入信号进行加工,然后再连接层实现与输出目标之间的映射。
每个卷积层都包含于多个特征映射,每个特征映射是一个由多个神经元构成的平面,通过一种卷积滤波器提取输入的一种特征。
,其基本思想:每次训练一层隐结点,训练时将上一次隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入,这称为预训练;在预训练全部完成后,再对整个网络进行微调训练。
CNN(Convolutional Neural Networks)网络节省开销的策略是权共享,即让一组神经元使用相同的连接权。
CNN复合多个卷积层和采样层对输入信号进行加工,然后再连接层实现与输出目标之间的映射。
每个卷积层都包含于多个特征映射,每个特征映射是一个由多个神经元构成的平面,通过一种卷积滤波器提取输入的一种特征。
采样层亦称为汇合层,其作用是基于局部相关性原理进行亚采样,从而减少数据量的同时保留有用信息。