我最近给自己找了一件新事:在 Mac 里养一只数字果蝇,然后试着教它。
第一课很简单:看到 1,抬起左前脚;看到 0,保持不动。六条腿,先管好一条。
我想做的是一个能持续观察、逐步教会新能力的小实验室。抬脚只是测试学习的第一阶段:先把输入、动作、反馈和保存串起来,再谈更复杂的行为。
动作完成后的特写:屏幕显示 1,左前脚 L1 已抬起。为拍清动作,我使用英文界面与近景镜头,并隐藏了遮挡视线的装饰植物。
为什么从这么小的动作开始
“让它学会东西”听起来很有吸引力,但很难检查到底发生了什么。抬一只脚就具体得多:它看见了什么,选择了什么,脚有没有真的达到目标位置,都可以记录。
这也给了我一个明确的反例。只会抬脚还不够:看到 0 时,它要能保持不动。否则一只永远举着脚的果蝇,也能在一半的题上显得很聪明。
所以我先固定课程,只教一个视觉条件和一个动作。等这条流程可以重复、可以检查,再往上加能力。
它看见的是什么,学习又发生在哪里
这个实验基于 Fly / Wirehead 的场景与模拟代码,并使用 MaleCNS v1.0 的果蝇神经连接数据。本地保留的网络有 166,700 个神经元和 25,582,938 条有向连接。真实数据提供了连接结构;神经活动由简化模型计算,身体则是三维动画与运动学控制。
教学时,我把 0 或 1 画成图像,送进模型的视觉输入。接着,一个外部动作模块读取模拟神经活动,决定抬脚还是保持。这个模块拿不到“这题的答案是 1”这样的标签。
第一阶段有一个刻意做的简化:果蝇神经网络的突触权重冻结,学习发生在外部动作读出模块。反馈改变的是它如何把神经活动映射成动作。这样我能先检查整条流程,而不用同时猜测视觉输入、脑内可塑性和身体控制三个部分出了什么问题。
所以,准确地说,我正在训练一个接在果蝇神经模拟后面的动作决策模块。还不能把结果解释成“果蝇大脑内部已经学会了数字”。
我的教学方式:出题,等它做,再反馈
界面上只有几个直接的操作:显示 0、显示 1,等它完成动作,再告诉它“做对了”或“做错了”。反馈会更新一次动作参数,并保存一个技能版本。
抬脚前:屏幕上的 1 已进入视野,左前脚仍在低位。下面的 GIF 展示它随后抬起的过程。
保存这一步对我很重要。一次动作做对了,可能只是碰巧;能把参数留下来,下次载入、继续出题,再比较表现,才有继续做实验的基础。旧版本也保留着,方便回头检查。
目前这套“记忆”保存的是固定抬脚课程的动作参数。自由教学、任意技能组合,以及学会新动作后还记不记得旧动作,都还需要后面的实验。
实际界面录制,裁切后慢放、循环播放。2026 年 9 月 18 日载入已有技能复现,动作参数仍为累计 104 次更新;这次只出题,没有给予反馈或继续训练。它不是下面那轮 40 题测试的录像。
第一轮结果:34 道对,6 道错
第一轮完整课程做了 20 次随机动作前测、80 次反馈训练,再做 40 次冻结测试。测试时不提供奖励,也不更新动作参数,并对数字的字号和水平位置做了小幅变化。
- 看到 1:20 次全部正确抬脚。
- 看到 0:20 次里有 14 次正确保持,6 次误抬。
- 合计:34/40,正确率 85%。
我更在意那 6 次错误。系统已经能对这组输入作出有用的区分,但“该动的时候动,不该动的时候不动”还没有稳定做好。
这只是一次小规模工程测试。它可能利用了字形或亮度差异;目前没有证明它理解数字,也没有证明连接组比简单的图像分类方法更有优势。前测只有 20 次随机动作,也不足以单独支撑很强的学习结论。
抬脚之后,才是下一阶段
接下来值得测试的是:换字体、换位置、加入没见过的图案,它还能不能做对?换几个随机种子重跑,结果是否稳定?打乱神经特征或反馈后,成绩会怎样?这些对照可以帮助我分清,它到底利用了什么。
再往后,我想逐步增加动作,并检查继续学习时旧技能能不能保留下来。脑内可塑性和更真实的身体模型,也需要各自独立验证。
这就是这篇记录停下的位置:一个能出题、接受反馈、保存动作参数的小实验室,以及第一份有对也有错的成绩。抬起一只脚,是下一步实验的起点。
来源
项目建立在 Fly / Wirehead 和 Stonkfly 的工作之上。连接数据来自 MaleCNS collaboration(v1.0,CC BY 4.0)。截图来自我的本地改造版;本篇成绩对应 2026 年 9 月 17 日完成的首轮课程。