
حزمة Python المستخدمة لمحاكاة الشبكات العصبية المتسابطة (SNNS) على وحدات المعالجة المركزية أو وحدات معالجة الرسومات باستخدام وظائف Pytorch Tensor .
BINDSNET هي مكتبة محاكاة الشبكة العصبية المتصاعدة موجهة نحو تطوير خوارزميات مستوحاة من الناحية البيولوجية للتعلم الآلي.
يتم استخدام هذه الحزمة كجزء من الأبحاث المستمرة حول تطبيق مشكلات SNNS والتعلم الآلي (ML) ومشاكل التعلم التعزيز (RL) في مختبر الأنظمة العصبية والديناميكية المستوحاة بيولوجيًا ومركز ألين ديسكفري في جامعة تافتس.
تحقق من أمثلة BINDSNET لمجموعة من التجارب ، ووظائف تحليل النتائج ، ومخططات نتائج التجربة ، وأكثر من ذلك. يمكن العثور على وثائق الحزمة هنا.

لتثبيت أحدث إصدار مستقر من مستودع GitHub
pip install git+https://github.com/BindsNET/bindsnet.git
أو ، لإنشاء حزمة bindsnet من المصدر ، استنساخ مستودع github ، قم بتغيير الدليل إلى المستوى الأعلى من هذا المشروع ، والمسألة
pip install .
أو للتثبيت في وضع قابل للتحرير (يسمح بتعديل الحزمة دون إعادة التثبيت):
pip install -e .
لتثبيت الحزم اللازمة للتفاعل مع مكتبة بيئات Openai Gym RL ، اتبع تعليماتها لتثبيت الحزم اللازمة لتشغيل محاكاة بيئات RL (على Linux / MacOS).
رابط لمستودع Docker.
نقدم أيضًا Dockerfile حيث يتم تثبيت BINDSNET وجميع تبعياتها في.
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 لمزيد من المعلومات.
يتوفر عدد من الأمثلة الأخرى في دليل examples التي تهدف إلى عرض وظيفة BINDSNET. ألقِ نظرة ، وأخبرنا برأيك!
إصدار ما يلي لإجراء الاختبارات:
python -m pytest test/
ستفشل بعض الاختبارات إذا لم يتم تثبيت gym Open AI على جهازك.
يمكن أن تكون محاكاة ديناميات الخلايا العصبية المتسابطة المعقولة بيولوجيًا صعبة. عادة ما يتم ذلك عن طريق حل المعادلات التفاضلية العادية (ODES) التي تصف الديناميات المذكورة. لا يدعم Pytorch بشكل صريح حل المعادلات التفاضلية (على عكس brian2 ، على سبيل المثال) ، ولكن يمكننا تحويل ODEs التي تحدد الديناميات إلى معادلات الاختلاف وحلها على فترات زمنية قصيرة ( dt بترتيب 1 مللي ثانية) كتقريب. بالطبع ، تحت غطاء محرك السيارة ، تقوم الحزم مثل brian2 بنفس الشيء. القيام بذلك في PyTorch أمر مثير لعدة أسباب:
يمكننا استخدام كائن torch.Tensor القوي والمرن ، وهو غلاف حول numpy.ndarray الذي يمكن نقله من وإلى أجهزة GPU.
يمكننا تجنب "إعادة اختراع العجلة" عن طريق إعادة استخدام وظائف من torch.nn.functional pytorch submodule في بنيات SNN لدينا ؛ على سبيل المثال ، وظائف الالتفاف أو التجميع.
إن مفهوم أن ترتيب ارتفاع الخلايا العصبية وتوقيتها النسبية تشفير المعلومات هو موضوع رئيسي في علم الأعصاب. Markram et al. (1997) اقترح أن تشابك المشابك بين الخلايا العصبية يجب أن يعزز أو يتحلل بناءً على هذا التوقيت النسبي ، وقبل ذلك ، اقترح دونالد هيب نظرية التعلم الهيباني ، غالبًا ما يتم ذكره ببساطة باسم "الخلايا العصبية التي تطلق معًا ، سلك معًا". يُعرف امتداد Markram et al. لنظرية Hebbian باسم اللدونة المعتمدة على التوقيت (STDP).
نحن مهتمون بتطبيق SNNS على مشاكل ML و RL. نستخدم STDP لتعديل أوزان المشابك العصبية التي تربط أزواج أو مجموعات من الخلايا العصبية في SNNs. في سياق ML ، نريد أن نتعلم إعدادًا من أوزان المشبك التي ستولد نشاطًا يعتمد على البيانات في SNNS. سيسمح لنا هذا النشاط بعد ذلك ببعض المهام المهمة ML ؛ على سبيل المثال ، تمييز أو تجميع بيانات الإدخال. في سياق RL ، قد نفكر في الشبكة العصبية المتساقطة كعامل RL ، الذي قد يتم تحويل نشاطه المتميز إلى إجراءات في مجال عمل البيئة.
لقد قدمنا بعض البرامج النصية البسيطة في بداية التعلم (تعلم تمثيل متصل بالكامل أو تلافيفي عبر STDP) ، والتعلم الخاضع للإشراف (تثبيت الخلايا العصبية المخرجات إلى السلوك المرغوب فيه المرغوب فيه وفقًا لعلامات البيانات) ، وتعزيز التعلم (تحويل الملاحظات من Atari Game Space الغازيين للدخول إلى SNN ، وتحويل نشاط الشبكة إلى الإجراءات في اللعبة).
قمنا بمحاكاة شبكة بها مجموعة من الخلايا العصبية المدخلات N Poisson مع معدلات إطلاق النار (في Hertz) التي يتم رسمها بشكل عشوائي من U (0 ، 100) ، وتوصيل الكل إلى الجميع مع عدد السكان على قدم المساواة من الخلايا العصبية المتسربة والكسل (LIF) ، مع أوزان الاتصال التي تم أخذ عينات منها من N (0،1). تباينت بشكل منهجي من 250 إلى 10،000 في خطوات 250 ، وقمنا بتشغيل كل محاكاة مع كل مكتبة مقابل 1000 مللي ثانية مع دقة زمنية DT = 1.0. لقد اختبرنا BINDSNET (مع حساب وحدة المعالجة المركزية وحساب GPU) ، Brian2 ، Pynest (واجهة Python إلى واجهة Nest SLI التي تدير C ++ Nest Core Simulator) ، والعلاج (مع حساب وحدة المعالجة المركزية وحساب GPU) ، و Brian2Genn (The Brian2 الأمامي إلى جهاز Simulator).
تسمح العديد من الحزم ، بما في ذلك Brian و Pynest ، بإعداد بعض التفضيلات العالمية ؛ على سبيل المثال ، عدد مؤشرات ترابط وحدة المعالجة المركزية ، وعدد عمليات OpenMP ، وما إلى ذلك. لقد اخترنا هذه الإعدادات لدراستنا القياسية في محاولة لزيادة سرعة كل مكتبة ، ولكن لاحظ أن BINDSNET لا يتطلب أي إعداد لهذه الخيارات. يبدو أن نهجنا ، الذي يرث النموذج الحسابي لـ Pytorch ، يستخدم أفضل استخدام للأجهزة المتاحة ، وبالتالي يجعل من السهل على الممارسين الحصول على أفضل أداء من نظامهم بأقل جهد.

تعمل جميع عمليات المحاكاة على Ubuntu 16.04 LTS مع Intel (R) Xeon (R) CPU E5-2687W V3 @ 3.10GHz ، 128GB RAM @ 2133MHz ، و GEFORCE GTX TITAN X (GM200) GPUS. يستخدم 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 ASFERO GENERAL LICENT V3.0