来!人工神经网络模型最硬核干货 不看后悔
我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。
大多数人工神经网络忽略了生物神经网络的尖峰特性,这使得简化底层模型以及诸如反向传播等学习技术成为可能。
但是,这样做是否违背了生物神经网络最核心的原则了呢?
在大多数人工神经网络模型中,激活只是与神经元本身相关的实数值。然而,这并不是生物神经网络中的实态。
当一个神经元达到阈值,并且有一个确切的时间点与之相关时,就会发生激活。
而这里的前提条件是,在激活之前,其他几个输入激活已经被触发了。
以下面这样一个事件驱动的神经网络为例,神经元代表单词“the”,则代表字母“t”、“h”和“e”的神经元需要首先激发,然后才能激活代表单词“the”的神经元。发生这种情况时,就会有激活链接(activation-links)将单个字母神经元的激活与单词“the”的神经元激活联系起来。这些激活链接对应于已被激活的神经元突触。
特别之处在于,它们可以将所有激活都限定在输入数据范围内。
单词“the”可能在给定的文本中出现数百次,但是激活链接可以精确引用其中的任何一个激活。
在本文中,我将谈一谈激活链接的另外两个重要功能。
首先,激活链接可用于表示输入数据中对象(例如单词或短语)之间的关系。
在之前的文章《On integrating symbolic inference into deep neural networks》中,我讨论过这一点。然而,当时的方法仍然需要对神经模型进行一些额外的扩展,比如激活中的位置槽(position slots)和突触之间的联系。
此外,没有一个简单的方法来为这些关系链制定一个适当的训练机制。
其次,激活链接能够使歧义信息在文本中同时被评估。在《On adding negative recurrent synapses to a neural network》一文中,我描述了如何使用二叉搜索树系统地搜索给定文本的不同解释。但是,新的疑问产生了,对于这个评估来说,搜索树真的有必要使用吗?
在前面表示关系的模型中,我们可以看到位置槽被用来确定每次激活的开始和结束位置,并且突触之间的关系链接(relation-links)被用来确保字母以正确的顺序出现。
如果要去掉位置槽和关系链接,有没有方法将它们表示为规则神经元?因而,我们需要采取的第一步是添加一些神经元来表示字母之间的关系。如下图所示:
这里我们有一个关系输入神经元,仅当神经元“t”和“h”的两个输入字母激活连续发生时,它才会被激活。在前面的模型中,这种关系信息是通过槽位置之间的关系隐性给出的。而现在我们有一个神经元明确地表示这个信息。值得注意的是,激活链接是该表示的组成部分。
由于关系神经元只是一个输入神经元,所以突触不用来计算关系激活的激活值。
到目前为止,我们只有网络的输入层,但是如何将单词“the”的神经元与该输入层进行匹配呢?
我们需要一些方法来取代突触之间的关系。只有一个神经元很难做到这一点,但如果我们拆分神经元,为之前的每个突触添加一个新神经元,会怎么样呢?这些新神经元代表单词“the”的模式中出现的特定输入字母,如“t”。这种网络的模型如下图所示:
蓝色的激活链接来自正向复发性突触( the positive recurrent synapses),这意味着它们最初被认为是完全活跃的。为了保持激活的关系完整性,我们需要确保激活不会任意链接到任何输入。例如,如果单词“the”的各个字母属于不同的单词,这就没有意义。要实现这一点,添加到激活的任何输入链接必须与此激活的其他链接之一共享激活源。如果查看激活“the”-“h”,我们可以看到它有激活“t”、“h”、“the”-“t”和“the”作为连接各个输入链接的共同激活源。通过输入链接,激活“the”-“h”验证输入字母“h”的激活是否存在,激活“the”-“t”是否存在,以及是否存在将这两个输入绑定在一起的关系激活,从而将字母“t”与整个单词的模式相关联。一旦一个单词被识别,另一个神经元就可以代表与前一个或下一个单词的关系。这就是我们识别更大的模式(如短语)所需的。
现在你可能会认为,每个音节、每个单词或每个短语都需要一次又一次地训练大量的神经元和突触,这意味着大量的训练数据。事实上,并非如此。使用《Using meta-neurons to learn facts from a single training example》一文中描述的元神经元,可以用很少的示例训练一个新词。这些元神经元可以捕捉我们激活的动态结构,并将其存储为新的记忆。在这个过程中,新的神经元和新的突触会产生。换句话说,这种机制能够将在“工作记忆”中表现为激活和激活链接的知识转移到由神经元和突触组成的“长期记忆”中。因此,不需要单独的知识库来存储信息。
当负向复发性突触(negative recurrent synapses)被添加到神经网络的结构中时,神经网络获得了极大的灵活性。这对于许多现实世界的推理至关重要。因为它们能够使网络内产生相互排斥的状态。发生这种情况时,输入数据的可能解释会产生分支。许多传统人工智能研究都关注于搜索这些类型。例如,语法分析树在非常有限的语法域中搜索。问题在于,解析结果不应仅取决于语法信息,还应取决于文本中包含的各种其他信息。此外,歧义不仅存在于句法层面,也存在于语义或语用层面。在之前的工作中,我使用二叉搜索树来找到全局最优解。然而,这种方法存在一些问题。首先,人脑似乎不太可能执行类似的搜索。其次,通过将搜索路径上的权重相加并选择权重最高的路径,在网络本身的体系结构之外发生了一种信息的反向传播,这似乎是不正确的。
那么,另一种选择是什么呢?可以同时跟踪所有这些分支解释的传递吗?这里的前提条件是不能混淆这些不同的解释。因此,在一个分支中推断的激活对另一个分支应该是不可见的。然而,由于链接激活期间需要共同的激活源,因而我们可以简单地检查是否进入了另一个分支。即便有了在不同解释中传递的所有激活,我们仍然需要对不同的解释做出选择和决定,这个决定不一定是二元的,它可能是一种概率。
这种方法的一个很大的好处是,我们现在可以在此位置做出决定。这意味着这些决定应该受到未来结论结果的影响。前面提到的在搜索过程中的信息反向传播在某种形式上仍然是必要的,但有一种更简单、更优雅的方式来实现这一点:简单地使用正向复发性突触来做到这一点。这使得推理链中的早期阶段可以获知随后得出的结论。
举个例子,请看上面的网络图。这里有两个相互排斥的神经元A和B,它们通过抑制性神经元和负向复发性突触相互抑制。现在,如果我们将一个激活输入到输入神经元IN中,我们将在神经元A和B中产生激活。因为这两个神经元互相排斥,所以分支发生时有两组激活,其中激活A或激活B被抑制。从这一点开始,网络将同时产生输入数据的两种相互排斥的解释。这与使用一阶逻辑规则和非单调逻辑进行推理的正向链式专家系统(forward-chaining expert-system)非常相似。当然,这也意味着我们会遇到相同的问题――将这些规则堆叠在一起时出现的组合爆炸。但与基于逻辑的二元系统不同,神经网络凭借其带有权重的突触,为这个问题提供了一个优雅的解决方案。在训练期间,我们可以简单地惩罚被其他更有可能的解释抑制的过度激活。这里的抑制性神经元是分离的,这意味着一旦它的一个输入被激活,它就会被激发。抑制性神经元的目的是防止必须连接所有相互排斥的兴奋性神经元。
在处理文本或图像数据时,每个神经元需要多次激活,这一点也被其他神经网络体系结构(如LSTM,长短时记忆神经网络)所认识到。它们通过重复复制整个网络来解决问题,代价是每个神经元所需的固定激活次数导致了僵化。对于文本中需要处理的所有不同类型的信息,如字符、音节、单词、短语、句子、段落等,缺乏最佳的标记化水平,因此,每个神经元的激活数量需要取决于数据,而不是网络的架构。
事件驱动的神经网络有一个处理因果关系的简单机制。干预当然是不可能的,因为网络只观察,但它可以得出结论,如果激活A发生在激活B之后,A很可能不是B的原因。这一特点可以用来减轻从A到B的突触权重。
大多数神经网络结构是由神经元如何相互连接的拓扑结构定义的。相反,我认为这里描述的神经网络类型应该从一张白板开始,只包含原始的输入神经元。接着,在训练过程中,某些输入神经元会一次又一次地同步激活。这种共同的激活随后可以用来诱导和训练新的兴奋性神经元。随着时间的推移,越来越多的兴奋性神经元在经过训练后,其中的一些会变得有相似之处。所谓相似性,指的是这些神经元共享共同的输入突触,或者与特定的其他神经元共享。这些相似的兴奋性神经元可以与它的抑制性神经元一起聚集成一个元神经元(meta-neuron)。
随后,抑制性神经元充当整个兴奋性神经元组的类别神经元。正如你所看到的,这种神经网络的架构并不是由一组预定义的神经元之间的连接给出的,而是通过不同类型的神经元和突触的规范来定义。
综上,激活链接有两个重要的功能:一是贡献链接输出激活的激活值,二是将激活与输入数据中所呈现的对象进行绑定。
提交建议