Предварительная тренировка, часть 3: Самовнимание

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

Однако форма внимания, которую я объяснил в Предварительной части 2, более проста, чем та, которую я в конечном итоге использовал для этого проекта.

Форма, которую я использовал, называется самовниманием.

Сегодня я объясню, почему я использовал эту форму внимания, и приведу примеры из своего проекта, чтобы показать вам, как самовнимание помогает системам рекомендаций выражать взаимосвязь между игровыми функциями, такими как предметы для покупки и достижимые уровни, в более разумной и эффективной форме. способ.

Во-первых: что такое рекомендательные системы и как мы их используем в играх?

Что такое системы рекомендаций?

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

Возможно, вы столкнулись со следующим: вы открываете Google Chrome, но не знаете, что ищете. На вкладке приветствия вы видите «статьи для вас», и ваше внимание привлекает интересующая тема. Вы открываете ссылку и читаете рассказ.

Как Google узнал, что вы хотите получать эту новость? Благодаря системе рекомендаций.

Системы рекомендаций в мобильных играх

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

И рекомендации оказывают определенное влияние: по нашим данным, более 40% людей напрямую купят то оборудование, которое им рекомендовано.

Как системы рекомендаций делают игры лучше?

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

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

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

Поскольку я не вправе разглашать название этой игры, назовем ее «Мир роботов».

В Robot World игроки создают команду роботов и снабжают их инструментами и особыми навыками, чтобы атаковать штаб-квартиры других игроков. Игрокам необходимо хорошо знать роботов, чтобы создать единую команду.

Мы в команде разработчиков можем видеть типы роботов и навыки, которые игроки обычно предпочитают использовать, и мы понимаем, с каким количеством вариантов они сталкиваются, пытаясь оптимизировать свою команду.

При таком большом количестве решений игрокам необходимо какое-то руководство или дополнительные мнения, чтобы улучшить производительность своей команды и увеличить свои шансы на победу.

Решение проблем: заставить компьютер понимать сложные отношения

Чтобы эффективно направлять наших игроков при принятии решений, нам необходимо понимать и количественно определять тонкую взаимосвязь между навыками разных персонажей и доступным им оборудованием.

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

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

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

Почему нам нужно внимание к себе

В некоторой степени приобретение игрового персонажа и покупка пакетов имеют функции последовательности, а LSTM может отражать последовательность приобретения персонажей и последовательность приобретения пакетов с точки зрения времени.

Мы могли бы использовать описание последовательности в LSTM, чтобы отразить взаимосвязь между различными игровыми ресурсами, но оно дает нам только перспективу времени и не является достаточно простым.

Затем есть CNN, который извлекает локальные объекты и, кажется, отражает отношения между соседними объектами, но он недостаточно гибкий.

Комбинированные функции - это элемент системы рекомендаций, который мы не можем игнорировать. Это относится к сочетанию игровых персонажей, навыков и / или оборудования и отражает взаимосвязь между различными игровыми ресурсами.

Если мы сможем правильно отразить комбинацию функций и взаимосвязей между ними в нашей системе рекомендаций, будет очевидное улучшение производительности системы.

Для этого нам нужно прямое и гибкое решение.

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

Итак, это решает: мы собираемся решить проблему с помощью самовнимания.

Пошаговое руководство по использованию самовнимания

Вот как работает основной процесс самовнимания:

(Имейте в виду, что в нашем примере функции относятся к игровым персонажам, навыкам и комплектам снаряжения, которые наши игроки могут купить.)

Шаг 1. Получите функцию встраивания. Получите вектор внедрения каждого объекта в слой внедрения.

Шаг 2: Инициализируйте матрицу Q, K, V. Матрица Q (запрос), матрица K (ключ), матрица V (значение) - это обучаемые веса в нейронной сети. . Мы используем их, чтобы преобразовать каждую встраиваемую функцию в три вида векторов для расчета весов внимания. Мы можем инициализировать три матрицы случайным образом, и это даст нам оптимизированный результат после итераций обучения.

Шаг 3. Получите векторы q, k, v. Возьмем одну особенность, например, персонаж «Робот1». Мы получаем его функцию встраивания «вектора вложения Robot1» на шаге 1. Теперь, умножив «вектор вложения Robot1» на матрицу Q, K, V на шаге 2, мы преобразуем «вектор вложения Robot1» в три вида векторов: «вектор запроса Robot1» (q1), «ключевой вектор Robot1» (k1) и «вектор значений Robot1» (v1). Примените этот шаг ко всем другим функциям, чтобы получить q2, k2, v2, q3, k3, v3,… qn, kn, vn.

Шаг 4. Рассчитайте веса внимания. Для робота Robot1 веса внимания получаются путем вычисления скалярного произведения (w1) для q1, k1, скалярного произведения (w2) для q1, k2, точки произведение (w3) чисел q1, k3 и так далее, пока qn, ​​kn. Теперь у нас есть веса «Робота1» (w1, w2, w3,… wn). Эти веса могут отражать взаимосвязь между «Robot1» и другими функциями игры.

Шаг 5. Нормализовайте веса внимания. Точечное изображение w1, w2, w3,… wn - это не числа, ограниченные в пределах 0–1. Таким образом, мы можем использовать softmax, чтобы они оставались в пределах 0–1.

Шаг 6. Умножьте веса внимания на v. Вы все еще помните v1, v2, v3,… vn из шага 3? Мы можем умножить w1 на v1, w2 на v2, w3 на v3,… wn на vn. Теперь мы получаем список новых векторов weighted_v1, weighted_v2, weighted_v3,… weighted_vn.

Шаг 7. Суммируйте взвешенные векторы. Просуммируем weighted_v1, weighted_v2, weighted_v3,… weighted_vn, и тогда мы получим один вектор z1, который представляет «Robot1» с добавленной информацией о внимании. Повторяя шаги с 3 по 7, мы можем получить z2, z3,… zn. Теперь мы успешно преобразовали исходное вложение функции на шаге 1 в векторы с вниманием к нему.

И вуаля: в двух словах о самовнушении.

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

Таким образом, мы решили проблему того, как выразить взаимосвязь между игровыми ресурсами способом, понятным компьютеру.

В заключение

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

Далее мы углубимся в обсуждение технологий предварительного обучения на другом примере из моей работы в Yodo1. Не пропустите!