前回の記事でBrian2を使ってみましたが、今回はSNNの実装が出来るソフトであるBindsNETを使ってみます。
SNN(Spiking Neural Network)は現在のDeep Learningよりも神経生理に近いもので、神経活動のシミュレーションを利用して学習を行います。
SNNやBindsNETについてはこちらの記事でも紹介されています。
GitHub:https://github.com/BindsNET/bindsnet
論文:https://www.frontiersin.org/articles/10.3389/fninf.2018.00089/full
ドキュメント:https://bindsnet-docs.readthedocs.io/
NEURONやBrian2はシミュレータの用途メインなのに対して、BindsNETは機械学習のソフトとしての用途メインになるかと思います。
BindsNETはPyTorchをベースとしていて、GPUも利用することが出来ます。
BindsNETによって教師あり学習や教師なし学習だけでなく、強化学習も実装可能のようです。
インストール
環境は
Ubuntu 16.04
CUDA 10
Anaconda
Python 3.6
です。
pip install bindsnet
これでインストールできました。
バージョンは0.2.7でした。
ただしこのままだとデモを動かした時にエラーになりました。
対処法としてはPytorchのバージョンを変えてpytorch==1.2.0にインストールし直すことで解決しました。
デモを試してみる
まずはgit cloneでダウンロードします。
git clone https://github.com/BindsNET/bindsnet.git
デモはbindsnet/examples/の中に色々あります。
とりあえず教師あり学習のデモを実行してみます。
cd examples/mnist/
python supervised_mnist.py
完了には20分ほどかかりましたが、無事動きました。
--gpuオプションでGPUを使用できましたが、速くはなりませんでした。(むしろ若干遅くなりました。)
またテストスコアがあまり良くないのも気になりました。
教師なし学習(Diehl&Cook)のデモも実行してみます。
python eth_mnist.py
こっちは完了に数時間かかるようです。
他には、自己組織化マップ(SOM)やリザーバーコンピューティング、強化学習などのデモがありました。
実装方法
ドキュメントによると、実装方法は
①ネットワークの作成 と ②学習則の定義
の2つを行うようです。
ネットワークの作成では、LIFニューロンなどを層として定義して結合させます。
学習則の定義では、結合に対してHebb則やSTDP則などの学習則を設定します。
最後に
BindsNETは神経ダイナミクスのODEを解くことは出来ませんが、SNNによる学習を簡単に行うことが出来るようです。
SNNを使った機械学習はまだ発展途上の分野で様々な研究が行われており、BindsNETが大きな役割を果たすかもしれません。