Генерируем уровни для игры с помощью нейросетей |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-03-19 13:14 Предисловие За последние несколько лет прогресс в области искусственного интеллекта привёл к созданию методов машинного обучения на основе обучения представлениям (representation-learning) с несколькими слоями абстракции — так называемому «глубокому обучению». Общественное и медийное внимание было привлечено к этой области исследований благодаря древнекитайской настольной игре го. Несмотря на то, что сложность го часто сравнивают со сложностью самой жизни, программе AlphaGo, использующей глубокое обучение с подкреплением (deep reinforcement learning), удалось превзойти мирового чемпиона по го Ли Седоля. Удивительно, что исследования ИИ были использованы в играх и получили такое широкое общественное внимание. Стоит также заметить, что один из разработчиков AlphaGo, Демис Хассабис, был ведущим программистом Theme Park (1994 год) и ведущим программистом ИИ Black & White (2001 год). Игры и современный прогресс ИИ, возможно, имеют некую корреляцию. Оценка сложности На первом этапе наших исследований нам нужно было твёрдо убедиться, что искусственная нейросеть сможет учиться на уровнях Fantasy Raiders. Поэтому нам нужно было начать с самого простого: оценки сложности уже готовых уровней. Самым простым шагом в процессе оценки было назначение численных значений NPC или их количеству HP (Health Points). Однако гораздо сложнее было оценивать находящиеся в комнате интерактивные предметы. Именно поэтому мы решили проверить, сможет ли искусственная нейросеть заменить такой эвристический алгоритм. Сбор данных Чтобы искусственный интеллект мог обучаться, ему необходимы данные. Для автоматической классификации уровней по их сложности единица данных должна иметь вид пары «уровень — сложность». Однако оценка каждого уровня алгоритмом не может создать осмысленных результатов, потому что его результаты ограничены самим алгоритмом. Прогнозирование сложности После того, как разметка данных была завершена, мы сделали снимки экрана уровней в редакторе, которые стали абстрактной версией каждого из уровней. Мы дали программе обучиться на наборе данных в виде пар «скриншот уровня в редакторе — сложность». Мы использовали снимки из редактора уровней, потому что в низком разрешении они более различимы, чем внутриигровые скриншоты, то есть эффективнее с точки зрения скорости обучения и качества входящих данных. Для этого процесса мы решили использовать CNN (Convolutional Neural Network (свёрточные нейронные сети)), потому что по сравнению с другими нейросетями они лучше подходят для классификации изображений. Для оценки качества её работы мы выбрали опорной точкой формулу, выведенную одним из наших гейм-дизайнеров.
Даже при стандартной модели CNN точность повысилась на 20%. Мы несколько раз пытались использовать другие сложные модели CNN, но без каких-либо значимых результатов. На результаты негативно влиял ограниченный объём данных (примерно 1000 пар). Двигаясь по пути, вдохновлённому работами Дэвида Силвера et al. Mastering the game of Go with deep neural networks and tree search (2016 год) и Хуанхи Кима Do Neural Networks dream of procedural content generation? (2016 год) с конференции Nexon Developers Conference 2016, мы понимали, что для получения более качественных результатов нам нужно разнообразить входящие данные. Согласно работе Силвера, в 2016 году в наборы данных для AlphaGo, кроме расположения белых и чёрных камней, включалось количество ходов после начала игры, количество «убитых» камней после начала игры, а также контекстная и обработанная информация о ситё («лестницах»). Аналогично, в статье Кима для оценки сложности уровня игры обрабатывалась информация об NPC и рельефе. Снимки редактора уровней были составлены из графических элементов, потому что должны были иметь человекочитаемую форму. Но в графических элементах представлена не вся информация о каждом NPC, объекте или предмете. Поэтому снова с помощью коллег-дизайнеров мы заново классифицировали части информации, которые могут влиять на уровень сложности. Все информационные величины, имеющие одинаковое качество, классифицированы в группу, имеющую по уникальному значению в одном каналов: R, G, B или A. Чем больше информационных величин у нас было, тем более высокой точности следовало ожидать, но при этом увеличивалась и сложность генерирования уровней. Поэтому методом проб и ошибок мы в результате пришли к четырём основным информационным величинам, которые использовались в процессе оценки сложности.
Благодаря использованию других входящих данных точность в той же модельной структуре увеличилась на 10%. Более того, размер каждого изображения, необходимого для процесса обучения, уменьшился в 64 раз, что позволило ускорить обучение. Автоматизированное генерирование уровней Благодаря оценке сложности мы могли быть уверены, что нейросеть сможет обучиться особенностям любого уровня. На основании того, чему научился ИИ на предыдущих этапах, мы перешли к следующему шагу: генерированию уровней. GAN (генеративно-состязательные сети) С момента первой реализации GAN в 2014 году и соединения GAN с CNN в модели DCGAN в конце 2015 года были созданы различные версии GAN. Более десяти из них можно использовать для генерирования изображений. (Если вам интересно посмотреть, насколько сложные результаты может генерировать GAN, изучите the-gan-zoo.) В процессе обучения для генерирования уровней мы, как и в процессе оценки сложности, применяли закодированные изображения. После завершения обучения генератор создавал такое изображение, которое декодер мог преобразовать в уровень. Больше всего нас беспокоил ограниченный объём собранных данных — всего около тысячи, потому что в самой простой базе данных MNIST в целом больше 60 000 записей. Первая попытка с использованием DCGAN окончилась провалом. Большинство других попыток с помощью других недавно изобретённых моделей GAN, демонстрировавших потрясающие результаты в генерировании изображений, тоже потерпели неудачу в генерировании уровней. Даже если им что-то и удавалось, то они генерировали очень ограниченные типы уровней. В этот момент мы уже почти сдались и считали, что причиной неудач является маленький объём данных. Однако обучение закончилось успехом при использовании DRAGAN, стабильной версии для обучения GAN. Однако из-за малого объёма данных DRAGAN всё равно не мог генерировать более сложные уровни. Расширение объёма данных Даже несмотря на то, что для машинного обучения 1000 уровней является довольно маленьким объёмом, на их создание нескольким гейм-дизайнерам потребовалось два года. Мы не могли сразу же увеличить объём входящих данных. Поэтому мы попытались увеличить количество данных с помощью метода, обычно используемого в других областях машинного обучения: мы увеличили объём данных, с 1000 до 6000, повернув каждый уровень на 90, 180, 270 градусов относительно исходного и заменив типы NPC, объектов и предметов. После тысяч итераций с 6000 наборов данных модель, наконец, начала генерировать более сложные уровни. (Полуконтролируемая) CGAN С самого начала разработки Fantasy Raiders, мы изучали генеративную грамматику, надеясь на то, что со временем автоматизированное генерирование заменит создание уровней вручную. Поэтому когда мы убедились, что GAN генерирует более сложные уровни, мы применили для генерирования уровней по сложностям CGAN, которая генерирует данные в соответствии с условиями. RNN (рекуррентные нейронные сети) Генерирование уровней с помощью GAN работало вполне хорошо. Модель достаточно неплохо работала с обучением любым характеристикам формы уровней, однако не обучалась контекстной информации уровней. Однако, возможно, существуют и другие причины, самая важная из которых — характеристики самих входящих данных. В общем случае изображения составлены из серий значений, небольшое различие в которых не вносит серьёзных изменений. Однако в снимках редактора уровней данные довольно дискретны, и любое небольшое отличие в значениях может внести большие изменени. Поэтому наши входные данные (снимки уровней) больше походили на предложение, чем на изображение. В результате мы пришли к использованию RNN, которые чаще, чем другие генеративные модели, применяются для гененирования предложений. Мы выбрали LSTM, одну из нескольких версий RNN (недавно мы узнали, что существует ещё одно исследование, использующее для создания дискретных значений в генерировании предложений GAN, но с ним мы пока не экспериментировали.) LSTM (Long Short-Term Memory Units) Для использования LSTM все уровни должны быть транслированы в строки. Поскольку мы уже закодировали все уровни, процесс трансляции проблем не вызвал. Нам пришлось разделить закодированное изображение и склеить его в одномерную строку. Для генерирования уровня в соответствии с его сложностью мы добавили транслированную в строку информацию о сложности уровня. После всех повторов LSTM начала генерировать уровни, обучаясь не только характеристикам формы, но и контекстной информации. Модель RNN генерировала уровни, более похожие на созданные гейм-дизайнерами, однако не могла генерировать уровни с забором, качественно покрывающим центр или угол уровня. Похоже было, что для этого требуется бОльшее понимание пространства. Сначала мы подозревали, что причиной этой проблемы является гиперпараметр и пытались изменить его, но ничего не помогало. RNN не может генерировать уровни с пониманием двухмерного пространства. PixelRNN (PixelCNN) В процессе поисков метода, способного объединить преимущества RNN с улучшенным пониманием контекстной информации о пространстве, мы обнаружили PixelRNN, решение для генерирования изображений на основе RNN. (Позже мы перешли к PixelCNN, которая имеет бОльшую скорость обучения). Работаем вместе: человек плюс машина После начала процесса автоматизированной генерации уровней мы каждую неделю получали от гейм-дизайнеров обратную связь о текущей обученной модели нейросети. Нам показалось интересным то, что некоторые дизайнеры вдохновлялись сгенерированными машиной уровнями и пытались создавать на их основе новые уровни. Fantasy Raiders разрабатывается на основе Unity, и редактор уровней тоже основан на Unity. Поэтому экземпляр уровня создаётся в JSON и передаётся на сервер, а сервер вносит в него изменения и отправляет обратно в Unity в формате JSON. (Unity предоставляет разработчикам SDK Unity Machine Learning Agents, позволяющий использовать в Unity обучение с подкреплением. Однако возможности Python API ограничены. Мы надеемся, что команда Unity расширит свой Python API в SDK, чтобы мы могли использовать его не только в обучении с подкреплением, но и в других методах машинного обучения.) Подведём итог На текущем этапе конца разработки Fantasy Raiders генерирование уровней стало не просто технической проблемой для инженеров, но и проблемой для гейм-дизайнеров, которые уже принимают участие для улучшения результатов обучения. Со всеми препятствиями, включая и те, которые здесь не упомянуты, нам помогли справляться не только технические знания, но и сведения о нашей собственной игре Fantasy Raiders. Дополнительное чтение Generative Models: краткое введение в генеративные модели. Статья написана программистами Maverick Games Seungback Shin и Sungkuk Park. Источник: habrahabr.ru Комментарии: |
|