Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1797854
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 信息化

2013-04-26 23:33:03

大脑被认为是高度复杂的、非线性的并行信息处理系统。神经元网络是人脑的推理模型,信息通过神经元的连接来传递。通过学习,某些连接会得到永久性的增强,这也是做某事熟练度会增加的原因。

人工神经元网络(Artificial neural network,ANN)具有学习的能力,使用经验来提升自己的能力。ANN由许多非常简单且高度连接的处理器(processor)构成,它们也被称为神经元。各神经元通过加权链连接到一起,并把信号传递给其它神经元。它们接收多个输入信号但至多输出一个信号。输出的信号被复制成多份向所有连接的神经元分发作为其一个输入信号。

连接神经元的链是加权的,神经元网络通过重复地改变链的权重来学习。要构建ANN,必须先确定网络结构,并给予初始权重,而后通过训练来更新权重。

每个神经元接收多个输入,算出所有输入的加权和,如果加权和大于等于0,则输出1,否则输出-1。"0"可以替换成一个阈值。然而这种从输入得到输出的函数是离散的,在阈值点是不可导的,所以输出函数还可以为加权和于阈值的差的正弦,或者加权和的sigmoid函数(Y=1/(1+e^(-x))),或者是加权和的线性函数。

1958年Frank Rosenblatt发明了一个训练算法,并提供了训练简单ANN的算法。这个ANN(感知机)只包含一个神经元,是神经元网络的最简单的形式。

Rosenblatt的感知机操作基于MP模型,由一个线性组合器和一个硬限制器组成。组合器求出输入的加权值,并交给硬限制器根据阈值确定输出1还是-1。因此如果有两个输入,则相当于在二维平面上画出一条直线,输出的+1或-1表示两个输入在平面上对应的点在直线的哪边。三个输入则表示在三维空间里切出一条平面,输出表示输入的点在面的哪一边。以此类推,n个输入则表示在n维空间上被n-1维空间分隔成两部分,输出表示点在哪边。

我们最终的结果就是要把n维空间分成两部分,正确的输入都在+1的一侧,错误的输入则在另一侧。在训练ANN时,我们会给出几组样品输入。这时我们知道什么样的输入是符合条件的,即我们知道在该输入下输出的结果应该是+1还是-1。根据这个前提,我们找到分隔n维空间的方式,确保样品输入在正确的那部分里。而我们是通过改变权重来改变分隔方式的。

感知机的学习方式
通过调整各输入的权重,可以减少真实输出和所需输出之间的误差。最初始的权重是随机分配的,通常在[-0.5,+0.5]的范围,在给定一个样品后,该样品输入的期望输出与实际输出有一个差值,该值可正可负。根据该差值,我们调整每个输入的权重,调整的幅度与该输入与误差的乘积成线性关系,写成公式(感知机学习规则)就是:
w_i_new = w_i + a * x_i * e
x_i是当前学习的样品的第i个输入,其中w_i是第i个输入的当前权重,e是一期望输出与实际输出的差值,a是一个比1小的正数,称作学习曲线,确保每次只做小幅调整。

具体的学习步骤如下:
1、对于每个输入的权重以及输出的阈值,都随机选取[-0.5,+0.5]里的数进行初始化,并开始学习第一个样品;
2、求出当前学习的样品的真实输出,该值为所有输入的加权和与阈值的差的Step函数(即前面提到的sign或sigmoid等函数);
3、根据误差,利用上述的感知机学习规则公式,调整每个输入的权重;
4、回到第2步,学习下一个样品,直到最后一个样品被学完。
上述的对每个样品都学习一次的过程被称为一代(epoch)。 随着代数的增加,基于权重的改变,感知机的输出会渐渐收敛至所期望的结果,当所有样品的输出误差都满足期望值时,学习就结束了。

单层感知机只能处理线性可分的问题,而无法解决线性不可分的问题,比如异或操作(4个样品,(0,0)->0, (0,1)->1, (1,0)->1, (1,1)->0),是无法找到一条线把(0,1)、(1,0)分在一边,而把(0,0)、(1,1)分在另一边的。

多层感知机
多层感知机是个多层网络,包含输入层,输出层,中间还有一或多个隐藏层。输入层只接收输入并转发给隐藏层的所有神经元,不参与计算。输出层将信号从隐藏层转发,作为整个网络的输出。一层隐藏层可以表示连续的函数,两层隐藏层可以表达非连续的函数。
隐藏层隐藏了它需要的输出。通过整个网络的输入输出,并不能发现隐藏层的神经元。商业ANN一般有三层(一个隐藏层),有时四层(两个隐藏层)。每层包含10到1000个神经元。实验用的神经元网络可能有五层甚至六层,但通常实践上的应用只有三层,因为每增加一层,计算量以指数级增长。

多层神经元网络学习的方式有上百种,但最流行的是反向传播(back-propagation)。多层网络和感知机的学习步骤相同,给定样品的输入,通过改变权重调整真实输出向期望输出靠拢。在感知机里,只有一个输出且每个输入只有一个权重。多层网络每个输入有多个权重,并可以同时影响多个输出。
BP神经元网络的学习算法分为两个阶段。首先,训练的输入模式送到输入层,而后一层层地传播到输出层。如果输出的模式和期望不同,误差从输出层一层层反向传播到输入层,在传播过程中修改权重。
BP网络有3到4层,各层之间完全连接,任一神经元与它前面一层的所有神经元都相连。神经元从输入得到输出的的方式和感知机相似:首先得到所有输入的加权和与阈值的差,再把这个差值传给sigmoid激活函数得到输出,这个函数很好微分且值域在0和1之间。
BP网络具体学习过程是
1、初始化:为每个神经元间的连接都赋予一个随机权重,为每个神经元都赋予一个随机阈值。第i个神经元的所有的随机值的取值范围是(-2.4/F_i, +2.4/F_i),其中F_i是该神经元上的输入的总数。初始化是以一个神经元接着一个神经元的方式来完成。
2、激活:对于隐藏层的每个神经元,根据与它相连的输入的加权和与它的阈值的差的sigmoid函数值,得到它的输出。再根据该隐藏层,计算出更前一层的所有神经元的输出,直到输出层的所有神经元的输出被算出。
3、权重训练:根据输出层的神经元的输出与其期望的输出之间的误差e,得到该神经元的误差梯度(error gradient,该输入的微分值与误差的乘积)。因为使用的函数是sigmoid:1/(1+exp[-X]),exp是以自然对数e为底的指数函数,X是输入加权和与阈值的差。sigmoid函数对X的微分是exp[-X]/{1+exp[-X]}^2,将输出Y=1/[1+exp(-X)]代入微分方程,可以得到微分值为Y*(1-Y),于是误差梯度d等于Y*(1-Y)*e。对于该神经元的(处于隐藏层的)所有输入y_i,需要更正的权重增量w_delta=a*y_i*d,其中a是学习率,这个输入的下次权重就是w+w_delta。同样的方式,隐藏层的所有神经元依次改变它的(前一层的)每个输入的权重,直到输入层的所有神经元的权重也得到了调整。
4、迭代:回到第二步再进行训练,直到误差值达到标准。

各输出的误差平方和可以用来评判这个网络的性能。由于初始的权重和阈值都是随机生成的,所以不同的训练最后得到的解决方案可能会有不同。三层网络就可以解决异或问题,
BP算法被广泛应用,但它也有一些问题。1、它和生物学习机制并不一致,生物学的神经元并不会反向传播来改变连接。2、它很慢,纯BP算法很少在实践中使用。

多层神经元网络的加速学习
用双曲线正切(hyperbolic tangent)来表示sigmoid激活函数,可以加速多层ANN的学习:Y_tanh = 2a/[1+exp(-b*X)] - a,a和b都是常量。
动量常量(momentum constant)也可以用来加速学习。每次的权重的增量w_delta = B * w_delta_previous + a * y_i * d。a、y_i、d分别是学习率、第i个输入和误差梯度,和之前相同。不同的是多了动量常量B和前一次学习时权重增量的乘积。B是属于[0,1)的正数,通常取值为0.95。这个公式也被称为广义增量规则(generalised delta rule)。当B为,它就是未加速的多层网络。动量常量有一个稳定化的效果:当向期望输出靠拢时,它可以加速学习过程;当学习趋向平稳时,它又可以减缓学习过程。两次增量同号时效果放大,两增量异号时效果减缓。

回归(recurrent)神经元网络用来模拟人类记忆的关联特性。它有从输出到输入的反馈,从而调整输入,调整后的输入产生新的输出,再次反馈回来调整输入。以此循环直到输出成为一个常量。
后续的迭代不会总是使输出的变化量越来越小,这种情况下输出永远不会成为一个常量,这样的网络也被成为不稳定的。直到1982年,John Hopfield的动态稳定网络才解决了这个问题。

一个单层的Hopfield网络由n个神经元组成,这些神经元通常使用MP模型,并用sign激活函数。每个神经元都有一个输入,以及一个输出。此外,其它神经元的输出会作为它的输入。也就是说,在有n个神经元的网络里,第i个神经元有一个输入x_i,一个输出y_i,同时前一次的所有其它神经元的输出y_1、y_2、...、y_(i-1)、y_(i+1)、...、y_n,也作为第i个神经元的输出,参与加权和的运算。
x_1、x_2、...、x_n可以表示一个n维向量,作为网络的输入。x_i的取值只能是0和1。y_1、y_2、...、y_n是网络的输出,也可以表示一个n维向量,称作状态向量。
Hopfield网络是一个完全图,所有顶点之间都有连接,因此它可以用一个n*n的权重矩阵来表示。根据sign函数,对于每个神经元,它的加权输入和小于,输出为-1;大于则输出+1;等于保持前一次的输出。
设Y_1、Y_2、...、Y_m是要记住的m个状态向量(1*n维),网络的权重矩阵W = Y_1 * Y_1_T + Y_2 * Y_2_T + ... + Y_m * Y_m_T - m * I。其中Y_i_T是Y_i的转置矩阵(n*1维),因此最后的结果是一个n*n的矩阵。I是n*n的单位矩阵(对角线元素都为1,其余元素皆是0)。这样得到的W是对角线元素都为0的对称矩阵。(可以发现,相对于多层神经元网络,权重的训练非常简单,一步到位。)

设有一个3维的Hopfield网络,我们想记住两个向量[1, 1, 1]_T和[-1, -1, -1]_T,"_T"表示转置,根据计算最后的权重矩阵里,除对角线元素都为0外,其它元素都是2。接下来就可以测试这个网络。给定输入向量X_m,输出向量Y_m=sign(W*X_m-@),@表示阈值。对于输入向量[1, 1, 1]_T和[-1, -1, -1]_T,它的输出分别是[1, 1, 1]_T和[-1, -1, -1]_T,因此它们是稳定的。三维向量一共有8个向量,其它6个向量都是不稳定的,但它们的输出要么是[1, 1, 1]_T,要么是[-1, -1, -1]_T,也就是说它经过一次迭代就变得稳定了。比如(1, -1, 1)会输出(1, 1, 1)。这样的网络就可以模拟人类的记忆,根据某种未见过的事物,联想到曾经见过的事物。这种网络也可以用来纠错。

总结起来,Hopfield网络的训练算法分为3个阶段:
1、存储:根据要记忆的模式得出权重矩阵。
2、测试:确保所有的基础记忆都能被正确地回忆。
3 、检索:对于未知的n维向量,如果检索异步完成的话,网络最后会得到一个稳定的状态。

Hopfield有它的问题,最后得到的状态并不一定是基础记忆,就算是也不一定是与输入最接近的,因此出现虚假记忆的问题。此外,它的存储容量也很小,n个神经元的网络最大存储量为0.15*n,要完美地检索基础记忆,最大存储量必须减半,为n/(4*ln(n))。

双向关联记忆(Bidirectional associative memory, BAM)在1987年由Bart Kosko提出。它和Hopfiled网络相似,可以根据不完整的输入产生正确的输出。但Hopfiled只能从n维到n维,而BAM的输入集和输出集可以不同。
BAM有两层,输入层和输出层。两层是完全连接的。输入向量X通过权重矩阵的转置W_T可以得到输出向量Y,而Y通过权重矩阵W可以得到下一个迭代的输入向量X。这个过程一直重复,直到输入和输出不再改变,也就是BAM达到稳定状态。BAM的基本理念是存储输入-输出对。当n维向量X作为输入时,m维向量Y成为输出;当Y作为输入时,输出就是X。
BAM需要为每个模式对创建一个相关矩阵(correlation matrix)。相关矩阵W = X_1 * Y_1_T + X_2 * Y_2_T + ... + X_M * Y_M_T,也就是所有输入向量与输出微量的转置的乘积的总和。它也Hopfield权重矩阵的算法相似。BAM也和Hopfiled网络一样,通常使用sign激活函数的MP神经元(Y = sign(W_T*X),X = sign(W*Y))。BAM的训练过程也是阶段:存储、测试和检索。BAM也有虚假记忆和存储容量的问题。当输入和输出的维度相同时,BAM就简化成一个Hopfiled网络。

自组织的神经元网络(Self-organising neural networks)是不需要导师(supervisor)的,而之前所见的神经元网络都需要导师来提供训练样本。Hebbian
学习和竞争学习都是基于自组织的网络。

1949年神经心理学家Donald Hebb提出Hebb法则:如果神经元A离神经元B离得足够近使可A可以刺激B使得其兴奋,重复该兴奋过程会增强这两个神经元的连接。在神经元网络里,Hebb法则可以总结为:
1、如果连接的两个神经元同步地兴奋,那么它们的连接权重增加;
2、如果连接的两个神经元异步地兴奋,那么它们的连接权重减少。

Hebb法则提供了无导师的学习,它只是局部的现象而无需环境的反馈。使用Hebb法则,改变的权重w_i_j_delta = F(y_j, x_i)。其中F(y_j, x_i)是以相邻两层的相互连接的两个神经元为参数的函数。F(y_j, x_i)可以实现为a*y_j*x_i,其中a为学习率。这种实现方式称为“活跃乘积法则(activity product rule)”。
因为权重一直在增加,如果没有限制则会变得过于饱和,因此在学习的同时还提供了一个遗忘机制:
w_i_j_delta = a * y_j * x_i - $ * y_j * w_i_j。其中$称为遗忘因子。如果$为0,那么网络只能增强权重;如里$为1,则网络几乎无法记住东西。典型的取值范围为0.01到0.1之间。
上面的式子也可以写成:w_i_j_delta = $ * y_j * (# * x_i - w_i_j),其中# = a / $。这个式子称为“泛化活跃乘积法则”(generalised activity product rule)。如果x_i比w_i_j/#小,那么权重就会减少;如果x_i比w_i_j/#大,那么权重就会增加。换句话说,“活跃平衡点”(activity balance point)就是和w_i_j/#相等的一个变量。

泛化Hebbian学习算法的具体步骤如下:
1、初始化:将所有权重和阈值都设为[0,1]之间的随机数,同时把学习率a和遗忘因子#设置成小的正数。
2、激活:在第p次迭代中计算出神经元j的输出y_j = x_1 * w_1_j + x_2 * w_2_j + ... + x_n * w_n_j - O_j。
3、学习:改变权重W_i_j_new = w_i_j + $ * y_j * (# * x_i - w_i_j)。
4、迭代:重复第2步,直到权重到达稳定的状态值。

假设有一个5维向量输入到5维向量输出的完全连接的单层神经元网络。输入向量(x_1, x_2, x_3, x_4, x_5)里,x_1分量总是为0,而x_2和x_5总是同时为0或同时为1,在经历多个这个的输入后,网络的权重值发生改变,当x_1分量为,y_1仍习惯性地输出0,而x_2和x_5不同号时,y_2和y_5仍会有同号的输出。这样的网络类似于形成条件反射--例如对于狗可以建立“铃铛”和“食物”的关联。最重要的是,这个网络可以不需要老师进行学习。

竞争学习里,神经元之间进行竞争以便被激活,在任意时刻只有一个神经元被激活。
我们的大脑由大脑皮层控制,它由数十亿的神经元和数千亿的突触组成。大脑皮层不是同构的,而是根据皮层厚度和所含神经元的类型来标识不同的区域。各个区域负责不同的人类行为(肌肉运动、视觉、听觉、体觉等),因而与不同的感觉输入相关联。每种感觉输入都被映射到大脑皮层相应的区域,换句话说,大脑皮层是人脑里的一个自组织的计算印射图。
Kohonen在1990年建立了“地形图形成理论”(principle of topographic map formation)。该理论指出在地形图里的输出神经元的空间位置对应了输入模式的一个特定的特性。Kohonen还提出了一个特性映射模型,将固定数量的输入模式映射到更高维度的输出层。  可以将Kohonen模型看作是处在三维空间里的神经元,输入层在更低的一个平面,只包含输入,没有神经元;输出层(也称为Kohonen层)是更高的一个平面,各神经元以阵列形式分布在这个平面上,比如4行4列规则排列。与一个神经元接近的另一个神经元被称为这个神经元的邻居。需要多接近才被视为邻居则完全由网络设计者决定。视为邻居的范围可以是任意方向的一个、两个甚至是三个神经元。一般说来,Kohonen网络在训练时,刚开始时竞争获胜者的邻居范围会比较大,随着训练的进行,这个范围会逐渐缩小。

Kohonen网络虽然只有单层计算神经元,但有两种连接。输入层的每个输入都和输出层的每个神经元之间有连接(将两个平面连在了一起),这种连接被称为前向连接。此外,在输出层,各个神经元两两之间也建立了横向(lateral)连接,用于创造竞争。在输出层里的所有神经元里,拥有最大活跃程度的神经元赢得竞争,它是唯一产生输出信号的。其它神经元的活性则通通被抑制。

当一个输入模式呈现给这个网络时,Kohonen层的每个神经元都获得了这个输入模式的一份完全拷贝。每份拷贝在通过输入层到Kohonen层的突触连接时根据权重而得到相应修改。横向反馈连接根据与获胜神经元的距离而产生兴奋效应或抑制效应。这种效应通过“墨西哥草帽函数”来完成:获胜者最近的邻居会得到比获胜者自身稍微少些的兴奋刺激,随着离获胜者越来越远,神经元获得的兴奋刺激会越来越小,当距离到达一定程度时,神经元不仅不受到兴奋刺激,反而还受到抑制,这个抑制效果随着距离的增加而增强,再远一点时,抑制效果又再逐渐减弱,离获胜者最远的邻居又获得稍许兴奋。在二维坐标上,横坐标为与获胜者的距离,纵坐标表示兴奋(正)或抑制(负)的程度,得到的曲线图的形状就像一个墨西哥草帽一样。这种模式也有点类似于“远交近攻”。

在Kohonen网络里,神经元通过把权重从不活跃的连接转变为活跃的连接来达到学习的目的。只有获胜的神经元和它的邻居才能学习。如果一个神经元没有响应一个给定的输入模式,那么它就不能学习。获胜神经元的输出信号为1,其它所有神经元的输出信号都被设为0。
标准竞争规则定义了突触权重w_i_j的改变量:
1、如果神经元j赢得竞争,那么w_i_j_delta = a * (x_i - w_i_j);
2、如果神经元j没能赢得竞争,那么w_i_j_delta = 0。
其中x_i是第i个输入信号,a是取值范围在(0,1)之间的学习率。
竞争学习规则的总体效果是将获胜神经元的突触权重向量W_j移向输入模式X。匹配的标准就是两个向量之间的几何距离达到最小。两个n*1维的向量X和W_j之间的距离d = ||X - W_j|| = [(x_1 - w_1_j)^2 + (x_2 - w_2_j)^2 + ... + (x_n - w_n_j)^2]^(1/2)。这个距离是连接两个(顶点在n维坐标原点的)向量的顶点的线段的长度。这个距离越小,说明两个向量越接近。在输入模式X下,权重向量与X最接近的神经元会获胜。每次迭代,获胜的神经元的权重向量会离模式X越来越接近。

总结起来,Kohonen的竞争学习算法的具体步骤为:
1、初始化:所有突触权重都设为[0,1]的随机值,并将学习率a设置为一个小的正数;
2、激活并进行相似度匹配:将输入向量X应用到网络,找到与X最匹配的神经元j_X;
3、学习:根据标准竞争规则改变获胜者(及其邻居)的权重;
4、迭代:回到第2步,直到满足了最小几何距离,或者特性映射不再有太大的变化。

阅读(5663) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~