
Pytorch Tensor機能を使用して、CPUまたはGPUでスパイクニューラルネットワーク(SNNS)をシミュレートするために使用されるPythonパッケージ。
Bindsnetは、機械学習のための生物学的にインスパイアされたアルゴリズムの開発を対象としたスパイクニューラルネットワークシミュレーションライブラリです。
このパッケージは、Tufts Universityの生物学的にインスパイアされたNeural&Dynamical Systems(BINDS)LabおよびAllen Discovery CenterのSNN、機械学習(ML)、および強化学習(RL)の問題に関する継続的な研究の一部として使用されています。
実験のコレクション、結果の分析のための機能、実験結果のプロットなどについては、Bindsnetの例をご覧ください。パッケージのドキュメントはこちらをご覧ください。

GitHubリポジトリからの最新の安定したリリースをインストールするには
pip install git+https://github.com/BindsNET/bindsnet.git
または、ソースからbindsnetパッケージを構築するには、GitHubリポジトリをクローンし、ディレクトリをこのプロジェクトのトップレベルに変更して発行します
pip install .
または、編集モードでインストールするには(再インストールせずにパッケージの変更を許可します):
pip install -e .
Openai Gym RL Environmentsライブラリとのインターフェースに必要なパッケージをインストールするには、RL Environments Simulator(Linux / MacOS)を実行するために必要なパッケージをインストールするための指示に従ってください。
Dockerリポジトリへのリンク。
また、Bindsnetとその依存関係のすべてがインストールされるDockerFileも提供します。問題
docker build .
このプロジェクトのトップレベルのディレクトリで、Docker画像を作成します。
新しく構築された画像の名前を変更するには、問題
docker tag <IMAGE_ID> <NEW_IMAGE_ID>
コンテナを実行してその中にバッシュ端末を取得するには、発行します
docker run -it <NEW_IMAGE_ID> bash
このペーパーからSNNのほぼ複製を実行するには、問題
cd examples/mnist
python eth_mnist.py
--plot (有用な監視図を表示)、 --n_neurons [int] (興奮性、抑制性ニューロンの数をシミュレート)、 --mode ['train' | 'test'] (トレーニングまたはテストフェーズにネットワーク操作を設定)など。詳細については、 --helpまたは-hフラグを使用してスクリプトを実行します。
BindSnetの機能を紹介するためのexamples Directoryでは、他の多くの例が利用可能です。見て、あなたの考えを教えてください!
テストを実行するには、以下を発行してください。
python -m pytest test/
オープンAI gymがマシンに取り付けられていない場合、一部のテストは失敗します。
生物学的にもっともらしいスパイクニューロンのダイナミクスのシミュレーションは挑戦的です。通常、上記のダイナミクスを説明する通常の微分方程式(ODE)を解くことによって行われます。 Pytorchは、微分方程式の解を明示的にサポートしていません(たとえば、 brian2とは対照的に)が、ダイナミクスを定義するODEを差分方程式に定義し、定期的に短い間隔(1ミリ秒程度のdt )を近似として変換できます。もちろん、ボンネットの下では、 brian2のようなパッケージも同じことをしています。 PyTorchでこれを行うことは、いくつかの理由でエキサイティングです。
GPUデバイスとの間で転送できるnumpy.ndarray周りのラッパーである強力で柔軟なtorch.Tensorオブジェクトを使用できます。
SNNアーキテクチャのtorch.nn.functional PYTORCHサブモジュールからの機能を再利用することにより、「ホイールを再発明する」ことを避けることができます。たとえば、畳み込みまたはプーリング関数。
ニューロンのスパイク順序とその相対的なタイミングをエンコードする情報は、神経科学の中心テーマであるという概念です。 Markram et al。 (1997)ニューロン間のシナプスは、この相対的なタイミングに基づいて強化または劣化することを提案しました。それ以前は、ドナルド・ヘブはヘビアン学習の理論を提案しました。 Markram et al。のヘビアン理論の拡張は、スパイクタイミング依存可塑性(STDP)として知られています。
SNNをMLおよびRLの問題に適用することに興味があります。 STDPを使用して、SNNのニューロンのペアまたは集団を接続するシナプスの重みを変更します。 MLのコンテキストでは、SNNのデータ依存スパイクアクティビティを生成するシナプス重みの設定を学びたいと考えています。このアクティビティにより、その後、関心のあるMLタスクを実行できます。たとえば、入力データを識別またはクラスタリングします。 RLのコンテキストでは、スパイクニューラルネットワークをRLエージェントと考えることができます。RLエージェントのスパイクアクティビティは、環境のアクション空間でアクションに変換される可能性があります。
教師なしの学習(STDPを介した完全に接続されたまたは畳み込み表現を学習する)、監視された学習(データラベルに応じて出力ニューロンを希望のスパイク行動にクランプする)、および強化学習(Atariゲームスペースの侵入からの観測をSNNへの入力に変換し、ゲームに戻す)を補強するためのいくつかの簡単なスタータースクリプトを提供しました。
u(0、100)からランダムに描かれたnポアソン入力ニューロンの母集団を持つネットワークをシミュレートし、n(0,1)からサンプリングされた接続ウェイトを持つ漏れやすい統合と火災(LIF)ニューロンの等しくサイズの集団と全部で結び付けられました。 250のステップでnを体系的に250から10,000まで変化させ、各ライブラリで各シミュレーションを1,000msで実行し、時間解像度dt = 1.0でした。 BindSnet(CPUおよびGPU計算を使用)、Brian2、Pynest(C ++ Nest Core Simulatorを実行するNest SLIインターフェイスへのPythonインターフェイス)、Annarchy(CPUおよびGPU計算を使用)、およびBrian2Genn(Brian2 Front-End to Genn Simulator)をテストしました。
BrianやPynestを含むいくつかのパッケージは、特定のグローバルな好みの設定を許可します。たとえば、CPUスレッドの数、OpenMPプロセスの数など。各ライブラリの速度を最大化するために、ベンチマーク調査のためにこれらの設定を選択しましたが、BindSnetにはそのようなオプションの設定は必要ありません。 Pytorchの計算モデルを継承するアプローチは、利用可能なハードウェアを最大限に活用できるように思われるため、開業医が最小限の努力でシステムから最高のパフォーマンスを得ることができます。

すべてのシミュレーションは、Intel(R)Xeon(R)CPU E5-2687W V3 @ 3.10GHz、128GB RAM @ 2133MHz、および2つのGeForce GTX Titan X(GM200)GPUSでUbuntu 16.04 LTSで実行されます。 Python 3.6は、すべての場合に使用されます。クロック時間は、シミュレーションの実行ごとに記録されました。
調査でbindsnetを使用する場合は、次の記事を引用してください。
@ARTICLE{10.3389/fninf.2018.00089,
AUTHOR={Hazan, Hananel and Saunders, Daniel J. and Khan, Hassaan and Patel, Devdhar and Sanghavi, Darpan T. and Siegelmann, Hava T. and Kozma, Robert},
TITLE={BindsNET: A Machine Learning-Oriented Spiking Neural Networks Library in Python},
JOURNAL={Frontiers in Neuroinformatics},
VOLUME={12},
PAGES={89},
YEAR={2018},
URL={https://www.frontiersin.org/article/10.3389/fninf.2018.00089},
DOI={10.3389/fninf.2018.00089},
ISSN={1662-5196},
}
contrib.rocksで作られています。
GNU Affero General Public License v3.0