BoHuYeShan

Back

本文介绍一个”连接组仿真 + 具身智能体 + 强化学习”的开源项目:两只果蝇各自驱动一副由 MaleCNS v1.0 真实连接组(166,700 个神经元、约 2,558 万条突触连接)构建的仿真大脑, 在 3D 场景里对弈五子棋。它们自己”看”棋盘、自己”想”落点、自己扇动翅膀飞过去拿起棋子放下, 并依靠多巴胺奖赏信号在蘑菇体 KC→MBON 突触上完成三因子可塑性学习。 文中所有数据均为本地对局实测,不涉及任何个人信息。

对弈主场景


1. 系统总览:五层架构#

整个系统是一条从数据到画面的完整流水线:

内容关键实现
① 数据层MaleCNS v1.0 平面连接组(feather 表)神经元注释、递质极性、连接权重、突触点坐标
② 模型层单文件 npz 仿真包166,700 神经元 / 25.58M 突触 CSR 矩阵 / 递质符号加权
③ 仿真层双脑 LIF 仿真 + 可塑性2ms 步长、三因子 KC→MBON 学习、双蝇个体化
④ 具身层解剖级果蝇身体 + 真实运动神经元flybody 网格 + MJCF 关节、腿319/翅26/颈118 运动池
⑤ 呈现层three.js 3D 场景真实解剖位置网络渲染、166,700 通道活动点云

对外接口只有一个:Python 起一个本地 HTTP 服务,前端是纯静态页面。 大脑推理由服务端完成(约 38–52 ms/tick),浏览器只负责渲染与操控,不需要 GPU。


2. 数据层:MaleCNS v1.0 连接组#

MaleCNS v1.0 是 Janelia FlyEM 团队发布的成年雄性果蝇全中枢神经系统连接组 (脑 + 腹神经索,约 16.7 万神经元),以 feather 表格式提供批量下载, 许可证为 CC BY 4.0——允许二次分发,只需署名。

本项目从中构建仿真包 flygo_data.npz

  • 神经元:166,700 个,其中 166,576 个(99.93%)使用真实突触点质心坐标——这是后面 “真实解剖位置渲染”的数据基础;
  • 突触:保留 25,582,938 条连接,构建 166,700×166,700 稀疏 CSR 矩阵;
  • 递质极性:按预测神经递质给每条边赋符号(乙酰胆碱 +1;GABA/谷氨酸/甘氨酸 −1), 未预测的神经元取 0.5 中性值;
  • 功能池:多巴胺神经元 38、KC 4,064、MBON 97、视觉相关 105,265、下行神经元 1,314; 其中 KC→MBON 有 6,813 条真实突触被选为可塑子集
 prepare_data.py(只读源数据) ──► flygo_data.npz(仿真包)
      神经元索引 / 递质符号 / 坐标 / CSR 连接矩阵 / 功能池索引
text

原始数据文件在本项目中只读,所有学习结果写入独立的 saves/ 目录,互不污染。


3. 仿真层:LIF 大脑与三因子可塑性#

3.1 神经动力学#

按突触后线性衰减积分的 LIF 变体(2ms 步长):

 v ← v·0.905 + I·0.095        // 膜电位衰减 + 输入注入
 发放阈值 vth ∈ [0.26, 0.40]  // 每神经元固定异质阈值
 发放率 = EMA(spike / dt)      // 供读出与渲染
text

连接矩阵按行归一化,输入电流按”桶(bucket)“注入:64 个决策桶 × 24 个视觉输入神经元, 每个桶映射到 16 个下行神经元(DN)做群体读出——哪个桶的 DN 群体发放率最高, 哪个落点就是这只蝇的”决定”。

刻意把系统维持在刺激驱动区间:静息噪声底约 0.10,低于发放阈值。 曾试验过 0.22 的持续兴奋性输入,结果是全脑点火(63% 神经元同时发放、11.5Hz)—— 大脑失去了信息含量。这个失败试验被记录在代码注释里,作为”静息态必须安静”的证据。

3.2 三因子可塑性:多巴胺怎样改写突触#

蘑菇体是果蝇的学习中枢,本项目的学习规则是标准的三因子规则:

 Δw ∝ (前因子:KC 活动) × (后因子:MBON 活动) × (调制因子:多巴胺脉冲)
text
  • 资格痕迹:KC→MBON 突触上,走子前后各留一段活动痕迹;
  • 多巴胺广播:外部评估器给出奖励 r 时,38 个 DAN 神经元群体爆发, 全局广播到所有符合条件的 KC→MBON 突触;
  • 乘性增益:重塑作用于 MBON 读出增益 g ∈ [−0.9, 4],即”这棵 KC 对这个读出的票数权重”。

这套结构在学术上有坚实对应:KC 的稀疏高维编码相当于随机哈希式的特征展开 (每一手棋激活一小簇 KC),MBON 群体是线性读出器,DAN 是误差/教学信号广播—— 正是果蝇学习研究里的经典框架,也与现代三因子规则综述一致。

3.3 双蝇个体化:同一底座,两只不同的蝇#

两只蝇来自同一连接组底座,但对每只蝇做了三重独立化:

  1. 连接组抖动:W 的非零元逐条乘对数正态噪声(σ=0.15),再按行重归一化—— 相当于个体发育中的随机差异;
  2. 感觉增益:每个桶的注入电流乘 exp(N(0, 0.14²)) 增益——同一信号两只蝇听到的响度不同;
  3. 码本重配对:每只蝇的 KC 编码本从”突触到本桶 MBON 的 KC”里独立重抽—— 同一手棋在两只蝇的蘑菇体里点亮的是不同的 KC 组合。

3.4 独立性如何度量:两个相关系数#

双脑相关性必须拆成两个指标看,这也是本项目的一个方法论要点:

  • 结构 r(原始发放向量相关):高是正常的(0.66–0.92),因为同一物种同一底座, 它只说明”接线方式一致”;
  • 波动 r(逐样本变化量相关):这才是真实同步性检验。实测 −0.68 ~ −0.11, 即两只脑的动态是相互独立的。

果蝇0决策回路


4. 具身层:身体是解剖级的,运动神经元是真的#

果蝇身体使用 DeepMind 开源 flybody 的解剖级网格 + MJCF 关节层级(MuJoCo 装配), 翅、六足、头颈都可动。运动绑定用的是 MaleCNS 注释里的真实运动神经元 (按出口神经分类):

运动池神经元数绑定行为
腿(前/中/后)319步行、抓握、梳理、起跳
26飞行振动、振颤、甩翅
118头部注视棋盘
后足/腹360后足够翅、腹部姿态

飞行时服务端实时读取该蝇的自身神经活动做运动映射:左右半球发放不对称 → 偏航、 背腹不对称 → 升力、总发放 → 推力。因此每一次航线都不同——同一只蝇同一个落点, 两次飞行的轨迹不会重合。

自主三重阶梯#

功能组件的自主性被明确分为三档,界面可切换:

  • 第一重·闭环:脑决定落点;抓子/飞行/落子由代码执行(tool-call 式)。 到达、抓取、放置全部有保底,另设看门狗(任一步 18 秒无进展即安全收尾), 对局永不卡死;
  • 第二重·神经主导:归航项减弱到 0.35 倍、神经偏航全程保留;抓子与放子只认 该蝇自己的腿部运动爆发信号,不爆发就拉起重新进近,4 次失败才降级到一重兜底;
    • 此模式下能观察到它”反复起落”——那是它自己的运动信号没到时机;
  • 第三重(规划中):完全物理交互,用自己的肢体完成拾取与放置。

控制台与自主等级


5. 渲染层:真实解剖位置的神经网络可视化#

脑图不是示意图——每个节点的坐标就是该神经元在 CNS 中的真实突触质心, 连线是真实存在的突触。所有元素合并成极少量 DrawCall,浏览器端流畅渲染:

  • 全脑点云:166,700 个神经元逐点渲染,活动驱动逐点白闪—— 相当于 166,700 通道的实时活动示波器。飞行时可以看到胸腹段运动神经元池亮起;
  • 决策回路:1,799 个节点(我们刺激与读出的真实神经元)+ 6,500 条突触管线, 按类别着色(金=KC、橙=MBON、绿=DAN、蓝=感觉输入…);
  • 光脉冲:每脑 72 个光点沿突触连线运动,优先在活跃通路上生成—— “信号包”沿正在思考的通路流动;
  • 白热激活:发放强的神经元胀大、变白、带辉光 sprite;DAN 奖赏时绿色爆发 (下图右侧果蝇刚获得 r=+1.00 的多巴胺脉冲)。

果蝇1脑图:DAN 多巴胺爆发

一个值得一提的工程教训:早期无论怎么调亮度,脑图都又暗又糊。最终发现根源不在渲染, 而在 CSS——画布被一个 88% 不透明 + 4px 背景模糊的半透明面板盖住了。 改为独立子画布渲染后,此前的”参数问题”一夜消失。先排查合成层,再调参数。


6. 关键问题:两脑反应为什么仍然部分相似#

这是当前系统最诚实的一个缺陷。每一步落子,两只蝇的脑活动存在可测的相似成分。

根因#

两只蝇的输入不是各自”看”到的,而是同一个全局函数算出来的: 棋盘状态 → 候选点 → 按”桶”编码成注入电流。这个编码函数对双方完全相同。 个体化(3.3 节)只是给同一信号加了独立噪声与不同码本,信号本身是同一份—— 所以表征空间天然相关。

修复路线:让每只蝇用自己的眼睛看#

  1. 每蝇独立投影(短期):给每只蝇自己的候选→神经元映射、自己的棋盘坐标系 (两只蝇本来就坐在棋盘两侧,视角旋转 180°)、独立的思考节拍偏移。 预期能显著去相关,工程量一天;
  2. 视网膜层(中期,核心):为每只蝇构建六角小眼晶格视网膜(约 700 小眼 × 6 感杆), 从它的身体位姿渲染棋盘,经 视叶→蘑菇体 通路进入决策回路。落点不再是”编码进去的”, 而是”视网膜上成像的”——两只蝇看同一棋盘的像素都不同(视角、偏心距、锐度衰减);
  3. 具身视觉(长期):接入 flygym 一类的身体仿真,视觉输入随头部姿态实时变化, 真正做到”它看到的决定它想的”。

7. 评分器与多巴胺奖赏:学术定位与正确性#

7.1 评分器怎么做的#

外部五子棋评估器是经典棋型引擎(无 GPU、无训练、确定性):

 棋型等级:成五(1.0) > 活四(0.86) > 冲四(0.62) > 双活三(0.62) > 活三(0.38) > 眠三(0.18)
 Q = max(己方棋型价值, 0.88 × 对方棋型价值)     # 0.92 特判:挡住对方即胜手
 奖励映射:r = clip((Q − 0.2) × 2.5, −1, +1)
   成五/必挡 → +1.0;活三 → +0.45;中立 → 0;废着 → −0.50;终局胜 ±1.0
text

max(q_own, q_blk) 的设计使”进攻价值”与”必须防守价值”取大—— 这是五子棋引擎里标准的威胁空间(threat-space)启发式。

7.2 学术上怎么定位它#

严格地说,这套系统是外部奖励模型 + 脑内三因子学习的双层结构:

组件学术对应物说明
棋型评估器 Q奖励模型 / reward shaping它不是脑的一部分,是”环境适应度”的可微替代
r = f(Q)标量奖赏信号动物实验中的糖水/电击对应物
DAN 广播多巴胺教学信号果蝇嗅觉学习中奖惩信号的生物学对应
资格痕迹 × 广播三因子规则eligibility × neuromodulator 的标准形式
KC 稀疏编码随机特征哈希高维稀疏化 → 信用分配天然局部化
MBON 群体读出线性价值读出群体向量决定行为

7.3 已知的偏差(诚实清单)#

  • 0.88 防守折扣与 0.92 必挡特判是手工超参,不是势函数(potential function), 因此不保证 Ng 等人意义下”保持最优策略不变”的 shaping 性质;
  • 评估器零阶建模对手(不含对手应手搜索),Q 是”这一手”的静态质量而非胜率—— 局末 TD(λ) 回溯(规划中的 L4)会把终局胜负传导回中盘,弥补这一点;
  • 每手即时奖励 + 局末 ±1 的混合方案存在时间信用分配问题, 路线图里的 RPE 化(L2:用”实际 Q − 预期 Q”替代绝对 Q 作奖励)是学术上更严格的版本。

结论:作为”果蝇学习的环境信号源”,这套设计是学术上站得住的; 作为棋力评估器它是启发式的。两者在文档中被明确分开,不混为一谈。


8. 对局数据#

一次 67 局连续训练(训练档,含持久化重塑状态)的实测:

指标果蝇0(黑)果蝇1(白)
胜场4621
胜率68.7%31.3%
多巴胺事件1,6551,632
重塑事件1,6451,621
被重塑突触(累计)3,466,0623,478,482
Σ|Δw|85,68271,268
发放率均值0.69 Hz0.067 Hz
  • 两蝇多巴胺事件几乎相等(对局对称,奖惩机会均等),但胜场悬殊—— 说明差异来自可塑性的累积方向,而不是输入机会;
  • 发放率均值差一个数量级(0.69 vs 0.067 Hz),两只脑的”性格”已经明显分化;
  • 结构 r 0.66–0.92(同底座,正常),波动 r −0.68 ~ −0.11(动态独立);
  • 仿真成本:38–52 ms/tick,单步思考约 6.5–9 秒(120 tick 档),无 GPU。

对局中:果蝇0飞行运子,果蝇1多巴胺爆发


9. 如何部署复现#

参考 flyvis / flygym 等同类项目的分发模式(代码进仓库,数据脚本化获取):

# 1) 环境:Python 3.10+,依赖极轻
pip install numpy scipy pyarrow          # 构建/仿真
pip install mujoco                       # 仅构建身体模型时需要

# 2) 数据(二选一)
#    a. 直接使用仓库自带的 flygo_data.npz(MaleCNS 衍生,CC BY 4.0 署名随附)
#    b. 从 male-cns.janelia.org 下载 4 张 feather 表,运行:
python prepare_data.py                   # 构建 npz 仿真包
python build_fly_model.py                # 从 flybody 构建 MJCF 身体模型

# 3) 对弈
python server.py                         # http://127.0.0.1:8765
bash

打开浏览器即得本文截图中的完整场景。训练档/零训练档分离, 零训练档可随时对比”未经多巴胺学习的原始突触”的行为差异。


10. 许可与二次分发#

资产许可证二次分发
MaleCNS v1.0 数据(含本项目衍生的 npz)CC BY 4.0(Janelia FlyEM 等)✅ 允许,需署名 + 声明修改
three.js (r128)MIT✅ 需保留版权声明
MuJoCoApache-2.0
flybody(身体网格/MJCF)Apache-2.0(DeepMind)✅ 需保留声明
本项目代码待定(建议 Apache-2.0)

署名条目应包含:MaleCNS 连接组的引用文献与发布页(male-cns.janelia.org), 并注明”基于 CC BY 4.0 授权数据修改/衍生”。


11. 路线图#

  • L0–L1 感知校准与定位练习(已具备框架)
  • L2 RPE 化奖赏(预期差替代绝对分)
  • L3 全盘信用分配 + 资格痕迹
  • L4 终局 TD(λ) 回溯
  • L5 每蝇视网膜 + 具身闭环(解决第 6 节的相似性问题)
  • 第三重自主:完全物理交互的拾取与放置

本文所有实验数据来自本地对局实测;项目代码与数据将按第 10 节许可证开源。

两只真实果蝇大脑在下五子棋:连接组仿真对弈系统的设计与实现
https://bohuyeshan.top/2026/09/15/2026-09-15-02-flygo-connectome-gomoku/
作者 BoHuYeShan
发布于 2026年9月15日