前言
人工神经网络(Artificial Neural Network,ANN),通常简称为神经网络,是一种在生物神经网络的启示下建立的数据处理模型。神经网络由大量的人工神经元相互连接进行计算,根据外界的信息改变自身的结构,主要通过调整神经元之间的权值来对输入的数据进行建模,最终具备解决实际问题的能力.
神经网络概述
人类自身就是一个极好的模式识别系统。人类大脑包含的神经元数量达到 1 0 11 10^{11} 1011数量级,其处理速度比当今最快的计算机还要快许多倍。如此庞大、复杂、非线性的计算系统时刻指挥着全身的获得。当视野中出现一张熟悉的人脸时,只需数百毫秒的时间即可正确识别。尽管许多昆虫的神经系统并不发达,但仍表现出极强的识别能力。蝙蝠依靠其声纳系统搜集目标的位置、速度、目标大小等信息,最终实现声纳的口声定位以极高的成功率捕捉目标。
一般认为,生物神经并不是一开始就具备这样的识别能力的,而是在其成长过程中通过学习逐步获得的。人类出生后的几年间,大脑接收了大量的环境信息,随着经验的积累,神经元之间的相互关系不断变化,从而完成智能、思维、情绪等精神活动。与其他细胞不同,神经元细胞由细胞体P、树突D和轴突A组成。其中树突用于接收信号输入(比如,人看到美食,会分泌物质,然后在树突化学反应转化为信号),细胞体用于处理,轴突则将处理后的信号传递给下一神经元。
右图是人类模拟神经元设计的神经元,
p
p
p表示输入信号,权值
w
w
w对应于突触的连接强度,细胞体对应于累加器
∑
\sum
∑和传输函数
f
f
f,神经元输出a 代表轴突的信号。什么是传输函数? 这里假设输入信号是一个累加的关系,这关系太绝对了.需要使用一个映射函数f做为传换.常用的w输函数有:线性函数, 对数-S形函数(sigmoid)…
结构网络
一般来说,有多个输人的单个神经元并不能满足实际应用的要求。在实际应用中需要有多个并行操作的神经元,这里将这些可以并行操作的神经元组成的集合称为“层”。
输入层 隐含层 如果某层的输出是网络的输出,那么称该层为输出层,而其他层叫隐含层:上图中的网络有一个输出层(第 3层)和两个隐含层(第 1层和第 2层), 被称为前馈网络(Feedforward Neural Network),也被称为前向神经网络或多层感知器(Multi-Layer Perceptron,MLP)
单层感知器
感知器使用的激活函数通常是阶跃函数(如Heaviside函数)或符号函数,其根据输入的加权和决定节点是否激活。这使得感知器能够对输入数据做出二进制分类的预测。单层感知器就是包含一层权值可变的神经元的感知器模型.
单层感知器是感知器中最简单的一种,由单个神经元组成的单层感知器只能用来解决线性可分的二分类问题。其结构如上图所示.其通常采用纠错学习规则的学习算法(Error Correction Learning Rule)
- 线性组合器 ∑ \sum ∑的输出: v ( n ) = ∑ i = 0 N w i x i = w T ( n ) x ( n ) v(n)=\sum_{i=0}^Nw_ix_i=w^T(n)x(n) v(n)=∑i=0Nwixi=wT(n)x(n)
- 实际输出: y ( n ) = s g n ( w T ( n ) x ( n ) ) y(n)=sgn(w^T(n)x(n)) y(n)=sgn(wT(n)x(n))
- d ( n ) 为期望输出 , η 学习率 d(n)为期望输出,\eta学习率 d(n)为期望输出,η学习率
- 更新公值向量: w ( n + 1 ) = w ( n ) + η [ d ( n ) − y ( n ) ] x ( n ) w(n+1)=w(n)+\eta[d(n)-y(n)]x(n) w(n+1)=w(n)+η[d(n)−y(n)]x(n)
- 若满足收敛条件,则结束.若不是,则回到循环步骤4
什么是收敛?当权值向量 w w w已经能正确实现分类时,算法就收敛了,但实际情况都会有误差.所以在计算时的收敛
线性神经网络
线性神经网络与感知器的主要区别在于,感知器的传输函数只能输出两种可能的值,而线性神经网络的输出可以取任意值,其传输函数是线性函数。
线性神经网络采用LMS 算法,也称为 A 规则(Delta Rule).其基于纠错学习规则,即最小二乘 (最小均方)算法来调整网络的权值和偏置
- 误差定义: e ( n ) = d ( n ) − x T ( n ) w ( n ) e(n)=d(n)-x^T(n)w(n) e(n)=d(n)−xT(n)w(n)
- 采用均方误差作为评价指标: m s e = 1 Q ∑ k = 1 Q e 2 ( k ) , Q 为样本数 mse= {1 \over Q}\sum_{k=1}^Qe^2(k), Q为样本数 mse=Q1∑k=1Qe2(k),Q为样本数
- 线性神经网络学习的目标是找到适当的 w w w,使得误差的均方差 mse 最小。只要用 mse 对 w w w求偏导,再令该偏导等于零即可求出 mse 的极值
在实际运算中,为了解决权值 w w w维数过高,给计算带来困难的问题,会使用梯度下降法求值.
通过LMS算法线性神经网络在收敛的精度和速度上较感知器都有了较大提高,但其线性运算规则决定了它只能解决线性可分的问题。可以通过连接多个神经元节点,多个输出,形成 Madaline (多层)网络的方式解决非线性问题或者多分类问题
线性神经网络解决线性不可分问题的另一个方法是,对神经元添加非线性输入,从而引入非线性成分,这样做会使等效的输入维度变大,如图 5-4 所示。
BP神经网络
BP 神经网络一般是多层的,与之相关的另一个概念是多层感知器 (Multi-LayerPerceptron,MLP)。多层感知器除了输入层和输出层以外,还具有若干个隐含层。BP 神经网络采用误差反向传播的学习算法(Error Backpropagation),也是基于误差的学习算法。
如图 6-1 所示,是一个包含2 层隐含层的 BP 神经网络的拓扑结构.BP 神经网络的特点
- 网络由多层构成,层与层之间全连接,同一层之间的神经元无连接。多层的网络设计,使 BP 网络能够从输入中挖掘更多的信息,完成更复杂的任务。
- BP 网络的传递函数必须可微,一般使用 Sigmoid 函数或线性函数作为传递函数
- 采用误差反向传播算法(Back-Propagation Algorithm)进行学习
BP网络使用最速下降法来调制各层权值。下面以三层BP网络为例
- 误差定义: e j ( n ) = d j ( n ) − Y j ( n ) , j 表示对应的输出量下标 e_j(n)=d_j(n)-Y_j(n), j表示对应的输出量下标 ej(n)=dj(n)−Yj(n),j表示对应的输出量下标
- 总误差定义: e ( n ) = 1 2 ∑ j = 1 J e j 2 ( n ) e(n)= {1 \over 2}\sum_{j=1}^Je_j^2(n) e(n)=21∑j=1Jej2(n)
工作信号正向传播
- 输入层第m个神经元(总量是M个)的的输出: v M m ( n ) = x ( n ) v_M^m(n)=x(n) vMm(n)=x(n)
- 隐含层第i个神经元的输入等于 v M m ( n ) v_M^m(n) vMm(n)的加权和: u I i ( n ) = ∑ m = 0 M w m i v M m ( n ) u_I^i(n)=\displaystyle\sum_{m=0}^Mw_{mi}v_M^m(n) uIi(n)=m=0∑MwmivMm(n)
- 假设f为Sigmoid函数,则隐含层第i个神经元的输出等于: v I i ( n ) = f ( u I i ) v_I^i(n)=f(u_I^i) vIi(n)=f(uIi)
- 输出层第j个神经元的输入等于 v I j ( n ) v_I^j(n) vIj(n)的加权和: u J j ( n ) = ∑ j = 0 J w i j v I i ( n ) u_J^j(n)=\displaystyle\sum_{j=0}^Jw_{ij}v_I^i(n) uJj(n)=j=0∑JwijvIi(n)
- 输出层第j个神经元的输出等于: v J j ( n ) = g ( u J j ( n ) ) v_J^j(n)=g(u_J^j(n)) vJj(n)=g(uJj(n))
- 输出层第j个神经元的误差: e j ( n ) = d j ( n ) − v J j ( n ) e_j(n)=d_j(n)-v_J^j(n) ej(n)=dj(n)−vJj(n)
- 网络总误差: e ( n ) = 1 2 ∑ j = 1 J e j 2 ( n ) e(n)= {1 \over 2}\sum_{j=1}^Je_j^2(n) e(n)=21∑j=1Jej2(n)
误差信号反向传播,在权值调整阶段,沿着网络逐层反向进行调整
- 首先调整隐含层与输出层之间的权值
w
i
j
w_{ij}
wij,根据最速下降法,应计算误差对
w
i
j
w_{ij}
wij的
梯度 ∂ e ( n ) ∂ w i j ( n ) \partial e(n) \over \partial w_{ij}(n) ∂wij(n)∂e(n),再沿着该方向反向进行调整. - 局部梯度等于该神经元的误差信号与传递函数导数的乘积。其的定义:
- 在输出层,传递函数一般为线性函数,因此其导数为 1
- 误差信号向前传播,对输入层与隐含层之间的权值
w
m
i
w_{mi}
wmi,进行调整.
至此,三层 BP 网络的一轮权值调整就完成了。调整的规则可总结为:
权值调整量 Δ w = 学习率 η ∗ 局部梯度 δ ∗ 上一层输出信号 v 权值调整量\Delta w= 学习率\eta * 局部梯度\delta *上一层输出信号v 权值调整量Δw=学习率η∗局部梯度δ∗上一层输出信号v
BP 网络的复杂之处在于,隐含层与隐含层之间、隐含层与输入层之间调整权值时,局部梯度的计算需要用到上一步计算的结果。前一层的局部梯度是后一层局部梯度的加权和.因此,BP 网络学习权值时只能从后向前依次计算
以线性代数视角去理解多层网络的误差信号反向传播:
- 正向: 每一层神经元干的事情可以理解成空间映射子空间的概念,即降维。
- 反向: 误差的调节过程是升维的过程。输出层可能就2个维度,调节完这2个维度误差后。再加1个维度调节在下一个神经元权值中
标准的最速下降法在实际应用中往往有收敛速度慢的缺点。针对标准 BP 算法的不足,出现了几种标准 BP 法的改进,如动量 BP 算法、牛顿法等。BP存在的一定的局限性:
- 需要的参数较多,且参数的选择没有有效的方法。确定一个 BP 网络需要知道网络的层数、每一层的神经元个数和权值。网络权值依据训练样本和学习率参数经过学习得到。隐含层神经元的个数如果太多,会引起过学习,而神经元太少,又导致欠学习。如果学习率过大,容易导致学习不稳定,学习率过小,又将延长训练时间。这些参数的合理值还要受具体问题的影响,目前为止,只能通过经验给出一个很粗略的范围,缺乏简单有效的确定参数的方法,导致算法很不稳定。
- 初始权重敏感性。训练的第一步是给定一个较小的随机初始权重,由于权重是随机给定的,BP 网络往往具有不可重现性。
- 激活函数的选择很重要.引入激活函数的目的是在模型中引入非线性。如果没有激活函数(其实相当于激励函数是f(x) = x),那么无论你的神经网络有多少层,最终都是一个线性映射,那么网络的逼近能力就相当有限,单纯的线性映射无法解决线性不可分问题。
Hopfield 神经网络
前面介绍的单层感知器、线性神经网络、BP 网络以及后面的径向基函数网络等都属于前向神经网络 (或前馈神经网络).在这种网络中,各层神经元节点接收前一层输入的数据,经过处理输出到下一层,数据正向流动,没有反馈连接。
1982 年,美国加州理工学院的 J.Hopfield 教授提出了一种单层反馈神经网络,称为Hopfield 网络。Hopfield 网络是一种循环的神经网络,从输出到输入有反馈连接。Hopfield网络可以作为联想存储器,又称为联想记忆网络。主要看 Hopfield 网络是离散网络,其结构图如图,任意两个神经元间的连接权值为
w
i
j
,
w
i
j
=
w
j
i
w_{ij},w_{ij}=w_{ji}
wij,wij=wji,神经元的连接是对称的。
w
i
i
=
0
w_{ii}=0
wii=0,即神经元自身无连接.且存在阀值
b
i
b_i
bi,激活函数
f
f
f用阐值函数二值化取值0/1或-1/1.即t时刻,第i个单经元公式
x
i
(
t
)
=
∑
j
=
1
j
≠
i
N
w
i
j
y
i
(
t
)
+
b
i
x_i(t)=\sum_{\substack{j=1\\j\neq i}}^Nw_{ij}y_i(t) + b_i
xi(t)=j=1j=i∑Nwijyi(t)+bi
y
i
(
t
+
1
)
=
f
(
x
i
(
t
)
)
y_i(t+1)=f(x_i(t))
yi(t+1)=f(xi(t))
假设初始输入
X
=
{
x
1
,
x
2
,
x
3
,
.
.
.
x
n
}
,
则
Y
(
0
)
=
X
X=\{x_1,x_2,x_3,...x_n\}, 则Y(0)=X
X={x1,x2,x3,...xn},则Y(0)=X
网络从初态
Y
(
0
)
Y(0)
Y(0)开始,经过有限次递归之后,如果其状态不再发生变化
Y
(
t
+
1
)
=
Y
(
t
)
Y(t+1)=Y(t)
Y(t+1)=Y(t),即
Y
(
t
+
1
)
Y(t+1)
Y(t+1)则称该网络是稳定的。
Hopfield网络的联想能力
- 图 9-3 所示的演化过程中,网络状态最终收敛到一个稳定的值,因此是一种稳定的网络。
- 如图 9-4 所示,网络出现有限幅度的自持振荡,在有限个状态中反复循环,称为有限环网络
- 基于2的情况如果是无限环网络,即在无限多个状态之间变化,但轨迹并不发散到无穷远,这种现象称为混沌
因为Hopfield网络的状态有限,所以不可能出现混沌现象,概括上述的两种现象,那我们可以通过数学定义什么是稳定状态
为什么能达到稳定状态?
通过“动力学系统的最终行为是由它的吸引子(稳定状态)决定的”规律。利用网络的能量函数来表示当前网络状态的能量.网络的能量在网络状态按一定规则变化时,能自动趋向能量的极小点。如果把一个待求解问题的目标函数以网络能量函数的形式表达出来,当能量函数趋于最小时,对应的网络状态就是问题的最优解。
证明过程略,最终会得出 Δ E ≤ 0 \Delta E \leq 0 ΔE≤0的结论,即网络最终将收敛到一个吸引子(网络稳定状态 )
能使网络稳定在同一吸引子的所有初态的集合,称该吸引子的吸引域.
欲使反馈网络具有联想能力,每个吸引子都应该具有一定的吸引域。只有这样,对于带有一定噪声或缺损的初始样本,网络才能经过动态演变而稳定到某一吸引子状态,从而实现正确联想。反馈网络设计的目的就是要使网络能落到期望的稳定点 (问题的解)上,并且还要具有尽可能大的吸引域,以增强联想功能。
Hopfield的权值设计
吸引子的分布是由网络的权值 (包括阙值)决定的,设计吸引子的核心就是如何设计一组合适的权值。为了使所设计的权值满足要求,权值矩阵应保证给定的样本是网络的吸引子,并且要有一定的吸引域.
当所需要的吸引子较多时,可采用Hebb规则外积法
事实上,当网络规模n一定时,要记忆的模式数越多,联想时出错的可能性越大;反之,要求的出错概率越低,网络的信息存储容量上限越小。研究表明存储模式数 P 超过0.15n 时,联想时就有可能出错。错误结果对应的是能量的某个局部极小点,或称为伪吸引子。提高网络存储容量有两个基本途径:改进网络的拓扑结构;二是改进网络的权值设计方法。常用的改进方法有:反复学习法、纠错学习法、移动兴奋门限法、伪逆技术、忘记规则和非线性学习规则等。
随机神经网络
Hopfield网络是寻找最低能量状态的过程及BP网络寻最小损失值的过程都使用了梯度下降法.梯度下降法只能按照能量(损失)函数递减的方式演化,很难避免伪状态的出现,而且容易陷入局部极小值,无法收敛于全局最优点。
模拟退火算法
模拟退火算法是随机网络中解决能量局部极小问题的一个有效方法,其基本思想是模拟金属退火过程。
金属退火过程大致是,先将物体加热至高温,使其原子处于高速运动状态此时物体具有较高的内能;然后,缓慢降温,随着温度的下降,原子运动速度减慢,内能下降;最后,整个物体达到内能最低的状态。
模拟退火过程相当于沿水平方向晃动托盘温度高则意味着晃动的幅度大,小球肯定会从任何低谷中跳出,而落人另一个低谷。这个低谷的高度(网络能量)可能比小球原来所在低谷的高度低 (网络能量下降),但也可能反而比原来高(能量上升)。
后一种情况的出现,从局部和当前来看,这个运动方向似乎是错误的;但从全局和发展的角度看,正是由于给小球赋予了“爬山”的本事,才使它有可能跳出局部低谷而最终落人全局低谷。当然,晃动托盘的力度要合适,并且还要由强至弱 (温度逐渐下降),小球才不致因为有了“爬山”的本领而越爬越高。
Boltzmann机
Boltzmann 机的随机神经网络只有两种输出状态,即单极性二进制的0或 1。状态的取值根据概率统计法则决定,由于这种概率统计法则的表达形式与著名统计力学家 LBoltzmann 提出的 Boltzmann分布类似,故将这种网络取名 Boltzmann Machine(BM)。
- BM 网络具有输人节点、隐节点和输出节点.BM网络与Hopfield网络相似,具有对称权值,即 w i j = w j i 且 w i i = 0 w_{ij}=w_{ji}且 w_{ii}=0 wij=wji且wii=0。
- 神经元净输入: n e t j ( t ) = ∑ i = 1 j ≠ i N w i j x i ( t ) + b j net_j(t)=\sum_{\substack{i=1\\j\neq i}}^Nw_{ij}x_i(t) + b_j netj(t)=∑i=1j=iNwijxi(t)+bj
- 神经元总的转移函数: x j ( t ) = f ( n e t j ( t ) ) x_j(t)=f(net_j(t)) xj(t)=f(netj(t))
- 激活函数f使用的Boltzmann 分布: p j ( 1 ) = 1 1 + e − x j / T , 即把 x j 传进去返回值为 1 的概率是 p j ( 1 ) , 当 x j = 0 , p j ( 1 ) = 0.5 p_j(1)= {1 \over 1+e^{-x_j/T}}, 即把x_j传进去返回值为1的概率是p_j(1),当x_j=0,p_j(1)=0.5 pj(1)=1+e−xj/T1,即把xj传进去返回值为1的概率是pj(1),当xj=0,pj(1)=0.5
- 从网络能量去描述降温过程,其中 E ( t ) 表示 t 时整个网络的能量 E(t)表示t时整个网络的能量 E(t)表示t时整个网络的能量
- 从网络能量表示网络的稳定性
从式中可以得出状态稳定两点结论,也是采用模拟退火方法搜索全局最小的原因:
- BM 网络处于某一状态的概率主要取决于此状态下的能量 E,能量越低,概率越大;
- BM 网络处于某一状态的概率还取决于温度参数 丁,温度越高,不同状态出现的概率越接近,网络能量较易跳出局部极小而搜索全局最小;温度低则情况相反。
BM 网络的学习算法
学习的目的是通过调整网络权值使训练集中的模式在网络状态中以相同的概率再现。学习过程可分为两个阶段
- 第一阶段称为正向学习阶段:将网络输人输出节点的状态“钳制”到期望的状态,而让隐节点自由活动,以捕捉模式对之间的对应规律;
- 第二阶段称为反向学习阶段或自由运行期,对于异联想学习,用输人模式“钳住”输人节点而让隐节点和输出节点自由活动,以体现网络对输人输出对应规律的模拟情况。
输人输出的对应规律表现为网络达到热平衡时,相连节点状态同时为1的平均概率。期望对应规律与模拟对应规律之间的差别就表现为两个学习阶段所对应的平均概率的差值,此差值便作为权值调整的依据
如何获取热平衡相连节点状态同时为1的平均概率.假设训练集提供了P对模式
过程中包括小循环与大循环:
- 在小循环中,温度保持恒定,算法选择不同的神经元进行状态调整,达到热平衡后进行降温,进入新的温度下的小循环。
- 大循环是指整个降温、计算的过程,当大循环结束后,算法也就结束了。
- 初始温度的选择方法与模拟退火算法类似,可以随机选择网络中的n个神经元,取其能量的方差,或随机选择若干神经元,取其能量的最大差值。
如何通过平均概率,调整权值
w
i
j
w_{ij}
wij
上述主要思路:
- 正向学习,通过热平衡(大小循环)算出 p i j p_{ij} pij
- 返回学习,通过热平衡(大小循环)算出 p i j ′ p'_{ij} pij′
- 修改权值 w i j w_{ij} wij,再重新正反学习,直到 Δ w i j → 0 \Delta w_{ij} \rarr 0 Δwij→0
受限玻尔兹曼机(RBM)
玻尔兹曼机的计算复杂度较高,并且它的收敛速度较慢.受限玻尔兹曼机(restricted Boltzmann machine,RBM)是玻尔兹曼机的一个变体。与玻尔兹曼机相比,受限玻尔兹曼机的结构更加简单,因为它没有循环边。这意味着受限玻尔兹曼机中的单元只能与层间相连,而不能与同层相连。
其结构如上左图所示,可见层充当两个角色(输入,输出).因此将其展开如右图所示.两边权值相等(
w
i
j
=
w
j
i
w_{ij}=w_{ji}
wij=wji).如果一个 BRM 有n个可见单元和m个隐单元,且用
向量
v
和
h
向量v和h
向量v和h分别表示可见单元和隐单元的状态。其中,
v
i
v_i
vi表示第i个可见单元的状态,
h
j
h_j
hj表示第j个隐单元的状态。
- 对于一组给定的状态 ( v , h ) (v,h) (v,h),其能量
- 基于该能量函数, 我们可以得到 ( v , h ) (v, h) (v,h)的联合概率分布,其中 Z ( θ ) Z(θ) Z(θ)为(总能量)归一化因子
- 使用最大似然法,得出最大概率 θ \theta θ,其中T为样本数.
关于Gibbs采样,主要依赖马氏链的数学定义:“状态转移的概率只依赖前一个状态”
主要参考
《人工神经网络理论、设计及应用》
《MATLAB神经网络原理与实例精解》
《LDA数学八卦》