suzuzusu日記

(´・ω・`)

STDP学習ベースのSNNでMNISTを分類する

雑に論文みて勉強したので何も保証しません.SNNの情報全然無いような気がするのでしんどい.

Spiking Neural Network(SNN)

ニューロンの活動電位(スパイク)に注目したニューラルネットワーク.現状,計算量が多いのでチップを作ったりなどのハードウェアの研究が盛んな傾向にあるような気がする.IBMTruneNorthとかIntelLoihiなどはSNNにあたる.

Spike-Timing-Dependent Plasticity(STDP)

STDPはスパイクタイミングに依存してシナプスの重みが変わる仕組みである. ざっくり言うと細胞Aが発火して,細胞Bが発火するとA->B間のシナプス結合が強まるLTP(長期増強)が起きて,逆に細胞Bが発火して,細胞Aが発火するとA->B間のシナプス結合が弱まるLTD(長期抑圧)が起きる.

シナプス前細胞の発火時間を{t_{pre}}シナプス後細胞の発火時間を{t_{post}}とする.{\Delta t}を以下のように定義する.

{\displaystyle
\Delta t = t_{pre} - t_{post}
}

シナプスの結合の重みの更新は以下の式で表される.STDPの式は色々提案されているが今回は基本的なものを使用する

stdp

ニューロンモデル

使用するニューロンモデルは積分発火モデルを使用する.

ネットワーク

入力はMNISTのそれぞれのピクセルデータを最大60Hzのポアソンスパイクモデルにして入力させる. よってneural codingはrate codingを使用する. 入力を受け取る興奮性の細胞が発火した場合,他の細胞を抑制させる(winner-take-all).

f:id:suzuzusu:20180416043913p:plain

学習後,最終的により多くの反応(発火回数)を示すニューロンをその教師ラベルと紐づける. テストでは,入力に対して最も多くの反応を示したニューロンを抽出し,そのニューロンと紐付けられているラベルと比較する.

結果

以下が学習させた900個のニューロンの重みを表した図である.

f:id:suzuzusu:20180418040907p:plain
weights

accuracy: 0.775

ソースコード

github.com

参考