思维逻辑-分拆

我向您介绍了有关神经网络的一系列文章,从概念上讲,它们接近于Alexei Redozubov的一系列文章为了理解材料,建议您熟悉他的文章的整个周期。该链接仅包含周期中的一篇文章,对本文有用。

KDPV
所描述的神经网络模型(以下称为NS)将比Aleksei的模型略高。这使我们能够简化对NS中发生的过程的表示和理解,从而使我们可以继续进行下层NS的更精细调整。同样,在这样的NS上进行工作可以更快地使用它们。特别是,我使用它们来解析文本,模拟鼠标在迷宫中行走以及解释类似Lisp的语言,还有许多其他应用程序。我们将在周期结束时平稳地处理这种复杂的行为。
让我们从说明这种更高级别的方法开始。阿列克谢(Alexey)在海马上的文章中有一句话:“海马形成了记忆的唯一标识符。” 让我们从执行这些操作的简单代码开始-创建一个唯一的标识符并将其连接到所描述的事件。C ++代码。我还没有上传源代码-没有准备性的解释,它们仍然没有多大用处。

NC&hippocampNewId = newNC();

代替单个神经元,主程序单元是神经簇/列。类名是NC(NeuroCluster的缩写)。由于在NS中创建了大量神经簇(在我的实验中为数十万个),因此不希望使用new运算符来隔离新的神经簇-它运行缓慢且内存开销很大。因此,使用了newNC函数,该函数使用神经簇池,并从那里分配它们。该函数代替指针,返回对NC的引用,这使代码更加方便和安全。
从概念上讲,此代码大致对应于此方法:在国民议会中,有许多神经列,有必要分配下一个弱使用的列,它将负责新的标识符。对于海马专家来说,详细说明这种隔离的发生方式是一项较低级别的任务。这也很有趣,我对如何解决它有想法,但是这样的任务太底层了,所以我们继续。
让我们编写一个遍历所有神经簇的循环周期:

用于(NC&nc:_listNC){
	如果(nc.isActive())
		//在这里,我们需要以某种方式将此神经簇与hippocampNewId连接
}


活跃的神经簇例如是任何当前的感觉,来自感觉皮层的信号,当前的动作等等。
在阿列克谢(Alexey)的模型中,将通过调整来创建这样的连接-集群将学习识别新的识别波。要创建这样的间接连接,您需要大量的计算资源-您需要大量的神经元和连接(每个神经簇一个或两个或两个神经元),大量的计算,您需要模拟识别波在整个皮质中的通过,这需要花费大量时间。我们会更轻松-直接创建软件连接:

用于(NC&nc:_listNC){
	如果(nc.isActive())
		hippocampNewId.createLinkTo(nc);
}


之后,新的海马标签需要及时与过去的记忆联系起来:
	hippocampNewId.createTimeLinkTo(_prevHippocampId);

最后,在下一个周期,我们将替换:
	_prevHippocampId = hippocampNewId;

当然,这仍然是伪代码。可以理解,这是ANN类中的代码。因此,newNC函数是HC类的成员函数。如果变量以下划线开头,则该变量是该类的成员(类似于前缀m_,而不必发音字母m,这使编程更加方便)。
Alexei的优点在于他的发现使您可以编写诸如createLinkTo之类的代码。在他发表文章之前,人们只能猜测如何将两个记忆快速链接在一起。毕竟,大脑无法立即发芽从一个神经元的轴突到另一半球的连接,因此每秒发动一百次。阿列克谢(Alexey)的技术将整个海马大脑变成一个开关,可以非常迅速地建立任意联想。大约15年前,我接受了既定机制的存在,并进行了研究,希望有一天能将其开放。仍然有一些疑问可以编写代码-但是从生物学角度看,这一切多少合理?各种各样的事实指出了这种机制的存在,最后,细节被揭露了。
好吧,我们以某种方式将当前最活跃的记忆与新的海马体标签连接起来。这给了我们什么?让我们做到这一点,以便在接收到一系列与之前记得的事件类似的事件时,记忆的时间戳可以将这些新系列识别为已经遇到的事件。然后,可以做不同的事情-例如,根据经验开始预测。
为此,请暂时移至其他任务。让ANN(人工NS)的传感器皮层感知字母。例如,从文件中读取它们。任务是创建将识别单词(例如,单词“ recognized”)的神经链。此外,这种认识应该来自几个组成部分-来自“种族”,“姿势”和“现金”三个独立的链。
该解决方案的一般原理是显而易见的,例如,在Hawkins的“分层时间记忆”中进行了描述。但是对于下面的图片,您需要给出解释(图片可以通过鼠标在标签栏中拉出,以在新标签页中打开):


1)在较旧的ANN模型中,使用了神经元簇,但使用了神经元簇(如此处所示),但现在解除了神经实验室的那些旧资源3并使它们聚集起来太累了,所以我将用最新版本的Neuro Lab 4生成的图片进行说明。因此,尽管将显示神经簇的抽象,但我将它们称为神经元-从上下文中应该很清楚我们在说什么。
2)此窗口-“二维链”选项卡-创建神经网络一部分的便捷可视化。在本文的第一张图片中,对神经网络的外观感到不舒服。并且该窗口允许您指定一个单独的神经簇,分析其连接,并仅显示通过所选连接可到达的那些簇。它连续排列簇,在下面显示子标志,在水平方向具有暂时连接。现在,更容易看到此链分析了“公认”一词。
3)可以看出,不同的簇具有不同的类型,不同的类型以不同的颜色绘制。图片显示了常见的(如果)和感觉的(传感器)神经丛-它们对应于感觉皮层。从传感器集群到真实传感器的通信没有为缺乏需求而建模。在这种情况下,仅需要一种单独类型的群集即可,以便于调试-例如,不要认为“为什么该群集无法识别任何迹象,它没有用吗?”不,不是没有用,它可以识别注释中指示的字母。
4)在弹出的绿色工具提示中(鼠标悬停时),显示了不同的字段。在工具提示的最底部,显示了群集可视化方案。不同的ANN模型可以以不同的方式可视化集群,因为它们的内容可能非常不同(各种数值变量,内部神经元的数量等),并且很清楚这些数字是什么,所以我决定给图片加上提示。
5)让我们分析一下第一个音节“种族”的识别。它包括感觉神经元6、7和9,它们由于神经元8和10以所需的顺序被识别。如果它们以不同的顺序工作,或者至少延迟一个时钟周期,则信号将不会到达神经元10。
6)根据上述方案,人们可​​能会认为,带有字母“ c”的神经元编号10从另一个音节向神经元编号20发送信号后,该信号将过早到达并且有时间消失,从而无法识别第二个音节。以前,为了解决此问题,我使用了“延迟神经元”来发送信号,以便它与另一个神经元需要的信号恰好同时到达。现在,我学习了如何使用正确的连接设置,这将在另一篇文章中进行介绍,因此不需要延迟神经元。因此,它们不在图片中。
7)这个带有神经元的电路,为了正确识别一个单词,向“右”和“上”发送信号。这对应于时间的流逝和层次结构中属性级别的增加。但是工具提示显示,传入和传出连接的数量使连接更有可能导致“中断”。这些是神经团簇操作的特征,无需注意,对于具有神经元的回路,通讯往右上移。
8)为方便起见,此窗口沿屏幕边缘绘制行和列编号以及相对于主要选定集群的操作的时间偏移-即,其标识符在输入字段中输入的标识符,并在右上方用粗框突出显示
9)稍后将描述复杂的时间格式(类型0的神经元的创建时间:0.0-0)。由于生成此NS只是为了说明,因此此处所有神经元的创建时间都相同。在实际电路中,此时间将显示时钟,在该时钟中将调入给定的神经列以识别特定属性。这是调用newNC函数的时间。然后,此信息可用于调试等。
10)当然,这样的链随时可以记住一个以上的属性(神经元可以具有任意数量的连接)。在这种情况下,由于字母被识别,因此每个时间步长神经元都有一个连接。如果有视觉链,图片将是完全不同的,具有大量的联系。出于教育目的,使用字母更容易。即使在识别字母时,也可以在一个时间戳中记住与许多类的连接-通过字母,在公认的音节结尾处,在公认的单词结尾处,伴随思考文本的平行思想。这是Neuroclusters和lisp之间的重大区别,其中car / cdr仅包含一个指针。 Lisp中的这种关系语义对于AI来说不太方便-由于单个单元格不能视为完全关联,为此,您需要从单元格中提取一个单独的属性列表,该列表可以通过非常不同的方式进行连接。因此,尝试在Lisp上使用AI的尝试立即给出了一个明显的解决方案-一个单独的字符=一个单独的单元格,并且该级别太低而无法使用,因此在Lisp上创建AI并不方便。
下一节我们将讨论条件反射的分配一些算法。

Source: https://habr.com/ru/post/zh-CN388719/


All Articles