spiking-network-evolution
spiking-network-evolution
Небольшой pet-project.
Есть метод HyperNEAT для построения генетического алгоритма, умеющего эволюционировать нейронную сеть, а точнее CPPN (compositional pattern-producing network), способную генерировать нейронную сеть. С другой стороны, есть Spiking Neural Network (нейронная сеть, максимально близко моделирующая реальную биологическую нейронную сеть), основанная на модели биологического нейрона (ещё, классно описано во тут https://neuronaldynamics.epfl.ch/online/).
Этот проект - песочница, где я (время от времени) пытаюсь "подружить" эти 2 алгоритма.
Цель? Just for fun :) Нравится мне почему-то иногда заниматься какой-то мутной математикой и прочей ерундой.
В целом общая долгосрочная идея, чего я хочу добиться, такая:
-
Я придумываю произвольную задачу. Например, есть машинка, которая едет по плоскости. Есть возможность поворачивать руль и прибавлять/убавлять скорость. Машинка может каким-то образом получать информацию о том, что впереди: препятствие или контрольная точка. Цель машинки - проехать через набор контрольных точек за наименьшее время.
-
Машинкой управляет нейронная сеть. В каждый момент времени в нейронную сетку подаются входные сигналы, а на выходе получаем сигналы управления этой машинкой.
-
Запускаем HyperNEAT алгоритм, задача которого подобрать какую-то структуру и веса нейронной сетки, на которой полученная машина сможет максимально справиться со случайно сгенерирированной задачей.
-
Берём "лучшую" полученную нейросетку, запускаем в абсолютно новых для неё условиях (руками расставляем препятствия и контрольные точки) и смотрим, как она справляется с задачей.
Понятно, вместо машинки может быть что угодно, вместо задачи прохождения по трассе - тоже что угодно (умный робот пылесос - чем не идея применения? А можно поиграть с коллаборацией нескольких роботов, которые пытаются помочь друг другу решить общую задачу).
В чём-то это напоминает естественную эволюцию, в ходе которой у живых существ как-то возникли мозги, хотя никто явно им не рассказывал, в чём задача и как конкретно должен быть устроен их мозг.
Качество кода: сейчас исключительно уровень POC и песочницы. Просто быстрый, местами неструктурированный и с хардкодом прототип. Но ничего не мешает порефакторить и всё будет красиво!