MEMERIED SpikeNetLM:音声・画像・マルチモーダル拡張仕様と実装状況
- 最終更新日: 2026年8月14日
文書ステータス: 実装済みコアと残作業を併記する仕様書。
実装ステータス:MemoriedSpikeNetLM、VQ vision/audio bridge、離散audio-language ID adapter、mask-aware sparse block、SDK artifact payload/upload は実装・単体テスト済み。学習済みbridge、専用trainer/API route、CTC/retrieval head、ストリーミング状態は未実装。
名称: プロジェクト呼称はMEMERIED SpikeNetLM、Python公開クラス名とSDK型名はMemoriedSpikeNetLM/MemoriedSpikeNetLMConfig。
設計意図: この文書は「最小実装」を意味するのではなく、SparseEventMemoryLMを土台にした将来拡張のための仕様として位置づける。テキスト専用のSparse path と multimodal 拡張は分離され、相互運用は artifact / vocabulary / task head 契約で管理する。
目次
- 目的と結論
- 現行実装の確認結果
- 互換性マトリクス
- 目標アーキテクチャ
- モダリティごとのtoken化仕様
- 共通Sparse Event-Memoryバックボーン仕様
- 入出力・学習・アーティファクト契約
- メモリとストリーミングの設計判断
- 実装計画
- テスト、受入基準、リスク
- 現行SDKとドキュメントの位置付け
目的と結論
SparseEventMemoryLM は、大きな主シナプスをINT8 CSR bufferとして保持し、Adamを共有語彙基底・router・adapter・LayerNormに限定するテキスト用バックボーンです。しかし現行の公開入力は整数token_ids \((B,S)\) のみであり、画像tensor、波形、MFCC、連続センサー特徴を直接処理する一般モダリティモデルではありません。
したがって、全EvoSpikeNet LLMへ単純に差し替えるのではなく、次の分離を導入します。
- 既存モダリティencoderを保持する。 画像は
SpikingEvoVisionEncoder、音声はSpikingEvoAudioEncoderまたはAudioToBrainLanguageSystemを使用する。 - encoder出力を離散的なモダリティtoken列へ変換するbridgeを使う。
VectorQuantizedTokenBridgeとvision/audio wrapper、既存audio-language ID用adapterを実装済みとする。 - text/image/audio tokenを1つの明示的な語彙空間と系列形式にまとめる。
MultimodalSequenceBuilderとMemoriedSpikeNetLMが低メモリCSRコアを共通backboneとして実装する。 - 生成・分類・検索・連続復元をtask headとして分離する。 現在は範囲制限されたtext/image/audio token logitsとpooling分類headを提供する。
この設計により、テキストは低リスクで移行し、画像・音声・マルチモーダルはtokenization bridgeと専用headを実装した後に段階的に適用できます。
現行実装の確認結果
| コンポーネント | 現行契約 | 実装上の意味 |
|---|---|---|
SparseEventMemoryLM |
forward(token_ids)、整数token IDから全語彙logits |
image/audio引数、mask、modality ID、連続embedding入力を持たない |
TiedFactorizedVocabulary |
INT8 codebook \((V,R)\) + 学習可能basis \((R,D)\) |
入力埋め込みと語彙投影を共有し、候補語彙CEを提供 |
EventMemoryExpert |
\((B,S,D)\) dense float hidden stateを時刻順に処理 | 主シナプスのみCSR。spike・hidden・出力stackはdense tensor |
VectorQuantizedTokenBridge |
\((B,T,D)\)特徴 → 固定長・範囲内token IDs、mask、量子化誤差 | 最近傍VQ。タスク勾配をID選択へ通さないため、bridgeは事前学習・凍結が必要 |
AudioLanguageTokenAdapter |
既存audio-language ID + confidence → audio range IDs + mask | source語彙がaudio rangeに収まることを検証してoffsetする |
MultimodalSequenceBuilder |
text/image/audio IDs → delimiter・欠損token・padding付きbatch | token_ids、modality_ids、validity_maskを一貫して生成 |
MemoriedSpikeNetLM |
MultimodalTokenBatch → task範囲logitsまたは分類logits |
modality/position embedding、mask-aware router・event state・局所可塑性を実装 |
SpikingEvoVisionEncoder |
画像 \((B,C,H,W)\) → spike train \((B,T,D)\) | 現行では画像token列を出力しない |
SpikingEvoAudioEncoder |
MFCC \((B,T,F)\) → spike train \((B,T_{snn},D)\) | MFCC時間軸は平均してからLIFへ渡す実装 |
AudioToBrainLanguageSystem |
波形 → token IDs \((B,S)\)、confidence、任意中間特徴 | token bridgeの候補だが、出力語彙・token意味・学習済み品質の整合確認が必要 |
SpikingEvoMultiModalLM |
tokens, 任意image, 任意audio_mfcc |
image/audio spikeをtext系列長へbroadcastし、concat後にdense spiking transformerへ渡す |
| MEMERIED SDK helper | MemoriedSpikeNetLMConfigとモデル/config/manifest/report artifact |
range、codebook revision、encoder manifestをJSON化してuploadする |
現行モデルとの差分
SpikingEvoMultiModalLM は、テキストspike train \((B,T,S,D)\) と、画像・音声から得た \((B,T,D)\) をテキスト長 \(S\) にexpandして融合します。対してSparse Event-Memoryコアは、因果的なtoken列 \((B,S)\) を前提にしています。従って両者を接続するには、単にdense transformer blockを置換するだけでは足りません。
特に、現在のSparseEventMemoryLM.time_stepsは構成互換用に保持されていますが、forwardの外部spike時間軸を処理しません。外部SNN時間軸とtoken順序を混同しないことが必要です。
互換性マトリクス
| 対象 | 現状のSparse適用 | 必要な追加 | 優先度 |
|---|---|---|---|
SpikingEvoTextLM、TransformerLMのtoken LM用途 |
可能 | checkpoint移行なし、位置/segment方針の明文化 | P0 |
AudioToBrainLanguageSystemが生成する離散audio token |
条件付きで可能 | 語彙範囲、pad/unk、confidence mask、tokenizer品質検証 | P1 |
| 画像caption/理解 | 不可 | vision tokenization bridge、画像token語彙、画像task head | P1 |
| 音声認識・音響イベント | 不可 | audio tokenization bridge、時間整列、CTCまたはcodec token head | P1 |
SpikingEvoMultiModalLM相当のtext+image+audio生成 |
不可 | 統合sequence builder、modality/position表現、mask、fusion評価 | P2 |
| リアルタイム音声・映像 | 不可 | chunk tokenizer、状態cache、境界処理、遅延計測 | P3 |
| EEG/LiDAR/触覚など追加sensor | 不可 | sensor token adapter、語彙割当、task head、データ契約 | P4 |
「可能」は現在のクラスをすべて置換できる意味ではありません。テキストのtoken-to-token言語モデリング契約に適合する、という意味です。
目標アーキテクチャ
flowchart LR
TXT[Text tokenizer] --> TS[Text token IDs]
IMG[SpikingEvoVisionEncoder] --> IT[Vision token bridge]
AUD[Audio encoder or AudioToBrainLanguage] --> AT[Audio token bridge]
TS --> SB[Multimodal sequence builder]
IT --> SB
AT --> SB
SB --> IDS[Unified token IDs]
SB --> MOD[Modality IDs and validity mask]
IDS --> VOC[Factorized multimodal vocabulary]
MOD --> EMB[Small modality and position adapters]
VOC --> B[Shared sparse event-memory blocks]
EMB --> B
B --> TH[Text token head]
B --> IH[Image token or image task head]
B --> AH[Audio token or audio task head]
TH --> OUT[Task result]
IH --> OUT
AH --> OUT
classDef implemented fill:#e8f5e9,stroke:#2e7d32,color:#102a43
classDef planned fill:#fff3e0,stroke:#ef6c00,color:#102a43
class TXT,IMG,AUD,TS,IT,AT,SB,IDS,MOD,VOC,EMB,B,TH,IH,AH,OUT implemented
設計原則
- 共通backboneは離散列を受ける。 画像・音声を直接CSR層に入力するのではなく、各モダリティの時間/空間構造をencoderとbridgeでtoken列化する。
- モダリティの意味はtoken IDだけに依存しない。 小さい学習可能なmodality embeddingとposition/segment表現を加える。主CSRシナプスをAdam対象に戻さない。
- 欠損モダリティは明示する。
validity_maskと開始・終了・欠損special tokenを使い、ゼロtensorの暗黙的な意味に依存しない。 - headを分離する。 テキスト生成は語彙head、音声認識は離散音声tokenまたはCTC head、画像生成はimage-code head、分類はpooling分類headを使う。
モダリティごとのtoken化仕様
1. テキスト
既存HF tokenizerのIDをtext rangeへ割り当てます。
P0では現在のTiedFactorizedVocabularyを再利用します。P1以降では特殊tokenと各モダリティrangeを加えた総語彙 \(V_{total}\) に対し、既存text IDを移動せず保持する互換方針を採ります。
2. 画像
SpikingEvoVisionEncoderは画像を \((B,T_{vision},D_v)\) のspike trainへ変換します。新設するVisionEventTokenizerは、時間平均/学習可能pooling後の局所・patch特徴を \(N_{image}\) 個のベクトルへ切り出し、有限codebookへ最近傍量子化します。
画像token rangeは
です。VisionEventTokenizerとVectorQuantizedTokenBridgeは実装済みです。量子化codebook、commitment loss、patch数、画像サイズ、正規化は学習済みbridgeを運用するartifact configに必須です。
3. 音声
音声には二系統を定義します。
| 用途 | token source | 主な学習目的 |
|---|---|---|
| 音声の意味理解・音声→言語 | AudioToBrainLanguageSystemまたはASR |
semantic/audio-language token CE |
| 音声認識・音響イベント・音楽 | 新設AudioEventTokenizer |
codec/event token CE、CTC、分類 |
SpikingEvoAudioEncoderはMFCCから\((B,T_{snn},D_a)\)を返しますが、内部でMFCCの入力時間をmean集約します。フレーム同期が必要なASR/音響token化では、AudioToBrainLanguageSystem.TemporalSpikingEncoderを利用するか、時間軸を保持するencoder APIを新設します。
AudioEventTokenizerはencoder特徴を固定数 \(N_{audio}\) のpooling binへ分割し、各binをcodebookへ割り当てます。既存AudioToBrainLanguageSystemのIDはAudioLanguageTokenAdapterでrange offsetとconfidence maskを付けられます。
音声token rangeは
です。音声サンプルレート、feature設定、chunk境界、resampling方針、torchaudio依存可否をconfigとmanifestに保存します。
4. 統合token列
1サンプルは次の形式を標準とします。
未入力モダリティはその区間を省略するか、学習・推論で統一する場合にだけNO_IMAGEまたはNO_AUDIO tokenを1つ配置します。paddingは必ずvalidity_mask=Falseで示し、損失計算から除外します。
共通Sparse Event-Memoryバックボーン仕様
実装済みモデル境界
新しいバックボーンは、既存SparseEventMemoryLMを破壊的に変更せず、次の追加APIを持つ別クラスとして実装します。
MemoriedSpikeNetLM.forward(
batch: MultimodalTokenBatch,
task: str = "text_generation",
) -> MemoriedSpikeNetOutput
token_idsは既存の因子化語彙へ入力し、modality_idsは小規模Adam対象のembedding/adapterを選択するために使います。例えば、埋め込みは
とします。\(Q\)はINT8コード、\(E\)は共有基底、\(M,P\)は小さな学習可能parameterです。これらはAdam状態を持ちますが、INT8 CSR主シナプスは引き続きbufferです。
maskの要件
EventMemoryExpertとSparseEventMemoryBlockはoptionalなmaskを受け、統合列では次の動作を実装します。
- router poolingはvalid tokenだけの平均にする。
- expert state更新とplasticity集計はmaskされた位置を除外する。
- task head損失はignore indexまたはmaskを使う。
- 空列・全padding batchを明示的にrejectする。
この変更はtextの既存APIを維持するため、新クラスまたは後方互換のoptional引数で導入し、専用回帰試験を追加します。
位置と因果性
現行イベント専門家はtoken順の再帰処理を行うため順序依存ですが、明示的なposition embeddingはありません。マルチモーダル列では、text、画像patch、音声chunkの位置を区別する必要があります。P1では学習可能なabsolute position embeddingを最大長まで持ち、P3でchunk offsetを含む相対/連続時間表現を検討します。
入出力・学習・アーティファクト契約
出力head
| task | 出力 | 損失 | 実装段階 |
|---|---|---|---|
| text generation | text語彙logits | sampled CE / full CE評価 | P0/P2 |
| multimodal instruction | text語彙logits | text token CE | P2 |
| audio semantic tokens | audio語彙logits | token CE | P1/P2 |
| frame同期音声認識 | 音素/wordpiece時系列 | CTCまたはseq2seq CE | P3 |
| image reconstruction | image-code logits | image token CE | P2 |
| image/audio/text分類・検索 | pooled representation | CE/contrastive loss | P2 |
sampled_cross_entropy()は候補token集合のCEです。総語彙に対するfull softmaxと同一の最適化目的ではないため、検証時にはtaskごとの適切なfull vocabularyまたはcandidate retrieval評価を定義します。
学習手順
- モダリティencoderとtokenizer bridgeが統合token列、modality ID、mask、targetを生成する。
- backboneがCSR event-memory blocksを通してhidden stateを出力する。
- task headの勾配を共有基底、modality/position parameter、router、adapter、LayerNorm、必要に応じてbridgeへ伝播する。
optimizer.step()成功後にapply_local_plasticity()を1回だけ実行する。- stepが中止・NaN・overflowで無効になった場合は
clear_local_plasticity()を実行する。
現行のprimary CSR局所更新はタスク誤差の厳密な勾配ではありません。モダリティ別性能、ルータ利用率、発火率、INT8値の飽和率を必須メトリクスにします。
artifact manifest
新しいartifactは少なくとも次を分離して保存します。
| artifact | 必須内容 |
|---|---|
| model | backbone、task head、モダリティadapterのstate dict |
| config | architecture識別子、全語彙range、\(D,R,L,M,K,A,\rho\)、最大系列長、head設定 |
| tokenizer manifest | text tokenizer ID/revision、image/audio codebook ID/revision、special token表 |
| encoder manifest | vision/audio encoderクラス、入力shape、sample rate、feature設定、checkpoint digest |
| memory report | 固定CSR、codebook、学習対象parameter、実測peak memory、batch/length条件 |
| metrics | task metric、router利用率、発火/飽和率、遅延、データsplit |
既存SparseEventMemoryConfigはtext用であり、これらのモダリティ情報を表せません。新configは既存artifactとの互換性を偽装せず、別のarchitecture値を用います。
メモリとストリーミングの設計判断
静的モデルメモリ
共通backboneのCSR保持量は既存の主式
を維持します。ただしマルチモーダル化で以下が追加されます。
- modality/position embeddingとadapterのAdam状態
- image/audio token codebook
- encoderおよびtokenizer bridgeの重み・活性化
- 統合列長 \(S=S_t+N_i+N_a+special\) に比例するdense hidden/output活性化
- task head logitsと候補集合
したがって「CSR backboneが低メモリ」でも、画像/音声encoderと長い音声token列によりピークVRAMは増えます。各encoderのVRAMとbackboneを別計測し、統合時のピークを再測定します。
ストリーミング
現行generate()は各新tokenでprefix全体を再評価し、EventMemoryExpertの膜電位はforward呼び出しごとに初期化されます。そのため現状はリアルタイムaudio/videoへ使えません。
P3で導入するMemoriedStreamingStateは、少なくとも以下を保持します。
- ブロック・選択expertごとのINT16 membraneとprevious spikes
- 未確定audio chunkのtokenizer buffer
- 統合token列のposition offset
- 検証済みtoken数と生成cache境界
最初の実装では、batch内のrouter選択がchunk間で変わる場合の状態再配置を安全に扱うため、routerをstream単位で固定するか、全expert状態を保持する方針を明示的に比較評価します。非選択expertをCPU/NVMeへpageする機能は現行に存在せず、P3完了条件には含めません。
実装計画
P0 — テキストbackboneの契約固定
| 項目 | 変更候補 | 完了条件 |
|---|---|---|
| 仕様固定 | evospikenet/sparse_event_memory.py、本書 |
token-only制約、時間状態、full logits、局所可塑性が明記される |
| regression | tests/unit/test_sparse_event_memory_lm.py |
token ID型、候補CE、CSR buffer/Adam分離を保持 |
| artifact | evospikenet/sdk/sparse_event_memory.py |
既存text artifactを継続して再開可能 |
P1 — モダリティtokenization bridgeと統合データ契約(実装済みコア)
| 項目 | 新規/変更候補 | 完了条件 |
|---|---|---|
| 共通schema | evospikenet/memoried_spikenetlm.py |
MultimodalTokenBatchとMultimodalSequenceBuilderがIDs、modality IDs、maskを定義・生成 |
| 画像bridge | evospikenet/multimodal_tokenizers.py |
SpikingEvoVisionEncoder出力から範囲内image IDsとmaskを返す |
| 音声bridge | 同上 | encoder特徴のVQと既存audio-language IDのrange adapterを提供。waveform直接入力・chunk metadataは未実装 |
| data loader | dataloaders.pyまたは専用module |
text/image/audio欠損を含むbatchを一貫してcollate |
| config | evospikenet/sdk/memoried_spikenetlm.py |
語彙range、codebook revision、encoder設定をJSON化 |
P1ではbridge単体を先に教師あり/自己教師ありで評価します。random codebookを実用tokenizerとして扱わず、codebookの学習・凍結・version固定の手順をテストで保証します。
P2 — モダリティ対応Sparse Event-Memoryモデルとオフライン学習(部分実装)
| 項目 | 新規/変更候補 | 完了条件 |
|---|---|---|
| backbone | MemoriedSpikeNetLM |
mask-aware router、modality/position表現、既存CSR局所更新を実装済み |
| heads | evospikenet/memoried_heads.py |
text、image-code、audio-code、pooling分類headを分離 |
| trainer | examples/train_memoried_spikenetlm.py |
mixed modality batch、optimizer後のplasticity、resumeを実装 |
| metrics | evospikenet/metrics/... |
task loss/accuracy、router分布、発火率、飽和率、peak memoryを記録 |
| API | api_modules/multimodal_api.py |
既存denseモデルのrouteを壊さないarchitecture selectorを追加 |
| SDK | evospikenet/sdk/memoried_spikenetlm.py |
config、artifact payload、uploadを実装済み。downloadとローカルdemoは未実装 |
P3 — ストリーミング音声・映像
| 項目 | 新規/変更候補 | 完了条件 |
|---|---|---|
| streaming state | evospikenet/memoried_streaming.py |
chunk境界でtokenizer・event state・position offsetを保持 |
| audio route | api_modules/multimodal_api.pyまたは専用router |
PCM/WAV chunk入力、backpressure、失効処理を実装 |
| cache | backbone/streaming module | prefix再評価なしの増分結果が非streaming基準と許容差内で一致 |
| observability | SDK/API metrics | chunk latency、buffer量、drop率、router変化を記録 |
P4 — 追加sensorと運用最適化
- LiDAR、EEG、触覚などの
SensorTokenAdapterを追加する。 - expert load balancing、capacity制御、長系列memory方策を導入する。
- GPU/CPU/NVMe expert pagingは、永続buffer転送と局所可塑性整合性のベンチマーク後に独立提案として扱う。
テスト、受入基準、リスク
必須試験
| 層 | 試験 | 受入基準 |
|---|---|---|
| tokenizer bridge | image/audio ID範囲、決定性、pad/mask、codebook version | 範囲外IDなし、同一入力と凍結codebookで再現可能 |
| backbone | mask、欠損モダリティ、mixed batch、局所可塑性clear | paddingがrouter/可塑性統計に寄与しない |
| head | text/image/audio各損失 | target shape・ignore index・候補IDが検証される |
| checkpoint | text-only、audio、image、tri-modal | config/manifest不一致時に安全に失敗する |
| SDK/API | artifact upload/download、architecture選択 | dense multimodal routeを回帰させない |
| 性能 | peak VRAM、token/s、chunk遅延 | 条件を併記したベースライン比較を保存する |
主なリスク
- 情報損失: 低rank/低codebookの量子化は画像細部や音声韻律を失う。bridge品質をbackbone性能と分離して測る。
- 長系列: 音声token数がtextを大幅に上回る。固定token予算、subsampling、chunkingを先に設計する。
- 局所可塑性の不安定性: 共有multimodal列では活動分布が異なる。モダリティ別統計、更新率、飽和率を監視する。
- 評価の混同: token CEだけでは画像/音声の知覚品質を保証しない。WER、event F1、retrieval、caption品質などtask metricを分ける。
- 既存互換性:
SpikingEvoMultiModalLMのdense融合APIとcheckpointを上書きしない。新architecture discriminatorで並存させる。
現行SDKとドキュメントの位置付け
SparseEventMemoryConfig、build_sparse_event_memory_model()、upload_sparse_event_memory_artifacts()はテキスト用Sparse Event-Memory LMだけを対象にします。音声・画像・マルチモーダルartifactへ流用してはいけません。
マルチモーダルにはMemoriedSpikeNetLMConfig、build_memoried_spikenetlm_model()、create_memoried_spikenetlm_artifact_payload()、upload_memoried_spikenetlm_artifacts()を使用します。payloadにはモデル、config、token range・revision・encoder manifest、memory reportを分離して保存します。API architecture selector、artifact download、streaming APIは未実装です。