Стенограмма:

Как дела, дизайнеры, и добро пожаловать обратно в Rempton Games. Для тех из вас, кто требовал больше AI-контента на этом канале, присоединяйтесь, потому что это круто. Сегодня я расскажу о проекте, который сочетает в себе обучение с подкреплением, генетические алгоритмы и искусственную жизнь, и фактически лег в основу отчета, благодаря которому я получил степень магистра компьютерных наук. Я постараюсь охватить всю важную информацию, но я не могу осветить все в этом видео, поэтому, если у вас есть какие-либо вопросы в конце, пожалуйста, оставьте их в комментариях, и я постараюсь ответить на них позже. видео. Без дальнейших церемоний, давайте начнем.

Во-первых, давайте рассмотрим, что это за проект. По своей сути этот проект представляет собой эксперимент с искусственной жизнью, также известной как Alife. Жизнь — это в основном область науки, которая занимается моделированием форм жизни и имеет исследовательские приложения, начиная от эволюционной биологии и заканчивая робототехникой. Искусственная жизнь также является довольно распространенным жанром видеоигр, включая Sims, Spore и даже Tamagatchii, и это тема, о которой я хотел бы поговорить в будущих видео на этом канале.

Мой личный интерес к искусственной жизни возник из моего интереса к монстрам в целом и к видеоиграм, основанным на монстрах, таким как Pokemon, в частности. Мне нравились эти игры, но я всегда хотел, чтобы они были более личными. Конечно, в этих играх могут быть сотни разных существ на выбор, но что, если бы игрок мог получить совершенно уникальных, настроенных существ, которые эволюционировали именно для него? Были такие игры, как Spore, где вы могли создавать своих существ вручную, но что, если бы существо эволюционировало естественным образом в зависимости от того, как вы играете в игру? Эта концепция послужила источником вдохновения для этого проекта.

Спойлер: оказывается, я откусил гораздо больше, чем мог проглотить с этими стремлениями, но это, по крайней мере, дало мне направление для работы. После нескольких месяцев исследований и нескольких советов от моего консультативного комитета я выбрал проект, в котором вместо того, чтобы развивать существо на основе взаимодействия с пользователем, оно будет адаптироваться для достижения конкретной цели в виртуальной среде. В частности, он научился бы идти к определенной цели в игровом движке Unity 3D.

Есть много разных способов достичь этой цели, но решение, которое я выбрал, состояло из двух основных частей. Первой частью был «мозг» — мой виртуальный персонаж должен был научиться добираться из точки А в точку Б. Второй частью было «тело» — по мере ходьбы тело существа меняется и развивается, чтобы лучше справляться со своей задачей. . Эти две системы работают одновременно и работают вместе, чтобы все лучше и лучше справляться со своей задачей. Давайте подробнее рассмотрим каждую из этих систем по отдельности, а затем мы увидим, что происходит, когда они работают вместе.

Начнем с мозга. Чтобы научить свое существо ходить, я использовал технику, известную как обучение с подкреплением, о которой я немного рассказывал в своем видео про покемонов с искусственным интеллектом, которое вам обязательно стоит проверить, если вы еще этого не сделали. Однако в этом проекте я как бы «надул» RL — я использовал его не так, как предполагалось. Этот проект был другим — Reinforcement Learning — действительно интересный инструмент, и я в полной мере им воспользовался.

Идея обучения с подкреплением на самом деле очень похожа на то, как учатся животные и даже люди. Предположим, например, что у вас есть щенок. На самом деле маленькие щенки многого не знают — они бегают, писают и какают, где хотят, и жуют все, что попадается на глаза. Они не знают, что правильно, а что нет, поэтому хозяин должен их научить. Если они жуют что-то, что им не положено, их могут отругать, но если они подчинятся команде, их могут наградить домашними животными и угощениями. Эта система положительного и отрицательного подкрепления со временем учит щенка, как себя вести.

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

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

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

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

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

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

Генетический алгоритм — это тип компьютерной программы, которая имитирует эволюцию реальных живых существ, таких как животные и растения. Чтобы генетический алгоритм работал, у нас не может быть только одно виртуальное существо — на самом деле нам нужна большая популяция из нескольких существ. Для этого проекта мы используем размер популяции 10 существ. Затем эти существа тренируются в течение определенного времени, используя обучение с подкреплением, которое мы обсуждали ранее. Затем, после обучения какое-то время, у каждого существа будет свой счет. Помните, я говорил, что различные действия приведут к наказанию или вознаграждению существа? Если вы объедините все эти наказания и награды, вы получите общее количество очков для существа, которое говорит вам, насколько хорошо существо справилось с обучением.

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

Копирование полезных черт у родителей — важная часть эволюции как в реальном, так и в виртуальном мире, но это только часть головоломки. Еще одним очень важным компонентом является мутация. Если вы просто продолжите копировать черты из предыдущих поколений, то вы никогда не получите ничего по-настоящему нового, и вы можете застрять в ситуации, когда все ваши существа одинаковы и не обязательно очень хорошо подходят для своей задачи. Это называется локальным оптимумом. Чтобы понять локальный оптимум, представьте, что вы находитесь на улице в районе с множеством холмов. Вы хотите взобраться на вершину самого высокого холма, так что же вы делаете? Ответ кажется довольно очевидным — просто найдите самый высокий холм, который вы видите, и начните восхождение. А теперь представьте, что сегодня очень туманный день, и вы можете видеть только несколько футов вокруг себя. Теперь ты даже не можешь увидеть весь холм, так как ты собираешься добраться до вершины?

Лучшее, что вы можете сделать, это оглядеться вокруг, чтобы попытаться увидеть, что находится «в гору», а что «вниз», и начать двигаться «в гору». Если вы сделаете это, вы, по крайней мере, достигнете вершины холма, даже если это не самый высокий холм. Однако, как только вы добираетесь до вершины, вы в основном застреваете — все вокруг вас катится вниз. Где-то еще может быть гораздо более высокий холм, но у вас нет возможности узнать о нем. Это в основном то, что происходит, когда программа застревает в локальном оптимуме — где-то может быть лучшее решение, но она не может знать об этом.

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

Теперь, когда мы установили две наши системы — обучение с подкреплением для обучения и генетические алгоритмы для эволюции — все, что нам нужно сделать, — это запустить нашу программу. Эта программа была запущена в игровом движке Unity 3D, и я протестировал несколько различных конфигураций. Я запускал каждую конфигурацию для 600 поколений и отслеживал их среднюю производительность на этих графиках. Не важно знать, какие были все разные конфигурации — две, на которые я хотел бы обратить ваше внимание, — это две. Первая была моей лучшей моделью, а вторая — «контрольная» модель — она точно такая же, за исключением того, что включала только часть обучения с подкреплением без генетического алгоритма.

Основная причина, по которой я тестировал без генетического алгоритма, заключалась в том, чтобы увидеть, действительно ли генетический алгоритм улучшил производительность. Вполне возможно, что наличие одной фиксированной формы тела на самом деле облегчило бы обучение «мозгу», и что это могло бы быть даже лучше. К счастью, этого не произошло — модель с генетическим алгоритмом сильно превзошла модель без него.

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

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

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

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

Это все, что у меня есть на сегодня. Если вам понравилось это видео и вы хотите увидеть больше видео об искусственном интеллекте, программировании или искусственной жизни, не забудьте поставить лайк и подписаться, чтобы не пропустить больше подобных видео в будущем. Если вы хотите увидеть больше, обязательно посмотрите другие мои видео, в том числе мое предыдущее видео об искусственном интеллекте, в котором я рассказываю об истории баскетбола. У меня также есть около 150 статей в блоге Rempton Games, с которыми вы можете ознакомиться по ссылке в описании внизу. И присоединяйтесь ко мне на следующей неделе для следующей записи в моей серии Evolution of Pokemon Designs, где мы прошли весь путь до поколения 7! А пока, большое спасибо за просмотр, и увидимся в следующий раз.

Posted in and Tagged Искусственная жизнь a-life AI alife искусственный интеллект Искусственная жизнь эволюционные алгоритмы генетические алгоритмы машинное обучение обучение с подкреплением rempton rempton games remptongames Игровой ИИ

Первоначально опубликовано на https://remptongames.com 30 декабря 2020 г.