11.2 基本概念和术语

理想情况是,所有的这些概念应该同时提出,因为它们最终需要依赖彼此间的相互阐释,才能获得完整的理解。然而这是不可能的,所以我们将以一种特殊的顺序提出这些主题。但需要注意的是,只有在一种完整的神经网络框架提出和得到检验之后,才能明白所有这些概念是如何整合在一起的。

连接和权值

我们首先从各个单元之间的连接开始介绍,这些连接被认为是与理想化了的轴突、树突和突触间的连接所作的一种类比,用线段或者“棱脊”表示。每个连接均有明确的方向,负责传递兴奋(箭头或正数表示)或抑制(实心点或负数表示)。最后,最重要的是每个连接均有一个“权值”或“强度”,由一个具体数值表示,表明这个连接传递了多少激活作用(如果是正数表示兴奋,而如果是负数则表示抑制)。一般而言,权值的记法表示的是从一个单元到另一个单元的连接强度。但与通常直观的理解不同,如:W21,表示的是从单元1到单元2的连接权值,而不是反过来。在这个例子中,单元1向单元2传递了半个(0.5)激活作用,权值为正表示兴奋,为负表示抑制。

单元和激活

单元,或者从环境(“输入单元”)中获得激活作用并传递给其他单元,或者从其他单元获得激活作用,再传递给环境(“输出单元”),还可能从其他单元获得激活作用再传递给另一些单元(“隐层单元”)。“单元”或“节点”可以看作是理想化的神经元胞体。单元用圆圈表示,由一条线段引入(输入),或者一条线段引出(输出),或者两者兼有。

每个单元都处在某种激活状态:正值、零或负值。每个单元对所有向它输入的单元的激活值进行加和(“群收”),每个单元同样可以将激活值传递给所有与它有输出关系的单元(“群发”)。加和的输入值称作“净”输入激活。计算净输入值,最简便的方法是把各个输入单元的独立输入值相加。这个净激活值再与先前单元的激活值相加,形成单元(新的)当前激活状态。为求简化,在一些例子里我们使新的激活状态等于净激活值。之后这个单元把激活值传递给其他单元,就是输出激活。因而在一个单元中存在三种过程:净激活、当前激活以及输出激活。

激活作用从一个单元到另一个单元的传递形式可以视作一种对它们的约束作用。当整个联结网络运作时,每个单元都试着满足其单向输入单元的竞争约束。当整个联结网络满足约束条件的数目不再增加时,就进入了稳定状态。

计算净激活值、当前激活值以及输出激活值有很多规则,我们稍后提及。现在我们介绍一种最简单的规则,即每个单元的当前激活值与输出激活值等于净输入激活值,单元的净激活值等于所有群收之和,每个输入值为上一个单元的输出值与它权值的乘积:

(N)

净输入激活值=群收之和

这样,整个过程就包括接收与其连接单元的加权输入,将所有加权输入加和形成净输入,以及将净激活输出。

编程和计算

对网络进行编程,就是设定它的激活规则,阀值(如果有)以及对每个连接赋予权值,可由程序员完成,或者网络通过训练自身获得某组权值。当机器以第二种方式配置的时候,我们就说它已经学会了如何获得权值,而不是通过程序员编程完成。但一旦通过学习获得了某权值组,之后它还会将这组权值应用于另一个网络。稍后我们再回到这个问题。

示例

单元C从两个单元获得输入:单元A通过连接传递了0.7的激活值而增强了0.3倍;单元B通过连接传递了1.0的激活值而增强了0.5倍。对于C来说,净输入值是多少呢?使用公式(N),首先必须对每个单元(A,B)的输出乘以它们与单元C的连接权值。对于A来说是0.7×0.3=0.21,对于B为1.0×0.5=0.5。之后将这两个数值相加得到:0.21+0.5=0.71。这就是C的净激活值。

简单网络

思考一个简网络的例子。这个网络有四个单元(A,B,C,D);每个输入单元将激活作用通过连接传递到输出单元。但为了能够计算,我们需要对它设置传递规则和权值(?),给它某种输入(??),计算其输出(???)。现在通过(1)为每个连接设定权值,(2)指定每个单元在下一步中接收和传递激活作用的计算规则。

联结权值

A-C=0.1;A-D=0.3;B-C=0.2;B-D=0.4

激活

令净激活值为加权输入之和——公式(N),令当前激活值等于净激活值,输出值等于当前激活值。在这个简化的系统中,净激活值通过(N)在每个单元中传递(但并不总是这样,回忆前面有关NETtalk网络的讨论)。

计算

现在给定这个网络输入,然后计算其输出。输入:让两个输入单元都获得1.0的激活作用——图上部括号内说明。单元A获得1.0的激活作用,因而它的净激活值就是1.0(参见公式(N)),因此它传递的激活值也是1.0。单元B也是如此。单元C同时从A和B得到激活作用,因此根据公式(N),C的净激活值这样计算:从每个单元输出的激活值乘以其连接的权值。对于A来说为1.0×0.1=0.1,B是1.0×0.2=0.2。根据公式(N),将这两个数值相加得到C的结果0.1+0.2=0.3,即:

A净输出:1×0.1=0.1

B净输出:1×0.2=0.2

和=0.3

因此单元C的净激活值是0.3。由于输出值等于净激活值,输出值也是0.3。单元D也从A、B获得了激活作用,因此它的计算也遵照同样的方法:

A净输出:1×0.3=0.3

B净输出:1×0.4=0.4

和=0.7

因此,D的净激活值是0.7。由于输出值等于净激活值,输出值也是0.7。因此在这个简单网络1中,依照程序设计,C和D括号里的为输出值,A和B括号里的为输入值。

模式联结器

我们已经解释了在简单网络中的计算。下面这个有时称作“模式联结器(pattern Associator)”的网络,也用来阐释网络的计算。但我们也将用它阐明联结网络的几个附属特征:兴奋与抑制、模式联结、缺省输入以及叠加输入模式。

结构

它共有8个单元(4个输入和4个输出),分列成两层。上一层的每个单元都与下一层的每个单元相连接(Rumelhart and McClelland,1986a:33-40)。

编程

与前面相同,令每个单元的输出值等于其净输入值(N)。每个连接设定某一权值,一些是兴奋(+),另一些为抑制(-)。当网络非常复杂的时候,这些设置很难像前面一样简明地展示出来,因此需要引入一种更加清晰的矩阵模型。这两种编程技术是等价的,可以按照规则从一个等价转换到另一个。

问号表示权值,为问号设定不同的数值,会得到一种完全不同的网络。我们以矩阵为例,通过设定数值,使网络可对玫瑰外观(输入单元的激活)与玫瑰香味(输出单元的激活)间建立起联系。

假设玫瑰外观可以分解为四个基本部分:A,花瓣的形状;B,花瓣的整体构造;C,花瓣的颜色;D,花茎。我们同样假设它们与玫瑰香味之间存在真实的对应关系(虽然尚为得到科学或香水产业的证明)。按照这种设计,令每一个节点的特定激活值代表玫瑰的某一具体的组成部分。例如,节点A的激活为“1”,代表花瓣的形状;节点B是“-1”,代表花瓣的构造;节点C为“-1”,代表花的颜色。其他的输入和输出节点也是如此。

计算

设定每个输入单元的激活值后,就可以计算出每个输出单元的激活值。例如,设定输入节点(A,B,C,D)的值称为(“输入矢量”)为〈1,-1,-1,1〉:

A:1

B:-1

C:-1

D:1

根据前面给出的公式(N),每个输出单元的激活值就是四个加权输入值之和,如,E的输出:

连接 权值

A-E: 1×-0.25=-0.25

B-E:-1×0.25=-0.25

C-E:-1×0.25=-0.25

D-E:1×-0.25=-0.25

和=-1.00

因此单元E的净激活值是-1,由于它的输出等于净激活值,所以它的输出也是-1(见玫瑰网络中的括号内说明)。现在我们可以说玫瑰网络产生了单元E的输出结果,其输入矢量为〈1,-1,-1,1〉,输出值为-1。F,G,h的输出也遵循相同的计算,得出下面的值:

E:-1

F:-1

G:1

h:1

因此,玫瑰网络的输出矢量为:〈-1,-1,1,1〉。

练习1 根据公式(N),运用计算E值的方法证明F,G,h的值。

玫瑰网络按输入矢量〈1,-1,-1,1〉计算后得出输出矢量〈-1,-1,1,1〉,就是将输入矢量转换为输出矢量。这种转化就是将输入矢量乘以连接权值(在玫瑰网络中用权值矩阵说明),然后将之加和。298这就是联结网络的基本计算方法,换个(传统的)说法就是,使输出矢量与输入矢量产生联结。如果输入矢量表示比如说是玫瑰的直观特征,输出矢量表示玫瑰的香味,那么玫瑰网络就实现了玫瑰的外观与其香味之间的联系——可以通过玫瑰的外观知道玫瑰的香味。

缺省输入

有趣的是,如果给网络一个错误或缺省的输入(不输入),它仍能够进行有效计算——网络并不会因此而瘫痪。举个例子,假如玫瑰网络中单元C并没有输入激活,它的输入也就是‘0’(因为C是颜色检验器,这个玫瑰网络可能会显示一张玫瑰的黑白照)。在这种情况下,我们就需要以新的输入矢量〈1,-1,0,1〉,重新计算单元的输出。再以单元E的输出为例,按照公式(N)计算得到:

连接 权值

A-E: 1×-0.25=-0.25

B-E:-1×0.25=-0.25

C-E:0×0.25=0

D-E:1×-0.25=-0.25

和=-0.75

因此,经过对新的缺省输入矢量〈1,-1,0,1〉(如缺少颜色)的计算,E的输出激活值为-0.75。同样地计算F,G,h单元的输出,得到:

E:-0.75

F:-0.75

G:0.75

h:0.75

练习2 证明F,G,h的输出结果。

可见,玫瑰网络将缺省输入矢量〈1,-1,0,1〉转化为输出矢量〈-0.75,-0.75,0.75,0.75〉。对比正常数据与缺省数据:

正常:〈1,-1,1,1〉

缺省:〈-0.75,-0.75,0.75,0.75〉

这表明,虽然输出结果不同,但符号模式是一样的,正如鲁梅尔哈特和麦克莱兰德(1986a:35)所说:“……模式作为系统的反应……(输入正确的数据符号)会准确地激活所有单元;即使有时其准确性会出现某种程度的削弱,但其完整的模式……还是会呈现出来。”

叠加网络

联结网络还有一个重要的,也有一点奇怪的属性,就是它们可同时储存不止一对输入-输出矢量间联结的能力。为说明这一点,我们构造另一个联结网络,沿着同样的线路,如玫瑰网络一样,但联结的是山羊状貌与山羊气味(也可见Rumelhart and McClelland,1986a:35)。同样的,我们假设输入节点得到不同的激活数值可表示山羊的状貌,输出节点的激活值表示山羊的气味。正如括号里说明的数据,这个网络将山羊状貌——输入矢量〈-1,1,-1,1〉,转换为山羊气味——输出矢量为〈-1,1,1,-1〉。

计算

现在需要证明,玫瑰和山羊的联结网络不会使山羊的气味像玫瑰(反之也不会)。设定在这个网络中,山羊状貌矢量为〈-1,1,-1,1〉,看看会得到什么样的结果。同前边的计算一样,首先详细地计算第一个输出单元E的结果:

连接 权值

A-E:-1×0 =0

B-E:1×0=0

C-E:-1×0.5=-0.5

D-E:1×-0.5=-0.5

和=-1

到目前为止一切顺利,但山羊气味的矢量和玫瑰香味的矢量都是以-1开始(输出单元E中,两个矢量都是以-1为起始输出值)。因而,为了确保我们是在正确的轨道上,应该计算一个山羊和玫瑰气味值不同的输出单元。正如我们看到的,对于玫瑰F=-1,但是对于山羊F=1。那么对于F单元,从玫瑰-山羊网络中会得到怎样的山羊矢量呢?

连接 权值

A-F: -1×-0.5=0.5

B-F:1×0.5=0.5

C-F:-1×0=0

D-F: 1×0=0

和=1

单元F的输出值1,对应山羊状貌的输入矢量,这是正确的。

练习4:证明玫瑰-山羊网络中,山羊气味对应山羊状貌,玫瑰香味对应玫瑰外观。技术性补充 输入矢量具有某些限制,网络才能够实现同时储存。这些限制部分地与网络包含单元的个数,对于网路而言输入矢量间是否分离,以及应用的算法类型相关。两个输入矢量间必须具备哪种关系,才能够使联结网络能够同时学习这些矢量,而不相互产生干扰?两个矢量必须为正交矢量。当两个矢量V1,V2彼此处于垂直关系时,那么它们就是正交的。也就是说,它们的内乘积(数量积)=0。

例如,令V1=〈-1,1,1,-1〉,V2=〈1,1,1,1〉。V1和V2之和=0,即-1×1(=-1)+1×1(=1)+1×1(=1)+-1×1(=-1)=0,它们的关系就是正交。在一个n维(单元层)系统中,至少存在n个相互正交的矢量。

递归网络

在这节中,我们前面介绍的都属于顺向网络,也就是说激活作用在网络中从输入到输出没有回溯环路。如果引入这样的环路,网络可以循环激活(可以将之想象为形成简单记忆——回顾第3章赫伯回响环路),这样网络便随时间变化而产生了某些演化现象。在一个网络中,即使只局限在三层网络,也有很多种反馈激活的方式。例如,指定单元层上的不同单元可以反馈到其他不同单元层上,或者也可以要求在同一层上所有单元向它自身所在单元层反馈。可以说“初级的(三层)递归网络”,要么(1)高层向低层反馈,要么(2)指定层向自身反馈。

而“扩展的(三层)递归网络”则包含一个独立的单元扩展层,可以向(a)隐单元层,或者(b)输入单元层反馈(有时这种区分的术语在各种文献中常常被忽略)。艾尔曼(Elman,1990a,1990b,1992)提出了一种著名的扩展递归网络。在他的网络中具有他称作“背景层”的单元层,能够从隐单元层得到既定(未修正的)连接,然后再以修正的连接反馈给隐单元层。

这个扩展“背景层”能够储存网络前一步的激活,也简单地储存了前一步激活的效果。从背景层中获得这样的信息,隐单元层就有了先前活动的记录;在t+1时刻,输入隐单元层的信息中同时包含t时刻的信息;t+2时刻的输入信息包含了t+2,t+1和t时刻所有信息。递归网络可以运用这些信息执行随时间扩延的任务——如果在网络中能够找到连续且独立的数据。

递归网络以前向三层网络(通常是反向传递,如NETtalk所运用的)相同的算法训练,艾尔曼(1990a)说明了递归网络如何发现各种不同领域中的序列规则。

字母预测

例如,艾尔曼构建的一种递归网络,包括6个输入单元,20个隐层单元和6个输出单元,以及6个背景单元。基于以下规则构建了字母表:

1.首先,三个辅音字母b,d,g随机组合,获得一个包含1000个字母的序列。

2.然后,用下面规则,替换辅音。在b后面引入元音a,d后面引入元音ii以及g后面引入元音uuu:

b→ba

d→dii

g→guuu

304这样就产生了一个辅音和元音串,如diibaguuubadiidi-iguu…既然起始辅音的顺序是随机的,那么任何学习机器都不能预测它们的具体位置,因而对每个辅音预测的错误率很高。但由规则引入元音序列a,ii,uuu后,就可以完全预测了。就是说,一旦任何发现序列中的b,d或者g,机器能够知道它后面紧接着的是哪个元音以及元音的个数。递归网络就是这样进行字母预测的。在训练200次后,基于原始序列的遵循三个元音规则的新序列会被机器提出。但也如预期一样,辅音产生了随机的错误,但是机器仍能预测元音以及它们的个数。

字母-单词预测

艾尔曼调整了辅音和元音串的顺序,形成15个单词(单词之间不存在间隔)。有200个句子,每个句子中包含这些单词中的4到6个。这样200个句子就排列成了包含1270个单词的序列。单词分解为字母,就是一个包含4963个字母的字母串。设置一种包含5个输入单元,20个隐层单元和背景单元,以及5个输出单元的递归网络。把字母串向这个网络完整地呈现10次,这个次数对于网络来说太少了,因此它不可能记住整个序列。测试时,尽管产生了一些错误,但网络已经能够识别重复出现的“类单词”字母组。开始时,网络对某一单词的起始字母有很高的错误率(它并不知道后面接着的单词是什么),但一旦它识别了这个单词的起始字母,预测以那个字母开头的单词,就会变得非常容易了。后来艾尔曼还将网络扩展到识别口语中简单句子中的单词,之后又识别了复杂句中插入从句的单词。