コンテンツにスキップ

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 契約で管理する。

目次

  1. 目的と結論
  2. 現行実装の確認結果
  3. 互換性マトリクス
  4. 目標アーキテクチャ
  5. モダリティごとのtoken化仕様
  6. 共通Sparse Event-Memoryバックボーン仕様
  7. 入出力・学習・アーティファクト契約
  8. メモリとストリーミングの設計判断
  9. 実装計画
  10. テスト、受入基準、リスク
  11. 現行SDKとドキュメントの位置付け

目的と結論

SparseEventMemoryLM は、大きな主シナプスをINT8 CSR bufferとして保持し、Adamを共有語彙基底・router・adapter・LayerNormに限定するテキスト用バックボーンです。しかし現行の公開入力は整数token_ids \((B,S)\) のみであり、画像tensor、波形、MFCC、連続センサー特徴を直接処理する一般モダリティモデルではありません。

したがって、全EvoSpikeNet LLMへ単純に差し替えるのではなく、次の分離を導入します。

  1. 既存モダリティencoderを保持する。 画像はSpikingEvoVisionEncoder、音声はSpikingEvoAudioEncoderまたはAudioToBrainLanguageSystemを使用する。
  2. encoder出力を離散的なモダリティtoken列へ変換するbridgeを使う。 VectorQuantizedTokenBridgeとvision/audio wrapper、既存audio-language ID用adapterを実装済みとする。
  3. text/image/audio tokenを1つの明示的な語彙空間と系列形式にまとめる。 MultimodalSequenceBuilderMemoriedSpikeNetLMが低メモリCSRコアを共通backboneとして実装する。
  4. 生成・分類・検索・連続復元を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_idsmodality_idsvalidity_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適用 必要な追加 優先度
SpikingEvoTextLMTransformerLMの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へ割り当てます。

\[ \mathcal{V}_{text}=[0,V_{text}) \]

P0では現在のTiedFactorizedVocabularyを再利用します。P1以降では特殊tokenと各モダリティrangeを加えた総語彙 \(V_{total}\) に対し、既存text IDを移動せず保持する互換方針を採ります。

2. 画像

SpikingEvoVisionEncoderは画像を \((B,T_{vision},D_v)\) のspike trainへ変換します。新設するVisionEventTokenizerは、時間平均/学習可能pooling後の局所・patch特徴を \(N_{image}\) 個のベクトルへ切り出し、有限codebookへ最近傍量子化します。

\[ \mathbf{z}^{img}_n = g_{vision}(image)_n, \qquad q_n=\arg\min_{j\in\mathcal{V}_{image}}\lVert\mathbf{z}^{img}_n-\mathbf{c}^{img}_j\rVert_2^2 \]

画像token rangeは

\[ \mathcal{V}_{image}=[V_{text},V_{text}+V_{image}) \]

です。VisionEventTokenizerVectorQuantizedTokenBridgeは実装済みです。量子化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を付けられます。

\[ \mathbf{z}^{aud}_n=g_{audio}(waveform_{nH:nH+W}), \qquad q_n=\arg\min_{j\in\mathcal{V}_{audio}}\lVert\mathbf{z}^{aud}_n-\mathbf{c}^{aud}_j\rVert_2^2 \]

音声token rangeは

\[ \mathcal{V}_{audio}=[V_{text}+V_{image},V_{total}) \]

です。音声サンプルレート、feature設定、chunk境界、resampling方針、torchaudio依存可否をconfigとmanifestに保存します。

4. 統合token列

1サンプルは次の形式を標準とします。

\[ [\mathrm{BOS},\mathrm{TEXT\_START},x_{1:S_t},\mathrm{TEXT\_END}, \mathrm{IMAGE\_START},q^{img}_{1:N_i},\mathrm{IMAGE\_END}, \mathrm{AUDIO\_START},q^{aud}_{1:N_a},\mathrm{AUDIO\_END}] \]

未入力モダリティはその区間を省略するか、学習・推論で統一する場合にだけ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を選択するために使います。例えば、埋め込みは

\[ H^{(0)}=QE + M[\mathrm{modality\_id}] + P[\mathrm{position}] \]

とします。\(Q\)はINT8コード、\(E\)は共有基底、\(M,P\)は小さな学習可能parameterです。これらはAdam状態を持ちますが、INT8 CSR主シナプスは引き続きbufferです。

maskの要件

EventMemoryExpertSparseEventMemoryBlockは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を含む相対/連続時間表現を検討します。


入出力・学習・アーティファクト契約

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評価を定義します。

学習手順

  1. モダリティencoderとtokenizer bridgeが統合token列、modality ID、mask、targetを生成する。
  2. backboneがCSR event-memory blocksを通してhidden stateを出力する。
  3. task headの勾配を共有基底、modality/position parameter、router、adapter、LayerNorm、必要に応じてbridgeへ伝播する。
  4. optimizer.step()成功後にapply_local_plasticity()を1回だけ実行する。
  5. 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保持量は既存の主式

\[ M_{\mathrm{CSR}}=2LM\left(8(D+1)+9DF\right) \]

を維持します。ただしマルチモーダル化で以下が追加されます。

  • 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 MultimodalTokenBatchMultimodalSequenceBuilderが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遅延 条件を併記したベースライン比較を保存する

主なリスク

  1. 情報損失: 低rank/低codebookの量子化は画像細部や音声韻律を失う。bridge品質をbackbone性能と分離して測る。
  2. 長系列: 音声token数がtextを大幅に上回る。固定token予算、subsampling、chunkingを先に設計する。
  3. 局所可塑性の不安定性: 共有multimodal列では活動分布が異なる。モダリティ別統計、更新率、飽和率を監視する。
  4. 評価の混同: token CEだけでは画像/音声の知覚品質を保証しない。WER、event F1、retrieval、caption品質などtask metricを分ける。
  5. 既存互換性: SpikingEvoMultiModalLMのdense融合APIとcheckpointを上書きしない。新architecture discriminatorで並存させる。

現行SDKとドキュメントの位置付け

SparseEventMemoryConfigbuild_sparse_event_memory_model()upload_sparse_event_memory_artifacts()テキスト用Sparse Event-Memory LMだけを対象にします。音声・画像・マルチモーダルartifactへ流用してはいけません。

マルチモーダルにはMemoriedSpikeNetLMConfigbuild_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は未実装です。

関連文書