Нейроэволюция киберкальмаров

Автор оригинала: Job Talle
  • Перевод

Эволюционирующая нейросеть


Искусственные нейронные сети имитируют реальные биологические нервные системы. Они содержат нейроны и связи между ними, обеспечивающие преобразование входящих сигналов в значимый выходной результат. В области машинного обучения эти сети часто инициализируются со случайными связями между нейронами, после чего сеть обучается, пока не начнёт вести себя нужным образом. Такой подход вполне применим, однако у животных существует множество простых нервных систем, работающих «из коробки»: никто не учит рыбу плавать или бабочек летать, несмотря на то, что их поведение создаётся сетями нейронов. Их нервные системы являются результатом не случайной инициализации и последующего обучения, а эволюции. Спустя множество поколений природа создала такую схему из клеток и связей, которая обеспечивает сложное и успешное поведение.

Для создания нейронных сетей, обеспечивающих поведение без обучения, можно использовать нейроэволюцию. Эволюционные алгоритмы (например, такой, который я использовал для выполнения эволюции растений) подвергают генетический код эволюции в течение долгого периода времени. Генетический код (модель для ДНК) и представляемый им организм изначально очень просты, но в течение многих поколений небольшие мутации увеличивают благоприятную сложность и добавляют функции, стимулирующие дальнейшее распространение этих свойств.

Цифровые кальмары


Чтобы продемонстрировать действие нейроэволюции, я хочу подвергнуть эволюции цифровых кальмаров. Кальмары обладают следующими свойствами:


Рисунок 1: плавающий кальмар.

  • Они могут иметь любое количество щупалец разной длины.
  • Каждая рука управляется одним выходным нейроном, качающим её в одном направлении при низком выходном сигнале и в другом при высоком выходном сигнале.
  • У кальмаров есть голова; размер головы определяет максимально возможное количество нейронов.
  • Масса кальмара определяется размером головы и количеством сегментов щупалец.
  • Кальмары плавают в симулируемой жидкости, заполненной точками, обозначающими еду. Касаясь этих точек, кальмар «съедает» их, а оценка кальмара вычисляется как количество съеденных точек, разделённое на его массу.

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

Так как кальмар может иметь варьирующиеся свойства (например, размер головы и конфигурация щупалец), эти свойства тоже эволюционируют. ДНК кальмара содержит не только «чертёж» его мозга, но и план тела.

На рисунке 1 показан симулируемый кальмар с двумя руками. Колебательное движение рук обеспечивается добавлением сегментам рук пружинной силы; если мышцы прекратят двигать руками, то сегменты постепенно будут выравниваться, пока руки не превратятся в прямые линии. Для вычисления величины ускорения суммируется всё боковое движение. Всё показанное на рисунке боковое движение суммируется в это число. Размахивая щупальцами позади тела, кальмар обеспечивает движение вперёд.

Спайковые нейронные сети


Выбор подходящей нейронной сети для нашего проекта — непростая задача. Существует множество различных типов нейронных сетей; в этой статье представлен удобный краткий обзор некоторых из них. Задача управления кальмарами в определённых аспектах непохожа на работу широко известных сетей:

  • Они не имеют традиционной структуры «ввод-вывод». На самом деле, им необязательно вообще содержать входных нейронов. В то время как многие традиционные нейронные сети каким-либо образом преобразуют или классифицируют входные сигналы, сети кальмаров должны создавать поведение.
  • Нейроны кальмаров должны работать в реальном времени. Здесь нет структуры «вопрос-ответ», сети должны функционировать постоянно.
  • Так как нейросети со временем эволюционируют, они не имеют заранее заданной структуры или размера. Количество нейронов и связей варьируется в соответствии с ДНК, и меняется со сменой поколений.

Этим требованиям удовлетворяет спайковая (импульсная) нейронная сеть. Такие сети работают в реальном времени, они были разработаны для более точной имитации живой природы. Как и реальные нейроны, клетки в спайковой нейросети накапливают потенциал, постепенно собранный со всех входных сигналов, а при отсутствии входных сигналов постепенно возвращаются к своему «нейтральному» состоянию. Спайковые нейронные сети не обязаны придерживаться строгой схемы соединений. Они состоят из слоя входных нейронов, слоя выходных нейронов (в нашем случае управляющих щупальцами) и нескольких нейронов между ними, называемых скрытым слоем. Нейроны в скрытом слое могут быть соединены с входными и выходными нейронами, но нейроны могут быть и разъединены. В нашей задаче нейроны скрытого слоя могут быть соединены друг с другом.


Рисунок 2: логистическая функция.

Все нейроны нервной системы имеют функцию активации. Эта функция определяет выходное значение нейрона на основании суммы его входных сигналов. Нейроны связаны аксонами, соединяющими исходный и целевой нейроны. Аксон прибавляет к активации целевого нейрона выходное значение исходного нейрона, умноженное на вес аксона (который может быть положительным или отрицательным числом). Затем функция активации определяет выходное значение нейрона на основании его активации. Для этой симуляции в качестве функции активации мы выбрали логистическую функцию:

$\frac{1}{1+e^{-a}}$


В этом уравнении $a$ — это активация нейрона. На рисунке 2 показан график функции. При $a=0$ выходное значение равно $0.5$; в нашей симуляции это полезно, потому что сеть должна уметь обеспечивать поведение даже при отсутствии входного значения. Если выходное значение по умолчанию не равно нулю, то некоторые сигналы постоянно будут течь по системе. Теоретически значение $a$ может быть очень малым или очень большим, но асимптоты логистической функции гарантируют, что выходное значение всегда будет находиться в интервале $[0, 1]$. Благодаря этому экстремальные выходные значения по системе не распространяются.

Симуляция эволюции


Среда симуляции состоит из следующих компонентов:

  • Любое количество кальмаров с разной структурой тела и спайковые нейросети для управления их конечностями.
  • Разбросанная по среде пища.

Чтобы начать имитировать эволюцию, в системе симулируется фиксированное время жизни каждого поколения. В своих симуляциях я выбирал отрезки от 20 до 30 секунд. После завершения этого времени выбирается наиболее продуктивный кальмар, который несколько раз дублируется для создания нового поколения кальмаров. Перед выполнением следующей симуляции все кальмары подвергаются небольшой мутации. Могут мутировать следующие свойства:

  • Радиус тела, а с ним и максимально допустимое количество нейронов в мозге кальмара.
  • Количество и расположение щупалец.
  • Длина щупалец.
  • Количество нейронов в мозге.
  • Аксоновые соединения между нейронами (связи могут появляться или пропадать, также могут изменяться веса связей).

На данный момент мозг кальмаров не содержит входных нейронов. Количество выходных нейронов всегда равно количеству щупалец, и каждому щупальцу назначается один выходной нейрон. Если при мутации щупальце пропадает, то соответствующий ей выходной нейрон тоже удаляется. Когда при мутации появляется новое щупальце, оно получает новый выходной нейрон со случайными связями.

Исходный код симуляции выложен на GitHub, а симуляция выполняется в браузере.

Результаты



Рисунок 3: нервная система, создающая бесконечные импульсы.

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

Нервную систему можно визуализировать. На рисунке 3 показана простая нервная система кальмара с двумя руками. Сеть содержит пять нейронов, обозначенных оранжевыми кругами, и два выходных нейрона, обозначенных синими кругами. Когда выходной сигнал нейрона возрастает, нейроны становятся более яркими. Когда выходной сигнал снижается, круги становятся прозрачными. Аксоны визуализируются пунктирными линиями, соединяющими соответствующие нейроны. Когда аксон передаёт сигнал (и влияет на целевой нейрон), пунктирная линия становится более видимой, а пунктир движется в направлении сигнала.


Рисунок 4: эволюционировавшие плавающие кальмары. Заметьте, что не все агенты особо эффективны; некоторые содержат бесполезные мутации.

На рисунке 4 показано несколько кальмаров, плавающих в среде симуляции. Эти кальмары используют два одновременно раскачивающихся щупальца. Среди агентов заметна вариативность:

  • Присутствует различная длина щупалец, но их паттерны движения примерно одинаковы.
  • Два агента в нижней части изображения эволюционно получили дополнительные щупальца, которые пока не особо полезны. Они повышают массу кальмара, снижая таким образом его оценку.

Вывод


Симуляция в своём текущем состоянии демонстрирует эффективность нейроэволюции и образует фундамент для дальнейшего развития системы:

  • Кальмарам можно дать органы чувств. Один или несколько глаз могут создавать сигналы, направляющие кальмара к источникам пищи или заставляющие отдаляться от конкурентов.
  • Можно создать и другие выходные органы. Простые руки могут двигать или толкать пищу, а чернильные мешки способны затуманивать зрение конкурентов.
  • Можно создать более крупные среды, в которых кальмары репродуцируются только в ближайшем окружении, позволяя одновременно эволюционировать и существовать нескольким видам.
  • Поколения можно симулировать в течение более долгого времени. На текущем этапе поведение можно интерпретировать как гонку с целью как можно быстрее и эффективнее получить пищу. Для этого требуется скорость, но не нужны сложные маневры. Если пища со временем вырастает или перемещается вместе с потоком, то потребуются более сложные стратегии.

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

Комментарии 13

    +3

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

      –2

      А потом решил еще поиграться и ввел в игру вирус, посмотреть как симуляция отреагирует

      +2

      Хотел спросить, как трнаслируется движение конечностей в движение всего организма, но потом увидел, что это перевод. Интересно понять, как это происходит механически, потому что это окажет влияние на приобретаемые паттерны плавания. Например, тот организм, что на гифке с 4-мя конечностями, но использует только 2.5, должен по логике плыть в сторону, если две основные конечности гребут одинаково, и еще добовляется вклад от вялогребущей левой и бездействующей правой.


      Интересно, является ли скорость плавания критерием успешности организма. Чисто технически, при плавании с большей скоростью покрывается большая территория и количество потребляемой пищи (а значит и "вес") данной ветки эволюции больше. На гифке визуально все организмы гребут с одинаковой скоростью, но линейная скорость возможно разная (разная длина конечностей/масса).

        +2

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

          +1
          Для вычисления величины ускорения суммируется всё боковое движение. Всё показанное на рисунке боковое движение суммируется в это число.

          Не это?
            +2

            К сожалению, по этой фразе мало что понятно.

              0

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

                +1

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

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

                    Да, это более вероятно.

            0
            Даже спустя 50 тысяч попыток эволюционировать — все равно 20% получаются дегенератами, которые не могут не то, что плавать, а даже двигать своими лапками =(((
            Плохая эволюция, плохая! =(
              0
              Можете более подробно объяснить про спайковые сети? В русской википедии написано, что одним из преимуществ ИмНС является скорость работы и большой потенциал распараллеливания, так как для передачи импульса необходимо отправить 1 бит, а не непрерывную величину, как в частотных ИНС.
              В примере же я не вижу передачу бита: выход нейрона, вес связи и вход — все это непрерывная величина.
                0
                В примере же я не вижу передачу бита: выход нейрона, вес связи и вход — все это непрерывная величина.

                Просто автор сам не разобрался, что такое спайковые сети. У него в коде что-то вроде простейших осцилляторов с перестраиваемыми ГА параметрами. Осцилляции есть, но спайк, действительно, отсутствует.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое