忆阻器交叉开关像PI一样简单

2020-09-24 00:07:56

看起来你对我们做的事很感兴趣。订阅我们的时事通讯,了解最新进展、产品公告和知识新闻。

忆阻器纵杠和一般的忆阻器可能很难使用。在设备齐全的大学和政府实验室之外,很难获得实践经验。制造和测试这些设备所需的设备可能很难获得,而且往往贵得离谱。多年来,Knowm一直提供忆阻器Discovery入门学术套件、廉价的PCB板、忆阻器芯片和用户手册,旨在与勤奋的模拟发现2(AD2)配套使用。虽然忆阻器发现非常适合于收集少量忆阻器的经验,但我觉得是时候采取下一步了。在过去的几个月里,我将注意力集中在一个新的忆阻器研究和教育平台的设计和制造上,该平台与一台Raspberry Pi单板计算机配对。该平台使任何有互联网连接的人都可以访问12到192个纵横杆上的数千个忆阻器,这取决于它的配置方式。我称之为“KT-RAM服务器”。

在这篇文章中,我将回顾KT-RAM的一些关键概念和“单元交叉开关”概念,然后回顾新的KT-RAM Raspberry PI服务器的构建和初步测试。

该平台使任何有互联网连接的人都可以访问12到192个纵横杆上的数千个忆阻器,这取决于它的配置方式。

忆阻器提供了通向我所说的“有效智能”的最清晰的途径之一,也就是人工智能竞赛的终局。要使人工智能有效,它必须(1)从算法的角度或我所说的“主要性能”来实际工作,以及(2)它必须是空间、体积和能量高效的,也就是我所说的“次要性能”。虽然现代机器学习主要是将训练/学习从推理中分离出来,但智能是学习的同义词。也就是说,人工智能军备竞赛的终局是关于建造最有效的学习处理器。持续的在线学习,规模化,在一个小而节能的软件包中--也就是所谓的“大脑”。当然,现代创纪录的神经网络算法的巨大规模,以及生物大脑的巨大规模,都表明了一个不可否认的事实:有效的人工智能处理器需要非常节能。在我们上路的时候,人们只需要看到信封后面的计算就行了。

在计算中,能量主要不是由逻辑本身消耗的,而是由逻辑步骤之间的信息移动消耗的,尤其是进出存储器的信息。当我们访问突触记忆时,我们可以估计充电导线所消耗的能量。我们只是假设我们有一些突触,每个突触都有一定的位精度,我们必须通过信息流动时必须充电和放电的电线来访问这些突触。

这个方程式讲述了一个简单的故事。突触处理器将变得密集,突触存储器和逻辑之间的间隔将非常小或为零。突触权重将是低精度的或模拟的。活动模式将是稀疏的,因为不是所有神经元的输入都将同时活跃。无论是学习还是推理,工作电压都会很低。关于学习,这引入了一个有趣的问题,我称之为“适应能力问题”。除了在正常电子设备之外运行的突破性技术之外,终端游戏电子突触处理器将具有这些特征。我认为突破不会是量子计算(不实用)或光学计算(光子不喜欢相互作用,需要学习),至少在学习突触处理器方面是这样。

我们都要去哪里并不是一个谜,我们或多或少都同意这一点。一旦算法起作用(“初级性能”),人们就会争先恐后地让它变得高效而廉价(“次级性能”)。所有这些热词,如“稀疏”、“降低精度”、“模拟”、“新奇记忆”等等,都源于上面的等式。当Google家伙谈到“支持新颖内存和计算结构的稀疏框架”,或者Intel家伙谈论“更好地利用内存和稀疏性、精确度和模拟性”时,他们都只是在评估问题,并意识到答案显然存在于某个方向,特别是上面那个简单的等式所定义的方向。我把我们在实现“支持新颖内存和计算结构的稀疏框架”方面的工作称为KT-RAM技术栈,这是我多年来一直致力于的工作。我们的“新奇记忆”是金属掺杂的自定向沟道忆阻器,我们的稀疏框架是我称之为稀疏尖峰编码的东西,我将在下面解释这一点。

多年来,我一直梦想着一种新的突触处理芯片,它将软件和硬件的概念融合到一个极端的程度,以至于这些概念失去了意义。一种芯片,当放在机器人平台上时,可以让那些原本没有生命的肢体进行协调,并获得类似生命的目的。追忆电阻器实现了这个梦想,这就是我觉得它们如此令人兴奋的原因。KT-RAM技术堆栈是一个“支持新颖内存和计算结构的稀疏框架”,我多年来一直致力于此以实现这一梦想。每隔一两年,我就会在软件和硬件之间来回切换,从新颖的忆阻器启发算法到实际的硬件,然后再回来,同时我还能理顺这些纠结。虽然很容易用粗略的笔触描绘假想的忆阻器解决方案,但在现实中,有许多挑剔的现实世界细节会阻碍你。KT-RAM是关于找到一条从“原子到AI”的实用路径,这个项目一直是我生活中的一条主线-所有拼图的谜题。

交叉开关是神经网络层的全对全矩阵连接的“物理”解决方案。事实上,几乎每个人都是这样对待它们的,这也是我大约20年前第一次想要使用它们的方式。然而,这种方法存在严重的实际问题。如果横杆的输入是稀疏的,那么我们就得到了所谓的偷袭路径问题。从电驱动列/行通过中间电浮动列/行的不想要的电流路径将导致不想要的误差。随着忆阻器纵横杆的变大,这个问题会变得更糟。不幸的是,如果我们依赖交叉开关作为我们网络的拓扑匹配,那么它们需要很大。从生物学的角度来看,大脑皮层神经元有数千个输入。小脑中的Purkenjee神经元有数十万个输入。也许更重要的是,许多实用的神经网络算法需要数千个权重。

潜行路径问题的一种解决方案是将“选择器器件”与每个忆阻器串联。一个例子是与忆阻器串联的存取晶体管,称为“1T1R”(一个晶体管一个电阻器)配置。选择器晶体管并不理想,因为它们甚至在考虑行/列存取电路之前就消耗了忆阻器阵列下的集成芯片的有源部分。已经提出了用作二极管的新型忆阻器,以及将新型的类二极管材料集成到现有的忆阻器材料中。然而,所有这些解决方案都忽略了一个更大的概念点。

当涉及到拓扑时,神经网络计算有明显的权衡。如果我们希望使用忆阻器来加速具有全对全连接的特定神经网络层,那么最有效的硬件解决方案将是该特定架构的直接映射。横杠看起来是个好主意,偷偷走道的问题经不起推敲。然而,也有反对这一点的论点,最值得注意的是一般性的公用事业。硬件应该以最小的限制加速各种拓扑。我喜欢非拓扑硬件架构,因为我不想在开发算法时被束缚住手脚。虽然一些特定的深度神经网络可能是本月的风尚,但我仍然想探索决策树,或者非常大和稀疏的输入,或者实际上是我想要的任何东西。我想要很多突触,该死的,我不想被告知如何使用它们。对我来说,这就是横梁(似乎)坏掉的地方。我说“看起来”是因为我仍然会使用横杠--我只是要用不同的方式来使用它们。在我解释如何实现之前,我需要回顾一下我们的“稀疏框架”。了解如何对信息进行编码,使其与数字通信和新型忆阻器存储器无缝兼容,使计算体系结构的设计变得容易得多。

在讨论在非拓扑KT-RAM中使用交叉开关之前,我们需要回顾一下如何对信息进行编码。我称它为尖峰代码,但它与其他尖峰神经形态芯片的尖峰并不完全相同。它更数字化,神经形态更少,更接近二进制网络中使用的二进制代码-在某些情况下,它会减少到这一点。

假设我们有属于一个神经元的N个突触或权重的集合:

每个输入都可以由某个输入信号激活(或不激活),其结果可归结为“神经元激活”,我们称之为y:

为了简单起见,也因为我认为这是有效人工智能的终极游戏,让我们假设输入模式x是稀疏尖峰表示。这意味着任何时候只有一小部分可用输入被激活,当它们被激活时,它们的值为1。因此,对于一个有64个输入的神经元,一个可能的稀疏尖峰模式如下所示:

由于64个可能的输入中有两个是活动的(峰值),我们说它的稀疏度为2/64或0.03125%。由于大多数输入为零,因此我们可以通过仅列出正在尖峰的输入的索引,以更有效的方式编写此尖峰模式:

我们称之为“尖峰集”或“尖峰模式”,有时也称其为“尖峰”。尖峰空间是尖峰通道的总数,在本例中为64。在某些情况下,例如在自然语言处理中,尖峰空间可以一直达到250,000或更多。在其他情况下,尖峰间隔可以只有两个或四个,例如逻辑门。将尖峰空间描绘成一大束线(轴突)是一种很好的方式,其中线的总数是尖峰空间,在任何给定时间处于活动状态的线的集合是尖峰模式。我们称这个线束和其中包含的信息为尖峰流。将数据转换为稀疏尖峰表示的算法或硬件称为尖峰编码器。眼睛、耳朵和鼻子都是尖峰编码器的例子。

尖峰编码器(眼)、流(线束)、通道(线)、间距(线数)、图案(活动通道)和尖峰(活动状态)。

虽然有很多方法可以将信息编码为尖峰信号,但需要说明的是,现代数字生活中的信息已经是尖峰信号编码的,我们只是不这样称呼它。例如,ASCII代码将256个尖峰空间中的整数映射到字符。我们可以直接将此代码用作尖峰代码。例如,单词“word”翻译为尖峰模式:[119,111,114,100]。数字图像也已经是尖峰编码的。例如,256R-G-B编码图像中的每个像素在768(256×3)的尖峰空间中给出长度为3的尖峰图案(对于红色、绿色和蓝色分量)。出于其他原因,直接使用这个尖峰代码可能不是一个明智的选择,但它仍然是一个尖峰代码。通常,如果将状态或状态组合映射到离散整数,则创建的是尖峰代码。代码不必是稀疏的,但稀疏表示有其优点。

尖峰编码的一个奇妙之处在于它真的很高效,因为我们可以去掉乘法,只总结正在尖峰的突触:

如果你在想“天哪,用一捆N根导线在N个尖峰空间里传输尖峰信号是没有效率的”,我们会说“同意”。但我们会说“我们实际上并没有那样做”。我们只是通过数字总线传递尖峰信号(整数),这就是现代计算机已经使用的编码和传输信息的方式。这比尝试映射连续数学要“自然”得多,就像普通的“连续”神经网络算法所做的那样。我毫不怀疑物理学的限制将把最先进的机器学习算法推向离散通信和低精度权重。在许多方面,它已经做到了。

当您决定采用尖峰表示时,映射到可伸缩的“类似内存的”架构变得相当容易掌握。神经元是N个差分对忆阻器突触的集合。尖峰流生成尖峰模式,其中每个尖峰是尖峰空间中的整数。如果尖峰间距等于神经元的大小,那么尖峰模式中的尖峰直接标示神经元的突触。这简化了硬件设计,可以减少或消除我们必须分配给“地址表”的内存使用,在地址表中,神经元ID进入,突触的地址出来。突触计算成为在不同时间步开启或“激活”不同突触子集的过程。

为了更容易理解,我们来看一下假想的KT-RAM内核。假设我们有一个64大小的小核心。为了计算棘波模式的神经元激活,我们将激活突触0和6,然后命令“AHAH控制器”执行读取指令:

只是为了让硬核(双关语)硬件人员不会感到不安,我们在这里并不是完全诚实的。因为一个核心可以“多路复用”,所以同一核心上可以存在许多较小的神经元。在这种情况下,分配给核心的每个AHAH节点都将有一个分区索引,并且要激活的突触的实际地址是分区索引加上尖峰id。它与随机存取存储器没有太大不同,这才是真正的意义所在。信息和通信是数字的,而模拟突触权重是“就地”存储、读取和修改的,而不必传输它们的状态。电压很低。活动稀少。权重以模拟值的形式存储在新的忆阻器存储器中。

在我回到横杠之前还有最后一件事。在这一点上,许多人要求我解释更大的神经体系结构或学习算法。这就像要求构建SRAM的人解释他们更大的计算体系结构,这当然是没有意义的。KT-RAM是一个构建块,就像SRAM是一个构建块一样。它可以在许多架构中使用。其目的是提供突触整合和学习资源。就这样!。您可以形成运行硬编码KT-RAM例程的专用KT-RAM内核的特定拓扑,也可以构建与CPU配对的非常大的通用内核,并运行您能想到的任何例程。学习算法并不是固定的-有多种可能的学习算法,仅受KT-RAM指令集的限制。我使用我们内部的模拟工具Knowm API来开发和测试基于KT-RAM指令集调用的算法。

考虑一个由行和列双向(直通)模拟多路复用器和一个小纵横制形成的小“单元”纵横制,如下图所示。我们称其为“单位横杆”。

单元交叉开关允许在任何给定时间访问阵列中的N×M个忆阻器之一,其中N是列数,M是行数。如果在位线“SEL-C”上指定有效列,在位线“SEL-R”上指定有效行,并且使能输入为低(或高,但比方说低),则阵列中被寻址的忆阻器将看到施加到SS(“源极”)和DD(“漏”)线的全部电压。让我们把这一切重新画成一个符号,如上面的“B”所示。例如,如果我们使用8×8单元交叉开关,则该电路允许我们在任何给定时间访问64个忆阻器中的一个,或者不访问。孤立地看,单元纵横制只能存储和检索单个模拟值。不是完全没用,但也不是很有趣。然而,正如“Unit Crossbar”这个名称可能暗示的那样,更大的想法是从基本单元形成更大的架构。因此,让我们这样做并恢复一个纵横杆:

每个单元纵横杆暴露地址位和使能位,允许每个单元纵横杆中的特定忆阻器耦合到较大的纵横杆。因为单元纵横杆充当选择器装置,所以可以使用由单元纵横杆形成的大型纵横杆阵列来执行所需的计算,而不会产生潜路电流问题。虽然可以用唯一的使能和选择线路来控制每个单元交叉开关,但是从电路资源的角度来看,这样做的成本可能很高。取而代之的是,单元交叉开关可以共享选择的控制线并使用行/列启用线。这可以在下面看到,其中我们使用相同的选择位来从每个纵横制单元以及与NAND门相结合的行和列使能线(EC0/ER0、EC1/ER1等)选择来自每个纵横制单元的相同的相对行/列,以用于该单元纵横制使能信号。

以这种方式,我们已经创建了更理想的“元交叉开关”,其中元素可以以类似于选择器设备的方式与活动行和列隔离。然而,由于纵横杆的每个忆阻器元件由一个单位纵横杆形成,我们实际上已经创建了N个可由选择位线(S)选择的截然不同的较大纵横杆。虽然乍一看,使用单元纵横杆成本过高,但在考虑到较大的加速器或网络(例如,具有数十层甚至数百层的深层神经网络)的情况下,这实际上是一种合理的策略。在此上下文中,单个元阵列可以处理整个网络,或者可以处理用于多个应用的多个网络,每个网络都可通过选择位(S)来选择。

等等,但我刚才不是说过我不想束缚自己的手脚吗?虽然我们可以使这个“元交叉开关”非常大,但是由于可以减少较大数组中的偷偷路径,我真的想要一个更适合非拓扑KT-RAM的通用数组。如果我们用内存位替换NAND行/列选择,并将所有列和所有行连接在一起,我们可以得到非拓扑KT-RAM半核:

我说“半芯”是因为记忆电阻突触是由差分对形成的。需要差异来表示突触状态(正向和负向)

在继续之前,先快速澄清一下上面的图表。行和列解码器显然不是由2输入与非门阵列形成的。相反,每个与非门必须有多个输入,其中是列数或行数,是地址位/线数。所展示的只是一个简略的概念。

如果你对烧钱不感兴趣,那么在开发基于忆阻器的突触处理器时,会有一个先有鸡还是先有蛋的问题。在构建真正有用的芯片之前,您应该令人信服地解决现实世界的基准测试,以证明其主要(算法)性能。然而,为忆阻器突触处理器开发健壮的算法需要访问忆阻器突触处理器。单纯依靠仿真是有风险的,因为我不知道有任何忆阻器模型或电路仿真引擎能够完全捕捉真实电路中嵌入的真实忆阻器的复杂性,同时允许在合理大小的计算机上合理地模拟合理大小的网络。

.