Нейросеть — друг человека: глава Luden.io о машинном обучении и разработке

Как работает технология и зачем она нужна.

Основатель студии Luden.io Олег Чумаков на конференции DevGAMM 2017 рассказал о машинном обучении, о том, на что сейчас способна нейросеть и как использовать её возможности при разработке игр. Мы расшифровали выступление.

Нейросеть — друг человека: глава Luden.io о машинном обучении и разработке

Мы делаем полезные игры для VR. Большая часть команды раньше работала в Nival: можно сказать, мы её спин-офф. У нас немало экспериментов с машинным обучением — я расскажу, как оно работает.

Перечислю несколько наших проектов. Игра InMind для VR про нейросети — только про те, что у человека в голове. InCell посвящена тому, как устроена жизнь внутри клетки (всё тоже очень похоже на ИИ). В InMind 2 мы чуть глубже копнули в нейросети и когнитивистику. Очень «полезный» проект — VRobot — симулятор гигантского робота в городе. Его мы сделали просто потому, что это очень весело.

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

Нейросеть — друг человека: глава Luden.io о машинном обучении и разработке

Потом был гениальный Фрэнк Розенблатт, очень умный пиарщик. Когда в 1958-1961 годах у него выходили книги, американская армия писала в журналах статьи вроде «Через два года перцептрон научится заменять человека целиком». Сегодня ситуация похожа. В 1971 году Розенблатт неожиданно скончался, и не успел ответить на мощную волну критики, которая его накрыла. Критика пришла, а ответа не было. На этом всё закончилось.

Ренессанс случился в 2012 году. В нижней части изображения вы видите график image.net — это конкурс, на котором нейросеть должна распознать, что находится на картинке. Ребята из университета Торонто взяли и качественно улучшили показатели распознавания с помощью видеокарт и свёрточных сетей. С тех пор так и живём.

А это слайды с конференции NVIDIA, иллюстрирующие, как быстро развивается сфера машинного обучения. Она катастрофически выросла за 2012-2015 годы, и инвестиции стали куда больше. Каждый год происходит большой взрыв в отрасли: модели становятся очень сложными. Год назад я бы вам сказал, что 300 миллионов фичей — это предел. Сейчас предел — это 8 миллиардов фичей, а в следующем году будет страшно подумать сколько. Волна идёт прямо сейчас, а мы на ней катимся.

Нейросеть — друг человека: глава Luden.io о машинном обучении и разработке

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

Как работает машинное обучение

Задача машинного обучения — преобразовать входные данные в выходные. Решим простую задачу. У кого в зале есть игра? Участвуют два человека — Фарух и Ольга.

Предположим, у Фаруха в команде работают два человека, и он продал 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 — у нас будет вот такая поверхность и сколько угодно измерений. Для решения таких задач нам и нужно машинное обучение.

Нейросеть — друг человека: глава Luden.io о машинном обучении и разработке

Ещё одно маленькое отступление, которое всё усложняет. Это то, что взорвало в своё время рынок картинок. Называется «свёрточная нейросеть» (CNN). По сути она работает точно так же — минимизирует ошибку. Мы на вход подаём картинку, а на выходе проверяем её класс, например — собака на ней или кошка. В случае ошибки — пытаемся её минимизировать, меняя коэффициенты. Размер картинки слишком большой, чтобы подавать её на вход целиком. Но можно взять картинку, разбить ее на сегменты, а потом эти сегменты сворачивать. Знаете, как мы пришли к такому решению? «Разобрали» человеческий глаз, посмотрели, как у него там всё устроено. То есть, на самом деле мы ничего сами не придумали.

Нейросеть — друг человека: глава Luden.io о машинном обучении и разработке

Практическое применение

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

Все знают, что с помощью команды Deep Mind Google учит нейросеть играть в Starcraft.

DeepMind SC2
DeepMind SC2

Они берут скриншот, анализируют его свёрточной нейросетью и потом с помощью reinforcement-обучения учат «генерала» командовать.

В «Блицкриге 3» работает ИИ Борис, он решает более конкретную задачу, чем ребята из Deep Mind. Система здоровенная и размашистая, но свёрточная нейросеть там тоже работает.

Изображение в текст
Изображение в текст

Это очень популярная картинка — когда Google научили по картинке понимать текст, он нароллил такую картинку, которая в поисковой системе сама случайно вылезла. Сначала никто не мог понять, почему. Потом пришло осознание, как этому обучить — сворачиваем картинку свёрточной сетью, задаём описание и говорим — «меняй коэффициенты» .

Super Resolution
Super Resolution

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

Style Transfer
Style Transfer

Это то, что в прошлом году наделало шуму — перенос стиля с одной картинки на другую. Так работала Prisma. А справа можно увидеть, как картинки в играх могут преобразовываться (выглядит очень плохо).

Neural Storyteller
Neural Storyteller

Это ещё веселее. Тут анализируют картинку, берут её краткое описание и с помощью переноса стиля, как в Prisma, делают текст романтическим. Это абсолютно автоматически сгенерированная история, но ваш мозг в силу того, как он так устроен, «родит» сюжет сам.

Картина по скетчу NeuralDoodle
Картина по скетчу NeuralDoodle

Главная боязнь художников — нарисовали плохо, нажали кнопочку, получилось хорошо.

Паттерн
Паттерн

Это текстуры. Тем же самым переносом стиля одним кликом можно сделать из одной текстуры — много.

Нейросеть — друг человека: глава Luden.io о машинном обучении и разработке

Здесь нейросеть генерирует картинку на основе текста. Только недавно совершили прорыв в этой области.

Текстуринг по фотографии
Текстуринг по фотографии

А вот нейросеть делает из фотографии трёхмерное лицо. Зачем? Пока сложно понять, но можем.

Модель по фотографии
Модель по фотографии

Недавно русские ребята из Vision Labs выпустили приложение Face DJ в AppStore. Оно из вашего лица будет делать 3D-модель.

3D-сцена по глубине
3D-сцена по глубине

Здесь мы подаём на вход картинку, а в качестве ожидаемого результата задаём 3D-сцену. Её и получаем. К сожалению, воксельную.

Арифметика объектов
Арифметика объектов

Это продолжение того же — мы можем вычитать стулья. То есть производить арифметические операции с 3D-объектами. Нейросеть сама поймёт, что же мы имели ввиду. Для человека это логично, но для машины раньше такое было невозможно.

Распознавание скетчей AIDraw.net
Распознавание скетчей AIDraw.net

Это наша игра AIDraw про рисование. Нейросеть в телефоне на CPU распознаёт, что мы нарисовали, и угадывает, что же мы хотели изобразить на самом деле. Слева знаменитая картина — кто-то из игроков так нарисовал «Мону Лизу», нейросеть всё верно распознала.

Auto Draw
Auto Draw

А это то, что сейчас делает Google. Именно в этом они видят будущее ИИ: вы рисуете плохо, нейросеть определяет, что вы хотели изобразить, и меняет рисунок.

AIDraw и «гугловая» рисовалка — это то, что нам может позволить найти новые ощущения от игр. Когда вы играете в «крокодила» с нейросетью — это особенные эмоции. Это вроде бы всё то же самое, что было, но эмоции другие.

Вопросы и ответы

А где именно используется машинное обучение в играх?

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

Предположим, у нас есть нейросеть, которая контролирует передвижение юнитов по карте. Как известно, для обучения нейросети нужен датасет. Где его взять?

Набрать датасет самому — самый интересный вариант. Вот, например, игра — Ai Draw. Я не буду рассказывать все секреты, но она несёт стратегическую задачу. Она набирает всё, что игроки рисуют. Мы набрали уже более 70 тысяч рисунков на сервер. Это уже вполне вменяемый датасет. А начинали мы с тысячи рисунков, которые просто валялись в векторном формате на разных стоках. Они там как раз разбиты по классам. Мы оттуда и взяли. Но картинки — это самый простой вариант.

2121
2 комментария

Комментарий недоступен

1

Картинки красивые и ответы интересные!