机器学习基本架构的介绍

150 阅读5分钟

Machine Learning Is Not Like Your Brain Part 3: Fundamental Architecture
照片: Alex wongon Unsplash

今天的人工智能(AI)可以做一些非凡的事情。不过,它的功能与人脑实现相同任务的工作方式几乎没有关系。为了使人工智能克服其固有的局限性,并推进到人工通用智能,我们必须认识到大脑和人工对应物之间的差异。

考虑到这一点,这个由九部分组成的系列研究了生物神经元的能力和限制,以及这些与机器学习(ML)的关系。在本系列的前两部分中,我们研究了神经元的缓慢性如何使得在神经元中学习的ML方法变得不可信,以及感知器的基本算法与涉及尖峰的生物神经元模型有何不同。第三部分研究了ML和大脑的基本架构。

我们都见过ML神经网络的有序层的图,其中每一层的神经元都与下一层的神经元完全相连。相比之下,大脑似乎包含很多明显无序的连接。由于追踪大脑中的单个连接是如此困难,我们不知道大脑的分层结构究竟是什么。但很明显,它不是ML的有序的逐层结构。

这一根本区别极大地影响了可用于ML的算法。虽然我们没有过多考虑感知器和ML算法对有序分层结构的依赖程度,但如果我们允许感知器有来自网络中任何任意神经元的突触,就会出现问题。

突触计数

在一个每层都与下一层完全连接的神经网络中,突触的数量随着每层神经元数量的平方而增加(假设所有层的大小相同,便于计算)。如果你允许任何神经元连接到网络中的任何其他神经元,突触的数量就会随着网络中神经元总数的平方而增加。一个每层有1000个神经元的10层网络将有总共900万个突触(输出层不需要突触)。如果任何神经元可以连接到其他任何神经元,就有可能出现1亿个突触,性能可能会受到11倍的影响。

在大脑中,这些突触大部分是不存在的。新皮层有160亿(16x109)个神经元,任何神经元都有可能连接到其他任何神经元,或者有256x1018个可能的突触--256个外字节,每个突触有一个字节,这是一个大得惊人的数字。然而,实际的突触数量估计为每个神经元104个,总共只有16x1013个,这只是一个惊人的大数字(160太字节)。

这些突触中有很大一部分必须具有接近零的权重。这些 "等待中的突触 "是为了在需要时通过迅速改变权重来储存记忆。不管怎么说,我们最终得到的是一个 "稀疏数组",其中大部分条目为零。虽然想出一个只表示非零突触的结构是很简单的,但如果我们这样做的话,今天的GPU所带来的惊人的性能提升很可能会丧失。

感知器算法

感知器的基本算法是将前一层的输入值相加。如果你允许来自后续层的连接,你需要区分已经从前面几层计算出来的神经元内容和尚未计算的内容。如果算法不包括这个扩展,那么感知器的值将取决于神经元的处理顺序。在多线程实现中,这使得感知器的值不确定。

为了纠正这个问题,感知器算法需要两个阶段,有两个内部值:PreviousValue和CurrentValue。在第一阶段,该算法根据输入神经元的PreviousValues计算其CurrentValue。在第二阶段,它将其当前值转移到先前值。这样一来,所有用于计算的PreviousValues在第一阶段的计算过程中是稳定的。 这种算法的改变清除了问题,同样也带来了性能上的损失。

在开源的Brain Simulator II中的NeuronBase.cpp文件中(https://github.com/FutureAIGuru/BrainSimII)有这种两阶段算法的实现。为了恢复这种性能,我们可以建立定制的硬件,或者利用尖峰模型的优势,除非神经元发射,否则不需要处理。在一台16核的台式电脑上,上述算法的时钟频率为每秒25亿次突触。

数据结构

由于人类新皮质的160亿个神经元中的每一个都不可能与所有其他的神经元完全连接,我们可以转变为一种更像生物结构的数据结构。这样,每个神经元只表示有用的突触,维护一个只有这些突触的列表或数组。这在内存方面要有效得多,而且有可能更快,因为不需要处理所有这些零条目。然而,这确实损害了GPU的处理优势,因为今天的GPU并不擅长处理支持这种结构所需的小数组、循环和if-clauses。

反向传播

将一个更随机的神经元/突触结构适应于ML的真正问题是反向传播算法不能很好地适应它。逆向传播的梯度下降依赖于一个稳定的误差面。只要我们允许循环连接,这个表面就不再是随时间变化而不变的。