真连接组的记忆容量:0.00。
把同一张图的权重整体打乱、结构一个字节不改的假连接组:0.51。
我盯着这两行数字看了很久。假的比真的记得牢,这结论离谱到不可能对。后来想明白了,它确实不对——错的地方在"在算"这三个字。这两组根本都没在计算,一组烧得旺一组烧得没那么旺而已。
先说清楚这篇讲什么:三个月里果蝇全脑连接组数据放出来,一堆项目把它接进游戏里跑。我也接了。这篇是关于接完之后它到底在干什么,以及怎么用一个除法在五分钟内判断一个全脑仿真是不是在空转。
想直接拿判据的看第 3 章,那是一个相关系数;想知道我被自己的探针骗了多狠,看第 5 章。
1. 十二万七千个神经元,点火之后
用的是 FlyWire 的果蝇全脑连线图,12.7 万个神经元。每个神经元用最经典的漏积分发放模型:电压慢慢涨,涨过阈值就"啪"地放一个电脉冲,然后归零重来。神经元之间按真实连线互相推电压。这套参数出自 2017 年一篇论文,被后来一堆连接组仿真沿用。
储备池计算是这么个想法:你有一坨乱七八糟但连线固定的神经元,往里灌一个信号,这坨东西会产生复杂的响应,然后你在输出端训练一个特别简单的线性读出器,就能干活。中间那坨从不训练。好处是省事——权重全冻着,只学最后一层。
拿连接组当储备池,动机很直白:进化花了几亿年调这个连线,它应该比随机接的强吧?
我灌了一段随机起伏的信号进去,跑 30 秒生物时间,看它能不能记住几十毫秒前灌进去的东西。这就是记忆容量,行话叫 memory capacity,说白了就是"往回问几步还答得上来"。
结果是上面那两行。
2. 第一个数字就该让我停手
回头看,真正的病灶在一个我当时扫了一眼就放过的数字上。
30 秒里总共放了 21,958,868 个电脉冲,活跃神经元 13,365 个。做个除法:
21,958,868 个脉冲 ÷ 13,365 个神经元 ÷ 30 秒 ≈ 55 Hz
每个活着的神经元,每秒放 55 次电。 一直放,不带停的。
真果蝇的神经元静息状态是每秒几次到十几次,爆发时能上几十。全脑所有活跃神经元集体维持在 55 Hz,这不是"活跃",这是着火了。
但光看发放率还能狡辩说"可能这个模型就是偏兴奋"。真正的铁证是另一个数:输入信号和全脑总活动的相关系数 r = 0.982。
这个数是这样的:我灌进去的是一条随机波动的曲线,我把每个时间片全脑放了多少个电脉冲加起来,也得到一条曲线。两条曲线的相关性 0.982,几乎就是同一条线。
十组对照(真连接组、权重打乱、保度重连、完全随机各三个种子),这个数全部落在 0.982 到 0.989 之间。
一个在做计算的系统,输出应该是输入的变换——有延迟、有混合、有非线性。输出和输入长得一模一样,说明中间这十二万个神经元什么也没做,就是个放大器。你喊一声,它跟着喊一声,音量放大三百倍。
这是一条通用判据,拿走就能用:
把输入序列和系统总活动做相关。
r 接近 1 = 它在回声,不在计算。
我把这条判据用在完全随机连的图上,r = 0.989。用在真连接组上,r = 0.982。真图比随机图更像个回声筒。 到这一步"生物连线更优"这个问题已经没有意义了,因为两边都不在算东西。
3. 那 0.51 是怎么冒出来的
那为什么打乱权重那组反而有 0.51 的记忆容量?
看脉冲数:真连接组 2196 万,权重打乱组 953 万。少了一半多。
打乱权重的操作把真图里那些"强连接扎堆"的结构打散了。真连接组里有一批超强的连接边,它们凑在一起形成正反馈环路,一点就着,着了就熄不掉。权重摊平之后没有那么多火药桶,烧得没那么旺,于是保留了一丁点对输入的响应能力。
0.51 的含义是"假连接组没烧那么狠,所以还剩一口气"。
保度重连组的记忆容量是 0.00、0.00、0.009,完全随机组三个全是 0.00。除了权重打乱那一档,所有组都是零。 这个分布本身就说明问题——如果是在比较"哪种拓扑更适合计算",不该出现九个零加一个 0.5。
4. 我试了多少组参数
有人会说:那是你工作点没调好。
调了。扫了输入强度、注入位点数量、输入频率的组合。这是其中几组:
| 注入位点 | 权重倍率 | 发放率 | 输入-活动相关 r |
|---|---|---|---|
| 200 | 125 | 21.8 Hz | 0.994 |
| 200 | 250 | 29.7 Hz | 0.979 |
| 500 | 125 | 33.3 Hz | 0.030 |
| 500 | 250 | 51.5 Hz | 0.299 |
| 2000 | 60 | 45.0 Hz | 0.807 |
| 50 | 250 | 53.4 Hz | 0.038 |
最后一行最能说明问题。只往 50 个神经元里灌信号,全网 0.04% 的神经元被直接驱动,整个脑子照样烧到 53.4 Hz。 这 53.4 Hz 是它自己烧出来的,我灌不出这个量。
还有一组更反直觉的:把驱动强度减半,发放率不降反涨了三倍。这是正反馈系统的典型签名——你松手它反而跑得更野。
中间那两行(相关系数 0.03 和 0.30)看着像是逃出了回声区,但它们的记忆容量还是 0.00。走出回声不等于走进计算,只是换了个姿势烧。
所有组合的记忆容量全部为零。这个模型没有工作区间,只有自激态。
5. 我的探针骗过我,而且骗得很深
这一段是全文最该记住的。
最早那版记忆容量探针,所有组都报 0.00。我当时差点就写"连接组没有记忆能力"发出去了。
幸好做了变异测试——就是故意把答案塞进数据里,看探针认不认得出来。我造了一组假数据,9800 个维度,前五列直接就是答案,信噪比 10 比 1,明摆着送分。
探针报 0.000。
它连白送的答案都认不出来。病因是维度:9800 维配 406 个训练样本,线性读出器直接被撑爆,什么都学不到。之前那些 0.00 全是探针的假象,不是系统没记忆。
修法是读出前先做随机投影降维。降完之后同一份送分数据,探针报 5.909,五个滞后步全部接近满分。这才叫能用的探针。
拿修好的探针重跑真实数据,才有了开头那两行。0.00 这次是真的。
降维矩阵有个硬要求:四个对照组必须用完全同一个矩阵,同一个随机种子。而且必须是与数据无关的随机投影,不能用主成分分析。主成分分析从每组自己的数据里学基向量,等于给每组配了一个不同的读出前端,那就不是同一套接口了。对照实验里唯一允许变的是连接矩阵,接口层动一下,整个比较就作废。
可迁移的教训:探针报出全零、满分、或者所有组完全一致,先别高兴也别沮丧,去做变异测试。 坏探针比没有探针危险得多——没探针你知道自己没测,坏探针让你以为自己测过了。
我这次是第二回栽在这上面。上一回是拿全脑总脉冲数当判据去验证一个刺激实验有没有生效,报出来"刺激加大六倍,总活动只涨 5%",看着像是实验失败。实际查下来,被刺激的那 60 个神经元从 50.0 Hz 涨到了 291.7 Hz,工作得好好的;其余 8,386 个从 52.9 Hz 涨到 53.9 Hz,涨了 1.9%。我拿一个 99.3% 由自激主导的总量去测一个只影响 0.7% 的效应。 判据要取在直接受影响的子集上,不是最大的那个聚合量。
6. 顺手做的消融,结果更怪
既然跑都跑了,我把网络切开看了看。做法是整块整块地关掉某一类神经元,看下游的运动神经元还发不发电。
| 关掉哪一类 | 节点数 | 切掉的连接 | 运动神经元发放率 |
|---|---|---|---|
| 视觉系统 | 59,374 | 543 万 | 84.2 Hz |
| 中央脑 | 28,690 | 429 万 | 3.8 Hz |
| 感觉输入 | 8,126 | 24 万 | 0.0 Hz |
| 视觉投射 | 6,335 | 84 万 | 80.8 Hz |
| 上行神经元 | 1,587 | 20 万 | 71.8 Hz |
| 下行神经元 | 1,086 | 12 万 | 63.6 Hz |
关掉整个视觉系统——五万九千个神经元、五百四十万条连接、接近全脑的一半——下游发放率 84.2 Hz,纹丝不动。
只有关掉感觉输入(8,126 个,切 24 万条连接,不到视觉系统的二十分之一)才真的让它熄火。
这个对比本身就是诊断:如果这是个在传递信息的网络,切掉一半应该有影响。它没有影响,因为那 84.2 Hz 从来就是自激的底噪,不含信息。切掉输入才熄火,因为输入是点火的火柴。
随机删连接也一样。删掉 5%、10%、20% 的连接,运动神经元还在 80 Hz 上下晃;删到 50% 才掉到零。一个系统能承受删掉 20% 的连线而输出不变,它输出的东西不含什么信息量。
7. 这个实验哪些地方不能信
诚实起见列一下。
我没有验证 55 Hz 是不是这套参数的必然结果。 参数来自 2017 年那篇论文,原文是在小得多的子回路上用的。在 12.7 万节点全脑上这套参数会不会必然自激,我没有做参数敏感性的系统扫描,只扫了输入侧的组合。有可能存在一组我没找到的膜参数能让它不烧。
保度重连的实现是近似。 我用的是打乱目标端点的做法,出度精确保留,入度序列作为多重集保留,但不是严格的边交换算法。会产生重边(真图里也有重边,多突触连接),自环删掉了。
记忆容量只测到滞后 8 步,每步 50 毫秒。 更长的时间尺度没测。理论上自激系统在长尺度上更不可能有记忆,但我没有测过的东西我不说。
只跑了 30 秒生物时间,单个随机种子的输入序列。 真连接组那一组没有重复跑不同种子——对照组每档三个种子,但连接组本身只有一个,因为它没有随机性可言。不过如果结论是"MC 恒等于零",多跑几次也不会从零变成非零。
我没有试过抑制性连接的比例。 真实果蝇脑里兴奋抑制是有比例的,我用的是数据自带的递质预测符号。如果符号预测有系统性偏差,兴奋占比被高估,那自激就是数据问题不是模型问题。这条我认为最值得后续查。
8. 下次看到"我把果蝇大脑接进了 XX",按这个顺序问
第一,它的神经元发放率是多少。 生物值是每秒几次到几十次。全网维持在 50 Hz 以上,它在自激。
第二,输入序列和总活动的相关系数是多少。 接近 1 就是回声筒,中间那坨网络没在干活。
第三,关掉一半网络,输出变不变。 不变的话,那个输出不含信息。
第四,有没有随机对照。 没有对照的"生物结构更优"就是一句感想。
第五,他的探针做过变异测试吗。 把答案塞进去,探针认得出来吗。认不出来的话,前面四个数字全部作废。
我自己在第五条上栽了两次,第一次差点把探针的毛病当成科学发现发出去。