Spiking Neural Network
スパイキングニューラルネットワーク(SNN)は、生物のニューロンのようにタイミングを伴うスパイクで情報を伝達し、低消費電力のニューロモーフィックAIを実現します。ニューロンと学習について解説します。
スパイキングニューラルネットワーク(SNN)は、スパイクと呼ばれる離散的な全か無かのイベントでニューロンが通信するニューラルネットワークで、生物のニューロンの信号伝達により近い仕組みです。各ニューロンは、内部の膜電位に入力スパイクを蓄積し、その電位は徐々に減衰します。電位がしきい値を超えたときにのみ、自身のスパイクを発生させます。情報はどのニューロンがいつ発火するかに含まれるため、SNNは時間とともに到着するデータを処理し、スパイクが発生したときだけ計算します。このイベント駆動型の疎性は、ニューロモルフィックチップ上での低消費電力なエッジAIに適しており、非同期イベントとして変化を報告するイベントカメラとも自然に連携します。Wolfgang Maassは1997年に、しきい値ユニットと連続活性化を持つネットワークに続く第3世代のニューラルネットワークモデルとしてSNNを説明しました。
スパイキングニューロンの仕組み#
最も広く使われているモデルは、リーキー積分発火(LIF)ニューロンです。各時間ステップで膜電位が一定の割合で減衰し、重み付けされた入力スパイクが加算されます。電位がしきい値に達すると、ニューロンはスパイクを出力してリセットされます。入力が弱いニューロンはしきい値に達せず、入力が強いニューロンは頻繁に発火するため、発火頻度が入力の強さを符号化します。以下のシミュレーションでは、3つのLIFニューロンに異なる一定の入力電流を与えています。
import torch
# Three leaky integrate-and-fire neurons, each driven by a constant input current
current = torch.tensor([0.15, 0.3, 0.6])
decay, threshold = 0.8, 1.0 # fraction of potential kept per step, firing threshold
potential = torch.zeros(3)
spike_counts = torch.zeros(3)
for step in range(20):
potential = decay * potential + current # leak, then integrate the input
spikes = (potential >= threshold).float() # fire where the threshold is crossed
potential = potential * (1 - spikes) # reset neurons that fired
spike_counts += spikes
print(f"Spikes in 20 steps: {spike_counts.tolist()}")Spikes in 20 steps: [0.0, 4.0, 10.0]が出力されます。入力が0.15の場合、電位は0.15 / (1 − 0.8) = 0.75で頭打ちとなり、しきい値を下回るため、このニューロンは発火しません。入力が0.3の場合は4回スパイクし、入力が0.6の場合は2ステップごとにしきい値を超えて、10回スパイクします。snnTorchなどのライブラリは、このようなLIF層をGPU上で学習できるPyTorchモジュールとして提供しています。
スパイクによる情報の符号化#
SNNがデータを利用するには、まずデータをスパイクに変換する必要があります。符号化方式は精度と速度の両方に影響します。
- レート符号化:上記のシミュレーションのように、値を発火頻度に変換します。堅牢ですが、値を正確に表すには多くの時間ステップが必要です。
- 時間符号化:値をスパイクのタイミングに変換します。たとえば、明るい画素ほど早くスパイクを発生させることで、ごく少数のスパイクで情報を伝えます。
- イベントセンサー:ニューロモルフィックビジョンカメラは、画素の明るさが変化するたびにスパイク状のイベントを出力します。マイクロ秒単位のタイミングで固定フレームレートを持たないため、データをSNNに直接入力できます。
SNNの学習#
スパイクはステップ関数であり、ほぼすべての点で導関数がゼロになるため、標準的なバックプロパゲーションでは勾配を通せません。この問題を回避する方法が3つあります。ANNからSNNへの変換では、通常のネットワークをReLU活性化関数で学習させ、各活性化を発火率に対応付けます。サロゲート勾配学習では、順伝播にハードスパイクを使いながら、逆伝播では滑らかな関数の導関数に置き換え、リカレントニューラルネットワーク(RNN)と同様に時間方向のバックプロパゲーションで学習します。スパイクタイミング依存可塑性(STDP)は、生物学に着想を得た局所的なルールです。入力スパイクが出力スパイクより先に発生するとシナプスを強化し、ラベルなしで学習します。近年の高精度なSNNの多くは、変換したネットワークより少ない時間ステップで済むサロゲート勾配を使って直接学習されており、既存モデルから始める場合は変換が最も簡単な方法です。
ニューロモルフィックハードウェア#
SNNは、SNN向けに設計されたチップ上で最も大きな省エネ効果を発揮します。ニューロモルフィックプロセッサは、多数の小型コアの隣にメモリを配置し、スパイクメッセージで通信して、スパイクが届いたときだけ計算します。また、スパイクは二値であるため、各シナプスイベントに必要なのは乗算ではなく加算です。IBMのTrueNorth(2014年)は単一チップに100万個のニューロンを搭載し、マンチェスター大学のSpiNNakerはARMコアの大規模な配列を使用します。IntelのLoihi 2は、1,152個のLoihi 2プロセッサと11億5,000万個のニューロンを備えた2024年の研究システム、Hala Pointを支えています。密な行列演算向けに作られた標準的なGPUでは、SNNは通常、同等の従来型ネットワークより低速で動作します。
SNNと従来型ニューラルネットワークの比較#
- 信号:畳み込みニューラルネットワーク(CNN)やTransformerなどの従来型ネットワークは、単一の順伝播で各ニューロンに連続値を渡します。SNNは複数の時間ステップにわたって二値スパイクを渡し、各時点でほとんどのニューロンは発火しません。
- 精度:標準的な画像ベンチマークでは、依然として従来型ネットワークが優位です。SNNは主にサロゲート勾配学習と従来型モデルから取り入れたアーキテクチャによって、その差を縮めてきました。
- 効率:ニューロモルフィックハードウェア上のSNNは、イベントカメラのストリームや常時稼働の音声など、疎でイベント駆動型の入力を処理する際に大幅に消費電力を抑えられます。
用途#
- イベントベースビジョンとロボティクス:2024年のScience Roboticsの研究で、TU Delftの研究者はIntelのLoihi上で完全なスパイキング型のビジョン・制御ネットワークを搭載したドローンを飛行させ、生のイベントカメラデータを200 Hzで動作指令に変換しました。
- 常時稼働センシング:キーワード検出、ジェスチャー認識、センサーの異常検知では、変化がないときにほとんど電力を消費しないSNNが役立ちます。
- 物体検出:Xinhao Luo、Man Yaoらが開発したECCV 2024のスパイキング検出器SpikeYOLOは、Ultralyticsのコードベースを基盤とし、スパイク駆動ブロックでUltralytics YOLOv8のアーキテクチャを簡素化しています。整数値でのトレーニングとスパイク駆動推論により、COCOで48.9%のmAP50-95を達成しました。










