Почему боты в играх не умнеют?

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com

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


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

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

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

Так что, когда где-то видите новость про добавление в игры ИИ, стоит критически к этому относиться и понимать, что внедряют скорее всего крайне узкоспециализированную систему. Опять же, поскольку подобные системы очень эффективны в анализе массивов разнородной информации, ИИ уже давно и основательно используется для удержания игроков в онлайн-играх и мотивации их на траты во free-to-play играх, поскольку поведение людей зачастую довольно легко предсказать и направить в нужное русло.

Однако же не будем о грустном и поговорим именно о тех системах, которые могут симулировать игрока и стать оппонентом в играх. В настоящее время существует огромное количество алгоритмов ИИ, которые способны симулировать то или иное поведение человека. Если описывать их все, упоминая их сильные и слабые стороны, выйдет очень большая статья. Поэтому я сконцентрируюсь именно на той архитектуре, которая у людей на слуху и является наиболее продвинутой, в данной области – искусственных нейронных сетях (ИНС). Именно на этой архитектуре созданы небезызвестные AlphaGo, AlphaZero и AlphaStar, которые побеждали людей в го, сёги и StarCraft. Почему же одну из этих систем нельзя внедрить и в другие игры, в качестве игрового бота? Ответ на этот вопрос кроется в архитектуре и способе создания таких систем.


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

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

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

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

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

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


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

Казалось бы, почему не обучить одну сеть, способную симулировать разных мобов и способную играть на разных сложностях игры в разных игровых ситуациях? Ну, помимо того, что создание такой сети по силам лишь нескольким корпорациям в мире, мы упираемся в ещё одну существенную проблему – обучающие данные. Любые системы ИИ не являются магической шкатулкой, которой надо задать лишь цель, и она сама найдёт путь. Чтобы ИИ мог достичь цели, ему надо объяснить как это сделать. И, в случае с ИНС, этим объяснением являются данные, отображающие состояние объекта моделирования и среды, в которой объект функционирует.

Сеть должна знать, при каких условиях объект обладает определёнными характеристиками, и как среда реагирует на те или иные действия объекта. Проще говоря, для сети нужно расписать всю «жизнь» игрового персонажа от «рождения» до «смерти». И расписать так, будто он побывал во всех возможных игровых «приключениях». Естественно, приключение, где герой будет убивать босса копьём, будет существенно отличаться от приключения, где тот же самый герой будет убивать того же самого босса уже луком. Или магией. А теперь представьте, сколько ситуаций нужно описать для бота, который должен одновременно симулировать поведение сотни разных юнитов в огромной армии. Именно из-за этой проблемы тот же AlphaStar, в своих последних версиях, всё равно мог играть только в одном режиме StarCraft II — Protoss versus Protoss. Всего одной конкретной фракцией против другой конкретной фракции.

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

В конце концов, кто сказал, что обучать системы ИИ обязательно должен человек? Ещё в 2017 году Deepmind представил версию AlphaGo Zero которая обучалась игре в го не на основе игровых партий людей, а играя сама с собой. И уже тогда она стала одной из самых успешных ИИ для игры в го, превзойдя человека. Безусловно, чем сложнее сама игра, чем больше игровых правил и условий, тем сложнее устраивать подобные спарринги между ИИ. Но это не невозможно, хоть и требует огромных вычислительных мощностей. Отдать тестирование ИИ на откуп других ИИ сложнее, но частично эту проблему можно обойти за счёт введение дополнительных условий в обучение.

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