fullseye

言語 / Language: 日本語 · English

ハエの視覚モデルを体に載せて測る

歩いているところ

↑ まず動いているところから。物理シミュレータ上のショウジョウバエが、複眼に映る像だけを頼りに茶色の的へ歩いていきます(3 倍速、外から撮影)。舵を足しているのは、コネクトームで配線を固定した視葉モデルの出力。脚の運びは三脚歩容に見えますが、歩行は運動学で脚の力学で歩いているのではありません —— どこまでが実物でどこからが手書きかは、下の表で先に開示します。

課題の図解

↑ 何をさせようとしているのかの全体像。① 与えるのは複眼の像だけ(GPS も慣性センサも地図も無い)。② 歩きながら自分の回転を読ませ、その向きで的へ歩き、貯めた向きと距離で巣へ帰る。③ 採点は与えた回転との相関で、12 の場所のうち 2 か所(C・D)は選択にも調整にも一度も使わない。ゼロ点は 1956 年の教科書的な運動検出器。

TL;DR

この記事は「ハエの脳を再現しました」という話ではありません。学習済みのモデルを自分の系に載せたとき、どこで嘘をつくかを数字で置く話です。同じ罠は、他人の学習済みモデルを自分のロボットやラインに載せるときにそのまま出ます。

実験の一覧(ここに足していきます)

1 実験 = 1 つの問いです。この記事は実験が終わるたびに追記します。表の「いまの答え」は、その時点の実測でひっくり返ることがあります(実際に 1 件ひっくり返って §8 に残してあります)。

問い いまの答え 節    
その場で回して作った検査は、歩行中の性能を予告するか しない。相関 0.06〜0.51 で全滅 §1    
遠景に模様を入れれば歩きながら回転を読めるか 読める。相関 0.98(帯なしは 0.06) §2    
センサが良くなれば行動も良くなるか 変わらない。到達 7 → 6 / 12 §3    
コネクトームの配線は、性能として何ポイント分か 0.14〜0.20。前処理だけで 0.6 → 0.8 §4    
自由パラメータ 734 を進化させると般化するか 2 景色は過適合(−0.25)、10 景色で般化(+0.92) §5    
細胞型ごと 260 次元に圧縮すると 少データで勝ち(+0.71)、多データで同等(+0.91) §5    
読み出しを回帰で解くと 同じ形。80 重み ≫ 5768 重み §5    
行動が良くなれば生物らしさも出るか 逆。方向選択性 3/8 → 1/8。学習前は 0/8 §6    
視覚推定で中枢複合体を駆動すると帰巣できるか できる。初版の数字は較正忘れで撤回(§8 の 2 件目)。較正後: 視覚推定そのままで 2.1 %、振幅補正はむしろ悪化 12.4 % §7 → 追記    
減速を入れると記憶の更新と干渉するか しない。干渉に見えた 2 つは別物 —— コンパスの利得誤差 10.8 % と、操舵も速度も H で消える規則の不安定平衡 追記
目を肥大化させると壊れるか 壊れない(最初の結論は撤回) §8    
配線をシャッフルすると性能は落ちるか 測れない。シャッフル同士の差のほうが 3 倍大きい 追記    
課題を段階的に与えれば方向選択性は出るか 出る(0/8 → 5/8)。ただし最後の行動課題が壊す(→ 1/8) 追記    
前段(視葉モデル)を凍らせて全細胞型の活動を取り出せるか 取り出せた(45,669 ノード × 12 場所 × 350 フレーム)。ただし T4/T5 の信号の 41〜73 % は縁 90 列の境界効果 追記    
雄の全中枢神経系コネクトームに「左右の欠落」はあるか 細胞数ではほぼ無い(11,229 型の 96 % が ±1 細胞)。有意な非対称はキノコ体 KCab-s の 1 型だけ = 亜型境界の左右差。補完で 2〜3 割縮むが消えない。公開ツール coconatfly の第 2 実装も同じ結論(s の結合クラスタ L 201 / R 352) 追記    
線虫の配線は左右対称か(1 匹の中の左右) 半分だけ。左右 98 対を入れ替えた配線との重なり 0.473(完全対称 1.000、偶然 0.080)。非対称は少数の対に集中していない 追記    
画像で木を測ると、実物の木とどれだけずれるか 視線で決まる。3-D の Sholl は回しても整数が動かないが、投影は最大 9〜16 交点動き、分岐は真値 16 に対し 22〜28 個 追記    
同じ遺伝子の線虫 8 匹で、配線はどこまで同じか 全員に在る結合 442 本(偶然なら 0 本)がシナプスの 57 % を担う。ただし同齢の成虫 2 匹の重なりは 0.53 追記    
40 年前の手作業の配線図と、今の成虫はどれだけ重なるか 0.43〜0.44。同じ手法の成虫 2 匹どうし(0.51)より 0.07 低いだけ。1986 に無い結合は細い(平均 2.0 対 5.7 シナプス) 追記    
線虫の神経突起は、生まれてから何倍に伸びるか 4.3 倍(論文は約 5 倍)。著者のファイルを足しても 3.95 倍で、5 倍そのものは出ない。骨格の最長経路は著者の値と 1.75e-9 で一致 追記    
電子顕微鏡の神経の切り出しを、分けすぎとまとめすぎに分けて採点する 誤りを 1 つずつ仕込むと、split だけ・merge だけが閉形式どおり上がる(誤差 < 1e-12)。古典の切り出しはしきい値 65 % と 70 % の間で入れ替わる。膜の画素を背景のまま残すと merge が 2.4 倍に水増しされる 追記    
切り出しの誤りは、配線図のどこを壊すか 比は恒等的に密度 × 偏りで、分断の割引は端の個数の少なさ(中央値 3、2 項分布で 0.62)が主因。分断の 4 割は配線を 1 ビットも変えない。画素 1 ビットあたりの配線の損傷は融合 1.30 / 分断 0.58。画素の採点順で直すと、でたらめの 2 倍効くが理想には 8 ポイント届かない 追記    
シナプスは神経突起に比例して増えるか 系全体では密度は L1 で ×1.32、その後の揺れは 1.14(論文どおり)。細胞ごとに見ると、突起の伸びとシナプスの増えの順位相関は 0.23 で弱い。新しいシナプス 6,674 個の 48 % は既存の接続を太らせ、54 % が新しい接続 追記    
走行長は小さな融合を許さない 分断 1 つの ERL は閉形式と 1,713 本で一致。融合の大きさを 5 % → 50 % と振ると VOI の merge は 0.14 → 0.66 ビットと増えるが、貼られた側の ERL は q に依らず 0。分岐の無い骨格の一様 3 点切りは Dirichlet の期待値と比 1.02 追記    
粘菌に学んだのは「管が連続であること」だった(途中経過) 迷路 5/5、部品を連続にすると尾根は 24/24 で消え、貪欲な回収で 8/8 が読める回路に戻り 9/9 で遺伝。進化では leak で 8/8 だが「進化が渡った」は撤回(leak が尾根を消していた)。床を段階的に剥がす回収で n=16 の遺伝性 13/16 対 4/16(p=0.0038)。スケジュール 3 通り(早い・遅い・2 段)でも遺伝性 8/16・12/16・11/16 で尻尾の長さに依らず、渡る率は早い剥がしで下がる(6/16)。課題 1 つで研究要素が残る 追記    
粘菌の管は迷路を解く(op 2 本) 格子 5 通り・完全迷路・地形の全部で粘菌の道が Dijkstra / route_through_array と一致(差 < 1e-9)。指示関数への収束は 3/5 で、打ち切りの 2 つは 2 位との差(0.009・0.032)が小さい。Lyapunov V は 23 区間で一度も増えず 追記    
線虫の脳の核は生まれた時から在る(op 3 本) シナプス数で剥いた最深殻は発生を通じて 6〜10 細胞、指数 7 → 55、RIA の対は生後 0h から成虫まで外れない。0/1 の k-core は最深殻が 150 細胞に膨らみ核を見分けられない。4 種の核のどれかで持続する細胞 51 = 公表値 追記    
粘菌は最適輸送を解く(op 2 本) 供給ベクトルにした管の力学が L1 最適輸送へ収束。真値 10 件(木の閉形式・1 次元・Hungarian 法・LP・平行移動・Dijkstra)と全部一致し、Kantorovich–Rubinstein の下界が費用を下から挟む。残った管 = 最適割当 追記    

用語(先に読むと楽)

何が実物で、どこからが手書きか

最初にここを書きます。これを曖昧にしたまま数字を並べると、読む側は「ハエの脳がやった」と受け取ってしまうからです。

部分 中身 出どころ
体 ショウジョウバエの全身モデル(質量 0.98 mg、cm/g/s 単位系)を物理シミュレータ上で動かす 公開モデル(flybody)
歩行 脚の接地パターンは運動学。脚の力学で歩いているのではない 手書き
目 体の目カメラ 3 台 → 六角格子の個眼 721 本に重み付きで写す(斜め方向の 1.118 倍の歪みも再現) 手書き(幾何は公開モデルに合わせた)
視葉 65 種の細胞型・配線固定・自由パラメータ 734 の学習済みネットワーク 公開モデル(flyvis)
読み出し 「地平線より上で、好む向き − 反対向き ÷ 和」という 1 本の式 手書き(パラメータ 0 個)
行動 「空より暗いものを正面に捉える」固定行動 + 視運動の帰還 + 遠心性コピー 手書き
世界 床・空・的・囮。的は糞の代わりに結び目の陰関数(knot_sdf、どの向きから見ても輪郭が変わる有機的な形)、囮は歯車(gear_sdf)と格子球(gyroid_sphere_sdf)。空の模様は合成 手書き

ハエ脳モデルの信号経路

↑ 信号の流れと「実物 / 手書き」の境目。青い箱だけが実測のコネクトームで配線が決まっている部分(視葉 flyvis、65 細胞型、光の流れ順に 受容器 R1–R6 → ラミナ L1/L2/L3 → 髄質 ON Mi1・Tm3 / OFF Tm1・Tm2・Tm4・Tm9 / 修飾 Mi4・Mi9 → T4a–d(ON)→ T5a–d(OFF))。橙の箱は全部こちらで書いたもの。進化で動かすのは青い箱の中の連続値だけで、結線は 1 本も足しません。

視葉の柱構造(立体)

↑ その視葉の中身を立体で回したもの。721 の列が同じ並びのまま 7 段を貫いているのが「柱」構造で、段ごとに色を変えてあります(受容器 → ラミナ → 髄質の ON / OFF / 修飾 → T4 = ON の方向選択 → T5 = OFF の方向選択)。列の位置は実際の六角格子ですが、段の奥行きは模式です —— flyvis は「列 × 細胞型」のネットワークで、解剖学的な 3 次元座標は持ちません。後半で「細胞型ごとに自由度を畳む」と言っているのは、この色の単位でまとめる、という意味です。

では、その「実測の配線」とは具体的に何なのか。配線そのものを描いてみます。

視葉のコネクトーム

↑ 左が実測のコネクトーム(fib25-fib19、65 細胞型・605 本の型間結線)。節が細胞型で、光の入る順に層へ置いてあります。青が興奮、赤が抑制、線の太さは受け手 1 個あたりのシナプス数です。右は次数保存シャッフル —— 各型の出次数・入次数・符号をすべて保ったまま、受け手だけ入れ替えたもの。本数も次数も同じですが、層をまたぐ向きの内訳が変わります: 層内の結線が 179 → 99 本に減り、後ろ向き(光と逆方向)が 148 → 208 本に増える。

右の図で赤い線(抑制)が層を無視して飛び交っているのが、あとで出てくる「配線をシャッフルした対照群」で実際に壊したものです。同じ本数・同じ次数でも、層構造は保存されません。

つまり視葉だけが本物のコネクトーム由来で、その前後(目の幾何・読み出し・行動)は全部こちらで書いています。以下の数字は「視葉の入口と出口をこう繋いだとき」の話です。

なお、ハエの中枢神経系は頭の中だけではありません。胸部には腹側神経索(VNC)という約 23,000 ニューロンの構造があり、歩行のパターン生成はそこにあります(脳から VNC への下行ニューロンは 1,328 本)。頭を切り離したハエが歩けることは 1997 年に報告されています。この記事で「歩行は運動学」と書いているのは、本来 VNC が作るものを手書きで代用しているという意味です。脳 + VNC を含むコネクトーム(BANC、MaleCNS)は 2026 年に公開されたので、ここは将来もっと本物に寄せられます。

0. 目そのものを設計する —— 複眼の光学を、閉じた式の op で回す

上の表で「目」は手書きに分類されています。その手書きの中身を先に開きます。複眼は設計対象で、ノブは 3 つしかありません。

この 3 つを決めると、何が見えて何が見えなくなるかが式で決まります。自作のビジョンライブラリ Fullseye の flyvision 族はこの経路を閉じた式の op にしてあるので、設計を変えて測り直すのは数行です。

import flyvision as fv

lat = fv.fly_hex_lattice(radius=15, dphi_deg=4.63, geometry="boxeye")  # 721 本の視軸
sky = fv.fly_sky_1f(width=1440, height=720, amp=0.45, seed=7)          # 1/f の空(合成)
sig = fv.fly_hex_resample(img, lat, drho_deg=8.23, fov_deg=110)        # 眼が見た 721 個の値

複眼の光学設計

↑ すべて op を実際に回した実測で、模式図はひとつもありません。A 721 本の視軸(右上は中心 ±12° の拡大で、橙が受容野の広がり)。公開モデルの画素格子に合わせると斜め方向が 1.118 倍に歪み、その歪みも再現しています。B 隣とどれだけ重ねるか。ハエの比 Δρ/Δφ = 1.78 だと、総感度のむらは 0.0052 % —— 視野に穴もこぶも出ません。C 受容角を決めると何が見えなくなるか。線が閉じた式 exp(−π²Δρ²/(4 ln2 λ²))、点が op の実測で、ずれは最大 0.0017。D 標本化の限界(λ = 2Δφ = 9.26°)より細かい縞を入れるとどうなるか。

D がこの節のいちばんの見どころです。入力は λ = 6.5° の細かい縞(D1)。受容角を 2° まで細くすると、個眼の列には入力に存在しない粗いうねりが現れます(D2 の赤)。これが折り返し(エイリアシング)で、その波長は予測できます —— λ = 1/ 1/6.5 − 1/4.63 = 16.1°。実測は 16.2°(D3)。ハエの受容角 8.23° で同じ縞を見ると、偽の縞の振幅は 223 分の 1(0.357 → 0.0016)に落ちます。

つまり Δρ/Δφ ≈ 1.8 は「ぼけている」のではなく、標本化の限界に合わせて偽の信号を消しにいった設計です。細くすれば解像度が上がるように見えて、実際には無い模様を作ります。太くすれば消えますが、今度は本物の模様も溶けます(C の桃色の曲線)。

この節を先に置いたのは、後で「脳が読めなかった」と言う前に、目が何を落としたのかを知っておく必要があるからです(§2 で実際にそれが効きます)。そして式はハエ専用ではありません。Δφ と Δρ を変えれば、蜂でも蟻でも同じ道具で設計して測れます。

ここからは実測ではなく期待として書きます。イベントベースカメラ(明るさの変化だけを画素ごとに非同期で出す撮像素子)は、ハエの視覚前段が最初にやること —— DC を落として変化だけを送る(ラミナの L1/L2 の帯域通過。Fullseye の PoC で測ると、この一段を省くだけで自己回転の相関が 0.785 → 0.504 に落ちます —— 相関器が「DC × 高域通過」の揺れを出し、それが運動の平均応答の 10 倍になるため)—— を素子で実装したもの、と読めます。だとすれば次に来てほしいのは、そのさらに手前、光学の側です。個眼間角と受容角を設計値として持ち、折り返しを素子の段階で殺してから変化を送る撮像素子。いまのイベントカメラは正方格子で、受容角は光学系の付け足しですが、六角格子と Δρ/Δφ ≈ 1.8 を最初から持つ素子ができれば、§0 の D で見た「無い模様を作る」問題は後段の処理を一切使わずに消えます。ハエは 5 億年前からその設計を使っています。こういう道具が出てきたら、この記事の測り方はそのまま実機に移せます。

1. 静止した検査に全部通ったのに、歩くと落ちた

最初にやったのは、ハエをその場で回して視葉の出力を較正することでした。作った検査は 3 つ:

  1. 単調性 —— 回転を速くすると出力も単調に増えるか
  2. 対称性 —— 左右で原点対称か
  3. 遅れ —— 立ち上がりの遅れが生理的な範囲か

結果は全部合格でした。出力は ±2 rad/s まで単調で原点対称、遅れ(63 % 到達)は 0.11 秒。場所を変えても利得の差は正規化後 ±35 % に収まりました。ここで「使える」と判断しかけました。

ところが歩きながら同じ量を読ませると、全ての読み出し候補で相関が 0.06〜0.51 になりました。全滅です。 その場回転で通った 3 つの検査は、歩行中の性能を一切予告していませんでした。

理由は後で分かりますが、教訓の形はここで確定します。

検査は、事故が起きる場所に立てる。 静止した刺激で作った合否は、運動中の性能について何も言っていない。

これはハエに限りません。データセット上の精度が良いモデルを自分のロボットに載せて、実際の運動が混ざった瞬間に落ちるのは、同じ形です。

2. 脳を疑う前に、世界を測る

落ちたとき、最初に疑ったのはモデルでした。「学習済みの重みがこの体に合っていないのでは」「読み出しの式が悪いのでは」。どちらも外れです。

原因は刺激の統計でした。像の流れは 2 つの成分に分かれます。

ハエの目は床から 1.2 mm の高さにあります。歩行速度 2.8 cm/s でも、足元の床は 330〜1000°/s で流れます。T4/T5 が読める帯域を大きく超えており、回転の信号はこの雑音に埋もれます。

対策は 1 行でした。地平線より上だけを読む。 遠景の流れは距離が大きいので前進成分が消え、回転成分だけが残ります。これで歩行中の自己回転推定は 相関 0.98 になりました。

歩きながらの自己回転の推定

↑ 選択に一度も使っていない場所 C での、歩行中の自己回転推定。黒が与えた回転、赤が視葉の T4/T5 から読み出した推定。相関 0.98、偏り +0.022 rad/s。ただし振幅は真値の 6 割ほどに小さく出ている(後述)。

ただし、ここにもう 1 つの落とし穴があります。遠景だけを読むようにしても、遠景に模様が無ければ何も読めません。最初の世界は空が単色のグラデーションだったので、地平線より上はほぼ一様で、流れの手がかりがゼロでした。仰角 20〜60° に雲の帯(方位方向に 1/f、振幅 0.12)を入れて初めて 0.98 が出ます。帯なしでは 0.06 でした。

複眼で見た空

↑ そのときハエの複眼(個眼 721 個、視軸の間隔 4.63°)に映っている世界。左が個眼ごとの輝度、右が「地平線より上で暗いもの」の顕著さ。空の帯があるかないかで、回転の読み取りが 0.06 から 0.98 に変わる。

世界の欠陥は、脳の欠陥に見える。 モデルの性能を測る前に、刺激の側に手がかりが存在するかを測る。

正直に書くと、この「空に模様を足す」は都合の良い改変にも見えます。実際の屋外には雲・樹冠・地形の輪郭があり、ハエが飛ぶ環境で遠景が完全に一様であることの方が珍しい、というのが根拠です。とはいえ「模様の量」を自分で決めている以上、0.98 は世界の設定込みの数字であって、モデル単体の性能ではありません。

3. センサとして働くことと、行動が良くなることは別

自己回転が読めるようになったので、次はそれを操舵に入れました。3 条件で 12 本ずつ歩かせています。

閉ループ歩行の軌跡

↑ 12 本の軌跡。中央の色付きの円が目標、灰色が囮(歯車・格子球)。左から、固定だけ / + 視運動 / + 遠心性コピー。到達は 7 / 6 / 6 本。

(この 3 条件のうち「+ 遠心性コピー」が実際に動いているところが、冒頭の GIF です。茶色の的に寄っていく動きそのものは手書きの固定行動で、視葉が足しているのは舵の微調整だけ、というのがこの節の話です。)

結果は 7 / 6 / 6 本。外乱を 3 倍にすると 7 / 4 / 6 本 で、遠心性コピーの無い帰還は悪化しました(自分の旋回を外乱と誤認して打ち消し合うため)。

つまり、相関 0.98 のセンサを足しても、この課題では行動がまったく良くなりません。固定行動が支配的で、視運動は冗長でした。

センサの忠実度と行動の成績を別々に測り、別々に報告する。 片方が良いことは、もう片方について何も言わない。

これは目的関数の設計に直接効きます。「行動が良くなること」を目的にすると手書きの部分が勝ってしまい、モデルはほとんど動きません。「センサの精度」を目的にすると、次節のように過適合します。

4. 配線の取り分はいくらか ―― 教科書の式と同じ土俵で比べる

コネクトーム拘束モデルの売りは「実測の配線を使っていること」です。ではその配線は、性能として何ポイント分なのか。これを測るには、同じ刺激・同じ読み出しで、配線を使わない古典的な運動検出器と比べる必要があります。

比較相手は 1956 年の EMD(隣接 2 画素、片方を遅らせて掛ける)。実装は自作の画像処理ライブラリの op を使い、パラメータ(時定数・高域通過の時定数)は訓練側の場所だけで選んで、C・D は見ずに残しました。

運動検出器 A B C(未使用) D(未使用)
EMD・生の輝度(τ 0.05 s) 0.45 0.57 0.62 0.77
EMD + 高域通過(τ 0.1 s、τ_hp 0.2 s) 0.79 0.88 0.84 0.78
flyvis(コネクトーム拘束・学習済み) 0.90 0.94 0.98 0.98

読み取れることは 2 つあります。

  1. 前処理だけで大半が埋まる。 網膜の次の層(ラミナ)に相当する高域通過を足すだけで、EMD は 0.6 台から 0.8 台に上がりました。「コネクトームだから読める」のではなく、まず明るさの緩やかな成分を落とすことが効いています。
  2. 残り 0.14〜0.20 が配線の取り分。 ON/OFF 経路の分離・正規化・空間統合といった、コネクトーム由来の構造がここを稼いでいます。ゼロではないが、桁で違うわけでもない。

この「取り分」の数字は、学習済みモデルを採用するかどうかの判断に直接使えます。0.84 で足りる用途なら、10 行の EMD で済みます。

5. 自由度を増やすほど、少データでの般化は消える

ここからが本題です。配線は固定したまま、自由パラメータだけを進化させたら何が起きるか。

設定: CMA-ES で 1500 回評価、探索幅 σ0 = 0.1、目的関数は「訓練場所での歩行中の自己回転推定の相関」。ホールドアウト C・D は選択に一切使いません。

第 1 ラウンドの進化

↑ 訓練 2 場所での進化。左が訓練の推移、中央が進化前後のホールドアウト成績、右が事前学習の重みからどれだけ動いたか。開始点 007 は訓練が上がる一方でホールドアウトが負に落ち、開始点 000・001 は 1 歩も動かなかった(距離 0)。

起きたことは 2 つです。

では、どうすれば般化するのか。試したレバーは 2 つあります。

レバー A: 環境を増やす。 訓練場所を 2 から 10 に増やすと、同じ 734 次元の進化でホールドアウトが C 0.887 / D 0.944 に届きました。過適合は消えます。素直な結論です。

レバー B: 自由度を圧縮する。 こちらが面白い方です。734 個の自由パラメータは「シナプス 1 本ごと」に付いています。しかし生物のゲノムは、シナプス 1 本ごとの値を持てません(Zador 2019 のゲノム的ボトルネック)。持てるのはせいぜい「細胞の種類ごとの規則」です。

そこで、進化させる変数を次の 260 次元に畳みました。

個々のシナプス強度は「送り手の利得 × 受け手の利得 × 事前学習値」で決まります。新しい結線は 1 本も作りません(作ろうとしたら止まるようにしてあります)。

自由度と般化

↑ 左が進化(脳のパラメータを動かす)、右が読み出し(脳は固定して線形の重みを解く)。どちらも縦軸は「選択に一度も使っていない場所 C・D での相関の平均」。赤が訓練 2 場所、青が訓練 10 場所。

数字で書くと:

自由度 訓練 2 場所 訓練 10 場所
フリー 734 次元(シナプスごと) −0.25 +0.92
ボトルネック 260 次元(細胞型ごと) +0.71 +0.91

2 つの勝ちがあります。

  1. 少データで勝つ。 同じ 2 景色・同じ開始点・同じ評価回数で、フリーは過適合して負に落ち、ボトルネックは +0.71 に般化しました。自由度を 1/3 に削ったのに、成績は逆転します。
  2. 多データで同等。 10 景色ではフリー 0.916、ボトルネック 0.914。1/3 の自由度で同じ般化に届きます。

同じ形は、脳を一切触らずに読み出し側を解いたときにも出ました(図の右半分)。T4/T5 の活動から自己回転を線形回帰で解く実験です。

読み出し 訓練 2 場所 訓練 10 場所
手書き(パラメータ 0) +0.98 +0.98
構造化(細胞型 × 仰角帯 = 80 重み) +0.96 +0.98
自由(細胞型 × 列 = 5768 重み) −0.03 +0.83

5768 重みは 2 景色で完全に景色を覚え(ホールドアウト C 0.13 / D −0.19)、10 景色でもまだ D が 0.72 で追いつきません。一方、仰角の帯ごとにまとめただけの 80 重みは 2 景色でも 0.96。そして解析解の重みを開いてみると、手書きの式の構造をそのまま再発見していました —— T4a が負・T4b が正、雲の帯に当たる仰角帯 6〜8 に集中、下半分はほぼ 0。

帰納バイアスは少データで勝ち、多データでは損をしない。 自由度を削る場所を「構造の単位」(細胞型、仰角帯)に合わせると、削った分がそのまま般化になる。

正直な注釈をいくつか。(a) 手書きの読み出しがすでに 0.98 なので、この課題では数理最適化に価値がありません。価値があったのは「手書きが最適に近いことの確認」と「重みを開いて構造を読めたこと」です。(b) ボトルネックの 260 次元という切り方は生物学から演繹したものではなく、「細胞型ごと」という粒度を選んだ設計判断です。(c) 2 場所条件はフリー側が特に不利な開始点(007)から始めています。開始点を変えれば差の大きさは変わります。

6. 行動が良くなっても、生物らしさは壊れる

もう 1 つ、進化のたびに測っていたものがあります。T4/T5 細胞の方向選択性(DSI)です。動く縁を 6 通りの速さで見せ、好む向きと反対向きの応答差を測ります。

行動の成績と生物学的リアリズムが、はっきり分離しました。 自己回転を読むという 1 つの課題だけでは、T4/T5 が向きを見分ける必要がありません。実際、T5(暗い縁の検出)がほとんど無選択な個体でも、自己回転の推定は 0.96 出ます。その課題では T5 は冗長なのです。

ついでに、学習前(配線だけ、パラメータは初期分布)のモデルも測りました。方向選択性は 0/8、自己回転推定はほぼ 0(乱数の種を変えても同じ)。配線は機能そのものを与えず、学習の足場を与えている、という形です。

単一の課題で進化させると、その課題に不要な性質は必ず削られる。 生物らしさを残したいなら、それを必要とする課題を目的関数に混ぜる(識別課題の段階列など)。

7. 見る → 向く → 動く を閉じる

最後に、視覚の推定を航法に繋ぎました。昆虫の中枢複合体には、向きを表す「リング・アトラクタ」(バンプが円環上を動く)と、巣の方向と距離を貯める「経路積分」があります。閉形式の検証つきで実装し(位相誤差の上限、閉路の残差、帰路の距離の単調性を全部検査)、そこに flyvis の推定角速度を差しました。

訂正(2026-09-15): この節の数字(7.4 / 23.5 / 19.8 %)、「誤差の内訳」、「7.4 % は周回のせい」は撤回しました。リング・アトラクタを較正せずに使っていました(§8 の 2 件目)。較正後の数字と減速の実験は追記「減速つきの帰巣」にあります。本文と図は初版のまま残します。

視覚から中枢複合体への帰巣(初版、較正なし)

↑ 初版の図(較正忘れ)。左が真値のコンパス(視覚誤差ゼロ)、中央が視覚推定をそのまま使った場合、右が歩行で較正して振幅だけ補正した場合。灰色が往路、色付きが帰路、星が巣。

視覚推定は真値の 0.63 倍の振幅しか持たないので、素直に考えれば「利得を 1.54 倍すれば直る」はずです。ところが較正しても 19.8 % までしか戻りません。誤差を分解すると:

残差が主因で、その比は 3.4 倍。 経路積分は誤差を積算するので、瞬時の相関が 0.977 でも、数秒積めば効いてきます。つまり次に効くレバーは較正ではなく、読み出しの相関そのものを上げることです。これで前節までの進化の話と航法の話が 1 本の線で繋がりました ―― 相関を 0.977 から上げる手段(環境多様性、自由度の圧縮、課題の段階列)は、そのまま帰巣の精度になります。

なお真値コンパスでも 7.4 % 残るのは、前進速度を一定にしているからです(巣の上で周回する)。昆虫は巣に近づくと減速します。減速を入れると記憶の更新と干渉するので、別の実験が要ります。

8. 撤回した話

1 つ、間違えて、撤回した結論があります。

目を肥大化させる実験(個眼を 721 → 1951 本に増やし、同じ学習済み重みを載せる)で、最初はこう書きました ――「個眼を増やしたのに受容野の幅を据え置くと性能が崩れる。光学の共適応が必要だ」。もっともらしい話です。実際、数字も崩れていました(相関 −0.11 〜 0.45)。

原因は光学ではありませんでした。同じプロセスの中で 2 つ目に作った目の像が壊れる、道具の不具合でした。列ごとの分散がほぼ 0 になり、比較用の EMD が nan を返していたのが手がかりです。別のプロセスで作り直すと、据え置きでも正常(0.96〜0.99)でした。

確定した結論はこうです。目の肥大化は再学習なしでも壊れず、少し上がって飽和する(0.98 → 0.98〜0.99)。萎縮(331 本)は落ちる。受容野の共適応はこの範囲では効かない。

驚く結果が出たら、物理で説明する前に道具の順序効果を疑う。 同じプロセスで 2 つ目に作ったもの、2 回目に呼んだ関数、キャッシュが効いた 2 回目 ―― 単独で再現してから解釈する。

2 件目(2026-09-15)。 §7 の帰巣の数字(真値 7.4 % / 視覚推定 23.5 % / 振幅補正 19.8 %)と、そこから引いた「誤差の内訳は振幅 3.8 pt + 残差 12.4 pt」「7.4 % は定速で周回するため」を撤回します。リング・アトラクタを較正せずに使っていて、バンプが角速度より 10.8 % 速く回っていました。較正後は 1.7 % / 2.1 % / 12.4 % —— 視覚推定はそのままで帰れ、振幅補正はむしろ悪化します(追記「減速つきの帰巣」)。「律速は相関の残差」という向きは残りましたが、それを支えていた数字は全部差し替えです。見つかったのは減速の実験で、減速しても止まる場所が 9 cm ずれるのを「干渉」と読みかけて、原因を追ったら較正でした。

部品を較正したかは、部品の側でなく使う側で確かめる。 較正関数があることと、その経路で呼ばれていることは別。§7 は「較正できる部品」を較正せずに使っていた。

持ち帰れる規則

書き手を消しても残る形に畳むと、6 つです。

  1. 検査は事故の起きる場所に立てる。 静止した刺激の合否は、運動中の性能を予告しない。
  2. 脳を疑う前に世界を測る。 手がかりが刺激に存在しないなら、どんなモデルも読めない。性能の数字は世界の設定込みである。
  3. センサの忠実度と行動の成績を分けて報告する。 片方が良いことは、もう片方について何も言わない。
  4. 自由度は「構造の単位」で削る。 細胞型ごと・仰角帯ごとに畳んだ変数は、少データで勝ち、多データで損をしない。削る場所が構造と合っていることが条件。
  5. 単一の課題で最適化すると、その課題に不要な性質は必ず消える。 残したい性質があるなら、それを必要とする課題を混ぜる。
  6. 驚く結果は、物理の前に道具の順序効果を疑う。

どれもハエに固有ではありません。他人の学習済みモデルを自分の系に載せる作業には、そのまま出てきます。

測っていないこと・限界

使った公開モデルと、下敷きにした論文

この PoC は Fullseye の何を使い、何を Fullseye に返したか

視覚の前段は、自作のビジョンライブラリ Fullseye の flyvision 族(8 op)で組んであります。どれも閉じた式で、真値つきの検査が付いています:

op 役割 本記事での出番
fly_hex_lattice 六角格子の視軸(n = 3R(R+1)+1) §0 の A、複眼の幾何
fly_hex_resample ガウス受容野で像を個眼に落とす §0 の C・D(MTF と折り返し)
fly_sky_1f 1/f の帯を持つ合成の空 §2 の「遠景の模様」
fly_emd_response Hassenstein–Reichardt 相関器 §4 のゼロ点
fly_hs_readout 広視野の対向和(HS 型) 読み出しの形
fly_dsi 方向選択性指数 §6 の 8 型の検査
fly_lgmd_eta / fly_tau_from_expansion 衝突検出(η と余裕時間 τ) 本記事では未使用(同じ眼から測れる)

Fullseye に返したものは 2 つです。(1) 評価台: 運動検出器を差し替えても刺激・読み出し・採点が同じままになるので、§4 の「コネクトーム拘束モデルは教科書の式に対して何ポイント上乗せするか(0.14〜0.20)」という比較が成立しました。先行実装は「モデルを動かす」ことはできても、同じ刺激で別の検出器と並べるようには作られていません。(2) 反例: §0 の折り返しや §2 の床の流れは、op の検査を「静止した合成画像」から「歩行中の実測」に引き上げるべきだ、という具体的な要求として戻ってきます。

逆に、体・物理・コネクトームモデルは外部依存のままです(flybody / flyvis)。ここを自作する予定はありません —— 価値があるのは「載せて測る台」の側だからです。


追記: その後の実験

ハエと脊椎動物で「同じ仕事をしている場所」(2026-09-14)

「これはヒトの脳でいうとどこなのか」は自然な問いです。ただし昆虫と脊椎動物の最終共通祖先は 5.5 億年前で、視覚回路の細胞系譜は共有していません。ですから答えは全部「相同」ではなく、別々に同じ答えへ辿り着いた対応(収斂)になります。一次文献で裏が取れたものだけを図にしました。

ハエと脊椎動物の対応

↑ 左がハエ、右が脊椎動物。点線は「相同ではない対応」という意味です。赤い行(光受容体)は役割が同じでも細胞系譜が別で、蝿は光で脱分極・脊椎動物は過分極と、応答の向きまで逆です。いちばん確かなのは L1(ON)/ L2(OFF) と ON / OFF 双極細胞、いちばん強い計算レベルの一致は 中枢複合体のリングと頭方向細胞系(どちらもリング・アトラクタが実測されている)。右下には「調べたが根拠が足りないので描かなかった対応」を並べてあります —— 格子細胞の昆虫版や、中枢複合体と基底核の相同は、書けば推測になります。

この図で、記事の前半が少し言い換えられます。ラミナで ON と OFF に分ける・動態の違う 2 入力を空間的にずらして掛け合わせる・その出力を大視野細胞で束ねて姿勢を安定させる —— これは「ハエのやり方」ではなく、5.5 億年の隔たりを越えて 2 回別々に採用された設計です。§4 で測った「配線の取り分 0.14〜0.20」は、その設計を実測の配線で持っているモデルが、教科書の式に対してどれだけ上乗せするかの数字、ということになります。

配線をシャッフルしても差が出ず、しかも「差が無い」とも書けなかった(2026-09-14)

§4 では、学習済みの重みを載せたまま配線だけを取り替えて「コネクトームの取り分 0.14〜0.20」を出しました。今回はもっと厳しい条件で測り直しました。学習前の同じ初期値から、本物の配線と、次数を保ったまま接続先を入れ替えた配線(シャッフル)2 本を、同じ課題・同じ予算(734 次元、1500 評価、1 条件あたり約 3 時間)で進化させます。事前学習による交絡を外すための手順です。

条件 訓練 保留の平均 C D
本物の配線 +0.196 +0.171 −0.292 +0.633
シャッフル 0 +0.205 +0.198 −0.138 +0.535
シャッフル 1 +0.145 +0.039 −0.215 +0.294

本物とシャッフル平均の差は、保留で +0.052。ところがシャッフル 2 本どうしの差は 0.159 あり、その 3 倍です。つまりこの実験は、配線の差を測れるだけの感度を持っていません。

ここで踏みとどまった経緯を残しておきます。シャッフルが 1 本しか終わっていない時点では「シャッフルのほうがわずかに良い(−0.028)」という数字が出ていて、「配線の取り分はゼロだった」と書きたくなる形をしていました。2 本目が終わると符号が反転します。n = 1 の比較は、差の大きさどころか符号も当てになりません。

感度が足りない理由は 3 つ挙げられます。(1) 探索が事実上バイアスだけに縮退していました —— テンソルごとの標準偏差でパラメータを正規化する実装が、定数に近い初期値(時定数は一律 0.05)に対してスケールを 3.75e-09 まで潰し、std > 0 というガードをすり抜けていたためです。3 条件とも時定数の移動距離は 1e-8、つまり 1 ミリも動いていません。実効下限を入れて直しましたが、上の 3 条件は旧コードの結果なので、この注記は外しません。(2) 各条件 1 シードで誤差棒がありません。(3) §6 で見たとおり学習前の方向選択性は 0/8 で、配線だけでは機能が出ません。配線の差が現れる前に、学習の差で潰れている可能性があります。

次にやるのは結論を書くことではなく、実験の感度を上げることです —— 実効下限つきのスケール、各条件 3 シード以上、シャッフルの本数を増やす。

課題を順番に与えれば方向選択性は作れる。ただし最後の課題が壊す(2026-09-14)

§6 で「行動の目的だけを最適化すると、方向選択性(T4/T5 が向きを見分ける性質)が壊れる」と書きました。その対策として考えたのが、識別を要求する課題を順番に与えることです。4 段 —— 明暗 → ON/OFF → 向き → 回転。各段 400 評価で、前の段の解を次の段の出発点にします。出発点を 2 つ変えて回しました。

段 学習前から始める 学習済み(007)から始める
S1 明暗 0.353 1.000
S2 ON/OFF 0.796 0.964
S3 向き(DSI) 0.002 0.377(8 型中 5 型が合格)
S4 回転(M4) 0.061 0.799(保留 C 0.823 / D 0.811、合格 1/8)

読み取れることが 2 つあります。

(1) 課題の順番は方向選択性を「作れる」。ただし学習済みの出発点からだけ。 007 から始めると、向きの段で 0/8 → 5/8 まで増えます。ところが学習前から始めると、4 段登っても 0/8 のままで、向きの段の成績そのものが 0.002 —— まったく登れません。配線は足場ですが、足場だけでは登れない。前の節(配線シャッフル)や §6 の「学習前の方向選択性は 0/8」と同じことを、別の角度から言っています。

(2) 作った性質は、最後の行動課題が壊す。 向きの段で 5/8 まで増えた選択性は、回転推定の段を学ぶと 1/8 に落ちます。同時に回転推定そのものは、一度も使っていない場所で 0.82 まで上がります。性能と生物らしさのトレードオフが、同じ探索の中を時間を追って進んでいるわけです。前の段の成績も落ちます(ON/OFF は 0.874 → 0.536)。

対策は分かっています —— 段 k の目的を「段 1〜k の平均」にする(累積目的)。回しました。結果は下の「忘却は目的関数の書き方で消えた」にあります —— この節の (2) は、あとで自分でひっくり返すことになります。

なお、この実験は前の節で見つけたスケールの潰れを直した後に走った最初のものです。報告ファイルに「時定数のスケールが 3.75e-09 だったので下限 0.001 を使った」と記録が残っており、直したことが動作として確認できています。

ハエの目から見た世界を、そのまま別のセンサーで見る(2026-09-14)

§0 で複眼の光学を設計しました。ではその目が実際に何を見ているのかを出してみます。歩いた軌跡をそのまま再生し、ハエの公開モデルが最初から持っている眼のカメラ(視野 140°)から描いたものです。

ハエ視点の知覚

↑ 左から ① 世界の中のハエ(中央の小さな橙色)、② その複眼の位置から見た世界(手前の太い棒は自分の脚、上に伸びる黒い櫛は触角、地平線の向こうの塊が目標)、③ 深度(手前が青緑 → 遠くが橙。空は色域から外してあります)、④ 疑似イベント(明るくなった画素が青緑、暗くなった画素が赤)。同じ 1 つの視点から、3 種類のセンサーで同時に見ています。

④ が §0 の話と繋がります。前へ進むと、床の模様が下から外へ向かって流れるのがイベントとして出ます。§2 で「床が 330〜1000°/s で流れて運動検出器の帯域を超える」と書いた、あの流れです。イベントカメラは変化だけを送るので、この流れがそのまま素子の出力になります。

もうひとつ、①②の床に出ている干渉縞(モアレ)は絵の欠陥ではなく、§0 で測った折り返しそのものです。床のテクスチャが画素の間隔より細かいので、レンダラの標本化が「無かった粗い縞」を作っています。§0 の D3 で波長まで予測して測ったのと同じ現象が、実際の描画で起きている —— どんな目でも、標本化より細かい模様を見ようとすると嘘の模様が生まれます。

honest な注記: 胴の軌跡は視覚の閉ループが決めた本物ですが、脚の運びは見た目用の三脚歩容で、脚の力学で歩いているのではありません(記事の最初の表のとおりです)。深度と疑似イベントは描画からの合成で、実機のセンサーの出力ではありません。

どの層を黙らせると自己回転の推定が壊れるか(発生の梯子、2026-09-15)

視覚経路を下流から順に黙らせて、自己回転の推定(§5 の M4)がどの段で壊れるかを並べました。34 条件 —— 対照 + 受容器 R1〜R6 + ラミナ L1〜L3 + メデュラの Mi/Tm 9 型 + T4/T5 各 4 方向 + 束ねた段 6 つ。該当する細胞型の出力を 0 に固定し、同じ刺激で 12 か所を測ります。8 スレッドで 3 時間 23 分、34/34 完走。

黙らせた段 最悪の条件 相関 対照からの低下
(対照) none 0.9487 —
受容器 R1〜R6 R6 0.5742 0.375
ラミナ L1〜L3 束ねて全部 0.4853 0.463
メデュラ Mi/Tm 束ねて全部 -0.0057 0.954
T4/T5 T4 を束ねて 0.5182 0.431

自己回転の推定はメデュラ層に集中していました。 ここを全部落とすと相関が -0.0057、つまりほぼ無相関まで落ちます。受容器・ラミナ・T4/T5 を落としても 0.37〜0.46 の低下で済むのと対照的です。単一の細胞型では Mi1(0.031)と Mi4(0.064) が最も効きます —— どちらも ON 経路の中継です。T4/T5 は方向選択性の教科書的な担い手ですが、回転の推定に対しては単独では決定的ではない。34 条件のうち 24 条件が対照より 0.01 以上低下しました。

ただし、この実験で測れたのは半分だけです。 方向選択性(DSI)のほうは 34 条件すべてが測定不能でした。応答に非有限が 1,009 万要素中およそ 400 万。しかも何も黙らせていない対照条件ですら非有限なので、原因は遮断ではなく応答生成そのものです。前回「非有限の条件は測定不能として記録して先へ進む」と直しましたが、それは測定不能を正しく報告するようにしただけで、非有限そのものは直っていなかった —— 修正が入ったことを「実験が通った」と読んではいけない、という例になりました。

教訓が 1 つあります。2 つの指標を 1 本の実行に相乗りさせると、片方の故障が全条件を無効にします。 M4 は 34/34 取れたのに DSI は 34/34 失われました。指標ごとに独立に走らせるか、少なくとも対照条件で指標そのものの健全さを先に確かめるべきでした。

追記(同日午後)— 非有限の正体。 最小再現(モデル 000、遮断なし、hook 登録なし、速度 19 と 25 の 2 種だけ)で、速度 25 の応答がフレーム 465 から非有限になり、刺激が有限なフレームの中の非有限は 0 でした。一次情報は flyvis の moving_bar.py の _resample: 速度ごとに長さの違う刺激を最遅速度の長さまで NaN で末尾詰めしていて(コードの注記にそう書いてある)、網がその NaN を層の遅れつきで伝えます。6 速度では列あたり 62,616 要素が構造的に非有限 —— 本番の対照条件の 4,057,080 / 10,090,080 と一致し、遮断条件がちょうど 62,616 少ないのも同じ構造で説明がつきます。flyvis 公式の DSI は時間窓しか読まないので影響は無く、壊れていたのは梯子の「全要素が有限」という門だけでした。速度 19 だけの smoke には末尾詰めが無いので、原理的に見つけられなかった。刺激が有限なフレームだけを門にかける形に直し、selftest は既存の参照値と 8 型すべて ΔDSI 0.0000。梯子の 34 条件は DSI 込みで再投入します。教訓 = 「有限であること」の門は、道具が意図的に NaN を使う場所を知らないと誤警報になる。

忘却は目的関数の書き方で消えた(2026-09-15)

前の節で、課題を順番に与えると方向選択性は作れるが最後の行動課題が壊す(5/8 → 1/8)と書きました。対策として挙げた累積目的 —— 段 k の目的を「段 1〜k の平均」にする —— を、同じ出発点・同じ予算・同じ課題で回しました。

段 明暗 ON/OFF 向き 方向選択性の合格
S1 1.000 0.372 0.123 1/8
S1+S2 1.000 0.997 0.056 1/8
S1+S2+S3 0.987 0.979 0.365 4/8
S1+S2+S3+S4 0.999 0.961 0.392 6/8

最終段での回転推定は、一度も使っていない場所で 0.875 / 0.814。

忘却は消えました。しかも行動性能を落とさずに。 順番に与えるだけ(非累積)では最後の段で方向選択性が 5/8 → 1/8、ON/OFF が 0.874 → 0.536 と壊れました。累積目的では方向選択性が 4/8 → 6/8 とむしろ増え、ON/OFF は 0.979 → 0.961 と保たれます。回転推定の成績も前回(0.823 / 0.811)と同等以上です。

つまり 性能と生物らしさのトレードオフは、原理的な二律背反ではなく、目的関数の書き方の問題でした。 前の節で「最後の課題が壊す」と書いたのは現象としては正しいのですが、原因の読みが足りていませんでした —— 壊れたのは、保ちたい性質を最後の段の目的に入れ続けなかったからです。

代償ははっきりしています。1 回の評価で段の数だけ測るので、最終段は 1 世代あたり 239.8 秒 —— 非累積の約 7 倍、全体で 140 分(前回は約 40 分)。保ちたい性質の数だけ評価が重くなるので、何を保つかは設計判断として明示的に選ぶ必要があります。

減速つきの帰巣 —— 「干渉」に見えたものは 2 つとも別物だった(2026-09-15)

§7 の末尾に「減速を入れると記憶の更新と干渉するので別の実験が要る」と書きました。その実験をしたら、干渉ではなく §7 の数字そのものが間違っていたことが分かりました。

1 つ目: コンパスの較正忘れ。 減速(前進速度 = v0 · H / r_slow、 H は記憶が復号する home vector の長さ。脳が持たない真の位置は使わない)を入れても、真値コンパスの停止誤差が往路の 31〜41 %(定速の最接近 7.4 % より悪い)で、記憶は「巣に着いた」と言うのに真の位置は 9 cm 離れていました。原因を追うと、§7 のリング・アトラクタは較正なし(g = 1)のまま使われていて、バンプが角速度より 10.8 % 速く回っていました(較正後は 1.000、純粋な時間遅れは 0.002 rad)。帰路の最初の旋回 ≈ π rad で 0.34 rad ずれます。較正して §7 を測り直すと:
条件 §7 初版(較正なし) 較正後
真値コンパス 7.4 % 1.7 %(帰れた)
視覚推定そのまま 23.5 %(帰れない) 2.1 %(帰れた)
利得 1.54 で振幅補正 19.8 % 12.4 %(視覚推定そのままより悪い)

較正後の帰巣

↑ 較正後の §7。視覚推定をそのまま繋いでも帰れる(中央)。振幅補正は帰路を大きく外す(右)。

§7 の「誤差の内訳 = 振幅 3.8 pt + 残差 12.4 pt」「律速は較正でなく相関」「7.4 % は周回のせい」は全部この較正忘れの産物で、撤回します(§8 の 2 件目)。較正後の読みはこうです —— 振幅の過小 0.63 倍が効くのは正味の回転(この往路では −0.26 rad、総回転量 4.6 rad)を通してだけで、最小二乗の利得 1.54 は雑音のうち向きに積もる成分も 1.54 倍します。瞬時の残差(std)は 0.226 → 0.119 rad/s と減るのに、積分した向きの誤差 ∫(ŵ − ω)dt は rms 0.124 → 0.210 rad と増え、折返し時点で記憶が抱える誤差は 2.8 cm → 5.3 cm。経路積分に効くのは後者です。帰巣を決めるのは向きに積もる残差であって振幅ではない —— 結論の向きは同じですが、根拠の数字は別物です。

2 つ目: 規則の不安定平衡。 較正後に減速を入れると、r_slow = 2 cm だけで停止誤差 6.9 cm に暴走しました。測定の穴ではなく規則の穴です: 操舵 w = k H sin ε(ε は進行方向から見た巣の角)も速度も H に比例するので、経路の曲率 w / v は H に依らず、**巣を背にして止まった瞬間(sin ε ≈ 0)は旋回せず、残った記憶の誤差ぶんの速度で真っすぐ歩き出し、歩くほど H が増えて速くなる(時定数 r_slow / v0 の指数)。どの r_slow で当たるかは止まったときの向き次第で、2 cm は偶然です。「巣が前方にあるときだけ歩く」(v に max(0, cos ε) を掛ける。ハエの体サッケード = 旋回中は歩かない、に対応)を足すと、全 r_slow で停止誤差 0.03 cm(真値コンパス)、到着時間は r_slow に単調(10.8 → 25.1 s)、視覚推定の条件では停止誤差 0.59 cm(そのまま)/ 3.81 cm(振幅補正)が停止時に記憶が抱える誤差とぴったり一致**しました。

減速つきの帰巣

↑ 左: 減速半径 r_slow の掃引。点線(gate なし)は 2 cm で暴走、実線(巣が前方のときだけ歩く)は全域で止まる。破線は定速で 30 s 後の距離。中: 停止位置の誤差 = 停止時の記憶の誤差(恒等線に乗る)。右: r_slow = 2 cm の帰路(印が停止位置)。

減速は記憶の更新と干渉しません。減速は誤差を隠さず、記憶に積もった誤差をそのまま停止位置に写す —— 定速の「最接近」は軌跡がたまたま巣のそばを通った楽観値だったので、減速のほうが正直な指標になります。4 回走らせて事前の予測は 3 回外れ、その記録はスクリプトの docstring に残してあります。

前段を凍らせて全細胞型の活動を取り出したら、信号の半分が「縁」だった(2026-09-19)

手書きの読み出し(§2 の ratio_relu_up)を「進化する頭」に置き換える実験の前段として、視葉モデルを凍結してキャッシュしました。歩きながら回る 12 場所 × 350 フレームの刺激を学習済みモデル 000 に通し、全ノードの活動を保存します —— 45,669 ノード(63 型 × 721 列 + Lawf1 / Lawf2 × 123 列。「65 型 × 721 列」と書いてきたのは近似で、門が最初の実行で落として分かりました)、688 MB、94 秒。以後、頭の進化も蒸留も配列演算だけになります。キャッシュ経由の手書き読み出しは元の評価と一致し(門)、保留場所の相関は C 0.976 / D 0.977。

65 細胞型の活動ラスター

↑ 場所 C で歩きながら回るときの、視葉 65 細胞型の活動(型ごとに整流平均を z 化)。上段は実際の回転。網膜 R1–8 が明暗で一斉に動き、T4a / T4b が回転の符号で交互に光ります。

歩行中の列活動

↑ 同じ区間の 721 列(六角座標)。左から入力 R1 → 収束点 Mi1 → 反対向きの運動検出器 T4a / T4b。色は明るいほど強い(静止版は f1_hex_walk_C_static.png)。

図を描いて初めて気づいたことがあります。T4 / T5 の活動が六角の縁だけに見えたので数えると、縁の 90 列(721 の 12 %)が整流和の 41〜73 %(地平線より上では最大 81 %)を占め、平均活動は内側の 8〜20 倍でした(Mi1 は 13 % で正常)。縁の列は横方向の入力を欠く境界効果です。縁を抜いた手書き読み出しの相関は A 0.900→0.880 / B 0.941→0.944 / C 0.976→0.970 / D 0.977→0.952 で機能は保たれますが、§2 で「視野全体の運動検出器の和」と書いた信号の半分以上は境界効果でした。撤回ではなく但し書きとして残し、頭の入力と蒸留の教師は内側 631 列で組みます。

T4/T5 の六角マップ

↑ 回転が最大のフレームの T4a–d / T5a–d。色尺度を内側の 99 % 点で決めると内側の縞が見え、縁 90 列は飽和(黄)で描かれます。

零点も同じキャッシュで立てました。手書きの材料 4 特徴の線形回帰で保留 C 0.980 / D 0.990、細胞型ごと 122 特徴で D 0.961、型 × 左右 366 特徴で D 0.948 —— 特徴を増やすほど保留で悪くなる(§4 の「自由度は構造の単位で畳む」がここでも)。進化する頭はこの 0.98〜0.99 を超えるか、超えないなら「何を保つか」で勝負になります。

雄の全中枢神経系コネクトームで「左右の欠落」を数えたら、キノコ体の亜型だけだった(2026-09-19)

この PoC の視葉モデルは右眼 1 つ分です。左右を鏡像で重ねる前に「実物の脳の左右はどれほど揃っているか、欠けはあるか」を、公開されたばかりの MaleCNS v1.0(Janelia FlyEM × Google Research、雄、脳と腹髄を含む全中枢神経系、166,000 超のニューロン、CC-BY 4.0)で数えました。注釈表(211,577 body)と結合表(1.5 億行)を手元に落として集計しています(データはリポジトリに入れていません)。

量 値
ニューロン様 body 166,283
体細胞の側 L / R / M 73,999 / 74,223 / 392
左右に体細胞のある型 11,229 のうち |L−R| ≤ 1 10,789(96 %)
二項検定(Bonferroni)で有意な左右差 KCab-s の 1 型だけ(L 234 / R 423)

キノコ体 KCab の左右差

↑ 左: 公開ラベル。右: 結合の指紋から両側合同で引き直したラベル。差は縮むが消えない。データ = MaleCNS v1.0(CC-BY 4.0)。

「左右の欠落」は細胞数の水準では無く、有意な非対称はキノコ体 Kenyon 細胞 KCab の亜型 s / m / c の境界にありました(KCab 合計は 885 / 925、KC 全型は 2,018 / 2,045 で対称)。補完を 4 通り試しました: (1) 数の左右平均 —— 数は埋まるがどの細胞かは決まらない。(2) 片側のラベルで学んだ分類器を反対側へ —— 片側内の精度 0.78 に対し反対側との一致 0.48〜0.61。(3) 側を使わず両側で学んだ整合ラベル —— |L−R| は s 189→151 / m 84→64 / c 66→46 と縮むが消えない。(4) 結合プロファイルの余弦類似度で反対側の最近傍を取る(公開ツール coconatfly の考え方)—— 一致 0.55。読み: 結合の指紋そのものが右で s 寄りで、この個体の実差か相手の型ラベルの左右差の交絡かは、このデータだけでは決められません。「欠落」ではなく「亜型の左右差」として記録します。

同日夜の追記(第 2 実装): 同じ KCab 1,810 細胞を公開ツール coconatfly(R、natverse。cf_cosine_plot の余弦行列を受け、ward.D で 4 クラスタ)でも引き直しました。公開ラベルとの一致は L 0.88 / R 0.84(自前の分類器 0.72 / 0.76 より高い)、自前の整合ラベルとの一致は 0.72 で、ずれは c / m の境界に集中します。s の結合クラスタは L 201 / R 352 で、右に約 150 多いのは実装に依らない結果でした。読みを 1 段進めます: 結合空間での s の左右差は実在し、c と m の境界は手法で動く(= 亜型ラベルの左右差の一部は境界の引き方)。2 実装が一致した点は「見つけられなかった穴」ではなく「同じ穴を 2 度見た」可能性も残るので、次は結合以外の指紋(形態)で 3 度目を引きます。

脳の全体像(2026-10-18 追記): 数えた脳を、そのまま見ておきます。同じ注釈表の細胞体の座標から、脳の細胞体 126,104 個(VNC と上行ニューロンを除く)を 1 点 = 1 細胞で、上位クラスごとに色を分けて描きました。青が視葉の内在ニューロン(81,055)、橙が中枢脳の内在ニューロン(31,997)、紫が視葉から中枢への投射(9,162)、緑が脳から VNC への下行ニューロン(1,308)です。中枢脳に開いた黒い穴は、細胞体の無い神経叢(配線の束)の場所です。

ハエ(雄)の脳の細胞体 126,104 個

↑ 正面・側面・背面。縮尺は 3 面で共通。データ = MaleCNS v1.0(Janelia FlyEM / Google Research、CC BY 4.0)、描画 = Fullseye の points_render。

脳を回す

↑ 背腹の軸まわりに 1 周(36 コマ、どのコマも points_render の 1 回の呼び出し)。

この絵は Fullseye の op で描いています。それまで Fullseye には点群を色の絵にする op が無く、ViEW 2026 の名刺の裏に刷った同じ脳は手書きの numpy で点を置いていました。新しく足した points_render は、小数画素の足跡を深さの順に重ねるか、光の総量を保って足します。絵がきれいなだけでは合っているか分からないので、描画器が自分で計算していない値で採点しました。注釈の左右ラベルで L の細胞体の 99.5 % が正面図の右半分に入り(前から見るとハエの左は右)、細胞型の名前で引いた Kenyon 細胞 4,050 個は触角葉のニューロン 437 個より背側・後ろに写ります。正面図と背面図(別のカメラ)の列ごとの和は左右を反転して 1.8e-15 まで一致します。PoC は examples/poc_flybrain_pointcloud.py です。

線虫の配線は左右対称か —— 物差しを、配線が全部そろった脳で先に試す(2026-09-27)

ハエの脳で「左右」や「個体差」を測る前に、配線が全部そろっている最小の脳で物差しそのものを試しました。線虫 C. elegans の雌雄同体は 302 ニューロンで、化学シナプスの配線が全部公開されています(Cook et al. 2019、wormwiring.org。データはリポジトリに入れていません)。

問いは単純です。左右の対(AVAL と AVAR のような 98 組)をすべて入れ替えても、配線は変わらないか。 変わらなければ完全に左右対称です。入れ替えた配線と元の配線の結合の重なり(Jaccard)を測りました。

量 値
ニューロン / 化学シナプスの有向結合 / 左右の対 300 / 3,669 / 98 組
左右を入れ替えた配線との重なり(Jaccard) 0.473
完全に左右対称なら 1.000
各細胞の入次数・出次数を保って組み替えた偶然(20 回) 0.080 ± 0.002(z 159)

左右入れ替えの閉形式と op の一致

↑ 答え合わせの真値は数え上げの閉形式です。完全に鏡像な合成配線(片側 m 本)から右側の k 本を動かすと、重なりはちょうど (m−k)/(m+k) になります。op は 16 段すべてで、分子と分母の整数まで一致しました。

線虫の配線は、完全対称と偶然のちょうど中間にあります。半分は鏡像で、半分は鏡像ではありません。 予想では「非対称は少数の対に集中している」はずでしたが、外れました。非対称な結合の多い上位 10 組が持っているのは全体の 20 % で、均等に散っていれば 10 % です —— 偏りは均等の 2 倍程度にとどまります。上位は HSN 60 %・PVN 57 %・RMG 53 %・URX 48 % でした。

対ごとの非対称率

使った op は Fullseye の graph_swap_symmetry(対を入れ替えた配線との Jaccard)と graph_degree_preserving_null(次数を保ったまま組み替える偶然)です。

画像で神経の木を測ると、実物の木とどれだけずれるか(2026-09-27)

コネクトームは電子顕微鏡の画像から神経の「木」を切り出して作ります。そこで逆向きに、実物の木を真値にして、画像で測ると何が壊れるかを測りました。素材は NeuroMorpho.Org の再構成(SWC 形式、CC BY 4.0、RRID:SCR_002145)からマウス新皮質の 3 本です。SWC は「根は 1 つ・親の番号は子より小さい・節点の数は辺の数 + 1」という構造の約束を持っていて、それ自体が門になります(破った行を入れると読み込みで落ちる)。

同じ木を 12 の向きから見て、画像計測が普段やる「投影 → 細線化」を通しました。

量 3-D(実物の木) 投影した画像
Sholl 解析(同心球 / 同心円との交点数) 12 回転で整数が 1 つも動かない 向きで最大 9〜16 交点動く
分岐点の数 真値 16 / 11 / 37 22〜28 / 15〜24 / 41〜49
骨格の長さ / 実物のケーブル長 1 0.72〜0.82

投影の Sholl と 3-D の Sholl

分岐の数と視線

↑ 分岐の余分は、奥と手前の枝が画像の上で交差して、細線化で「分岐」に化けたものです。

木の計測の精度は、木ではなく視線が決めていました。 顕微鏡の 1 枚の像から樹状突起の分岐を数えるとき、その数には「どこから見たか」がそのまま混ざります。

同じ遺伝子の線虫 8 匹で、脳の配線はどこまで同じか(2026-09-27)

左右の次は個体と個体です。Witvliet et al. 2021(Nature 596:257)は、遺伝的に同一な線虫 8 匹の脳(神経環)を、生まれた直後から成虫まで電子顕微鏡で再構成しました(データは nemanode.org。明示のライセンスが無く引用の依頼だけがあるので、リポジトリには入れていません)。8 匹すべてに在る 183 細胞の上に 8 枚の配線を重ね、各結合が何匹に在るかを数えました。

8 匹の配線を発生順に

↑ 生まれた直後から成虫まで、8 匹の配線を順に表示しています。1 点が 1 本の結合(行 = 送り手、列 = 受け手)。色は「その結合が 8 匹中何匹に在るか」で、黄 = 8 匹全員、紫 = 1 匹だけです。生まれた直後の配線はほとんど黄で、成長とともに紫や青の点(一部の個体にしか無い結合)が増えていきます。

量 値
1 匹あたりの結合(生直後 → 成虫) 768 → 1,792
8 匹のどれかに在る結合(和集合) 2,977
8 匹全員に在る結合 442
同じことを偶然で(各個体の次数を保って組み替え、20 回) 平均 0.0 本、最大 0 本
全員に在る結合が担うシナプス(8 匹の合計) 57 %(結合数では 15 %)
同じ年齢の成虫 2 匹の重なり(Jaccard) 0.53
隣り合う発生段階の重なり / 生直後と成虫 0.51 / 0.33〜0.34
途中から現れて最後まで残る結合 / 途中で消える結合 701 / 55

全員に在る結合は偶然の何倍か

核は少数の結合でシナプスの過半を担う

読み方は 2 つあります。全員に在る核は偶然では説明できません(偶然では 20 回とも 0 本)。そしてこの核は結合の 15 % しかないのに、シナプスの 57 % を担っています —— 太い結合ほど個体を超えて保存されます。一方で、個体差は大きいです。同じ年齢の成虫 2 匹の重なりは 0.53 で、「生まれて 5 時間の個体と 8 時間の個体」の重なりと変わりません。

齢の差と重なり

公表値との照合(合わせにいっていません): 論文は「7 匹以上に在る結合」を stable とし、成虫の結合の約 43 % としています。この素朴な数え方では 34 % でした。差の 9 ポイントは、著者が公開している結合 1 本ごとの分類表と突き合わせて全部分けられました。

数え方(成虫 #7、全員に在る 183 細胞の上の 1,746 本) stable の割合
① 細胞単位の結合が 7 匹以上に在る(この記事の素朴な数え方) 34.5 %
② 左右の対でまとめた結合が 7 匹以上に在れば、その対に属する細胞単位の結合 1 本 1 本に stable の札を付ける 48.9 %
③ 論文の表(variable と「発生で変わる結合」を先に除く) 45.4 %

論文は②の札の付け方をしていました。論文が stable とした 792 本のうち 789 本(99.6 %)が、②の「対で 7 匹以上」だけで再現できます。 細胞単位では 6 匹以下にしか無い結合でも、左右の相方の結合と合わせれば 7 匹以上に在る —— そういう結合を論文は stable と数えています。②から③へ下がる 3.5 点は、同じ結合を先に variable や dynamic に振り分ける優先順位の分です。さらに 183 細胞に絞らず、後から生まれる細胞だけを除いて数えると 43.2 % で、公表値の約 43 % に一致しました。

私は最初「対でまとめると 37 %」と書きかけましたが、それは分母まで「対の結合」に変えた別の量でした。論文は、細胞単位の結合に、対の単位で決めた札を付けています。 何を 1 本と数えたかが違うだけで、どちらかが間違っているわけではありません。

公表値との照合(内訳つき)

答え合わせの真値は合成の系列の閉形式です。全員に共通の核を C 本、個体ごとに重ならない固有の結合を u 本置くと、「全員に在る結合」はちょうど C 本、どの 2 匹の重なりも C/(C+2u) になります。op はこれを整数まで一致させてから実データに進みます。この回で Fullseye に graph_edge_consensus(K 個体の配線を重ねて、結合ごとの出現回数・個体間の重なり・シナプスの取り分・発生順の分類・個体ごとの偶然を返す op)を足しました。同じ op は、同じ設計の製品を何台も作ったときの「全台に在る配線/一部にしか無い配線」の比較にもそのまま使えます。

40 年前の手作業の配線図と、今の成虫の配線はどれだけ重なるか(2026-09-27)

線虫の配線図の原点は White et al. 1986 です。電子顕微鏡写真を手作業でたどった最初の完全な配線図で、その成虫 1 匹(N2U)が nemanode.org に載っています。これを、上の節の 2021 年の成虫 2 匹(dataset 7・8)と同じ細胞名の上で重ねました(共通 215 細胞)。問いは「時代と手法の差は、個体の差と比べてどれくらいか」です。

組 重なり(Jaccard)
2021 年の成虫 2 匹どうし(同じ手法) 0.508
1986 年の N2U と 2021 年の成虫 0.431 / 0.442
3 匹すべてに在る結合 1,015 本(次数保存ヌルは平均 28 本 = 36 倍)

時代と手法をまたいでも、重なりは同じ手法の 2 匹より 0.07 低いだけでした。1 − 0.508 = 0.49 もある個体差に比べれば小さな差です。では 1986 年の配線図には何が無いのか。2021 年の 2 匹ともに在るのに 1986 年に無い結合 451 本は、平均 2.0 シナプスの細い結合でした(3 匹とも在る結合は平均 5.7)。

1986 に無い結合は細い

↑ 横軸 = 2021 年の 2 匹の合計シナプス数。1986 年に無い結合(青)は合計 2 前後に集中しています。最初は 2 匹の「平均」を丸めて数えたら奇数と偶数でギザギザの分布が出ました —— numpy の偶数丸め(2.5 → 2)の跡で、生物の性質ではありません。合計(整数)のまま数えると消えました。

正直な内訳: nemanode 上の N2U は、2020 年に Zhen lab が筋肉の情報を補った版です。「時代の差」には再注釈の差も含まれます。White 1986 のもう 1 匹(JSH)は L4 幼虫なので、成虫どうしの比較には入れていません。使った op はこの回で足した graph_edge_consensus だけです。

線虫の神経突起は、生まれてから何倍に伸びるか(2026-09-27)

配線(誰が誰にシナプスを作るか)の次は形です。Witvliet 2021 の 8 匹には、ニューロンごとの神経突起の骨格(枝分かれした線)も公開されています。論文は「神経突起の総長は生まれてから成虫までに 5 倍になった」と書いています。この回で Fullseye に足した神経の木の op 3 本 —— tree_from_swc(SWC を読み、根が 1 つ・親の番号が子より小さい・節点 = 辺 + 1 の約束を破った木は拒む)、tree_morphometry(分岐・先端・ケーブル長)、tree_sholl(Sholl 解析)—— で測り直しました。

発生段階 骨格 神経突起の総長
L1 生直後 196 本 2,806 µm
L1 16 時間 205 本 4,544 µm
L3 27 時間 210 本 6,396 µm
成虫 #8 218 本 12,038 µm

神経突起の総長

成虫 / 生直後は 4.29 倍でした(8 匹に共通の 195 本だけなら 3.86 倍)。論文の約 5 倍と同じ桁ですが、5 倍そのものではありません。そこで著者が骨格ファイルに書いている長さを足してみると 3.95 倍で、やはり 5 倍になりません。論文の 5 倍は、このファイルを単純に足した値ではない(数える細胞や範囲が違う)と読みます。L3 の総長が L2 とほぼ同じなのは標本の縮みで、著者のコードは L3 だけ長さを 1.1 倍に補正しています。

答え合わせは 2 段です。まず骨格 1,727 本(途中で途切れた骨格 61 個は断片ごとに測って合算)が、構造の約束と Sholl の閉形式(曲線の下の面積 = Σ d_子 − d_親 )をすべて通りました。次に第 2 実装として、断片が 1 つの骨格 1,586 本で、op が出した「根から枝に沿った最長距離」を、著者がファイルに書いた節点ごとの距離と突き合わせ、相対 1.75e-9 で一致しました。

この途中で、門の立て方を 3 回直しています。

  1. 最初は著者の「長さ」の欄を真値にしかけました。ところが 1,586 本中 1,360 本が合いません。その欄は線分の長さの合計ではなく(中央値で 0.89 倍)、書き出し元の定義で計算されたもので、この repo からは確かめられません。門には使えないので外しました。
  2. 節点ごとの距離の欄には、座標の書かれていない節点も混ざっていました(1 匹目で 196 本中 54 本)。座標のある節点だけで比べると一致しました。
  3. SWC に座標を小数 3 桁で書くと、丸めで最長経路が 1.9e-6 ずれました。6 桁にすると 1.75e-9 まで下がりました。

AVAL の Sholl 曲線

↑ 同じ名前のニューロン AVAL の Sholl 曲線を 4 つの発生段階で。横軸は骨格の始点からの距離です(始点が細胞体とは限りません)。成虫では突起が 25 µm 先まで届いています。3 次元の Sholl なので、どの向きから見ても同じ曲線になります —— 上の「画像で木を測る」節で、投影すると視線で交点が 9〜16 個動いたのと対照的です。

電子顕微鏡の神経の切り出しを、分けすぎとまとめすぎに分けて採点する(2026-09-27)

ここまでの配線図は、どれも電子顕微鏡の断面から神経を 1 本ずつ切り出して作られています。いまその切り出しは自動で、誤りは 2 種類しかありません。1 本の神経を 2 つに切る分断と、別々の 2 本をくっつける融合です。分断は後で繋げば済みますが、融合は配線図に存在しないシナプスを生みます。だから採点は「どれだけ間違えたか」を 1 つの数字にせず、2 つに分けて出すのが競技会(CREMI / SNEMI)の作法です。

この回で Fullseye に採点の op を 3 本足しました。seg_contingency(正解と候補の分割表)、seg_variation_of_information(VOI を split = 分けすぎと merge = まとめすぎに分けてビットで返す)、seg_rand(Rand 指数・調整 Rand 指数・CREMI の adapted Rand error)です。データは CREMI の sample A(ショウジョウバエの脳の電子顕微鏡、z = 40 の 512 × 512)です。

答え合わせは閉形式です。正解に、既存の seg_inject_split / seg_inject_merge で誤りを 1 つずつ仕込みます。m 画素の領域を m1 と m2 に割ると、split はちょうど (m/N)·H2(m1/m) ビット上がり、merge は 0 のままです(H2 は 2 値のエントロピー)。融合はその逆です。分断 4 件・融合 4 件とも、この式と 1e-12 以下で一致しました。実データのどんな割り方でも厳密に成り立つ式なので、合成データでなく実物の正解の上で門にできます。

次に、古典的な切り出し(膜らしさの応答 → しきい値 → 連結成分 → 膜の画素を最寄りの細胞へ)を採点しました。

しきい値ごとの split と merge

しきい値(細胞とみなす画素の割合) split(分けすぎ) merge(まとめすぎ)
60 % 1.14 0.18
65 % 0.91 0.35
85 % 0.05 5.02

しきい値を上げると細胞が太り、膜の切れ目から隣と繋がり始めます。split は下がり merge は上がり、65 % と 70 % の間で入れ替わります。VOI(split + merge)が最小なのは交点の手前の 65 % で、1.263 ビットでした。1 つの数字だけ見ていると「65 % が最良」で終わりますが、2 つに分けると「最良の点でもまだ分けすぎ側」だと読めます。

EM 断面・正解・古典の切り出し

↑ 左から EM 断面、正解のラベル、しきい値 65 % の古典の切り出し。細胞の中に穴や小片が残り、それが split として数えられています。

途中で結論が一度ひっくり返りました。最初の版は、どのしきい値でも「まとめすぎ」でした。原因は採点の前処理で、膜の画素を背景(ラベル 0)のまま残していたことです。背景全体が 1 つの巨大な「領域」として数えられ、正解の細胞を何十個もまたいでくっつけていることになります。しきい値 70 % で merge 2.07。膜の画素を最寄りの細胞へ割り振ると 0.85 で、2.4 倍の水増しでした。切り出しそのものは同じでも、採点の約束ひとつで「分けすぎ」が「まとめすぎ」に見えます。

もう 1 つ、第 2 実装の側の欠陥も出ました。scikit-image の adapted_rand_error と突き合わせると、誤差の値は一致したのに precision と recall が入れ替わっていました。scikit-image のコードは precision を正解側の対の数で割っていて、docstring の説明と逆です。F 値は対称なので誤差は正しく、precision と recall を別々に使うときだけ食い違います。Fullseye の seg_rand は docstring にこの対応を書き、テストで明示的に突き合わせています。

切り出しの誤りは、配線図のどこを壊すか(2026-09-27)

上の節の採点は画素で数えています。けれどコネクトームで欲しいのは画素ではなく配線図で、配線図は切り出した神経の上にシナプスの注釈(前の点と後の点)を落として読みます。だから切り出しの誤りは配線図の誤りに化けます ―― ただし全部ではありません。シナプスの無い所で神経を切っても、配線図は 1 本も変わりません。

この回で Fullseye に配線の op を 2 本足しました。seg_synapse_partners はシナプスの両端がどの神経に落ちるかを読み、分割が言っている配線図を返します。seg_wiring_variation は、画素の VOI をシナプスの端 2n 点だけで取り直します。CREMI の sample A にはシナプス 216 対の注釈が付いています。そのうち z 125 枚 × xy 625² の区画に両端が入る 115 個(接続 107 本)を使いました。

この「シナプスの所だけで VOI を取る」構成は新しくありません。Plaza・Scheffer・Chklovskii の 2014 年の論文(Focused proofreading、arXiv:1409.1199)が synapse VI として定義し、split と merge の 2 項に分け、NeuroProof(C++)に実装しています。この回で足したのは、numpy だけの実装、接続ごとの水準、誤りを 1 件ずつ仕込んで画素と配線の損傷を同じ単位で比べる実験、そして校正の順番の比較です。NRI(Reilly 2018)は端の対の F 値、ERL(Januszewski 2018)は骨格の走行長で、どちらも情報量ではありません。

実験は次のとおりです。シナプスのある神経 54 本それぞれに、「x の中央の面で半分に切る」誤りと「いちばん広く接する隣と貼る」誤りを 1 件ずつ仕込み、画素の VOI と端の VOI を比べます。答え合わせは閉形式です。神経の端 s 個が s1 / s2 に分かれると、split はちょうど (s/2n)·H2(s1/s) ビット上がります。108 件すべてがこの式と一致しました(最大誤差 1.4e-17)。

画素の誤りと配線の誤り

  分断 54 件 融合 54 件
配線を 1 ビットも変えない 23 件 5 件
画素 1 ビットあたりの配線の損傷(中央値) 0.58 1.30

画素の採点は、配線の損傷の代理としては分断を重く、融合を軽く数えます。分断の 4 割は、切った面の片側にシナプスの端が 1 つも無いので、配線は無傷です。融合は、別々の神経のシナプスを 1 つの物体にまとめ、配線図に存在しない接続を作ります。「分断は後で繋げば直るが、融合は偽のシナプスを生む」という校正の現場の言い方を、同じ単位(ビット)の数字にするとこうなります。

切っても配線が無傷な神経と、少し切っただけで配線が壊れる神経

↑ 左は画素では大きい誤り(0.027 ビット)ですが、シナプスの端 16 個が全部片側にあり、配線の損傷は 0 です。右は画素では 12 分の 1(0.002 ビット)なのに、端 8 個が 4 対 4 に割れ、画素 1 ビットあたりでは分断 54 件のうち配線を最も壊します(0.035 ビット)。

では、画素の VOI の大きい順に校正すればよいのでしょうか。

直す順番と、消える配線の損傷

上位 20 件を直すと、画素の順で配線の損傷の 41 %、配線の順(理想)で 49 %、でたらめで 19 % が消えます。画素の採点は悪い代理ではありません。でたらめの 2 倍は効きます。ただ理想には 8 ポイント届きません。差は大きくないので、「画素の採点では校正の順番を決められない」とまでは言えません。言えるのは、ずれの向きが決まっていることです。画素の採点は、配線に効かない分断に校正の手間を回させます。なお誤りは 1 件ずつ独立に仕込んだので、誤りどうしの干渉は測っていません。

同じ誤りを、もう 1 つの流儀 NRI(Reilly 2018、シナプスの端の対のうち正解でも候補でも同じ物体にある対の F 値)でも採点しました。新しい op seg_synapse_nri は、端の上の 1 − adapted Rand error と厳密に一致することを内部で検査します。端の VOI が 0 の誤りは NRI の損失も 0 で(対が 1 つも離れないので)、これは門にしてあります。実測では、NRI の損失と端の VOI の順位相関は 1.00 —— どちらも端の対を数えるので、同じ誤りをほぼ同じ順に並べます。画素の VOI との順位相関は 0.59 で、上の 0.60 と同じ話です。

1.30 / 0.58 の中身(2026-09-28 追記)。 誤り 1 件の「配線ビット ÷ 画素ビット」は、閉形式を割るだけで恒等的に 密度 × 偏り に分かれます。密度はその神経のシナプスの端の取り分 ÷ 体素の取り分、偏りは端の 2 分割の H2 ÷ 体素の 2 分割の H2 です。108 件すべてでこの恒等式を門にしました。融合では端が体素に付いて回るので偏りの中央値は 1.00(四分位 0.90〜1.27)で、比 1.30 はほぼ密度(中央値 1.16、シナプスのある神経は平均より密)です。分断は体素を半分に切るので分母の H2 が 1 で、偏りは H2(s1/s) そのもの。ここで効くのは端の個数の少なさでした —— 神経 1 本の端は中央値 3 個で、端が神経の上に一様に散っていたとしても H2 の期待値は 2 項分布の閉形式で 0.62 止まりです(端を実際に神経の体素にばら撒いて切り直す混ぜ直しも 0.62、門)。実測の平均は 0.53 で、0 の 23 件と「ほぼ釣り合い」に割れます。差の 0.09 が端の空間的な集まり方の分です。

端の個数と偏りの因子

新しい op seg_wiring_exposure は、この「端の個数だけからの予言」を神経ごとに返します: 上限 s/2n(和はちょうど 1 ビット、門)、到達できる最大、2 項分布の期待値、相対密度。分断 54 件の配線の損傷の合計は実測 0.677 ビット、端の個数だけの予言は 0.788、上限は 1.000 でした。校正の現場が持っているのは候補の切り出しとシナプスの注釈だけなので、幾何を見る前に「この物体はいくら賭けているか」を出せるのがこの表の使い道です(Plaza 2014 はシナプスの個数そのもので優先順位を付けます。これはその個数を情報量の上限と期待値に直したものです)。

ここでも門が 2 回働きました。

  1. 名前を付け替えただけの比較で、VOI が 0 でなく 8.9e-16 になりました。条件つきエントロピーを H(a,b) − H(a) の差で出していたためで、大きな 2 項の引き算が丸め屑を残します。直接の和 −Σ p log2(n_ij / n_i) に変えると厳密に 0 になります(画素の VOI も同じ式に直しました)。回帰テストは、旧実装で屑が実際に出た入力で書いています。
  2. 最初は、シナプスを接続ごとに束ねた VOI だけを返していました。ところがシナプスが 1 個しかない接続は、切られても「散る」相手がないので 0 のままです。107 本の大半がそれでした。そこで端の水準を主な量にし、接続の水準は connection_split / connection_merge として残しました。

最初に試した 3 次元の古典的な切り出し(断面ごとの膜応答 → しきい値 → 3 次元の連結成分)は、どのしきい値でも z 方向につながって巨大な 1 物体になり、比べる相手になりませんでした。z の間隔(40 nm)が xy(4 nm)の 10 倍ある EM では、断面ごとに切ってから z でつなぐ別の段が要ります。

シナプスは神経突起に比例して増えるか(2026-09-28)

上の「神経突起は何倍に伸びるか」と「8 匹で配線はどこまで同じか」は、形と配線を別々に測っていました。同じ 8 匹なので、並べられます。Witvliet 2021 は「L1 を除けば、シナプスの数は神経突起の長さに比例して増え、密度は保たれる」と書き、「ハブ(生まれた時点で相手の多い細胞)は入力を不釣り合いに増やすが、出力はそうでない」とも書いています。この回で Fullseye に足した graph_strength_growth(2 つの配線行列の間で、どの細胞にシナプスが足されたかを、入力と出力に分けて数える op)と、既存の tree op で確かめました。

段ごとの密度

発生段階 神経突起の総長 化学シナプス 密度(/µm)
L1 生直後 2,806 µm 1,296 0.462
L1 16 時間 4,544 µm 2,777 0.611
L3 27 時間 6,396 µm 4,456 0.697
成虫 #2 12,038 µm 7,970 0.662

系全体では論文のとおりです。密度は L1 の間に ×1.32 上がり、L1 以後の揺れ(最大 / 最小)は 1.14 でした。門は「L1 の上がりが、その後の揺れより大きい」で、数字を当てはめていません。

細胞ごとに並べると、話が変わります。1 匹目と 8 匹目の両方に骨格とシナプスがある 178 細胞で、神経突起の伸び(中央値 ×3.7)とシナプスの増え(中央値 ×6.0)の順位相関は 0.23 でした。細胞をシャッフルした零分布の 97.5 % 点(0.17)は超えるので 0 ではありませんが、形が伸びた細胞ほどシナプスが増える、とは言えない弱さです。密度が上がった細胞は 82 % —— つまり、ほとんどの細胞で、シナプスは形より速く増えています。

細胞ごとの伸びと増え

形と配線の外れ方が大きい細胞を挙げると、SIADL は突起 ×3.8 に対しシナプス ×22、SIBDR は ×4.1 に対し ×21、RIR は ×1.9 に対し ×9 です。逆に体壁筋(BWM-VR04)は突起が ×15 伸びてシナプスは ×7 でした。どの細胞が突出するかは論文の主題ではないので、ここでは名前と数字を置くだけにします。

では新しいシナプス 6,674 個はどこへ行ったのか。graph_strength_growth で 1 匹目と 8 匹目の行列を比べると、生まれた時に在った接続を太らせたのが 3,232(48 %)、新しい接続が 3,627(54 %)、消えた接続が −159、細った接続が −26 でした(4 つの和は 6,674 に厳密に一致します)。論文の「約 4,500 個の新しいシナプスが、生まれた時に在った接続の多くを太らせた」とは数が合いません。この 3,232 は「両方に在る接続の重さの増分」で、論文の数え方(接続をどう対応づけ、何を「太らせた」と数えるか)はこの repo からは確かめられないので、差の理由は書かずに数字だけ置きます。

相手の数と増分

ハブについては、生まれた時の相手の数と増えたシナプスの順位相関は入力 0.58、出力 0.51 で、どちらも正です。上位 1 割のハブ 19 細胞の取り分は、入力が生まれた時の 34 % から増分の 28 % へ、出力が 24 % から 20 % へと、むしろ下がっています。「ハブは入力を不釣り合いに増やす」を「増分の取り分が出発時の取り分を超える」と読むなら、この定義では出ません。論文の定義(接続ごとの太り方をハブと非ハブで比べる)とは量が違うので、矛盾とは言わず、定義を書いて数字を置いておきます。

走行長は小さな融合を許さない(2026-09-28)

上の 2 節は VOI で採点しました。コネクトームの現場にはもう 1 つの流儀があります。正解の骨格の上を「同じ物体のまま何 µm 走れるか」で測る ERL(expected run length、Januszewski 2018)です。融合した物体の走行は 0 とみなします —— 相手がどれほど小さくても。この回で Fullseye に足した tree_run_length は、骨格の節点に候補のラベルを塗った走行を数え、zero_labels で融合した物体を 0 にします。

正解には Witvliet 2021 の骨格 1,713 本(12 節点以上)を使い、候補のラベル付けは 1 つずつ仕込みました(切り出し器の出力ではありません)。答え合わせは閉形式です。辺 e で切ると、ERL はちょうど (A² + (L − A − e )²)/L になります(A は切った側の部分木のケーブルで、別の走査で数えます)。1,713 本すべてで一致しました(相対 4e-15)。同じ分断の VOI の split も (m/N)·H2(m1/m) と一致します(3.5e-16)。

切る位置と ERL

分断は、どこで切るかで痛さが違います。分岐の無い骨格 100 本で、真ん中で切ると ERL は 0.48 L、端(1 割の所)で切ると 0.80 L でした。VOI も真ん中が最大なので、分断では 2 つの採点は同じ向きです。

融合で食い違います。骨格 a の遠い側 q を骨格 b の物体に貼り、q を 5 % から 50 % まで振りました(856 組)。

融合の大きさと 2 つの採点

q VOI の merge ERL の損失(貼った a) ERL の損失(貼られた b)
5 % 0.142 ビット 0.094 1.000
20 % 0.377 0.356 1.000
50 % 0.662 0.752 1.000

VOI の merge は q → 0 で 0 に向かいます。ERL では、貼られた側の骨格 b は、貼られた断片がどれだけ小さくても走行を全部失います。a 自身の損失は分断と同じ 1 − (1 − q)² です。「ERL は融合に厳しい」と言われる中身は、この b の列です —— 融合された物体を含む神経は、どこも信用できない、という定義です。

最後に、確率の門を 1 つ。分岐の無い骨格 65 本を、ケーブルの上で一様に 3 点で切ると、走行の長さの割合は Dirichlet(1, …, 1) に従い、E[Σ l_i² / L’²] = 2/(m + 2) です。実測の比は 1.023 でした。

門が捕まえたものが 2 つあります。最初の版は「貼った側 a の損失が q に依らず一定」と主張していました —— 誤りです。ERL が 0 にするのは融合した物体の走行で、a の残り(1 − q)は無傷の走行のまま残ります。一定の損失を受けるのは、その物体に丸ごと覆われる b でした。もう 1 つ、切る位置を節点番号の上で一様に取ると期待値との比が 0.945 にずれました。骨格の辺の長さは揃っていないので、ケーブルの上で一様に取る必要がありました。

なお ERL の実装は funkelab の funlib.evaluate(graph_tool が要る)と Allen Institute の segmentation-skeleton-metrics(numpy + networkx)にあり、ここでのものは numpy だけで、閉形式の門を持たせたものです。

粘菌に学んだのは力学ではなく「管が連続であること」だった —— 手書きの読み出しを進化する頭に替える準備(途中経過、2026-09-28)

この記事のハエは、脳の配線を固定して体に載せました。読み出し(T4/T5 の 4 方向の活動から自己回転を出す式)は手書きの 1 行で、上の節で「律速は読み出しの相関」と分かっています。その手書きの式があった場所に進化する頭(別プロジェクト Afterman の、DNA から構造を復号する Transformer)を置くのが次の橋渡しで、その準備として 2026-08-30 から 09-15 にかけて回した粘菌の実験を、ここに置いておきます。まだ研究要素が残っている途中経過です。確定したこと・撤回したこと・残っている問いの 3 段に分けます。

発端。 進化で構造を探すとき、「L 層 × 深さ × FFN の 3 つが揃わないと解けない」課題(論理積の尾根)を離散の進化は 8 seed 中 2 でしか渡れませんでした。粘菌(Physarum polycephalum)は管の太さ(導電度)を流量で太らせ・細らせるだけで迷路の最短路を見つけます(Tero et al. Science 327:439, 2010。収束の証明は Bonifaci・Mehlhorn・Varma 2012)。その力学を輸入したら尾根を渡れるか、が問いでした。

確定したこと(数字は各実験の事前登録と実測)。

幕 問い 結果
迷路 粘菌方程式は 15×15 の迷路(辺長は乱数、最短路は一意)の最短路に来るか 厳密版(キルヒホッフ解)5 seed 中 4 が 600 反復以内に一致、残り 1 も 5,000 反復で一致。対照の「向きを見ない総通過数で強化」は 0/5。同じグラフの (1+4)-ES は 5 万評価で 1/5 —— 粘菌が勝ったのは安さでなく到達性
尾根 部品を連続の導電度にしたら尾根は消えるか 勾配・粘菌則・課題を見ない活動量の流れの 3 腕 × 8 seed = 24/24 が解いた(検証 MSE 0.006〜0.035、床 0.216)。効いたのは選択の力学でなく連続性そのもの
回収 連続の解は分散して読めない。離散化の圧で「読める回路」に戻せるか 貪欲に 0 へ落として都度再適応: 8/8 が 4〜5 部品の最小回路に。回収した 3 型の回路はまっさらな重みから 9/9 で解けた = 遺伝する
進化へ 連続の導電度は勾配でなく変異と選択でも効くか decode に「無い部品に薄い導電度を貸す」漏れ(leak)を入れた進化は 8/8(基準線 2/8、Fisher p=0.007)。ただし下の撤回を見てください
回収を進化に 探索の途中で貸した導電度を剥がせば、解は遺伝するか 世代 20/40/60/80 で部品ごとの床を順に 0 にし最後は裸にする(progressive_all): n=16 で渡る 13/16 ∧ 遺伝性 13/16、床を貸したままの対照は 14/16 ∧ 4/16、Fisher p=0.0038。事前登録 5 項目すべて的中

撤回したこと(ここが本体です)。

スケジュールの感度(2026-09-28 追記、事前登録して測った)。 床を剥がす世代を早く(10/20/30/40)・遅く(60/70/80/90)・2 段(33/67)にして seed 16 ずつ回しました。遺伝性(裸の運動器つきで再訓練が効く seed)は 8/16・12/16・11/16 で、裸で再適応する尻尾の長さ(60・10・33 世代)には依りませんでした —— 事前登録の予測「尻尾を縮めれば遺伝性が落ちる」は外れ、読み替え「剥がす事象そのものが回収する」が当たりです。段階的除去の効き(床を剥がさない対照 4/16)は遅い 12/16(p = 0.012)と 2 段 11/16(p = 0.032)でも成立し、1 つのスケジュールへの過適合ではありませんでした。一方、尾根を渡る率は床が消える世代が早いほど下がります(6/16・12/16・8/16、対照 13/16): 床は渡るための足場で、早く外すと渡れません。「LOCAL を床が消える前に獲得すれば全部渡る」という機構の言い方は 31 seed 中 5 の反例で撤回しました。適応度に NaN が出て打ち切った 5 seed のうち 4 つは打ち切り時点で既に越えていましたが、事前登録の定義では「渡っていない」に数えたままです(定義は変えません)。

残っている問い(研究要素)。 課題は 1 つ(exp_position)だけです。Baldwin 型(適応度に裸の再訓練を混ぜる)との比較、別課題での再現、床の持続時間を連続に振る用量反応、NaN の出所、cosine の 5/8 が偶然か、そして Afterman 側の「四元数が実数の同パラメータ版に勝っていない」零点。これらが埋まるまで、Afterman 本体の設計指針は「探索 = leak、回収 = 段階的除去、読み出しは足場」の候補止まりです。

ハエ記事に置く理由。 ハエ側は前段(flyvis)を凍らせて 65 型 × 721 列の活動をキャッシュ済み(688 MB、94 秒)で、頭を進化させる 1 時間の計算は PHD6 と同じ規模です。次に測るのは「手書きの読み出しの相関を、進化した頭が超えるか。超えたとき、その回路は読めるか(回収段が効くか)」です。粘菌の話が図を持たないのは、結果が jsonl とログだけで図を作っていないからで、ハエ側で回したときに揃えて出します。

粘菌の管は迷路を解く —— 力学を Fullseye の op にして、定理と Dijkstra で挟む(2026-09-28)

上の節の「発端」にあった迷路の力学を、そのまま Fullseye の op 2 本にしました。graph_physarum_path は重み付きグラフの上で、physarum_route はコスト画像の上で(隣の画素を長さ (c_u + c_v)/2 の管で結び、route_through_array と同じ量を最小化します)。管の力学は、キルヒホッフで圧力を解いて流量 Q を出し、各管の導電度を dD/dt = Q − D で流量へ寄せるだけです。最短路が一意なら導電度がその指示関数(最短路の管は 1、それ以外は 0)に収束することが証明されています(Bonifaci・Mehlhorn・Varma 2012)。真値は Dijkstra(scipy)と route_through_array(skimage)です。

管が太る過程

21×21 の完全迷路(道は 1 本)では 79 反復で収束し、道は route_through_array と 1 画素も違わず、壁を通った画素は 0 でした。Lyapunov 関数 V = Σ L·D(Bonifaci の「設備費」、連続時間で単調非増加)は 227,280 → 133.60(最短路 133.59)へ、24 枚の途中経過の 23 区間で一度も増えませんでした。

格子の管の太さ

15×15 の格子(辺長 U(0.5, 1.5))5 通りでは、全部の道が Dijkstra と一致し(差 < 1e-9)、afterman の PoC と同じ「600 反復の時点で一致」は 5/5(afterman は 4/5)。ただし指示関数まで収束したのは 3,000 反復で 3/5 です。打ち切りになった 2 つは、2 番目に短い道との差(最短路の辺を 1 本ずつ外して Dijkstra を引き直した最小 —— 最短路と違う道は必ずその辺のどれかを欠くので、これは厳密に 2 位です)が 0.009 と 0.032 で、収束した 3 つ(0.041〜0.113)より小さい。図の下段がその seed で、2 本の道が 3,000 反復でも拮抗しています。収束の速さを決めるのは 2 位との差で、道の読み取りは流れを辿るので差が小さくても最短路に一致します。一様なコストのように同じ長さの道が何本もあるときは 1 本に収束しないので、op は拒否します(fail-closed)。

地形の道

32×32 のなだらかな地形でも道は一致しました(2,500 反復で打ち切り、隣の管がまだ薄く残っています)。単位流量の長さ Σ Q L ≥ 最短路 の不等式は全件で厳密に成り立ちました(収束で等号)。

先行研究: Tero 2010 の再実装は GitHub に複数ありますが、Dijkstra との一致を門にした物と、コスト画像の上で route_through_array を真値にした物は見つかりませんでした。Jones 2010 の「Physarum machine」(粒子の走化性)は別の模型です。この op は 2026-08-26 に GPU の検討で書いて台帳に載せていなかった physarum_search.py を、Dijkstra・不等式・Lyapunov の門つきで表に出したものです。

線虫の脳の核は生まれた時から在る —— 8 匹の発生系列で「最も深い殻」に居続ける細胞を数える(2026-09-28)

上の「8 匹で配線はどこまで同じか」は結合が何匹に在るかを数えました。今度は細胞が配線のどれだけ深いところに居るかを数えます。物差しは k-core(Seidman 1983): 「全員が k 本以上の結合を持つ」極大な部分グラフで、外から順に殻を剥いていって最後に残るのが「最も深い殻」です。その重み版 s-core(Eidsaa & Almaas 2013)は「全員がシナプス s 個以上」で剥きます。新しい op graph_kcore(入・出・総・無向 × 0/1・重み)、graph_rich_club_curve(rich club 係数を全 k で一度に、次数保存ヌルで割る)、graph_core_persistence(K 匹の最深殻に居続ける細胞)の 3 本で、門は定理です: 完全グラフの殻の指数は n − 1、木は 1、閉路は 2、0/1 行列の s-core は k-core と厳密一致、重みを c 倍すると指数はちょうど c 倍、無向の k-core は networkx と全節点一致、φ(k) は 1 点ずつの graph_rich_club と全 k で一致。

8 匹の配線を神経の位置に載せる

生後 0 時間から成虫まで

8 匹の配線を神経の位置(著者公開の骨格の根、体軸方向から見る)に載せ、7 匹目の成虫の向きに Procrustes で揃えました。橙がその匹の最深殻(入・s-core)、赤が 8 匹全員の最深殻に居る細胞です。結果:

核の種類 最深殻の指数(生後 0h → 成虫) 最深殻の大きさ 8 匹全員で持続
入・s-core(シナプス数で剥く) 7 → 55 6〜10 細胞 RIAL RIAR RMDDR RMDVL(4)
出・s-core 6 → 48 2〜33 RIAL RIAR(2)
入・k-core(0/1 で剥く) 3 → 5 15 → 150 RIA・RMD・SMD の 12
出・k-core 3 → 5 65 → 110 42

シナプス数で剥くと、最深殻は発生を通じて 6〜10 細胞と小さいまま指数だけ 7 → 55 と深くなり、介在神経 RIA の左右対は生後 0 時間から成虫まで一度も外れません(最深殻に入るのは運動神経 10 種と介在神経 2 種、筋肉とグリアは入りません)。0/1 で剥く k-core は成虫でも指数 3〜5 と粗く、最深殻が 150 細胞に膨らんで核を見分けられません —— 数え方が主張を決めます。

最深殻の深さ

公表値との照合: Yadav & Singh(bioRxiv、2026-06)は同じ 8 匹で同じ量を測り、入・出 × k・s の 4 種の核のどれかで持続する細胞は 51 個と書いています。ここでも 51 個で一致しました。ただし論文はさらに「頭部の神経で持続するのは AIBR・RIBL・RIAR の 3 個だけ」とも書き、私の定義(4 種すべてで持続)では RIAL・RIAR の 2 個になります。論文の 3 個がどの定義かは本文から読み取れなかったので、一致しない旨をそのまま記します(当てはめていません)。

rich club の帯

rich club(入次数の高い細胞どうしの密度をヌルで割った比)は全段で 1 を超える帯があり、比の最大は 1.4〜3.3 倍、帯は成虫で k = 1〜28 と広がりました。ただし L3 の 1 匹は高い k で比が 1 を割る区間があり、8 匹の並びは単調ではありません。

先行研究: k-core・rich club は Yadav & Singh 2026 と同じ量です(こちらが後発)。うちの持ち分は、定理で門をかけた numpy の op、第 2 実装(networkx)との一致、s-core と k-core の対比、細胞の位置に載せた動く図です。データは nemanode.org と著者 repo の骨格(同梱しない)。

粘菌は最適輸送を解く —— 源と吸込を質量の分布にすると、同じ管の力学が Earth Mover 距離へ収束する(2026-09-28)

上の迷路の op は源 1 つ・吸込 1 つでした。源と吸込を供給ベクトル b(Σ b = 0、正 = 質量が入る、負 = 出る)にすると、同じ力学が min Σ L_e q_e (流量保存の下で)の解、すなわちグラフ上の L1 最適輸送(Beckmann 問題 = b⁺ と b⁻ の 1-Wasserstein 距離)へ収束することが証明されています(Bonifaci 2017、Facca・Karrenbauer・Kolev・Mehlhorn 2020、連続体は Facca・Cardin・Putti 2018)。新しい op 2 本 graph_physarum_transport(重み付きグラフ + 供給)と physarum_transport_image(質量画像 2 枚、画素を長さ 1 の管で結ぶ = マンハッタン距離の Earth Mover 距離)は、費用 Σ L Q (上界)と一緒に Kantorovich–Rubinstein の下界 —— 圧力を 1-Lipschitz にした McShane 包絡 φ の bᵀφ —— を返します。真の距離は必ずその間に在るので、隙間が「最適から幾ら離れているか」の証明書になり、隙間が閉じたら止まります(外部のソルバは要りません)。

管が張られていく

円盤(赤)の質量を 2 つの円盤(青)へ運ぶ管が張られていく様子です(24×24 画素、4 近傍、183 反復、36 コマ)。最初は一様に張られた管が、使われる道だけ太って残ります。EMD は 12.0001 で、下界 12.0000 との隙間が閉じたところで止まっています。

12 点 ↔ 12 点の割当

点 12 個 ↔ 12 個の完全 2 部グラフ(ユークリッド長、管 144 本)。459 反復で残った管の集合は Hungarian 法の最適割当そのもの(割当の管 ≥ 1.00、それ以外 ≤ 0.001)で、費用 0.163244 は最小割当 0.163242 と相対 1e-5 で一致します。

上界と下界が閉じる

真値は 10 件と照合しました。乱数の木 5 本では閉形式 Σ L_e 部分木の供給 と相対 1.7e-15(木では流れが一意で 37〜38 反復)、不等間隔の 1 次元格子では既存 op wasserstein_1d と 0.316477、6×6 格子の乱数質量では LP(HiGHS)と 0.591849、円盤を (5, 8) 画素ずらした画像との EMD は定理どおり 13.000086 = dr + dc 、源 1・吸込 1 では下界が Dijkstra の距離 9.367260049 と厳密に一致(圧力の包絡 = 最短路のポテンシャル)。距離の公理(対称・長さと質量に線形・三角不等式)も成立。合計 9.1 秒。

正直に書くと、粘菌は Hungarian 法やネットワーク単体法より速くはありません。売りは、局所則だけで解に来ること、バッチで完全並列なこと、そして証明書を自前で返すことの 3 つです。先行研究: 粘菌の力学が最適輸送を解くことは上の論文が証明していて、こちらが後発です。うちの持ち分は、双対の下界で証明書を返す numpy の op と、木・1 次元・割当・LP・平行移動の真値で門をかけたこと。Facca らの DMK ソルバは有限要素の連続体版で別物です。次は、この op を線虫の配線に当てて「感覚神経を源、運動神経を吸込にした流れの背骨が 8 匹で同じか」を測ります。

縞に近づくハエの眼 —— シマウマの縞で複眼の距離感は本当に狂うのか、複眼がフィボナッチの並びなら優秀か(2026-10-13)

アブはシマウマの縞の手前で制御された減速ができず(Caro ら 2019)、縞や市松の近くでは速く飛び、寄らず、着地しません(How ら 2020、3-D 軌跡)。「縞で距離感が狂う」という俗説が、§0 の複眼の光学と相関型運動検出器(Hassenstein–Reichardt)の閉じた式でどこまで説明できるかを数えました。縞の面は画像を介さず、六角個眼格子 + ガウス受容角の下で座標から解析的に積分しています(fly_view_plane_texture、閉形式と 1e-9)。学習した数は 0、較正は 1 つ(市松の最初の窓の利得)です。

反転の輪

左は個眼間角 1.1° のアブの眼(1027 個眼)が 7 cm 周期の縞を 1.95 → 1.45 m で見た像、右は方位の隣どうしの相関器の出力(橙と青で向きが逆、黒線が閉形式の反転帯の境界)です。周期 P の縞は六角格子で d > P cos²θ/(√3 Δφ) を超えると折り返し(アブで正面 2.105 m、60° で 0.526 m)、相関器の位相差 ψ = 2πΔφD/(P cos²az) が π を超えた個眼は逆向きの運動を報告します。遠くでは視野全体が逆向き、近づくと正しい向きが中心から広がって反転帯は周辺へ逃げる —— 測った反転は閉形式と 97 % 以上一致し、方位の対が「遠ざかる」から「近づく」へ切り替わる距離 1.71 m は予測 1.65〜1.77 m に入りました。ショウジョウバエの眼(4.63° / 8.23°)では同じ縞のナイキストのコントラストが 0.024 で、ぼけが縞を消して守ります。

縞の上の τ

衝突時間 τ の読み出しです。正面の平面へ 0.5 m/s で近づくとき、縦縞では縦方向の流れが消え(アパーチャ効果)、眼全体の放射当てはめも発散も厳密に 2τ を返します(閉形式 2、測定 1.992)。市松では τ に戻ります。How ら 2020 の「市松でも避けたのだからアパーチャ効果説は棄却」という筋道の、数による再現です。もうひとつ、接近中の時間周波数 v tanθ/P は距離に依らない —— 相関器は縞の上で距離の情報を失います。

3 つの眼

「複眼がフィボナッチの並びなら、もっと優秀か」。同じ 721 個眼・同じ平均間隔 1.1° で、六角 / Vogel 螺旋(r ∝ √n、θ = n·137.508°)/ ジッタ付き六角の 3 つを比べました。ナイキストを超えた縞のモアレの尖り(ピーク / 背景中央値)は六角 2521、Vogel 4.3、ジッタ 5.2 で、モアレの拡散は螺旋の勝ちです。ナイキスト直下の解像(再現率と残差)は六角が最良です。ところが偽の流れ(逆向きの相関器の割合)は格子の規則性ではなく対の間隔で決まり、六角の方位の対は全部逆向き・斜めの対(投影間隔 Δφ/2)は全部正しく、Vogel でも同じ間隔の対は反転します。中心を密にした螺旋(密度指数 0.5 → 0.8)は真の周波数のピークを 5.2 → 11.0 に鋭くします。結論は「モアレが見えにくい眼」と「動きを間違えない眼」は別物だ、ということです。

正直に書くと、アブの光学定数(急峻帯の 1.1°、受容角 1° は未発表値)は弱いので Δφ と Δρ/Δφ を掃引して見せています。How ら 2020 の Dryad の 3-D 軌跡(CC0、1.21 GB)との照合段は実装してあり、データを置けば本数の門と τ̇ の照合が走りますが、この回は未配置で「未配置」と印字して飛ばしました。モアレ説を唱える Dettlaff(2026、arXiv:2605.17049)は査読前・単著・コード非公開で、比較対象として挙げるにとどめます。Fullseye への持ち帰りは sampling_alias_distance —— 画素の瞬時視野を Δφ と読めば、ディスプレイ・メッシュ・織物を見る検査カメラの作動距離の設計規則になります。PoC は examples/poc_zebra_stripes_fly_eye.py(展示 No.2026.227)。

次に測ること

結果が出たら上の「実験の一覧」に行を足し、この一覧から消します。

作り手について

問いと方向は私が決め、実装・掃引・対照群の追加・予想の反証は Claude Code に回しました。第 8 節の撤回は、その反証の記録です。


この実験群は Claude Code と一緒に回しました。 問いと方向決めは私、実装・掃引・夜間の長時間ジョブの管理・敵対レビューは Claude Code、という分業です。試してみたい方は、こちらの招待リンクから 1 週間の無料トライアル が使えます: claude.ai/referral/0sqPw8E_lw

「学習済みモデルを自分の系に載せたら、静止した検査に通ったのに本番で落ちた」―― 同じ経験のある方の話がいちばん聞きたいです。いいね・ストックをもらえると、次にどの実験を記事にするかの判断材料になります。