生长中的 Neural Cellular Automata
摘要
本文探讨了 Neural Cellular Automata 作为一种计算模型,其灵感来源于生物形态发生和再生,展示了简单的局部规则如何导致复杂的全局行为。
暂无内容
查看缓存全文
缓存时间: 2026/05/19 22:05
# 成长型神经细胞自动机
来源:https://distill.pub/2020/growing-ca/
### 目录
- 学会生长 (https://distill.pub/2020/growing-ca/#experiment-1)
- 存在即持续 (https://distill.pub/2020/growing-ca/#experiment-2)
- 学会再生 (https://distill.pub/2020/growing-ca/#experiment-3)
- 旋转感知场 (https://distill.pub/2020/growing-ca/#experiment-4)
本文是**可微分自组织系统**主题系列 (https://distill.pub/2020/selforg/) 的一部分。该系列采用实验性格式,汇集了关于可微分自组织系统的受邀短篇论文,并穿插了来自相邻领域多位专家的批判性评论。
可微分自组织系统主题系列 (https://distill.pub/2020/selforg/) [自分类MNIST数字](https://distill.pub/2020/selforg/mnist/)
大多数多细胞生物的生命始于一个单一的卵细胞——这个细胞的子代可靠地自我组装成高度复杂的解剖结构,每次都以完全相同的方式排列许多器官和组织。构建自身身体的能力可能是每个生物体拥有的最基本技能。形态发生(生物体形状发育的过程)是称为**自组织**现象最引人注目的例子之一。细胞作为身体微小的构建单元,通过与邻居通信来决定器官和身体图谱的形状、每个器官的生长位置、如何相互连接以及最终何时停止生长。理解简单规则如何产生复杂结果,以及稳态自调节反馈环路(试图在外部扰动下维持身体稳定状态或保持正确整体形态)之间的相互作用,是一个活跃的研究领域。可以明确的是,进化已经学会了利用物理定律和计算能力,来实现高度稳健的形态发生软件,该软件运行在基因组编码的细胞硬件上。
这个过程对扰动极其稳健。即使在生物体完全发育后,某些物种仍具有修复损伤的能力——这个过程称为再生。一些生物,如蝾螈,可以完全再生重要器官、肢体、眼睛甚至部分大脑!形态发生是一个令人惊讶的适应过程。有时,即使是非常非典型的发育过程也能产生可存活的生物体——例如,当一个早期哺乳动物胚胎被切成两半时,每一半都会形成一个完整的个体——同卵双胞胎!
这个领域最大的谜团是:细胞集体如何知道该构建什么以及何时停止?基因组学和干细胞生物学只是谜题的一部分,因为它们解释了特定组分在每个细胞中的分布以及不同类型细胞的建立。虽然我们知道许多基因是再生过程所**必需**的,但我们仍然不知道那个**足够**让细胞知道如何构建或重塑复杂器官以达到特定解剖终点的算法。因此,生物医学未来工作的一个关键点是发现大规模解剖结构如何在细胞集体中被指定,以及我们如何重写这些信息以获得对生长和形态的理性控制。此外,越来越清楚的是,生命的软件拥有许多模块或子程序,例如“在这里构建一只眼睛”,可以通过简单的信号触发来激活。发现这些子程序并描绘发育逻辑是一个新兴领域,位于发育生物学和计算机科学的交叉点。接下来的重要步骤是尝试构建这一过程的计算模型,这既能丰富生物学家的概念工具箱,也有助于将生物学的发现转化为更好的机器人和计算技术。
想象一下,如果我们能设计出具有与生物生命相同可塑性和稳健性的系统:能够生长和自我修复的结构和机械。这种技术将改变当前再生医学的努力,科学家和临床医生正试图发现能够使体内细胞按需构建结构的输入或刺激。为了帮助破解形态发生编码的谜题,并利用生物学的洞见在现实中创建自我修复系统,我们尝试在**计算机模拟**实验中复制一些期望的性质。
## 模型
工程学科的研究人员经常使用多种包含局部相互作用的模拟,包括偏微分方程(PDE)系统、粒子系统和各种元胞自动机(CA)。我们将重点关注元胞自动机模型,作为识别能够产生集体复杂再生行为的细胞级规则的努力路线图。CA通常由一个网格细胞组成,这些细胞被迭代更新,每一步对每个细胞应用相同的规则集。细胞的新状态仅取决于其直接邻域中少数细胞的状态。尽管CA表面上简单,但它们经常展现出丰富有趣的行为,并且被广泛应用于模拟生物现象已有很长的历史。
让我们尝试开发一个元胞自动机更新规则,从单个细胞开始,在二维网格上产生一个预定义的多细胞模式。这是我们模拟生物体发育的类比玩具模型。为了设计CA,我们必须指定可能的细胞状态及其更新函数。典型的CA模型使用一组离散值表示细胞状态,尽管也存在使用连续值向量的变体。使用连续值的好处是允许更新规则成为细胞邻域状态的可微分函数。基于局部环境指导单个细胞行为的规则,类似于由生物体基因组编码的低层硬件规格。从起始配置运行我们的模型固定步数,将揭示这种硬件所支持的模式形成行为。
那么——可微分更新规则有什么特别之处呢?它们将允许我们使用强大的损失函数语言来表达我们的愿望,并利用围绕基于梯度的数值优化的现有大量机制来实现它们。堆叠可微分函数并优化其参数以执行各种任务的艺术历史悠久。近年来,它以各种名称蓬勃发展,如(深度)神经网络、深度学习或可微分编程。
模型的一次更新步骤。
### 细胞状态
我们将每个细胞状态表示为一个由16个实数值组成的向量(见上图)。前三个通道代表我们可见的细胞颜色(RGB)。目标模式的颜色通道值在[0.0, 1.0]范围内,其α等于1.0(前景像素)和0.0(背景)。
Alpha通道(α)具有特殊含义:它标记了活细胞,即属于正在生长的模式的细胞。具体来说,α > 0.1的细胞及其邻居被认为是“活的”。其他细胞是“死的”或空的,其状态向量在每个时间步被显式设置为0.0。因此,α > 0.1的细胞可以被视为“成熟”,而它们邻居(α ≤ 0.1)是“正在生长”的,如果其α超过0.1阈值,则可以变为成熟。
当没有邻居的α > 0.10时,状态向量 → 0.00
隐藏通道没有预定义的含义,由更新规则决定如何使用它们。它们可以被解释为某些化学物质的浓度、电势或细胞用来协调生长的其他信号机制。就我们的生物学类比而言——所有细胞共享相同的基因组(更新规则),仅通过它们接收、发射和内部存储的化学信号(它们的状态向量)中所编码的信息来区分。
### 元胞自动机规则
现在是时候定义更新规则了。我们的CA在16维向量的规则二维网格上运行,本质上是一个形状为[高度, 宽度, 16]的三维数组。我们希望将相同的操作应用于每个细胞,并且此操作的结果只能依赖于细胞的小型(3x3)邻域。这强烈类似于卷积操作,这是信号处理和可微分编程的基石之一。卷积是一种线性操作,但可以与其他逐细胞操作结合,产生能够学习所需行为的复杂更新规则。我们的细胞更新规则可以分为以下几个阶段,按顺序应用:
**感知。** 此步骤定义了每个细胞对其周围环境的感知。我们通过一个固定内核的3x3卷积来实现这一点。有人可能会认为定义这个内核是多余的——毕竟我们可以让细胞学习必要的感知内核系数。我们选择固定操作的原因是基于这样一个事实:现实生活中的细胞通常只依赖化学梯度来指导生物体发育。因此,我们使用经典的Sobel滤波器来估计细胞状态通道在x和y方向上的偏导数,为每个状态通道在每个方向上形成一个二维梯度向量。我们将这些梯度与细胞自身状态连接起来,为每个细胞形成一个16*2+16=48维的**感知向量**,或者更确切地说,是**被感知向量**。
def perceive(state_grid):
sobel_x = [[-1, 0, +1],
[-2, 0, +2],
[-1, 0, +1]]
sobel_y = transpose(sobel_x)
# 在 x、y 和通道维度上对状态进行 Sobel 滤波卷积
grad_x = conv2d(sobel_x, state_grid)
grad_y = conv2d(sobel_y, state_grid)
# 将细胞的状态通道、x 方向通道梯度
# 和 y 方向通道梯度连接起来
perception_grid = concat(
state_grid, grad_x, grad_y, axis=2)
return perception_grid
**更新规则。** 现在每个细胞将对感知向量应用一系列操作,包括典型的可微分编程构建块,如1x1卷积和ReLU非线性激活,我们称之为细胞的“更新规则”。请注意,更新规则是学习得到的,但每个细胞都运行相同的更新规则。参数化此更新规则的网络大约有8000个参数。受残差神经网络的启发,更新规则输出对细胞状态的增量更新,该更新在下一个时间步之前应用于细胞。更新规则被设计为表现出“什么都不做”的初始行为——通过将更新规则中最后一个卷积层的权重初始化为零来实现。我们还避免对更新规则最后一层的输出应用ReLU,因为对细胞状态的增量更新必然能够从状态中增加或减少。
def update(perception_vector):
# 以下伪代码操作单个细胞的感知向量。
# 我们的参考实现出于性能原因使用一维卷积。
x = dense(perception_vector, output_len=128)
x = relu(x)
ds = dense(x, output_len=16, weights_init=0.0)
return ds
**随机细胞更新。** 典型的元胞自动机同时更新所有细胞。这意味着存在一个全局时钟,同步所有细胞。依赖全局同步并不是人们期望从自组织系统中得到的东西。我们通过假设每个细胞独立执行更新,等待随机时间间隔再更新来放松这一要求。为了模拟这种行为,我们对更新向量应用随机的逐细胞掩码,以某个预定义概率(我们在训练中使用0.5)将所有更新值设置为零。此操作也可以看作是对更新向量应用逐细胞dropout。
def stochastic_update(state_grid, ds_grid):
# 将更新向量中的随机部分清零
rand_mask = cast(random(64, 64) < 0.5, float32)
ds_grid = ds_grid * rand_mask
return state_grid + ds_grid
**活细胞掩码。** 我们想要模拟从单个细胞开始的生长过程,不希望空细胞参与计算或携带任何隐藏状态。我们通过显式将空细胞的所有通道设置为零来强制执行这一点。如果一个细胞的3x3邻域中没有“成熟”(alpha>0.1)细胞,则认为该细胞为空。
def alive_masking(state_grid):
# 将 alpha 通道作为“生命”的度量
alive = max_pool(state_grid[:, :, 3], (3,3)) > 0.1
state_grid = state_grid * cast(alive, float32)
return state_grid
## 实验1:学会生长
学习目标模式的训练方案。
在我们的第一个实验中,我们简单地训练CA在随机次数的更新后达到目标图像。这种方法相当幼稚,会遇到问题。但它带来的挑战将帮助我们完善未来的尝试。
我们将网格初始化为零,除了中心的一个种子细胞,该细胞的所有通道(除RGB外)都设置为1(我们将种子的RGB通道设置为零,因为我们希望它在白色背景上可见)。一旦网格初始化,我们迭代应用更新规则。对于每个训练步骤,我们从[64, 96]范围内随机采样CA步数,因为我们希望模式在多次迭代中保持稳定。在最后一步,我们对网格中的RGBA通道与目标模式应用逐像素的L2损失。这个损失可以通过时间反向传播(训练循环神经网络的标准方法)对更新规则的参数进行可微分优化(我们观察到训练不稳定,表现为训练后期损失值的突然跳跃。我们通过对参数梯度应用逐变量L2归一化来缓解这个问题。这可能产生类似于权重归一化的效果。其他训练参数可在随附的源代码中找到)。
一旦优化收敛,我们可以运行模拟,看看我们学习到的CA如何从种子细胞开始生长模式。让我们看看当我们运行它超过训练中使用的步数时会发生什么。下面的动画展示了几个不同模型的行为,这些模型被训练来生成不同的表情符号模式。
您的浏览器不支持视频标签。许多模式在较长时期内表现出不稳定性。在笔记本中重现 (https://colab.research.google.com/github/google-research/self-organising-systems/blob/master/notebooks/growing_ca.ipynb#scrollTo=4O4tzfe-GRJ7)
我们可以看到,不同的训练运行可以导致模型具有截然不同的长期行为。有些倾向于死亡,有些似乎不知道如何停止生长,但有些碰巧几乎是稳定的!我们如何始终引导训练产生持久模式?
## 实验2:存在即持续
理解上一个实验不稳定的一个方法是将其与动力系统类比。我们可以将每个细胞视为一个动力系统,每个细胞共享相同的动力学,并且所有细胞之间局部耦合。当我们训练细胞更新模型时,我们正在调整这些动力学。我
相似文章
Show HN:高分辨率 Neural Cellular Automata
介绍了一种高分辨率 Neural Cellular Automata,它运行在粗网格上,并使用 Local Pattern Producing Network 生成高分辨率输出,从而实现高效的程序化生成。
Smart Cellular Bricks:面向物理世界的集体智能(阅读时间约11分钟)
Sakana AI 及其合作者推出了 Smart Cellular Bricks,这些物理模块化单元运行相同的 Neural Cellular Automata,通过本地通信共同推断其全局形状,无需中央控制器。系统展现出对噪声和故障的鲁棒性,能够进行形状分类和损伤恢复。
Show HN: Neural Particle Automata
介绍了 Neural Particle Automata,一种使用光滑粒子流体动力学感知来学习自组织粒子动力学的方法,使粒子能够拥有局部感知向量以执行更新规则,类似于神经细胞自动机,但在连续粒子位置上。
使用MetaNCA的架构泛化
本文介绍了元神经细胞自动机(MetaNCA),这是一个学习局部更新规则以自组织神经网络权重而无须反向传播的框架,在MNIST和CIFAR-100上可扩展到200万参数的网络,并能泛化到未见过的架构。
看见声音
Mariano Salcedo 是 MIT 新设音乐技术与计算研究生项目的首批学生之一,他正在利用神经元胞自动机生成由音乐音频流驱动的自再生视觉作品。