Код нейроэлемента
Здравствуй, уважаемое сообщество GeekTimes! [пос на geektimes.ru, NNN] Не так давно здесь была опубликована серия статей посвященных работе над созданием модели нервной системы. И лучшим способом понять логику модели является возможность изучения программного кода её реализации. Я не только хочу донести более детально свои идеи, но и попросить помощи у сообщества. Мне известно, что среди читателей GT множество профессионалов в деле написания программного кода и Ваш опыт, знание может помочь развитию проекта. Иногда достаточно грамотного совета или рекомендации, чтобы решение такой не типичной задачи стало элегантным и лёгким.
Среда разработки — Unity3D, очень популярный игровой движок. Эта среда оказалась весьма удобной и доступной как в работе с редактором, так и наличием большого числа справок, пояснений и комментариев на русском языке. Поэтому моих скромных навыков программирования было достаточно, чтобы используя Unity3D реализовать свои идеи.
- Симулятор нервной системы. Часть 1. Простой сумматор
- Симулятор нервной системы. Часть 2. Модулируемый нейроэлемент
- Симулятор нервной системы. Часть 3. Ассоциативный нейроэлемент
- Память, консолидация памяти и бабушкины нейроны
- Моделирование эмоций или электронное чувство новизны
- Удивительный мозжечок
- Структура и стартовые настройки мозга
В планах не менять среду разработки, так как игровой движок позволяет легко решить задачи визуализации, что на данном этапе очень важно.
Хочу попросить прощения у тех, кто хочет обратиться к коду за его небрежность, возможное пренебрежение синтаксисом языка и возможные ошибки. Когда я начинал эту работу, в планах не было демонстрация кода. Я хотел проверить некоторые свои гипотезы.
Код отражает творческий поиск. В процессе работы я сталкивался с очередной проблемой, модель не желала действовать так, как я это себе представлял. И в течение дня ко мне могла придти идея того как это можно поправить. В эти моменты я мог быть вдохновлен неким озарением. Возвращаясь с работы, я с жадностью вносил поправки, в код игнорируя все нормы, на это не было времени. И как часто это бывает, эти озарения не приносили результата, или приносили не совсем желаемый результат. Так проходила работа над проектом, и спасибо за терпение моей супруги, что позволяла мне вести эту работу. Сложно найти время между семьей, работай, собственной прокрастинацией и ленью на рутинную работу стандартизации кода. Хотя это все равно придется когда-нибудь делать.
В своей работе я придержался несколько не типичной модели работы нейрона. Модель нейрона подобно биологическому нейрону могла действовать асинхронно от работы других нейронов. Сигналы от клавиш-рецепторов как, к примеру, от рецепторов кожи могут быть не синхронизированы. Поэтому в первых моделях под влиянием стереотипного мышления я выделял в работе нейрона некие фазы состояния длящиеся определённое количество шагов(циклов) всей системы, а шаги системы выполнялись синхронно во всех нейронах. Это не работало должным образом, да еще и было жутко неудобным. Но нужно было как-то синхронизировать входящие и исходящие сигналы, и правильно производить их оценку.
В определённый момент пришла идея, которую один пользователь интернета впоследствии окрестил «сливным бачком». Модель «сливного бачка» оказалась на удивления точной и применимой к биологическому нейрону, она объясняла очень наглядно механизмы суммации, и была удобней в реализации. Теперь эмулированные нейроны могли быть полностью независимы, всё как у реальных объектов.
![](/files/users/u3/2016/11/fae77b3309014f2daceb0627eb9ce2f5_0.jpg)
Данная модель сумматора является самой точной моделью биологического нейрона из мне известных. Чтобы смоделировать детально клетку желудка потребуются невероятно большие вычислительные мощности, но всё что делает эта клетка, это вырабатывает соответствующий фермент или гормон при необходимости. Приписывание нейрону невероятных вычислительных свойств очень популярно среди кибернетиков современности.
Впоследствии к модели суммации были добавлены некоторые механизмы из рефлекторной теории и идея направленной ориентации настроек сил исходящих синапсов. Полученная модель позволила создать теоретическую основу, которая достаточно просто объясняла многие процессы и явления, протекающие в нервной системе. Рефлекторные механизмы, память и консолидация памяти, самоорганизация и специализация нейронов, работа мозжечка, эмоциональные механизмы и мышление всё в одном флаконе.
Не буду утомлять. Ссылка на репозиторий GitHub.
Для примера, код скрипта в котором заключена главная логика работы нейроэлемента NeironScript.cs (извините за мой французский).
Общение между нейронами осуществляется с помощью системы сообщений, в основе которых SendMessage, а все процессы, связанные с изменением состояний вынесены в корунтины.
![](/files/users/u3/2016/11/67697dcef56e4cd08ebfc9edcffc7118_0.jpg)
На блок-схеме базовая основа нейроэлемента. SendMessage(“AddSummator”, F) – синапс прямого действия с силой F, увеличивает сумму сумматора на заданное число. Каждые 0,01с срабатывает функция FixedUpdate() в которой происходит уменьшение по модулю сумматора на установленный демпфер/число. А так же происходит проверка превышения порога на сумматоре, если порог превышен, то запускается корунтина. В период работы корунтины включается режим игнорирования внешних сигналов, но работа демпфера для сумматора продолжается как и возможность пополнить сумму. SendMessage(“ActiveNeiron”) – контактный синапс (эфапс), корунтина будет запущена если она в данный момент не выполняется иначе сигнал проигнорируется.
На основе этой базы в дальнейшем были добавлены механизмы, касающиеся метаболизма клетки (привыкание и адаптация), а так же система модуляции, которая была почерпнута из работ Эрика Канделя. И идея направленной передачи возбуждения ради проверки которой я и начал данный проект.
Многим был интересен исходный код проекта, но не только по данной причине я выкладываю исходник. Дело в том, что впереди еще масса работы, в планах серьёзно расширить возможности и инструментарий, создать некую среду позволяющей удобно работать с большим массивом элементов, структурировать и организовывать их. Я не обладаю большим опытом программирования, но я уверен, что большое количество людей из сообщества GeekTimes могут дать рекомендации о структуре, методах, оптимизации которые качественно улучшат проект. Я планирую не менять среду разработки, для меня важна эмпирика процесса разработки, а так же эстетика конечного результата и игровой движок Unity пока мне в этом очень хорошо помогал.
Вложение | Размер |
---|---|
code-neuro.txt | 32.12 КБ |
- Источник(и):
- Войдите на сайт для отправки комментариев