Эволюционирующая нейросеть
Искусственные нейронные сети имитируют реальные биологические нервные системы. Они содержат нейроны и связи между ними, обеспечивающие преобразование входящих сигналов в значимый выходной результат. В области машинного обучения эти сети часто инициализируются со случайными связями между нейронами, после чего сеть обучается, пока не начнёт вести себя нужным образом. Такой подход вполне применим, однако у животных существует множество простых нервных систем, работающих «из коробки»: никто не учит рыбу плавать или бабочек летать, несмотря на то, что их поведение создаётся сетями нейронов. Их нервные системы являются результатом не случайной инициализации и последующего обучения, а эволюции. Спустя множество поколений природа создала такую схему из клеток и связей, которая обеспечивает сложное и успешное поведение.
Для создания нейронных сетей, обеспечивающих поведение без обучения, можно использовать нейроэволюцию. Эволюционные алгоритмы (например, такой, который я использовал для выполнения эволюции растений) подвергают генетический код эволюции в течение долгого периода времени. Генетический код (модель для ДНК) и представляемый им организм изначально очень просты, но в течение многих поколений небольшие мутации увеличивают благоприятную сложность и добавляют функции, стимулирующие дальнейшее распространение этих свойств.
Цифровые кальмары
Чтобы продемонстрировать действие нейроэволюции, я хочу подвергнуть эволюции цифровых кальмаров. Кальмары обладают следующими свойствами:
Рисунок 1: плавающий кальмар.
- Они могут иметь любое количество щупалец разной длины.
- Каждая рука управляется одним выходным нейроном, качающим её в одном направлении при низком выходном сигнале и в другом при высоком выходном сигнале.
- У кальмаров есть голова; размер головы определяет максимально возможное количество нейронов.
- Масса кальмара определяется размером головы и количеством сегментов щупалец.
- Кальмары плавают в симулируемой жидкости, заполненной точками, обозначающими еду. Касаясь этих точек, кальмар «съедает» их, а оценка кальмара вычисляется как количество съеденных точек, разделённое на его массу.
Эти свойства благодаря эволюции должны создать кальмаров, которые эффективно плавают в среде, поедая как можно больше пищи. Так как у них есть и масса, тела кальмаров должны быть эффективными: для тяжёлых тел и больших щупалец требуется больше еды, чтобы существовала причина их эволюционного создания.
Так как кальмар может иметь варьирующиеся свойства (например, размер головы и конфигурация щупалец), эти свойства тоже эволюционируют. ДНК кальмара содержит не только «чертёж» его мозга, но и план тела.
На рисунке 1 показан симулируемый кальмар с двумя руками. Колебательное движение рук обеспечивается добавлением сегментам рук пружинной силы; если мышцы прекратят двигать руками, то сегменты постепенно будут выравниваться, пока руки не превратятся в прямые линии. Для вычисления величины ускорения суммируется всё боковое движение. Всё показанное на рисунке боковое движение суммируется в это число. Размахивая щупальцами позади тела, кальмар обеспечивает движение вперёд.
Спайковые нейронные сети
Выбор подходящей нейронной сети для нашего проекта — непростая задача. Существует множество различных типов нейронных сетей; в этой статье представлен удобный краткий обзор некоторых из них. Задача управления кальмарами в определённых аспектах непохожа на работу широко известных сетей:
- Они не имеют традиционной структуры «ввод-вывод». На самом деле, им необязательно вообще содержать входных нейронов. В то время как многие традиционные нейронные сети каким-либо образом преобразуют или классифицируют входные сигналы, сети кальмаров должны создавать поведение.
- Нейроны кальмаров должны работать в реальном времени. Здесь нет структуры «вопрос-ответ», сети должны функционировать постоянно.
- Так как нейросети со временем эволюционируют, они не имеют заранее заданной структуры или размера. Количество нейронов и связей варьируется в соответствии с ДНК, и меняется со сменой поколений.
Этим требованиям удовлетворяет спайковая (импульсная) нейронная сеть. Такие сети работают в реальном времени, они были разработаны для более точной имитации живой природы. Как и реальные нейроны, клетки в спайковой нейросети накапливают потенциал, постепенно собранный со всех входных сигналов, а при отсутствии входных сигналов постепенно возвращаются к своему «нейтральному» состоянию. Спайковые нейронные сети не обязаны придерживаться строгой схемы соединений. Они состоят из слоя входных нейронов, слоя выходных нейронов (в нашем случае управляющих щупальцами) и нескольких нейронов между ними, называемых скрытым слоем. Нейроны в скрытом слое могут быть соединены с входными и выходными нейронами, но нейроны могут быть и разъединены. В нашей задаче нейроны скрытого слоя могут быть соединены друг с другом.
Рисунок 2: логистическая функция.
Все нейроны нервной системы имеют функцию активации. Эта функция определяет выходное значение нейрона на основании суммы его входных сигналов. Нейроны связаны аксонами, соединяющими исходный и целевой нейроны. Аксон прибавляет к активации целевого нейрона выходное значение исходного нейрона, умноженное на вес аксона (который может быть положительным или отрицательным числом). Затем функция активации определяет выходное значение нейрона на основании его активации. Для этой симуляции в качестве функции активации мы выбрали логистическую функцию:
В этом уравнении — это активация нейрона. На рисунке 2 показан график функции. При выходное значение равно ; в нашей симуляции это полезно, потому что сеть должна уметь обеспечивать поведение даже при отсутствии входного значения. Если выходное значение по умолчанию не равно нулю, то некоторые сигналы постоянно будут течь по системе. Теоретически значение может быть очень малым или очень большим, но асимптоты логистической функции гарантируют, что выходное значение всегда будет находиться в интервале . Благодаря этому экстремальные выходные значения по системе не распространяются.
Симуляция эволюции
Среда симуляции состоит из следующих компонентов:
- Любое количество кальмаров с разной структурой тела и спайковые нейросети для управления их конечностями.
- Разбросанная по среде пища.
Чтобы начать имитировать эволюцию, в системе симулируется фиксированное время жизни каждого поколения. В своих симуляциях я выбирал отрезки от 20 до 30 секунд. После завершения этого времени выбирается наиболее продуктивный кальмар, который несколько раз дублируется для создания нового поколения кальмаров. Перед выполнением следующей симуляции все кальмары подвергаются небольшой мутации. Могут мутировать следующие свойства:
- Радиус тела, а с ним и максимально допустимое количество нейронов в мозге кальмара.
- Количество и расположение щупалец.
- Длина щупалец.
- Количество нейронов в мозге.
- Аксоновые соединения между нейронами (связи могут появляться или пропадать, также могут изменяться веса связей).
На данный момент мозг кальмаров не содержит входных нейронов. Количество выходных нейронов всегда равно количеству щупалец, и каждому щупальцу назначается один выходной нейрон. Если при мутации щупальце пропадает, то соответствующий ей выходной нейрон тоже удаляется. Когда при мутации появляется новое щупальце, оно получает новый выходной нейрон со случайными связями.
Исходный код симуляции выложен на GitHub, а симуляция выполняется в браузере.
Результаты
Рисунок 3: нервная система, создающая бесконечные импульсы.
При выполнении симуляции подвижные кальмары обычно получаются за несколько сотен поколений. Когда эволюционно возникает работающая стратегия плавания, она обычно со временем эволюционирует в наиболее оптимальную версию.
Нервную систему можно визуализировать. На рисунке 3 показана простая нервная система кальмара с двумя руками. Сеть содержит пять нейронов, обозначенных оранжевыми кругами, и два выходных нейрона, обозначенных синими кругами. Когда выходной сигнал нейрона возрастает, нейроны становятся более яркими. Когда выходной сигнал снижается, круги становятся прозрачными. Аксоны визуализируются пунктирными линиями, соединяющими соответствующие нейроны. Когда аксон передаёт сигнал (и влияет на целевой нейрон), пунктирная линия становится более видимой, а пунктир движется в направлении сигнала.
Рисунок 4: эволюционировавшие плавающие кальмары. Заметьте, что не все агенты особо эффективны; некоторые содержат бесполезные мутации.
На рисунке 4 показано несколько кальмаров, плавающих в среде симуляции. Эти кальмары используют два одновременно раскачивающихся щупальца. Среди агентов заметна вариативность:
- Присутствует различная длина щупалец, но их паттерны движения примерно одинаковы.
- Два агента в нижней части изображения эволюционно получили дополнительные щупальца, которые пока не особо полезны. Они повышают массу кальмара, снижая таким образом его оценку.
Вывод
Симуляция в своём текущем состоянии демонстрирует эффективность нейроэволюции и образует фундамент для дальнейшего развития системы:
- Кальмарам можно дать органы чувств. Один или несколько глаз могут создавать сигналы, направляющие кальмара к источникам пищи или заставляющие отдаляться от конкурентов.
- Можно создать и другие выходные органы. Простые руки могут двигать или толкать пищу, а чернильные мешки способны затуманивать зрение конкурентов.
- Можно создать более крупные среды, в которых кальмары репродуцируются только в ближайшем окружении, позволяя одновременно эволюционировать и существовать нескольким видам.
- Поколения можно симулировать в течение более долгого времени. На текущем этапе поведение можно интерпретировать как гонку с целью как можно быстрее и эффективнее получить пищу. Для этого требуется скорость, но не нужны сложные маневры. Если пища со временем вырастает или перемещается вместе с потоком, то потребуются более сложные стратегии.
Эти дополнения не потребуют никаких изменений в базовом механизме нейроэволюции, они просто позволят появляться более разнообразным стратегиям. Универсальность и адаптивность показанного фреймворка нейроэволюции делают его интересным инструментом для множества других областей, в частности, исследований искусственной жизни.
lamerok
Вот так вот писал писал умный индивидум симуляцию, пробовал "дать органы чувств", "создать более крупные среды", "другие выходные органы", а потом ему надоело, он её забросил, забыл и получились человеки.
serginho
А потом решил еще поиграться и ввел в игру вирус, посмотреть как симуляция отреагирует