О новых успехах противостояния (СР УВЧ!*)

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

Не идеально, но по мне — очень классно. 3D шутер, который играется в реальном времени — это впервые.

Подход, который применили — пересекается и с тем, как сделали бота, играющего в GO, и с тем как проходили игры Altari. По сути это «Deep reinforcement learning». Наиболее подробная статья на эту тему на русском, пожалуй здесь.
В двух словах. Пусть есть некоторая функция Q (s, a). Эта функция определяет профит, который вернёт наша система от выполнения действия a в состоянии s. Нейронную сеть обучают так, чтобы на выходах она давала аппроксимацию функции Q. В результате мы знаем цену любого действия в каждой ситуации. Чтобы понять более подробно лучше читать один из приведённых выше текстов.
Классический подход, который применялся в играх Altari для 3D-шутеров не работает. Слишком много информации, слишком много неопределённости. В играх Altari оптимальное действие можно было выполнить по последовательности из 3–4 кадров, чем там широко и пользовались, подавая их на вход. В Alpha Go авторы пользовались дополнительной системой, которая ходила и перебирала оптимальные варианты по правилам Go.
Как же авторы справились тут? Ведь не будешь прогать свой внутренний движок?
Оказывается, всё очень просто и интересно. Глобально, было сделано 3 улучшения:
  1. При обучении использовалась некоторая дополнительная информация от движка
  2. Использовалась LSTM на выходе CNN
  3. Обучалось две сети: «Исследовательская» и «Боевая»

Теперь чуть поподробнее.

Информация от движка


49594ff5eb934b06945d2549c7854d7f.png
Когда человек впервые садиться за DOOM, то ему говорят: это плохой монстр, его нужно убить. У человека есть понимание что такое монстр => он быстро осваивается. Нейронная сеть никогда не видела монстра. Никогда не видела аптечки и никогда не видела бочки. Она не умеет отличать одно от другого.
Глубокое обучение с подкреплением подразумевает, что учиться система должна только по своей целевой функции. Но зачастую это невозможно. Нельзя по целевой функции понять, что массив движущихся пикселей — это враг. Ну, можно, но долго и муторно. Человек имеет априорную информацию. Нужно и в сеть её загрузить.
Поэтому авторы ввели дополнительный блок, который используется при обучении. В блок они подают что видит сеть (на рисунке отмечен красным эллипсом). Формат данных — boolean в стиле «вижу монстра», «вижу аптечку», «вижу амуницию». В результате свёрточная сеть явно тренируется распознавать врагов, аптечки и амуницию. В фазе игры этот блок никак не используется. Точнее используется, но об этом чуть ниже. А вот на сколько фичи повышают точность сети:
be5993df33d64fefa432a4a28aaf4e7c.PNG

LSTM


29c5cb1b0dfe4ba9b7dfd33011b7c5b0.png
LSTM — это такая рекуррентная сеть, которая неплохо может объединять данные, которые получает свёрточная сеть. В оригинальных статьях по Altari и по Alpha GO, таких сетей не было, но их уже использовали в других DQR проектах (например, с теми же играми Altari). Так что ничего особо нового тут не было.

Две сети


И опять, авторы упёрлись в неприятный момент. Рекуррентная сеть обеспечивала анализ данных и прогноз где-то на протяжении нескольких секунд (в работе обучают последовательностями длинной примерно 10 кадров, где кадр берётся несколько раз в секунду (¼ fps, fps не указаны)). Более глобальные прогнозы для неё были неточны. Кроме того, сеть сложно обучить понятию «у нас скоро кончатся патроны, хорошо бы начинать что-то искать». В результате авторы извернулись и сделали две независимых сети. Одна сеть умела искать аптечки и патроны. Вторая делать фраги.
Переключение осуществляется за счёт того самого «выделения монстров», которая сеть генерит из-за особенностей обучения. Если монстров не видно, то используются решения «исследовательской сети», после появления монстра решения «боевой». Эффект от введения исследовательской сети:
ec2e9393a30f4b579f7ceab13aab8af1.PNG
Кстати, исследовательская сеть убивает у бота «кемперское поведение», которое свойственно «боевой».
Исследовательской сети при обучении выписывали плюсы за пройденное расстояние.Что в итоге вышло
75716dcc7b32418d97f97836113cbe45.PNG
Человека сеть побеждает с неплохим отрывом. По-моему это главное.

По DQN я не специалист, возможно что-то не идеально рассказал. Было бы интересно послушать мнение специалистов. Но подборка методов, а в особенности результат меня очень впечатлили.

*СР УВЧ!

Комментарии (0)

© Habrahabr.ru