Как работает технология и зачем она нужна.
Основатель студии Luden.io Олег Чумаков на конференции DevGAMM 2017 рассказал о машинном обучении, о том, на что сейчас способна нейросеть и как использовать её возможности при разработке игр. Мы расшифровали выступление.
Мы делаем полезные игры для VR. Большая часть команды раньше работала в Nival: можно сказать, мы её спин-офф. У нас немало экспериментов с машинным обучением — я расскажу, как оно работает.
Перечислю несколько наших проектов. Игра InMind для VR про нейросети — только про те, что у человека в голове. InCell посвящена тому, как устроена жизнь внутри клетки (всё тоже очень похоже на ИИ). В InMind 2 мы чуть глубже копнули в нейросети и когнитивистику. Очень «полезный» проект — VRobot — симулятор гигантского робота в городе. Его мы сделали просто потому, что это очень весело.
О формальных нейронах известно очень давно. Учёные посмотрели, как работает нейрон в голове человека. Поняли, что у него есть входящие сигналы, сумматоры и один выходящий сигнал. Всё это записали и назвали формальный нейрон.
Потом был гениальный Фрэнк Розенблатт, очень умный пиарщик. Когда в 1958-1961 годах у него выходили книги, американская армия писала в журналах статьи вроде «Через два года перцептрон научится заменять человека целиком». Сегодня ситуация похожа. В 1971 году Розенблатт неожиданно скончался, и не успел ответить на мощную волну критики, которая его накрыла. Критика пришла, а ответа не было. На этом всё закончилось.
Ренессанс случился в 2012 году. В нижней части изображения вы видите график image.net — это конкурс, на котором нейросеть должна распознать, что находится на картинке. Ребята из университета Торонто взяли и качественно улучшили показатели распознавания с помощью видеокарт и свёрточных сетей. С тех пор так и живём.
А это слайды с конференции NVIDIA, иллюстрирующие, как быстро развивается сфера машинного обучения. Она катастрофически выросла за 2012-2015 годы, и инвестиции стали куда больше. Каждый год происходит большой взрыв в отрасли: модели становятся очень сложными. Год назад я бы вам сказал, что 300 миллионов фичей — это предел. Сейчас предел — это 8 миллиардов фичей, а в следующем году будет страшно подумать сколько. Волна идёт прямо сейчас, а мы на ней катимся.
Вот хронология происходящего: сначала нейросетями занялись студенты, потом подтянулись биологи, а затем, когда люди разобрались, как работает человеческий глаз, — присоединились все, кто сильно зависит от картинок.
Как работает машинное обучение
Задача машинного обучения — преобразовать входные данные в выходные. Решим простую задачу. У кого в зале есть игра? Участвуют два человека — Фарух и Ольга.
Предположим, у Фаруха в команде работают два человека, и он продал 10 копий игры. У Оли — четыре человека, она продала 20 копий. Наша цель — предсказать, сколько я продам, если у меня три человека в команде. Это очень упрощённая задача машинного обучения.
Показатели Фаруха примем за «X», а Оли — за «Y». Я умножаю «X» на некоторый коэффициент «K» и получаю «Y». X*K=Y.
Я не знаю, какой у меня коэффициент, и говорю, что он у меня случайный, например 0,01. Считаю: 2*0,01= 0,02. Это мой фактический «Y», который я получил. Он значительно отличается от настоящего «Y». Я могу вычислить ошибку — 9,98.
Задача всего машинного обучения — с помощью модификации «K» эту ошибку снизить до нуля. Если мы нарисуем любой график, нам нужна точка, где ошибка минимальна. А что за магия превращает функцию в ноль, когда точка в минимуме? Это производная. Она нам нужна только для того, чтобы найти минимум функции ошибки. Мы меняем «K» до тех пор, пока ошибка не снизится. А в какую сторону её менять — нам, опять-таки, подскажет производная, потому что она является касательной к любой собственной функции.
Мы постепенно меняем коэффициент «К», пока не приходим к точке, в которой ошибка минимальна. Мы считаем, что мы её худо-бедно обучили. Самое сложное начинается дальше. Потому что у нас это было 2D-пространство. А если мы возьмём 3D — у нас будет вот такая поверхность и сколько угодно измерений. Для решения таких задач нам и нужно машинное обучение.
Ещё одно маленькое отступление, которое всё усложняет. Это то, что взорвало в своё время рынок картинок. Называется «свёрточная нейросеть» (CNN). По сути она работает точно так же — минимизирует ошибку. Мы на вход подаём картинку, а на выходе проверяем её класс, например — собака на ней или кошка. В случае ошибки — пытаемся её минимизировать, меняя коэффициенты. Размер картинки слишком большой, чтобы подавать её на вход целиком. Но можно взять картинку, разбить ее на сегменты, а потом эти сегменты сворачивать. Знаете, как мы пришли к такому решению? «Разобрали» человеческий глаз, посмотрели, как у него там всё устроено. То есть, на самом деле мы ничего сами не придумали.
Практическое применение
Самое простое — это классификация регрессии. Предсказывание значения или класса и условная классификация. Например, хорошая игра или плохая. CNN мы только что рассмотрели.
Все знают, что с помощью команды Deep Mind Google учит нейросеть играть в Starcraft.
Они берут скриншот, анализируют его свёрточной нейросетью и потом с помощью reinforcement-обучения учат «генерала» командовать.
В «Блицкриге 3» работает ИИ Борис, он решает более конкретную задачу, чем ребята из Deep Mind. Система здоровенная и размашистая, но свёрточная нейросеть там тоже работает.
Это очень популярная картинка — когда Google научили по картинке понимать текст, он нароллил такую картинку, которая в поисковой системе сама случайно вылезла. Сначала никто не мог понять, почему. Потом пришло осознание, как этому обучить — сворачиваем картинку свёрточной сетью, задаём описание и говорим — «меняй коэффициенты» .
Вот интересный пример. Это делают китайцы. Они подают на вход картинку в маленьком разрешении, а на выход — в большом. В итоге они пытаются научить нейросеть делать из плохого изображения — хорошее.
Это то, что в прошлом году наделало шуму — перенос стиля с одной картинки на другую. Так работала Prisma. А справа можно увидеть, как картинки в играх могут преобразовываться (выглядит очень плохо).
Это ещё веселее. Тут анализируют картинку, берут её краткое описание и с помощью переноса стиля, как в Prisma, делают текст романтическим. Это абсолютно автоматически сгенерированная история, но ваш мозг в силу того, как он так устроен, «родит» сюжет сам.
Главная боязнь художников — нарисовали плохо, нажали кнопочку, получилось хорошо.
Это текстуры. Тем же самым переносом стиля одним кликом можно сделать из одной текстуры — много.
Здесь нейросеть генерирует картинку на основе текста. Только недавно совершили прорыв в этой области.
А вот нейросеть делает из фотографии трёхмерное лицо. Зачем? Пока сложно понять, но можем.
Недавно русские ребята из Vision Labs выпустили приложение Face DJ в AppStore. Оно из вашего лица будет делать 3D-модель.
Здесь мы подаём на вход картинку, а в качестве ожидаемого результата задаём 3D-сцену. Её и получаем. К сожалению, воксельную.
Это продолжение того же — мы можем вычитать стулья. То есть производить арифметические операции с 3D-объектами. Нейросеть сама поймёт, что же мы имели ввиду. Для человека это логично, но для машины раньше такое было невозможно.
Это наша игра AIDraw про рисование. Нейросеть в телефоне на CPU распознаёт, что мы нарисовали, и угадывает, что же мы хотели изобразить на самом деле. Слева знаменитая картина — кто-то из игроков так нарисовал «Мону Лизу», нейросеть всё верно распознала.
А это то, что сейчас делает Google. Именно в этом они видят будущее ИИ: вы рисуете плохо, нейросеть определяет, что вы хотели изобразить, и меняет рисунок.
AIDraw и «гугловая» рисовалка — это то, что нам может позволить найти новые ощущения от игр. Когда вы играете в «крокодила» с нейросетью — это особенные эмоции. Это вроде бы всё то же самое, что было, но эмоции другие.
Вопросы и ответы
А где именно используется машинное обучение в играх?
Сейчас самый интересный кейс — это, естественно, аналитика. Она вся машинным обучением уже проточена. Например: «Выбери мне всех игроков, которые могли бы совершить покупку уже завтра». Также я видел несколько упоминаний о том, что в матчмейкинге машинное обучение начинают использовать. В основном, потому что это научная задача и исследователи сейчас этим занимаются.
Предположим, у нас есть нейросеть, которая контролирует передвижение юнитов по карте. Как известно, для обучения нейросети нужен датасет. Где его взять?
Набрать датасет самому — самый интересный вариант. Вот, например, игра — Ai Draw. Я не буду рассказывать все секреты, но она несёт стратегическую задачу. Она набирает всё, что игроки рисуют. Мы набрали уже более 70 тысяч рисунков на сервер. Это уже вполне вменяемый датасет. А начинали мы с тысячи рисунков, которые просто валялись в векторном формате на разных стоках. Они там как раз разбиты по классам. Мы оттуда и взяли. Но картинки — это самый простой вариант.
Источник: DTF