spiking-network-evolution

0
README.md

spiking-network-evolution

Небольшой pet-project.

Есть метод HyperNEAT для построения генетического алгоритма, умеющего эволюционировать нейронную сеть, а точнее CPPN (compositional pattern-producing network), способную генерировать нейронную сеть. С другой стороны, есть Spiking Neural Network (нейронная сеть, максимально близко моделирующая реальную биологическую нейронную сеть), основанная на модели биологического нейрона (ещё, классно описано во тут https://neuronaldynamics.epfl.ch/online/).

Этот проект - песочница, где я (время от времени) пытаюсь "подружить" эти 2 алгоритма.

Цель? Just for fun :) Нравится мне почему-то иногда заниматься какой-то мутной математикой и прочей ерундой.

В целом общая долгосрочная идея, чего я хочу добиться, такая:

  1. Я придумываю произвольную задачу. Например, есть машинка, которая едет по плоскости. Есть возможность поворачивать руль и прибавлять/убавлять скорость. Машинка может каким-то образом получать информацию о том, что впереди: препятствие или контрольная точка. Цель машинки - проехать через набор контрольных точек за наименьшее время.

  2. Машинкой управляет нейронная сеть. В каждый момент времени в нейронную сетку подаются входные сигналы, а на выходе получаем сигналы управления этой машинкой.

  3. Запускаем HyperNEAT алгоритм, задача которого подобрать какую-то структуру и веса нейронной сетки, на которой полученная машина сможет максимально справиться со случайно сгенерирированной задачей.

  4. Берём "лучшую" полученную нейросетку, запускаем в абсолютно новых для неё условиях (руками расставляем препятствия и контрольные точки) и смотрим, как она справляется с задачей.

Понятно, вместо машинки может быть что угодно, вместо задачи прохождения по трассе - тоже что угодно (умный робот пылесос - чем не идея применения? А можно поиграть с коллаборацией нескольких роботов, которые пытаются помочь друг другу решить общую задачу).

В чём-то это напоминает естественную эволюцию, в ходе которой у живых существ как-то возникли мозги, хотя никто явно им не рассказывал, в чём задача и как конкретно должен быть устроен их мозг.

Качество кода: сейчас исключительно уровень POC и песочницы. Просто быстрый, местами неструктурированный и с хардкодом прототип. Но ничего не мешает порефакторить и всё будет красиво!