文章阅读目录大纲
Github开源地址:https://github.com/xieguigang/flywire
本文是"果蝇赛博生命"三部曲的第二篇。上一篇我们讲明白了脉冲神经网络(SNN)的原理:神经元是会漏水的桶,脉冲是它们唯一的语言。但一个悬而未决的问题是——桶和桶之间的水管,到底怎么接? 传统的做法是训练出来的。而我们的做法更"莽":直接把一只真实果蝇的全脑接线图下载下来,照着抄。
一、先回答一个灵魂问题:为什么是果蝇?
有人一听"果蝇大脑仿真",第一反应是:"就这?蚂蚁脑子都比它大吧?"
恰恰相反,选果蝇不是因为它笨,而是因为它聪明得恰到好处。我们来算一笔账:
| 物种 | 神经元数量 | 能干什么 | 全脑连接组测绘进度 |
|---|---|---|---|
| 线虫 C. elegans | 302 | 吃、蠕动、躲 | 早已完成(1986 年) |
| 果蝇 | 约 13.9 万 | 飞、求偶、学习、睡觉做梦 | 已完成(2024 年) |
| 小鼠 | 约 7000 万 | 上述全部 + 更多 | 遥遥无期 |
| 人类 | 约 860 亿 | 写博客、吐槽果蝇 | 别想了 |
线虫的 302 个神经元太简单,仿出来也没啥可看的;人脑 860 亿个神经元,按照当前技术,光是把数据存下来都是国家级工程。而果蝇卡在黄金分割点上:数量小到能测完,行为复杂到值得测。
果蝇虽然脑子只有芝麻大,却能导航、能记住哪里有食物、能打架、能求偶唱歌,甚至被科学家证明会睡觉做梦。一个能做梦的动物,其大脑值得被完整抄下来。

二、FlyWire 项目:给大脑做"CT"的正确姿势
我们的数据来自 FlyWire 项目(https://flywire.ai/),由普林斯顿大学等机构主导。他们做的事可以概括为一场"暴力美学":
2.1 第一步:切香肠
把一只 5 天大的成年雌性黑腹果蝇(学名 Drosophila melanogaster,实验代号 FAFB,Female Adult Fly Brain)的大脑取出来,用电子显微镜切成大约七千片超薄切片——每片厚度约 40 纳米,差不多是头发丝直径的两千分之一。然后逐片在高分辨率下成像。
是的,想要看清大脑,第一步是把它变成香肠片。科学有时候就是这么简单粗暴。
2.2 第二步:玩 7000 层的"大家来找茬"
有了图像还不够,得回答两个问题:
- 每片图像上,哪些像素属于哪个神经元?(分割)
- 相邻切片上,哪些碎片其实是同一个神经元?(对齐与拼接)
想象一个 7000 层的立体拼图,每层都有几百万块碎片,而且相邻层的碎片边界必须严丝合缝地接上。FlyWire 组织了全球志愿者在游戏化界面上人肉校对,用 AI 打底、人工精修,历时数年终于拼完整只果蝇的大脑。
2.3 第三步:数"电话线"
神经元拼出来了,还得找出它们在哪儿握手。两个神经元的连接处叫突触(synapse)——A 神经元的轴突末梢靠近 B 神经元的树突,中间隔着约 20 纳米的缝隙,信息靠神经递质分子像传纸条一样递过去。
FlyWire 的最终成果,是一份完整的连接组(Connectome):大脑里每一个神经元、每一个突触的清单。本质上,这就是这个大脑的完整电话通话记录——谁给谁打了电话、打了多少次,全在上面。

三、FAFB-v783 数据集:数据长什么样?
我们使用的是 FAFB 数据集的 v783 版本(更新于 2025 年 6 月),核心数据量如下:
- 139,255 个神经元(细胞);
- 约 5067 万个突触(连接);
- 约 117 万条注释(神经元的功能标注、类型划分等);
- 大脑划分成 80 个脑区(neuropil,神经纤维网)。
那么问题来了:一个"大脑"怎么用几张 CSV 表格装下?我们挑关键的几张介绍。
3.1 连接表 connections.csv —— 全脑通话记录
这是整个数据集的灵魂。每一行长这样(示意):
pre_root_id(打电话的), post_root_id(接电话的), syn_count(打了几个电话)
720575940632103110, 720575940625058214, 23
720575940632103110, 720575940639521165, 3
...
一个神经元给另一个神经元打电话,生理学上就是"传递神经递质";syn_count 是突触数量,可以粗略理解为这条连接的强度。打了 23 通电话,显然比 3 通电话的关系铁。
有趣的小细节:原始连接表有 5000 多万行,我们实际加载时过滤掉了突触数小于 5 的"点头之交",剩下约 534 万条"靠谱关系"。塑料友谊,在神经科学里也是要被剪掉的。
3.2 分类表 classification.csv —— 每个神经元的工牌
这一表给每个神经元标注了它在信息流中的岗位。最关键的一列叫 flow:
| flow 取值 | 数量 | 白话解释 |
|---|---|---|
afferent(传入) |
5,536 | 感觉神经元:把外界信息(光、气味、味觉)送进大脑的"入口大门" |
efferent(传出) |
441 | 运动神经元:大脑的"出口指令",指挥肌肉干活 |
intrinsic(内在) |
约 13.3 万 | 中间的广大"处理层",思考本身发生的地方 |
请记住 5,536 和 441 这两个数字。第三篇里,果蝇玩贪吃蛇的全部魔法——游戏画面从 5,536 个感觉神经元灌进去,操作指令从 441 个运动神经元读出来——靠的就是这张表。这是大自然的接口规范,我们只是照章办事。
3.3 类型表 consolidated_cell_types.csv —— 8772 种职业
139,255 个神经元被归并为 8,772 种类型。有负责视觉的、嗅觉的、听觉的,还有专门探测"我在哪儿撞了一下"的本体感受器。分类的好处是:电刺激实验时,我们可以点名刺激某一类神经元,比如"只刺激所有视觉神经元",看看大脑会做出什么反应——这相当于在果蝇的梦里放幻灯片。
3.4 其余表格
coordinates.csv:每个神经元在大脑里的空间坐标(约 23.9 万行),三维可视化的点云来源;neuropil_synapse_table.csv:每个神经元在 80 个脑区里各自的输入输出量,用来推断"这个神经元主要住在哪个街区";names.csv/neurons.csv:花名册和档案。
四、从生物数据到 SNN:一张表格的三步变身
现在把第一篇的 SNN 和本篇的数据接上头。回忆第一篇的公式:
$$
u[t] = \beta \, u[t-1] + \underbrace{W \, s[t-1]}{\text{邻居浇水}} + I{\text{ext}}[t]
$$
$$
s[t] = \mathbb{1}!\left[\, u[t] \geq \theta \,\right], \qquad \text{发放后 } u[t] \leftarrow 0
$$
我们的网络有 139,255 个这样的桶,参数全部固定:泄漏系数 β = 0.9,阈值 θ = 1.0,每步清零重置。真正的问题是:权重矩阵 W 从哪来?
答案:从通话记录里抄。 三步变身:
第一步:谁连接谁(拓扑)
对于连接表中的每一行 (pre, post, syn_count):
在权重矩阵 W 中登记一条边:pre → post
边上的"原始强度" = syn_count(突触个数)
第二步:连接有多强(权重)
突触个数是原始强度,但不同神经元的基础"嗓门"差异很大,直接用会导致少数明星神经元淹没全场。所以做一次归一化:把每个发送方的出边强度除以它的总输出,再乘上一个全局增益 G:
$$
W{ij} = G \times \frac{\text{syn_count}(i \to j)}{\sum{k} \text{syn_count}(i \to k)}
$$
这个全局增益 G 不是拍脑袋定的——我们稍后讲"活动标定"时再说它怎么来。
第三步:是浇水还是掺沙子(极性)
突触分两种:兴奋性(让下游更容易发放,W > 0)和抑制性(让下游更难发放,W < 0)。数据的分类表里记录了每个神经元的神经递质类型(比如谷氨酸能多为兴奋,GABA 能多为抑制),据此给权重打上正负号,并可分别调节兴奋/抑制增益来微调整体 E/I 平衡。
大脑和人类社会一样:光有赞美没有批评,很快就会疯掉(医学上叫癫痫);抑制性连接就是大脑里无处不在的"冷静的声音"。
一个规模提示
权重矩阵理论上是 139,255 × 139,255 的——大约 194 亿个格子。但突触只有约 534 万条,稀疏率约 0.03%。也就是说这矩阵 99.97% 的格子都是零。所以我们全程使用稀疏矩阵存储:只记"谁连谁、权重多少"的清单,内存和计算量都骤降几个数量级。这也是整个仿真在普通工作站上能跑起来的关键。
另外,几张 CSV 加载起来较慢(毕竟五百万行起步),所以项目里把全部数据源预先转储成 MsgPack 二进制包,加载时直接反序列化——把"读小说"变成"看快照"。
五、这一步到底完成了什么?一个思想实验
请暂时忘掉所有公式,跟我做一个比喻。
想象你得到一份某座城市的完整档案:139,255 位市民,每人一张工牌(感觉入口 / 运动出口 / 内部处理),以及 5000 万条通话记录——谁在什么场合给谁递过多少张纸条,条条在案。
你不知道市民们的性格(神经元的学习规则?),不知道他们的想法,但你有一张关系网和一个简单的行为模型:"纸条收多了就转发,收够了就喊一嗓子,然后清空重来。"
现在,你把这张网装进计算机,用第一篇的 LIF 规则让它跑起来——这座城市的电话交换机就"活"了。 给感觉入口塞进一些刺激,看看哪些出口在喊、喊得多响,这就是第三篇的电刺激实验;把贪吃蛇游戏的画面折算成纸条塞给视觉入口,把运动出口的呐喊翻译成"上/下/左/右"——这就是让一只果蝇的大脑替你打游戏。
不过先别急。在这之前,我们欠上一篇一个伏笔没还:权重矩阵里的全局增益 G 到底怎么定?还有"给果蝇通电"具体是什么操作?下一篇,果蝇小姐正式上岗,她的第一份工作是——玩贪吃蛇。
系列目录:
- 给果蝇通电,让它替你玩贪吃蛇——兼谈”缸中脑”与数字永生 - 2026年9月25日
- 139,255 个神经元,和她的一张”通话记录”——果蝇全脑连接组 FAFB-v783 - 2026年9月25日
- 当你的大脑只有 0 和 1:脉冲神经网络(SNN)是怎么一回事 - 2026年9月25日


No responses yet