基于神经元胞自动机的MNIST数字自分类

2020-08-28 04:42:43

生长神经元胞自动机展示了简单元胞自动机(CAS)如何学会在抵抗扰动的同时自组织成复杂的形状。这样的计算模型近似于生物学中一个悬而未决的问题的解决方案,即细胞如何合作创建一个复杂的多细胞解剖结构,并在受损时进行再生?该模型参数化细胞的规则是参数高效的,端到端可区分的,并说明了一种新的方法来模拟解剖内稳态的调节。在这项工作中,我们使用这个模型的一个版本来说明CA如何应用于机器学习中的一个常见任务:分类。我们提出了一个问题:CA是否可以使用本地消息传递来就它们组成的数字达成全球协议?

我们的问题与发育和再生生物学中另一个悬而未决的问题密切相关:细胞群如何决定器官或组织模式是否正确,或者当前的解剖结构是否需要重建(针对特定目标形态的解剖监视和修复)。例如,当科学家们通过手术将一条蜥蜴尾巴移植到它的侧翼时,它慢慢地重塑成了肢体--属于这个位置的器官。同样,头面部器官位置错误的蝌蚪通常会变成正常的青蛙,因为它们会重塑自己的脸,将眼睛、嘴巴、鼻孔等放在正确的位置。当获得了正确的青蛙特有的解剖结构时,细胞群就会四处移动,然后停下来。所有这些例子都说明了生物系统确定其当前解剖结构并决定其是否与特定物种的目标形态相匹配的能力。尽管最近在这一过程所需的基因分子生物学方面取得了进展,但对于足以让细胞集体测量和分类自己的大规模形态学的算法,仍然存在基本的知识差距。更广泛地说,重要的是创建群体智能的计算模型,明确定义和区分单个细胞与细胞集体的基础认知的动态。

假设在网格上排列了一组代理。他们不知道自己在网格中的位置,只能与他们的近邻通信。它们还可以观察邻居是否丢失。现在假设这些代理排列成一个数字的形状。假设所有代理都在相同的规则下操作,它们是否可以形成一个通信协议,以便在多次通信迭代之后,所有代理都知道它们正在形成哪个数字?此外,如果一些代理人被移除并添加,以便从先前存在的数字中形成一个新的数字,他们是否能够知道哪个是新的数字呢?

由于数字不是旋转不变的(即6是9的旋转),我们假设代理必须知道它们相对于网格的方向。因此,虽然他们不知道自己在哪里,但他们知道上、下、左、右在哪里。这里的生物类比是这样一种情况,即重塑结构存在于较大的身体和一组指示关于三个主要身体轴的方向信息的形态原梯度或组织极性的背景下。在这些前提下,我们介绍了自分类MNIST任务。

MNIST数据集的每个样本都由一幅28x28图像组成,该图像具有一个单色通道,该通道通常以灰度显示。标签是[0,9][0,9][0,9]中的整数。

我们的目标是让组成数字的所有单元格都能正确输出数字的标签。为了将这种结构信息传达给细胞,我们通过将图像的值重新缩放到[0,1]来区分活细胞和死细胞。然后,如果细胞在MNIST样本中的值大于0.1,我们将其视为活细胞。这里的直觉是,我们将活细胞放入饼干切割机中,并要求它们识别饼干切割机的整体形状。正如您在上面看到的,我们通过为每个单元格分配颜色来可视化标签输出。在整篇文章中,我们使用相同的颜色和标签之间的映射。请注意,交互式演示控件中有一个滑块,如果您在区分默认颜色时有困难,可以使用它来调整调色板。

在本文中,我们使用生长细胞自动机中描述的神经细胞自动机模型的变体。我们建议不熟悉其实现的读者参考最初的“模型”部分。在这里,我们将描述我们的模型与原始模型不同的几个领域。

生长CA的工作使用RGB图像作为目标,并优化前三个状态通道来近似这些图像。在我们的实验中,我们将细胞的最后10个通道视为每个可能的标签(数字)上的伪分布。在推理过程中,我们只需选择标签

在生长CA的过程中,我们根据细胞的阿尔法通道的强度和相邻细胞的活动情况,将细胞的状态指定为“死”或“活”。这与康威的“人生游戏”的规则相似。在正在生长的CA模型中,“活的”细胞是更新其状态的细胞,而死亡的细胞是“冻结的”,不会进行更新。与生物生命不同的是,我们所说的“死亡”细胞并不是从根本不存在或腐烂的意义上说是死亡的,而是冻结的:它们对邻居是可见的,并在整个模拟过程中保持其状态。同时,在这项工作中,我们使用输入的像素值来确定细胞是活的还是死的,并只对活细胞进行计算,正如上一节所介绍的那样,如果细胞的归一化灰度值大于0.1,则认为细胞是活的。重要的是要注意,MNIST像素的值作为单元状态的不可变通道暴露给单元更新规则。换句话说,我们让细胞意识到它们自己的像素强度以及它们邻居的像素强度。给定19个可变单元状态通道(9个用于通信的通用状态通道和10个用于数字分类的输出状态通道)和一个不变像素通道,每个单元感知19+1个状态通道,并且仅输出19个可变状态通道的状态更新。

关于数字拓扑的一个注记。热心的读者可能会注意到,我们的模型要求每个数字都是一个单一的连通组件,才能进行分类,因为任何断开的组件都无法在它们之间传播信息。我们做出这个设计决定是为了忠实于我们的核心生物学类比,它涉及一组试图识别其全局形状的细胞。尽管来自MNIST的绝大多数样本是完全连接的,但也有一些不是完全连接的。我们不希望我们的模型正确地对未连接的次要组件进行分类,但我们不会删除它们。这一选择使MNIST神经网络分类器与CAS的训练/测试精度之间的比较变得复杂。然而,这样的比较不在本文的讨论范围内。

发展中的CA文章利用固定的3x3卷积和Sobel滤波器来估计x⃗\vec{x}x⃗和y⃗\vec{y}y⃗​中的状态梯度。我们发现完全可训练的3x3内核的性能优于它们的固定对应内核,因此在这项工作中使用了它们。

关于模型尺寸的说明。与不断增长的CA模型一样,按照深度学习的标准,我们的MNIST CA也很小-它的参数不到25k。由于这项工作旨在展示一种新的分类方法,我们不试图通过增加参数数量或任何其他调整来最大化模型的验证精度。我们怀疑,与其他深度神经网络模型一样,人们将观察到精度与模型大小之间的正相关关系。

在我们的第一个实验中,我们使用与在生长CA中讨论的相同的训练范式。我们用初始样本库进行训练,以允许模型学习持久存在,然后扰动收敛状态。然而,我们的微扰是不同的。以前,我们随机破坏细胞的状态,以使CA抵抗破坏性的扰动(类似于创伤性组织丢失)。在这种情况下,微扰扮演的角色略有不同。在这里,我们的目标是建立一个CA模型,它不仅具有再生特性,而且当整体数字形状变化时具有自校正能力。

从生物学上讲,这对应于发育过程中的畸形影响,或者是不正确或不完整的重塑事件,如变形或重生。从头开始训练我们的模型和训练它适应扰动之间的区别是微妙但重要的。生命的一个重要特征是对外界干扰做出适应性反应的能力,而这些干扰在正常的事件发展序列中没有被考虑到。如果我们的虚拟细胞只是简单地学习识别一个数字,然后进入某种休眠状态,对任何进一步的变化都没有反应,我们就会错过活着的有机体的这一关键特性。人们可以想象一种在没有扰动的情况下的平凡解决方案,其中一波信息从数字的边界向内传递,然后再向外传递,这样所有细胞都可以就正确的分类达成一致。通过对新的数字引入扰动,细胞必须保持持续的交流,并实现“动态稳态”--不断地“保持警惕”,以期待来自邻居的新的或进一步的交流。

在我们的模型中,我们通过在训练时随机变异底层数字来实现这种动态动态平衡。从某个数字开始,经过一段时间的进化,我们采样一个新的数字,擦除所有不存在于两个数字中的细胞状态,并使

上面的视频显示了CA对一批数字进行了200个步骤的分类。然后我们对数字进行变异,让系统进一步进化和分类200步。

总体而言,结果看起来很有希望,我们可以看到我们的CA如何能够从突变中恢复过来。然而,敏锐的观察者可能会注意到,通常并不是所有的细胞都彼此一致。通常,大多数手指的分类是正确的,但一些离群值细胞仍然相信它们是不同手指的一部分,经常以振荡模式来回切换,导致可视化中的闪烁效果。这并不理想,因为我们希望细胞数量达到稳定的总体一致。下一个实验解决了这种不受欢迎的行为。

量化定性问题是解决问题的第一步。我们提出了一个度量来跟踪平均单元准确率,我们将其定义为具有正确输出的单元的平均百分比。我们跟踪突变前后的这一指标。

在上图中,我们显示了在400个步骤的过程中,测试集中正确分类像素的平均百分比。在步骤200,我们随机变异该数字。因此,当细胞重新组织并最终就新数字是什么达成一致时,我们看到准确率会短暂下降。

我们立即注意到一个有趣的现象:在细胞达成一致之后,细胞的准确性似乎随着时间的推移而下降。但是,该图不一定反映我们着手解决的不稳定标签的定性问题。精确度的缓慢下降可能是缺乏完全一致的反映,但并没有反映出明显的不稳定问题。

与其看平均协议,也许我们应该衡量完全协议。我们将总一致性定义为来自给定批次的样本的百分比,其中所有单元格输出相同的标签。

此指标在捕获我们看到的问题方面做得更好。总协议从零开始,然后飙升到大约78%,结果在接下来的100个步骤中失去了10%以上的协议。同样,突变后的行为似乎没有明显的不同。我们的模型不仅在短期内不稳定,表现出闪烁,而且在更长的时间尺度上也不稳定。随着时间的推移,细胞对自己越来越不确定。让我们检查CA的内部状态以了解为什么会发生这种情况。

上图显示了活动单元状态值的平均幅度(实线)和剩余更新的平均幅度(虚线)的时间演变。这里发生了两件重要的事情:1)每个单元内部状态的平均大小在这个时间尺度上单调增长;2)剩余更新的平均大小大致保持不变。我们的理论是,与1)不同,一个成功的CA模型应该在细胞达成协议后稳定其内部状态的大小。为了实现这一点,它的剩余更新应该随着时间的推移接近于零,这与我们在2)中观察到的情况不同。

采用L2L2L2​损耗。交叉熵损失的一个问题是它往往会无限期地推高原始logit值。另一个问题是,两组Logit可能具有非常不同的值,但对类的预测本质上是相同的。因此,训练具有交叉熵损失的CA既不需要也不鼓励logit值的共享参考范围,从而使得单元难以有效地通信和稳定。最后,我们理论认为,分类通道中的大震级可能反过来导致剩余的(非分类)状态通道转变到高震级区域。更具体地说,我们认为交叉熵损失会导致分类日志的无界增长,从而防止剩余更新趋于零,这意味着相邻小区即使在达成协议后也会继续相互传递消息。最终,这会导致消息向量的大小无限增长。考虑到这些问题,我们转而尝试使用像素L2L2L2​损失来训练我们的模型,并使用一个热向量作为目标。直观地说,此解决方案应该更稳定,因为用于分类的原始状态通道永远不会超出范围[0,1][0,1][0,1],并且单元中正确分类的数字将恰好有一个分类通道设置为1,其余的设置为0。综上所述,L2L2L2​损失应在保持分类目标在合理范围内的同时降低所有内态通道的幅度。

向剩余更新添加噪声。许多流行的正则化方案涉及向模型中注入噪声以使其更稳健。在这里,我们通过从均值为0且标准差为2×1 0−2 2\x 10^-2 2×1 0−2的正态分布抽样,向剩余更新添加噪声。我们在随机掩蔽更新之前添加此噪声。

上面的视频显示了一批在适当位置进行了增强的运行。从质量上看,结果看起来好多了,因为闪烁更少,完全一致更多。让我们检查一下量化指标,看看它们是否也有改善。

上图和上表显示,在所有模型中,交叉熵在大约80步时达到了最高的精度。然而,2 0 0步的精度与L2L2 L2​+噪声模型相同。虽然所有模型的准确性和一致性都随着时间的推移而降低,但L2L2L2​+噪声似乎是最稳定的构型。特别值得注意的是,L2L2L2​+噪声经过2 0 0步后的总符合率为88%,比交叉熵模型提高了2 0%以上。

让我们将增强模型的内部状态与原始模型的内部状态进行比较。上图显示了切换到L2L2L2​损耗如何稳定状态的大小,以及当系统接近一致时,剩余更新如何快速衰减到较小的值。

为了进一步验证我们的结果,我们可以可视化最终模型的内部状态的动力学。出于可视化目的,我们通过按元素应用a r c t a n arctan a r c t a n来压缩内部状态值,因为大多数状态值小于1,但少数状态值要大得多。状态快速收敛到稳定构型,状态通道表现出与邻近状态的空间连续性。更具体地说,我们没有看到相邻像素的状态值有任何明显的不连续。应用突变会使CA重新适应新的形状,并在几个步骤内形成新的分类,之后其内部值是稳定的。

回想一下,在培训期间,我们使用随机数字突变来确保生成的CA对外部变化做出响应。这使我们能够学习一种动态的代理人系统,这种系统相互作用,在种群水平上产生稳定的行为,即使在受到干扰时形成了与原始数字不同的数字。从生物学上讲,这个模型有助于我们理解一些大规模解剖调控机制的突变不敏感性。例如,在数百万年的体细胞遗传过程中,盘藻不断积累突变,但仍然总是在自然界中再生正确的形态(并且没有表现出具有新形态的遗传菌株)。

这种对更改的健壮性对于我们的交互式演示至关重要,因为当用户更改绘图时,单元格需要对绘图进行重新分类。例如,当用户将6转换为8时,细胞需要迅速将自己重新分类为8。我们鼓励读者参与互动演示,亲身体验。在本节中,我们想展示一些我们觉得有趣的行为。

上面的视频显示了CA如何能够根据我们自己的书写进行交互调整,并在图形更新时更改分类。

在机器学习领域,研究人员对他们的模型如何处理非分布数据非常感兴趣。在本文的实验部分,我们在MNIST的测试集上对我们的模型进行了评估。在本节中,我们将进一步研究模型对我们提取的、根本不是来自MNIST的数字的反应。我们改变数字的形状,直到模型不再能够正确地对它们进行分类。每个分类模型都固有地包含某些归纳偏差,这些偏差使它们或多或少具有对非分布数据的泛化的健壮性。我们的模型可以看作是一个递归卷积模型,因此我们期望它表现出传统卷积模型的一些关键性质,如平移不变性。然而,我们坚信这个模型的自组织性质引入了一种新的归纳偏差,这种偏差可能有它自己有趣的特性。生物学提供了“修复到新构型”的例子:双头浮萍一旦被创造出来,就会再生成进化“列车”中没有的这种新构型。

.