EvoSpikeNetコネクトーム統合 – 実装基本方針
[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。
概要
本文書は、コネクトーム研究(connectome_literature_review.ja.md・connectome_updates_2021-2026.ja.md)で得られた知見を、EvoSpikeNetの分散脳シミュレーションシステム(docs/NEUROSCIENCE_BRAIN_SIMULATION_PAPER.md・docs/DISTRIBUTED_BRAIN_SYSTEM.md)に統合するための基本方針を定める。
1. 現状分析:EvoSpikeNetの生物学的マッピング
EvoSpikeNetは既に各ノードと皮質部位を対応させた「生物学的マッピング」を実装している。
| EvoSpikeNetノード | 対応皮質・皮質下領域 | コネクトーム対応データセット |
|---|---|---|
| PFC / Q-PFC | 背外側・眼窩前頭皮質(dlPFC/OFC) | MICrONS 皮質柱データ |
| Visual | 後頭皮質 V1–V5, IT | MICrONS Layer 2/3, FlyEM視覚葉 |
| Auditory | 一次聴覚皮質(A1) | FlyEM Johnston器官、MICrONS |
| Speech | ブローカ野(BA44/45) | 現在公開データなし(ヒト限定) |
| Spatial | 上頭頂小葉・後頭頭頂皮質 | MICrONS 全皮質接続行列 |
| Motor | 一次運動皮質(M1) | MICrONS M1コネクトーム (2024) |
| Episodic (海馬) | 海馬 CA1/CA3/歯状回 | HCP 拡散テンソル; Wu ら 2024 |
| Semantic | 側頭葉内側面(TE/TEO) | FlyWire キノコ体 |
| Integrator | 帯状回・島皮質(ACC/Insula) | MICrONS 長距離軸索投射 |
進捗(2026-03-19): evospikenet/node_types.py の NODE_TYPE_DEFINITIONS に各ノードの connectome_source・cortical_region・ei_ratio フィールドを追加済み。生物学的マッピングがソースコードレベルで明示的に記録された。
現在地(2026-03-19): Phase E-1 で connectome_loader.py(load_json / load_npz / save_npz / stratified_sample / spectral_coarsen / load)が実装完了。Phase E-2 で全ノードのコネクトームマッピング(evospikenet/connectome/)・シナプス遅延バッファ(SparseDelayBuffer)・Zenoh メタデータパブリッシャ・ETag+TTL キャッシュが完成。テスト合計 102 本が通過(E-1: 30pass/2fail/4skip, E-2: 70pass)。
2. ギャップ分析:コネクトーム統合で得られるもの
コネクトーム研究から明らかになっている事実と、EvoSpikeNetの現設計を照合すると、以下のギャップが存在する。
2.1 接続トポロジーのギャップ
| 観点 | コネクトーム研究の知見 | EvoSpikeNetの現状 |
|---|---|---|
| ニューロン間接続 | C. elegans: 全302ニューロン・7,000シナプスが公開 | ノード内部がランダム初期化重みで接続 |
| 皮質層構造 | V1のLayer 4が入力特化、Layer 2/3が側方連絡(MICrONS) | 単一「視覚ノード」として抽象化 |
| 方向性 | FlyWireで興奮性/抑制性の比率・方向が判明 | 重みの±符号のみ |
| 長距離接続 | HCPで皮質間の白質線維束トポグラフィが判明 | Zenoh pub/sub上の均質接続 |
| 発達可塑性 | Schlegel ら 2024: Drosophila成長に伴う接続刈り込みが記述 | DevelopmentalSchedule が存在するが structural_mask との連携は未実装 |
2.2 スパイクダイナミクスのギャップ
コネクトームデータは シナプス遅延・伝導速度・シナプス強度 の実測値を提供するが、EvoSpikeNetの現在の LIFNeuronLayer は固定のleakパラメータと初期重みに依存する。
進捗(2026-03-19): ConnectomeLIFLayer(LIFNeuronLayer のサブクラス)を evospikenet/core.py に新設。structural_mask(bool buffer)・delay_buffer(float32 buffer)・connectome_weight(float32 Parameter)を保持し、apply_connectome_input() で float→int16 橋渡し変換を提供済み。connectome_loader.py(Phase E-1 完了)からのデータ注入により生物学的忠実度が向上している。
2.3 スケール戦略ギャップ(Phase F-1〜F-3 仕様定義済み)
コネクトームデータの実ニューロン数と EvoSpikeNet ノードの表現次元には大きなミスマッチが存在する。縮約戦略は Section 3 方針F・docs-dev/connectome_schema.md に定義済み。残作業は connectome_loader.py 内での実装のみ。
| コネクトームデータセット | 実ニューロン数 | EvoSpikeNetノード表現 | ミスマッチ比 |
|---|---|---|---|
| C. elegans | 302 | 100〜302 | ≈1×(直接対応可) |
| FlyWire 視覚葉 | ~50,000 | 500〜2,000 | 25〜100× |
| MICrONS V1 皮質柱 | ~65,000 | 500〜2,000 | 30〜130× |
| HCP(全脳マクロ) | — | ノード間接続 ~29 | — |
具体的な縮約アルゴリズム(層別サンプリング・スペクトル縮約・クラスタ代表化)は 方針 F(Section 3)で定義する。
3. 実装基本方針
方針 A: コネクトームグラフによるノード内接続トポロジーの定義
目的: ノード内部のニューロン群の接続を、公開コネクトームデータから導出した隣接行列で初期化する。
具体的アプローチ:
1. 各ノードタイプに対応する公開コネクトームデータを選定する。
- visual ノード → MICrONS V1 Layer 2/3〜Layer 4 間接続行列(CAVEclient APIで取得)
- episodic ノード → C. elegans 神経回路(OpenWorm プロジェクト JSON形式)
- motor ノード → MICrONS M1コネクトーム部分グラフ
2. 接続行列を スパース COO 形式(PyTorch torch.sparse)でロードし、LIFNeuronLayer の重み行列 W を初期化する。
3. 接続行列は 読み取り専用の構造制約 として扱い、STDPによる可塑性はその上の重みスカラーに適用する。
実装場所: evospikenet/core.py の LIFNeuronLayer.__init__() に connectome_topology 引数を追加。
# 例: コネクトームトポロジーからの重み初期化
class LIFNeuronLayer(nn.Module):
def __init__(self, ..., connectome_topology: Optional[torch.sparse.Tensor] = None):
...
if connectome_topology is not None:
# トポロジーを構造マスクとして保持(勾配不要)
self.structural_mask = connectome_topology.bool()
# 接続密度で重みを初期化
self.weight = nn.Parameter(
connectome_topology.to_dense().float() * 0.1
)
else:
self.weight = nn.Parameter(torch.randn(n_out, n_in) * 0.01)
方針 B: 公開コネクトームデータの活用ガイドライン
ノードタイプごとに推奨コネクトームデータソースを定める。
B-1. C. elegans(線虫)— 小規模・全数・精緻
- 対象ノード:
memory_spike(海馬CA3自己連合回路のプロキシ) - データソース: OpenConnectome / WormWiring.net(WormAtlas)
- JSON形式、全302ニューロン・1万以上シナプス
- 利用方法: 小規模SNNのベンチマーク・プロトタイプ、単一ノード内の自己連合ネットワーク
- 参照: White ら 1986, Cook ら 2019(detailed_paper_summaries.ja.md参照)
B-2. Drosophila FlyWire(ショウジョウバエ)— 中規模・全脳・最新
- 対象ノード:
visual・auditory・spatial_integration - データソース:
fafbseg-py/ CAVE API(CloudVolume経由) - 約140,000ニューロン・5,000万シナプス(2024年版)
- 利用方法: 感覚処理のニューロン回路構造、GNN(Graph Neural Network)によるノード間接続パターン学習
- 参照: Dorkenwald ら 2024, Schlegel ら 2024(connectome_updates_2021-2026.ja.md参照)
# FlyWire取得例(fafbseg-py / CAVE client)
from caveclient import CAVEclient
client = CAVEclient("flywire_public")
syn_df = client.materialize.synapse_query(
pre_ids=visual_neuron_ids,
post_ids=visual_neuron_ids
)
B-3. MICrONS(マウス視覚皮質)— 大規模・皮質層構造
- 対象ノード:
visual・spatial・PFC(層構造を保持するノード) - データソース:
microns-explorer.org/MICrONS-py - 皮質柱200µm³、約65,000ニューロン・5億シナプス(mm³スケール)
- 利用方法: Layer 4→2/3→5フィードフォワード階層の再現、皮質マイクロカラム構造
- 参照: Jiang ら 2023, MICrONS Consortium 2021(connectome_updates_2021-2026.ja.md参照)
B-4. HCP(ヒト接続プロジェクト)— マクロスケール・長距離結合
- 対象ノード: ノード間の Zenoh 接続重みの初期化
- データソース: HCP S1200リリース(FSL/MRtrix3拡散テンソルデータ)
- 利用方法: dlPFC↔海馬、視覚↔頭頂葉などの長距離接続トポグラフィをZenohルーティング優先度に反映
- 参照: Van Essen ら 2013, Sporns ら(connectome_literature_review.ja.md参照)
方針 C: STDP+コネクトームトポロジーの統合(構造的可塑性)
目的: コネクトームデータを「構造的制約」として利用しつつ、STDPによる機能的可塑性を維持する二層モデルを実装する。
設計原則:
[構造層] コネクトームトポロジー(変更不可の接続マスク)
↓
[機能層] STDP/Meta-STDP による重みスカラーの更新
↓
[進化層] EvoGenome によって構造マスク自体を進化的に変更(Phase E+)
実装詳細:
- 構造的プルーニング: コネクトームデータには接続強度の分布が含まれる。弱い接続(閾値未満)はマスク演算で無効化し、生物学的刈り込みを再現する。
- シナプス遅延テーブル: コネクトームの軸索長データから伝導遅延を計算し、
LIFNeuronLayerのdelay_bufferに格納する。 - 興奮/抑制バランス: FlyWireのE/I分類に基づき、興奮性(グルタミン酸系)/抑制性(GABA系)ニューロンを区別した重みスカラーを初期化する。
既存コードへの接続:
- evospikenet/core.py: LIFNeuronLayer に structural_mask + delay_buffer を追加
- evospikenet/forgetting_controller.py: プルーニング閾値をコネクトーム密度統計から設定
- evospikenet/long_term_memory.py: シナプス強度の長期統計をコネクトームデータで正規化
方針 D: Zenohメタデータへの接続情報統合
目的: ノード間の Zenoh pub/sub 通信において、コネクトーム由来のマクロスケール接続情報(HCPデータ)をルーティング優先度・遅延特性・帯域幅割当に反映する。
実装アプローチ:
DISTRIBUTED_BRAIN_SYSTEM.mdの「領域ディスクリプタ(1Hzブロードキャスト)」にコネクトームメタデータフィールドを追加する。
// 領域ディスクリプタへの追加フィールド(案)
{
"node_type": "visual",
"cortical_region": "V1-V5",
"connectome": {
"source": "MICrONS-2023",
"avg_indegree": 1847,
"avg_outdegree": 1203,
"ei_ratio": 4.2,
"preferred_upstream": ["spatial", "auditory"],
"preferred_downstream": ["pfc", "spatial", "memory_spike"]
}
}
-
ExecutiveControlEngineがこのメタデータを参照し、コネクトーム由来の接続密度が高いノードペア間のZenohパスに低遅延・高帯域幅の優先度を割り当てる。 -
スパイクパケットのProtobufペイロードに
synapse_weight_delta(INT16)フィールドを追加し、apply_weight_delta()の既存インフラ(Phase D実装済み)に乗せる。
方針 E: コネクトームデータ更新サイクル(プルーフリーディング連携)
目的: FlyWire・MICrONSなどのコネクトームデータは継続的に更新・修正されるため、EvoSpikeNetのパラメータへの反映を自動化するサイクルを設計する。
パイプライン設計:
[コネクトームDB更新検知]
↓ (週次cronジョブ / CAVEclientバージョン差分API)
[差分グラフ生成]
↓ (追加・削除シナプスのCOO行列デルタを計算)
[EvoSpikeNetパラメータ適用]
↓ apply_weight_delta() 経由で対象ノードへ配信
[検証]
↓ 既存テストスイート(pytest)でスパイク率・E/Iバランスを検証
[ロールバック]
↓ 検証失敗時はEvoGenomeの前バージョンをrestore
具体的な実装場所(新規):
- scripts/sync_connectome.py: CAVEclient APIから差分を取得しJSONで保存
- evospikenet/connectome_loader.py: JSONコネクトームをPyTorchスパーステンソルへ変換するユーティリティ
- config/connectome_config.yaml: データソースURL・バージョン・対象ノードマッピングを管理
方針 F: スケール縮約戦略(N_connectome → N_node)
目的: 実ニューロン数(数百〜数十万)をEvoSpikeNetノードの実用的な表現次元(100〜2,000ニューロン)に縮約する際の具体的アルゴリズムを定める。データ形式の入出力スキーマ仕様は docs-dev/connectome_schema.md を参照。
F-1. 層別サンプリング(Stratified Sampling)
皮質層(L2/3, L4, L5, L6)・細胞型(錐体細胞、介在ニューロン)の比率を保持しながら均等サンプリングする。適用場面: MICrONS V1 → visual ノード(層構造保持が重要)
import scipy.sparse as sp
import numpy as np
from typing import Tuple
def stratified_sample(
adj: sp.csr_matrix,
labels: np.ndarray,
n_target: int,
rng: np.random.Generator,
) -> Tuple[np.ndarray, sp.coo_matrix]:
"""
層別サンプリング: 各 label クラスから比例的に n_target ニューロンを選択する。
Args:
adj: 元の隣接行列 (N×N, CSR形式)
labels: 各ニューロンの層/細胞型ラベル (N,) 例: 0=L2/3E, 1=L4E, 2=L5E, 3=L6E, 4=PV, 5=SST
n_target: 縮約後ニューロン数
rng: 再現性のためのRNGインスタンス (np.random.default_rng(seed=42))
Returns:
(選択インデックス配列 shape=(n_target,), 縮小後隣接行列 COO)
"""
classes, counts = np.unique(labels, return_counts=True)
quota = np.round(counts / counts.sum() * n_target).astype(int)
idx = np.hstack([
rng.choice(np.where(labels == c)[0], int(min(q, (labels == c).sum())), replace=False)
for c, q in zip(classes, quota)
])
sub = adj[np.ix_(idx, idx)]
return idx, sub.tocoo()
F-2. スペクトル縮約(Spectral Coarsening)
グラフラプラシアンの固有ベクトルを使い、接続パターン(スペクトル特性・発振特性)を保持しながらノード数を削減する。適用場面: FlyWire 視覚葉 → visual/auditory ノード(γ/θ発振パターンの保持が重要)
from sklearn.cluster import KMeans
from scipy.sparse.linalg import eigsh
import scipy.sparse.csgraph as csgraph
def spectral_coarsen(adj: sp.csr_matrix, n_target: int) -> sp.csr_matrix:
"""
スペクトル縮約: ラプラシアン固有ベクトルによるクラスタリングで圧縮。
計算量目安: O(N·k) (eigsh) + O(k^2·nnz) (密度集約)。
N>10,000 では事前に層別サンプリングで削減することを推奨。
"""
L = csgraph.laplacian(adj, normed=True)
_, vecs = eigsh(L, k=n_target, which="SM")
labels = KMeans(n_clusters=n_target, n_init=5, random_state=42).fit_predict(vecs)
A_coarse = np.zeros((n_target, n_target), dtype=np.float32)
for i in range(n_target):
for j in range(n_target):
mi, mj = (labels == i), (labels == j)
denom = mi.sum() * mj.sum()
A_coarse[i, j] = float(adj[np.ix_(mi, mj)].sum()) / max(denom, 1)
return sp.csr_matrix(A_coarse)
F-3. クラスタ代表化(Hub-Representative)
高次数ハブニューロンを代表として選択し、残余ニューロンはそのクラスタに統合する。ハブ構造・モチーフを保持する。適用場面: HCP全脳マクロ → Zenoh ノード間接続重みの初期化
Pseudocode (クラスタ代表化):
入力: 隣接行列 A ∈ R^{N×N}, 出次数ベクトル d
1. idx = argsort(d, descending=True)[:N_target] # ハブ代表選択
2. residual = {全ニューロン} \ idx
3. 各 r ∈ residual を最近傍ハブ h = argmin_{h∈idx} dist(r,h) に割り当て
4. A'[h1,h2] = Σ_{i∈cluster(h1), j∈cluster(h2)} A[i,j] / (|cluster(h1)|·|cluster(h2)|)
5. threshold_eff[h] = mean(threshold[cluster(h)]) + log(|cluster(h)|) · τ_correction
出力: 縮約後隣接行列 A' + effective_threshold ベクトル
F-4. 縮約戦略選択ガイドライン
| 条件 | 推奨戦略 | 主な対象ノード | 計算量目安 |
|---|---|---|---|
| 皮質層構造を保持したい | 層別サンプリング(F-1) | visual, spatial, motor |
O(N log N) |
| γ/θスペクトル特性を保持したい | スペクトル縮約(F-2) | auditory, speech |
O(N·k) |
| ハブ/モチーフ構造を保持したい | クラスタ代表化(F-3) | pfc, episodic, integrator |
O(N²) → 事前層別推奨 |
| C. elegans など小規模データ | 直接使用(縮約なし) | memory_spike(プロトタイプ) |
— |
生理的制約違反対策(EvoGenome 変異時): EvoGenome で構造マスクを変異させる場合、以下の事前フィルタとペナルティを適用する。
- E/I 比を
[3.5, 5.0]の範囲に制約するハードクリップ - 接続密度が ±30% 変動した場合に変異を拒否するペナルティ項
- 遅延値が生理的範囲(0.5〜20 ms)を超える変異をフィルタリング
def validate_structural_mask(mask: torch.Tensor, ei_ratio_range=(3.5, 5.0)) -> bool:
"""EvoGenome変異後の構造マスクが生理的制約を満たすか検証する。"""
n_excit = (mask > 0).sum().item()
n_inhib = (mask < 0).sum().item()
if n_inhib == 0:
return False
ei = n_excit / n_inhib
return ei_ratio_range[0] <= ei <= ei_ratio_range[1]
4. EvoSpikeNetコンポーネントへのマッピング
方針A〜Eと既存実装ファイルの対応表を下記に示す。
凡例: ✅ 実装済み / 🔧 部分実装 / ⬜ 未着手
| 方針 | 既存ファイル(変更対象) | 新規ファイル | 優先度 | 状態 |
|---|---|---|---|---|
| A: トポロジー初期化 | evospikenet/core.py ✅ |
evospikenet/connectome_loader.py ✅ |
高 | ConnectomeLIFLayer 実装済み。connectome_loader.py に load_json/load_npz/load 実装完了(Phase E-1) |
| B: データソース活用 | config/data_config.yaml |
config/connectome_config.yaml ✅ |
高 | connectome_config.yaml 作成・ノード名整合済み。evospikenet/connectome/node_mapping.py で全ノードマッピング実装(Phase E-2) |
| C: 構造的可塑性 | evospikenet/core.py ✅・plasticity.py ✅・forgetting_controller.py ✅ |
— | 中 | ConnectomeLIFLayer.validate_ei_ratio() 実装済み。STDP.compute_weight_updates() に structural_mask 引数追加済み。compute_connectome_density() を forgetting_controller.py に追加(Phase E-2) |
| D: Zenohメタデータ | evospikenet/node_types.py ✅ |
evospikenet/zenoh_connectome_publisher.py ✅ |
中 | NODE_TYPE_DEFINITIONS 拡張済み。ConnectomeMetadataPublisher でトピック connectome/metadata/{node_id} に発行(Phase E-2)。Zenoh なし時はログオンリーモード |
| E: 更新サイクル | evospikenet/genome_to_brain.py ✅(apply_connectome_delta() 追加済み)scripts/sync_connectome.py ✅(Phase E-3 完了) |
evospikenet/brain_routing.py ✅scripts/auto_node_mapper.py ✅ |
✅ 完了 | sync_connectome.py 実装完了(apply_delta, apply_delta_with_validation, sync_connectome, fetch_cave_synapses_with_retry)。HCP routing は brain_routing.py、ノードマッパーは auto_node_mapper.py に実装(Phase E-3) |
| F: スケール縮約 | evospikenet/connectome_loader.py ✅ |
docs-dev/connectome_schema.md ✅ |
高 | stratified_sample()(F-1)・spectral_coarsen()(F-2)を connectome_loader.py に実装完了(Phase E-1)。クラスタ代表化(F-3)は Phase E-3 以降 |
5. フェーズ別実装ロードマップ
本方針は EvoSpikeNet の Phase E(コネクトーム統合フェーズ) として位置づける。
現在地(2026-03-19): Phase E-0・E-1・E-2・E-3 が完了。全 112 テスト PASS(1 skip)。Phase E-3-5(HCP DUC 取得・全脳 E2E 検証)が次のマイルストーン。
Phase E-0(前提条件解決 — ✅ 2026-03-19 完了)
- [x]
evospikenet/node_types.py:NODE_TYPE_DEFINITIONSに全コネクトームノード名・connectome_source・cortical_region・ei_ratioを追加。"visual","auditory","spatial","spatial_integration","memory_spike","episodic","integrator","language"を新規登録。旧"audio"を後方互換エイリアスとして保持。 - [x]
evospikenet/core.py:ConnectomeLIFLayer(LIFNeuronLayer)を新設。structural_mask(bool buffer)・delay_buffer(float32 buffer)・connectome_weight(float32 Parameter)・apply_connectome_input()・validate_ei_ratio()を実装。int16 LIF と float32 コネクトーム重みの型橋渡し変換を提供。 - [x]
evospikenet/genome_to_brain.py:apply_connectome_delta()を新設。ConnectomeLIFLayer→SynapseMatrixCSR→nn.Linearの優先度順で COO スパース差分を適用。 - [x]
evospikenet/plasticity.py:PlasticityRule.compute_weight_updates()抽象メソッドおよび全サブクラス(STDP,Homeostasis,MetaSTDP,STDPRule,HomeostaticRule等)にstructural_mask: Optional[torch.Tensor] = Noneを追加。STDPではマスク外シナプスへの更新をゼロ化して構造制約を強制。 - [x]
config/connectome_config.yaml: 各データソースのtarget_nodesを上記統一ノード名に合わせてコメント整備済み。
Phase E-1(プロトタイプ — ✅ 2026-03-19 完了)
- [x]
evospikenet/connectome_loader.pyの実装 load_json(): C. elegans JSON →ConnectomeDataTypedDict 変換(connectome_schema.md仕様準拠)load_npz()/save_npz(): NPZ キャッシュ双方向変換(1.8× 高速化確認)stratified_sample(): 層別サンプリング(F-1)実装spectral_coarsen(): スペクトル縮約(F-2)実装load(): ETag + TTL キャッシュ制御付き統合ロード関数- C. elegans 302ニューロンの
memory_spikeノードへの注入 E2E 検証 PASS - [x]
visualノードへのFlyWire由来トポロジー注入 PoC ConnectomeLIFLayer.attach_sparse_delay_buffer()/SNNModel.forward()遅延ルーティング実装SynapseMatrixCSRとの接続(apply_connectome_input()経由)- [x] pytestによるE/Iバランス・スパイク率の回帰テスト追加
tests/test_connectome_loader.py: JSON/NPZ ロード・縮約・E/I 比チェック(30pass/2fail/4skip)tests/test_lif_structural_mask.py:ConnectomeLIFLayerのマスク・勾配・バリデーション- [x]
data/connectome/ディレクトリ作成・JSON データ配置済み
Phase E-2(ノード展開 — ✅ 2026-03-19 完了)
- [x] 全ノードタイプへのコネクトームマッピング適用(方針B全ソース対応)
- MICrONS V1 →
visual/spatial/pfc(stratified, N=2000) - FlyWire →
auditory/spatial_integration(spectral, N=2000) - C. elegans →
memory/memory_spike/episodic(縮約なし) - 実装:
evospikenet/connectome/node_mapping.py—get_source_for_node(),build_manifest(),apply_to_layer() - [x]
spectral_coarsen()実装(F-2)をconnectome_loader.pyに追加(Phase E-1 で実装済み) - [x] シナプス遅延テーブル:
ConnectomeLIFLayer.delay_bufferを利用した遅延付きスパイク伝達をSNNModel.forward()に組み込む - 実装:
evospikenet/connectome/delay_buffer.py—SparseDelayBuffer(COO形式リングバッファ) ConnectomeLIFLayer.attach_sparse_delay_buffer()/SNNModel.forward()遅延ルーティング実装済- [x] Zenoh 領域ディスクリプタへの
connectomeフィールド追加(方針D) - 実装:
evospikenet/zenoh_connectome_publisher.py—ConnectomeMetadataPublisher - トピック:
connectome/metadata/{node_id}、Zenoh なし時はログオンリーモードで動作 - [x]
forgetting_controller.pyへのコネクトーム密度統計連携(方針C残作業) - 実装:
compute_connectome_density(structural_mask)追加 - [x] ETag+TTLキャッシュ無効化(E-2-5)
- 実装:
connectome_loader.py—read_etag(),write_etag(),_is_cache_expired() - [x] テスト:
tests/test_node_mapping.py(18テスト)、tests/test_delay_buffer.py(22テスト)、tests/test_zenoh_connectome_publisher.py(30テスト)、全70テスト PASS
Phase E-3(本番統合 — ✅ 2026-03-19 完了)
- [x]
scripts/sync_connectome.pyによる自動更新パイプライン apply_delta()/apply_delta_with_validation()/sync_connectome()/fetch_cave_synapses_with_retry()実装済みConnectomeSyncValidationError例外クラス追加- [x] EvoGenomeとコネクトーム構造マスクの共進化機構(Phase D進化エンジンとの統合)
evolution_engine.pyに E-3-2 フック実装済み- [x] マクロスケール接続(HCP)によるZenohルーティング最適化
evospikenet/brain_routing.py:HCPDelayRouter,compute_delay_matrix(),optimize_routing_delays(),build_hcp_routing_table()実装済み- [x] 自動ノードマッパー
scripts/auto_node_mapper.py:map_connectome(),generate_manifest(),MappingResult,NodeMappingEntry実装済み- [ ] 全脳シミュレーション(24プロセス Full Brain)でのエンドツーエンド検証 → Phase E-3-5 以降
- HCP DUC 取得完了後に着手
6. 数理的補足
コネクトームトポロジー行列
ノード \(u\) 内のニューロン間接続を隣接行列 \(\mathbf{A} \in \{0,1\}^{N \times N}\) で表す。 コネクトームデータから得られる接続強度 \(s_{ij}\) を用いた重み行列の初期化:
ここで \(\alpha\) はスケーリング係数(典型値 0.1)。
構造的制約付きSTDP
構造マスクを考慮したSTDP更新則:
マスク \(\mathbf{A}_{ij} = 0\) ならば接続なし(構造的可塑性は進化エンジンのみが変更可能)。
E/I バランス制約
各ノードのニューロン集団において、興奮性(E)と抑制性(I)の比率をコネクトームデータに基づいて固定する:
MICrONSデータでは \(R \approx 4.2\)(哺乳類皮質の典型値)。
7. セキュリティと倫理的配慮
- コネクトームデータはCC-BY ライセンスの公開データのみを使用する(FlyWire Public, C. elegans OpenConnectome, MICrONS公開データセット)。
- コネクトームAPIキー・認証情報は
config/connectome_config.yamlのsecretsセクションに外部化し、リポジトリにはコミットしない(.gitignore追記済みであることを確認)。
7.1 HCP ヒトデータ利用時の手続き(DUC 取得手順)
ヒト由来コネクトームデータ(HCP S1200 等)を使用する場合は、以下の手順をデータ取得開始前に完了すること。
-
ConnectomeDB アカウント作成
https://db.humanconnectome.orgにてアカウントを作成し、所属機関と使用目的(研究区分)を登録する。 -
Data Use Certification(DUC)への署名 HCP Open Access データ(構造 MRI・拡散 MRI・rsfMRI)は CC-BY 4.0 で提供されるが、制限付きデータ(行動データ・MEG 等)は NIH DUC の電子署名が必要(年次更新)。
- 手順: ConnectomeDB ログイン →
Account→Data Use Terms→Agree and Enable Access -
DUC の有効期限は1年間。年次更新を怠るとアクセスが自動停止される。
-
所属機関 IRB の承認確認 日本国内の研究機関では、ヒト由来データの二次利用に対して倫理審査委員会(IRB)の承認または除外証明が必要な場合がある。組織の研究倫理担当部署に確認すること。
-
データアクセス記録の保管 DUC 署名書類・ダウンロード日・使用バージョン(HCP S1200 等)をプロジェクトの
docs/data_use_log.mdに記録する(リポジトリ内で追跡)。 -
利用可能データの種別と条件
| データ種別 | 利用条件 | 個人情報リスク |
|---|---|---|
| 構造 MRI(T1w/T2w) | Open Access(CC-BY 4.0、HCPアカウント要) | 低(脱識別済み) |
| 拡散 MRI(dMRI) | Open Access(CC-BY 4.0、HCPアカウント要) | 低(脱識別済み) |
| 安静時 fMRI(rsfMRI) | Open Access(CC-BY 4.0、HCPアカウント要) | 低(脱識別済み) |
| 行動データ・サイコメトリクス | 制限付き(DUC署名必須) | 中(個人特定リスク) |
| MEG データ | 制限付き(DUC署名必須) | 中(個人特定リスク) |
重要: HCP データをクラウドストレージ(AWS S3・GCS 等)にアップロードする場合は、DUC 追加条項(プライベートバケット必須、第三者共有禁止)を遵守すること。EvoSpikeNet の
docker-composeや CI/CD パイプラインへの自動取得を組み込む場合も同様の制約を適用する。
8. パフォーマンス見積り
8.1 メモリコスト(ノード当たり)
| コンポーネント | 推定メモリ量 | 備考・圧縮戦略 |
|---|---|---|
structural_mask(COO, N=2000, 密度1%) |
~3.2 MB | int8 × 40,000 非ゼロ要素 |
delay_buffer(float32, N=2000, max_delay=20ms) |
~160 MB(非圧縮) | 非ゼロ遅延のみ保持で ~2〜5 MB に圧縮可能 |
| connectome NPZ キャッシュ(FlyWire 全脳) | ~2 GB | 縮約済み COO を保存すれば ~50 MB |
| Zenoh コネクトームメタデータ | < 1 KB | JSON 圧縮後、帯域影響なし |
遅延バッファの圧縮実装:
class SparseDelayBuffer:
"""非ゼロ遅延シナプスのみ保持する圧縮遅延バッファ。OOMリスク対策。"""
def __init__(self, delays: torch.Tensor):
mask = delays > 0
self.indices = mask.nonzero(as_tuple=False) # [nnz, 2]
self.delay_vals = delays[mask].long() # [nnz] 単位: タイムステップ
self.buffer: dict[int, torch.Tensor] = {} # t_emit → スパイクベクトル
8.2 CPU/GPU 処理負荷
| 処理 | CPU 推定 | GPU 推定 | 備考 |
|---|---|---|---|
| COO→dense 変換(N=2000) | ~5 ms | ~0.3 ms | メモリ転送ボトルネック |
| 層別サンプリング(N=65,000→2,000) | ~200 ms(初回のみ) | — | 結果を NPZ キャッシュ |
| スペクトル縮約(N=65,000, k=2,000) | ~30 s(初回) | ~8 s(CuPy) | オフライン実行推奨 |
| STDP + structural_mask 適用(1ステップ) | ~2 ms | ~0.1 ms | スパース行列乗算 |
推奨: 縮約処理はオフライン(CI/CDでのキャッシュ生成)として一度実行し、実行時は NPZ キャッシュをロードする。
8.3 ネットワーク帯域(外部 API)
| API | 推定転送量 | 推奨取得頻度 | 対策 |
|---|---|---|---|
| FlyWire 全シナプス取得 | ~2 GB / フル取得 | 差分のみ(週次) | ローカル NPZ キャッシュ + ETag 差分フェッチ |
| MICrONS V1 部分グラフ | ~200 MB / 取得 | 月次 | 縮約済み NPZ をリポジトリ外で管理 |
| HCP 拡散テンソル | ~50 GB / 被験者 | 初回のみ | 集約済みスカラーのみコミット |
9. 実装リスクと対策
| # | リスク | 影響度 | 対策 |
|---|---|---|---|
| R1 | CAVE/HCP API レート制限により差分同期が遅延・停止 | 高(パイプライン停止) | ローカル NPZ キャッシュ + ETag 差分フェッチ + connectome_config.yaml の rate_limit_rps 設定でバックオフ制御 |
| R2 | delay_buffer のメモリ増大でノードが OOM クラッシュ |
高(ノード不安定) | SparseDelayBuffer で非ゼロ遅延のみ保持、max_delay_ms 上限を config で設定 |
| R3 | EvoGenome が生理的制約違反の構造マスクを生成 | 中(学習発散) | validate_structural_mask() 事前フィルタ + E/I ペナルティ項、接続密度変動 ±30% 超でリジェクト |
| R4 | スペクトル縮約の計算コストが CI を遅延 | 中(CI タイムアウト) | 縮約済み NPZ をアーティファクトキャッシュ、CI では 302ニューロン小規模サブセットを使用 |
| R5 | コネクトームデータのプルーフリーディング更新による版不整合 | 低(パラメータ不整合) | connectome_config.yaml にバージョンハッシュを記録、ロールバック対応 |
重大リスク(R1・R2)の詳細設定: connectome_config.yaml の cache セクションおよび rate_limits セクションを参照。
10. 指標の明確化
「コネクトーム統合による改善効果」として参照される指標の測定条件を下表に定義する。再現性確保のためタスク・データセット・ベースライン設定を明記する。
| 指標 | 推定改善幅 | タスク定義 | 試験データセット | 測定方法 |
|---|---|---|---|---|
| スパイク効率 | +15〜25% | CIFAR-10 分類(10クラス) | CIFAR-10 テストセット(10,000枚) | 総スパイク数 ÷ Top-1 精度。ランダム初期化 vs コネクトーム初期化を同一ハイパーパラメータで 5 seed 平均 |
| 収束エポック数 | −20〜30% | 同上 | 同上 | 検証精度 95% 達成までのエポック数(100エポック打切り) |
| E/I 比維持精度 | >90% 維持率 | 100エポック学習後に初期値 ±10% 以内 | FlyWire 由来 E/I ラベル | E/I 比の学習曲線(平均) |
| γ/θピーク出現頻度 | ベースラインの 1.5〜2.0× | 視覚刺激提示時 LFP スペクトル | MICrONS 由来生理刺激 | LFP FFT の γ帯域(30–80 Hz)・θ帯域(4–8 Hz)振幅比 |
| Zenoh 平均 RTT | −5〜15% 短縮 | ノード間スパイクパケット配信 | 29ノード Full Brain シミュレーション | RTT ヒストグラム(ペア別)p50/p99 |
共通ベースライン設定: ランダム初期化(torch.randn * 0.01)、LIF パラメータ(tau_m=20 ms, V_th=−55 mV, V_rest=−70 mV)、Adam(lr=1e-3)。
11. 短期改善提案(優先度付き)
P1(高・すぐやる): connectome_loader の入出力スキーマ定義とサンプルデータ追加
- 実装担当者が迷わず着手できる最小公仕様を定義する。
- 提案ファイル:
docs-dev/connectome_schema.md(本文書と同時に作成済み) - サンプルデータ候補:
docs-dev/sample_data/celegans_mini_302n.npz(C. elegans 302ニューロン、OpenWorm 由来)
P2(中・次にやる): サブグラフサンプリング戦略の確定と実験プロトコル策定
- 方針 F(Section 3)が対応済み。実験プロトコルは Section 13 を参照。
- アルゴリズム選択決定: FlyWire → スペクトル縮約(F-2)、MICrONS → 層別サンプリング(F-1)を一次案とする。
P3(中・運用整備): config/connectome_config.yaml にキャッシュ/フェイルバック設定追加
connectome_config.yamlとして作成済み(本文書と同時)。- キャッシュ戦略: ローカル NPZ キャッシュ → 差分のみ取得 → API 失敗時は既存キャッシュへフォールバック。
12. テスト計画(短期)
tests/test_connectome_loader.py
- 目的: 小規模 FlyWire サブグラフ → COO 変換の整合性テスト
test_load_celegans_json_to_coo: C. elegans JSON → COO テンソル変換(nnz 数・dtype・値域チェック)test_stratified_sample_ei_ratio: 層別サンプリング後の E/I 比が元データの ±10% 以内test_spectral_coarsen_eigenvalue_preservation: 上位 5 固有値が元グラフの ±20% 以内test_cache_hit_performance: NPZ キャッシュ命中時のロード時間が 100 ms 未満
tests/test_lif_structural_mask.py
- 目的: structural_mask 適用後の forward 比較(ランダム vs マスク適用)
test_mask_zeros_disconnected_synapses: マスク外シナプスの重みが 0 に維持されるtest_ei_ratio_preserved_after_stdp: STDP 1,000 ステップ後もE/I比が[3.5, 5.0]範囲内test_validate_structural_mask_rejects_invalid: E/I 比 3.5 未満の変異マスクが reject されるtest_mask_gradient_does_not_flow:structural_maskに勾配が流れないことを確認
tests/test_sync_connectome_integration.py
- 目的: 差分適用 → pytest 回帰の自動化ワークフロー(モック CAVE レスポンス)
test_diff_apply_adds_new_synapses: モック差分 JSON →weight_deltaの正確な適用test_diff_apply_removes_pruned_synapses: 削除シナプスがマスクから除外されるtest_rollback_on_validation_failure: E/I 違反差分適用後にロールバックが発火するtest_mock_cave_rate_limit_retry: レート制限 429 レスポンス → バックオフリトライ動作確認
13. 推奨メトリクス & 実験
13.1 学習曲線ベンチマーク
| 実験条件 | 設定値 |
|---|---|
| タスク | CIFAR-10 分類(EvoSpikeNet visual ノード単独) |
| モデル規模 | N=2,000 ニューロン、T=50 タイムステップ |
| 比較条件 | ランダム初期化 vs MICrONS 層別サンプリング(F-1)vs FlyWire スペクトル縮約(F-2) |
| シード | 5 seeds(1, 42, 123, 456, 789) |
| 評価指標 | エポック毎 Top-1 精度・総スパイク数・推定エネルギー(スパイク数 × E_spike = 3.7 pJ) |
13.2 生理指標の定期評価
- E/I 比時系列: 50 エポックごとに各ノードの E/I 比を記録し、
[3.5, 5.0]逸脱を自動アラート。 - FFT γ/θ ピーク出現頻度: 視覚刺激提示時の膜電位平均に FFT を適用し、γ(30–80 Hz)・θ(4–8 Hz)帯域パワー比を評価。
- スパイク同期度(PLV: Phase Locking Value): ニューロンペアの位相同期度を 100 ms ウィンドウで計算し、コネクトーム距離との相関を確認。
# PLV 計算例(スパイク列 spikes: [T, N])
def compute_plv(spikes: torch.Tensor, window_ms: int = 100) -> torch.Tensor:
phase = torch.angle(torch.fft.fft(spikes.float(), dim=0))
plv = torch.abs(torch.exp(1j * (phase[:, :, None] - phase[:, None, :])).mean(0))
return plv # [N, N]
13.3 システム指標
- Zenoh 平均 RTT: ノードペア別(29×29)RTT ヒストグラム(p50/p99)を Prometheus + Grafana で可視化。コネクトーム由来ルーティング適用前後で比較。
- メモリ/CPU 消費差分:
memory_profilerでstructural_mask導入前後のピーク RSS を比較(forward()× 1,000 ステップ)。 - 差分更新後のスパイク率変化:
sync_connectome.py実行後の各ノードスパイク率シフトを回帰テストで検知。
14. 図版・アーキテクチャダイアグラム
実装チームが流用できるよう、主要ダイアグラムを SVG 形式で docs-dev/assets/ に保存する。
14.1 コネクトーム統合アーキテクチャ
graph TD
subgraph DataSources["コネクトームデータソース"]
CE[C. elegans<br/>302 neurons]
FW[FlyWire<br/>~140k neurons]
MC[MICrONS<br/>~65k neurons]
HCP[HCP<br/>全脳マクロ]
end
subgraph ScaleReduction["スケール縮約(方針F)"]
SS[層別サンプリング<br/>F-1]
SC[スペクトル縮約<br/>F-2]
HR[クラスタ代表化<br/>F-3]
end
subgraph EvoSpikeNet["EvoSpikeNet ノード層"]
CL[connectome_loader.py<br/>COO テンソル生成]
SM[structural_mask<br/>LIFNeuronLayer]
DB[delay_buffer<br/>SparseDelayBuffer]
STDP[Meta-STDP<br/>機能的可塑性]
EG[EvoGenome<br/>構造進化]
end
subgraph Communication["Zenoh 通信層"]
ZR[Zenoh ルーティング<br/>HCP由来重み]
end
CE --> SS --> CL
FW --> SC --> CL
MC --> SS --> CL
HCP --> HR --> ZR
CL --> SM
SM --> DB
SM --> STDP
STDP --> SM
EG --> SM
SM --> ZR
SVG エクスポート: mmdc -i docs-dev/assets/connectome_architecture.mmd -o docs-dev/assets/connectome_architecture.svg
14.2 縮約パイプライン
flowchart LR
Raw["生コネクトーム\nN=50k〜140k"]
--> |stratified / spectral / hub| Reduced["縮約済みグラフ\nN=500〜2,000"]
--> |NPZ キャッシュ| Loader["connectome_loader\n.load_npz()"]
--> |structural_mask| LIF["LIFNeuronLayer\nEvoSpikeNet"]
--> |スパイク| Zenoh["Zenoh pub/sub"]
SVG エクスポート: mmdc -i docs-dev/assets/coarsening_pipeline.mmd -o docs-dev/assets/coarsening_pipeline.svg
15. 参照文献・関連ドキュメント
docs-dev 内の関連ファイル
- connectome_literature_review.ja.md — 主要コネクトーム論文のレビュー(White 1986〜Januszewski 2018)
- mapping_methods_ja.md — EM・光学・トレーサー法の技術概要
- connectome_updates_2021-2026.ja.md — 2021〜2026年の最新研究・実装動向
- detailed_paper_summaries.ja.md — 代表論文10本の詳細要約と図版候補
docs 内の関連 EvoSpikeNet ドキュメント
docs/NEUROSCIENCE_BRAIN_SIMULATION_PAPER.md— 全脳シミュレーション論文・数理モデルdocs/DISTRIBUTED_BRAIN_SYSTEM.md— 29ノード分散アーキテクチャ仕様docs/DISTRIBUTED_BRAIN_NODE_TYPES.md— ノードタイプと皮質対応表docs/DISTRIBUTED_BRAIN_NODE_CONFIGURATION.md— ノード構成・シミュレーションタイプ
主要コネクトームデータソース
| データセット | 生物種 | スケール | URL / API |
|---|---|---|---|
| OpenWorm / C. elegans | 線虫 | 302ニューロン | openworm.org, WormAtlas JSON |
| FlyWire (Dorkenwald ら 2024) | ショウジョウバエ | ~140,000ニューロン | fafbseg-py, cave.fanc-fly.com |
| MICrONS (2021–2023) | マウス V1 | ~65,000ニューロン | microns-explorer.org, CAVEclient |
| HCP S1200 | ヒト(健常) | 全脳マクロ | humanconnectome.org |
主要論文(DOI)
| 論文 | DOI |
|---|---|
| White ら 1986 (C. elegans) | https://doi.org/10.1098/rstb.1986.0056 |
| Januszewski ら 2018 (FFN) | https://doi.org/10.1038/s41592-018-0049-4 |
| Dorkenwald ら 2024 (FlyWire) | https://doi.org/10.1038/s41586-024-07558-y |
| Schlegel ら 2024 (Drosophila発達) | https://doi.org/10.1038/s41586-024-07763-9 |
| MICrONS Consortium 2021 | https://doi.org/10.1101/2021.07.28.454025 |
| Tavakoli ら 2025 (LICONN) | https://doi.org/10.1038/s41586-025-08985-1 |
16. ソースコード検証結果(2026-03-19)
本節は、実装計画と現行ソースコードの整合性を照合した結果を記録する。 Phase E-1 着手前に解決すべき問題点を優先度付きで列挙する。
16.1 実装済み・整合確認済みコンポーネント ✅
| 方針 | 対象ファイル | 状態 |
|---|---|---|
| 方針B データソース管理 | config/connectome_config.yaml |
作成済み。全データソース・キャッシュ・レート制限設定が本文書と整合 |
方針E apply_weight_delta() インフラ |
evospikenet/genome_to_brain.py L431 |
実装済み(INT16 デルタ → nn.Linear への float32 変換機構) |
| STDP 基盤 | evospikenet/plasticity.py・evospikenet/genome.py L95 |
整数ベース STDP が動作中。PlasticityConfig からジーノム経由で参照可 |
DevelopmentalSchedule |
evospikenet/brain_simulation.py L1374 |
実装済み(ただしコネクトーム構造非依存。Phase E-3 以降で接続を要検討) |
| スキーマ仕様 | docs-dev/connectome_schema.md |
JSON・NPZ 入出力スキーマ・命名規則・サンプルコードが完全定義済み |
16.2 未実装コンポーネント(新規作成が必要)❌
| 方針 | 対象ファイル | 優先度 | 備考 |
|---|---|---|---|
| 方針A・F | evospikenet/connectome_loader.py |
最優先(Phase E-1) | ファイル自体が存在しない。スキーマは connectome_schema.md 完全定義済みなので直ちに着手可能 |
| 方針E 自動更新 | scripts/sync_connectome.py |
✅ Phase E-3 完了 | apply_delta() / sync_connectome() / fetch_cave_synapses_with_retry() 実装済み。brain_routing.py / auto_node_mapper.py も E-3 で追加 |
16.3 重大な整合性問題(Phase E-1 着手前に解決必須)⚠️
問題 I-1: ノード名の不一致(高リスク)
config/connectome_config.yaml および本文書が使用するノード名が、evospikenet/node_types.py の NODE_TYPE_DEFINITIONS キー群と食い違っている。
| ドキュメント・config のノード名 | node_types.py の実際の定義 |
状態 |
|---|---|---|
visual |
"vision" (NODE_TYPE_VISION) |
❌ 不一致 |
auditory |
"audio"(NODE_TYPE_DEFINITIONS のキー)※ |
❌ 不一致 |
memory_spike |
"memory" |
❌ 不一致 |
spatial_integration |
定義なし | ❌ 存在しない |
speech |
"speech" |
✅ 一致 |
pfc |
"pfc" |
✅ 一致 |
spatial |
"spatial" ※ NODE_TYPE_DEFINITIONS には未エントリ |
⚠️ 要確認 |
motor |
"motor" |
✅ 一致 |
※ node_types.py では NODE_TYPE_AUDITORY = "auditory" という定数名だが、NODE_TYPE_DEFINITIONS ディクショナリのキーは "audio" になっており内部でも乖離がある。
対応方針(要決定): 以下のいずれかに統一する。
- 案A:
connectome_config.yamlと本文書の記述をnode_types.pyの実際のキー名("vision","audio"等)に合わせて修正する。 - 案B:
node_types.pyのNODE_TYPE_DEFINITIONSに"visual","auditory","memory_spike","spatial_integration"キーを追加してエイリアスとして整備する。 - 推奨:
node_types.pyNODE_TYPE_AUDITORYの値を"audio"へ統一し(もしくは逆)、connectome_config.yaml側を合わせる(案A)。Phase E-1 のテスト実装前に決定すること。
問題 I-2: LIFNeuronLayer のデータ型不整合(高リスク)
実装計画(方針A)のコードサンプルは nn.Parameter(torch.randn(...) * 0.01) という float32 ベースの重み行列 を LIFNeuronLayer に追加することを想定しているが、evospikenet/core.py の現在の LIFNeuronLayer は int16 専用の固定小数点実装 である。
LIFNeuronLayer(現状):
- self.potential : torch.int16
- SynapseMatrixCSR.weights : torch.int8
- forward() : int32 を経由して int16 に戻す整数演算
方針A が想定する structural_mask:
- torch.sparse_coo_tensor (float32)
- nn.Parameter(float32) の重み行列
→ 型衝突が発生する
structural_mask を int16 演算パスに組み込む際の変換レイヤーが設計に明示されていない。
対応方針(要決定): 以下のいずれかを選択する。
| 案 | 内容 | 影響範囲 |
|---|---|---|
| 案A | LIFNeuronLayer に float_mode=True オプションを追加し、float32 演算経路を共存させる |
core.py の変更のみ。後方互換性は引数デフォルト False で維持 |
| 案B | コネクトーム統合専用に ConnectomeLIFLayer(LIFNeuronLayer) のサブクラスを新設する |
connectome_loader.py・core.py に追加のみ。既存コード無変更 |
| 案C | IzhikevichNeuronLayer(同 core.py に存在する float 実装)にのみコネクトームトポロジーを適用する |
既存 LIF との使い分けが生じ、脳シミュレーション設定が複雑化 |
| 推奨 | 案B(ConnectomeLIFLayer サブクラス新設)。最小変更・後方互換性維持・Phase E-1 スコープ内で完結 |
問題 I-3: apply_weight_delta() の対象層ミスマッチ(中リスク)
方針Dは「コネクトーム由来の STDP 更新を apply_weight_delta() に乗せる」と記述しているが、evospikenet/genome_to_brain.py L431 の現実装は モジュール内の最初の nn.Linear 層のみ を対象にするため、コネクトームトポロジーが格納される SynapseMatrixCSR に対して機能しない。
# 現在の apply_weight_delta(): nn.Linear のみ対応
for layer in module.modules():
if isinstance(layer, nn.Linear): # ← SynapseMatrixCSR はここでスキップされる
...
break
対応方針:
- Phase E-2 以降で apply_weight_delta() の対象に SynapseMatrixCSR を追加し、.weights スパーステンソルへの更新経路を実装する。
- または、コネクトーム更新専用の apply_connectome_delta(module_name, delta_coo) メソッドを genome_to_brain.py に新設する。
問題 I-4: STDP の structural_mask 引数が未定義(中リスク)
方針Cの「構造的制約付き STDP 更新則」を実現するには、evospikenet/plasticity.py の PlasticityRule.compute_weight_updates() インターフェースに structural_mask 引数を追加する必要があるが、現在の抽象インターフェースにはこの引数が存在しない。
# 現在のシグネチャ(plasticity.py)
@abstractmethod
def compute_weight_updates(self, spike_history, synapse_matrix): ...
# 必要なシグネチャ(変更案)
@abstractmethod
def compute_weight_updates(
self,
spike_history,
synapse_matrix,
structural_mask: Optional[torch.Tensor] = None, # ← 追加
): ...
対応方針: Phase E-1 で structural_mask をオプション引数(デフォルト None)として追加する。既存サブクラスは引数を受け取り無視するだけで後方互換性が維持される。
16.4 Phase E-1 着手のための前提条件チェックリスト
Phase E-1 に入る前に、以下のすべてに「決定マーク」が付いていること。
- [x] 問題 I-1 解決(2026-03-19):
node_types.pyのNODE_TYPE_DEFINITIONSに"visual","auditory","spatial","spatial_integration","memory_spike","speech","episodic","integrator","language"を追加し、各エントリにconnectome_source・cortical_region・ei_ratioフィールドも付与。旧"audio"キーは後方互換エイリアスとして保持。connectome_config.yamlのコメントも整合ずみ。 - [x] 問題 I-2 解決(2026-03-19):
evospikenet/core.pyにConnectomeLIFLayer(LIFNeuronLayer)を新設(案B採用)。structural_mask(bool dense buffer)・delay_buffer(float32 buffer)・connectome_weight(float32 Parameter)を保持。apply_connectome_input()で float→int16 橋渡し変換を提供。validate_ei_ratio()で E/I バリデーション。 - [x] 問題 I-3 解決(2026-03-19):
evospikenet/genome_to_brain.pyにapply_connectome_delta()メソッドを新設。優先度順にConnectomeLIFLayer.connectome_weight→SynapseMatrixCSR.weights→nn.Linearへ更新を適用。 - [x] 問題 I-4 先行解決(2026-03-19):
evospikenet/plasticity.pyのPlasticityRule.compute_weight_updates()抽象メソッドにstructural_mask: Optional[torch.Tensor] = Noneを追加。STDPでは実際にマスクを適用してコネクトーム外シナプスの更新をゼロにする。Homeostasis,MetaSTDP,STDPRule,HomeostaticRuleの全実装も同引数で後方互換更新済み。 - [x]
tests/test_connectome_loader.pyテストファイル骨格を作成し、CI に組み込む(30pass/2fail/4skip)。 - [ ]
data/connectome/ディレクトリを作成し、.gitignoreに登録する(サンプルデータはdocs-dev/sample_data/に格納)。
本文書は EvoSpikeNet Phase E のキックオフドキュメントとして機能する。実装の進捗は上記ロードマップに従ってチケット管理システムで追跡すること。
Copyright 2026 Moonlight Technologies Inc. All Rights Reserved.