Всем привет! Меня зовут Уилл Шеннон, и это мой первый средний пост и моя первая лично разработанная нейронная сеть. Проект, который я представлю ниже, относительно прост, но я приветствую любые отзывы. Спасибо!

Цель

Цель, которую я поставил для этого проекта, состояла в том, чтобы увидеть, какую точность я могу получить при прогнозировании результатов одной из моих любимых MOBA, Heroes of the Storm (HOTS).

«MOBA» - это жанр соревновательной видеоигры, в которую обычно играют две команды по пять игроков, которые сражаются друг против друга на онлайн-арене. Перед каждым раундом на арене игроки выбирают из широкого набора различных персонажей / героев / чемпионов (далее я буду использовать термин «герои»), каждый из которых обладает уникальным набором боевых способностей и различными способами воздействия. исход матча. Вообще говоря, герои попадают в определенный «класс», например, саппорт, танк или убийца. Каждый класс по-своему влияет на поле битвы, и лучшие составы команд, как правило, содержат смесь классов, а не полный набор того или иного типа.

Данные

Я получил свои данные с Hotslogs, веб-сайта, который использует стороннее программное обеспечение для отслеживания данных о матчах, сыгранных участвующими пользователями. Любой игрок может загрузить программное обеспечение горячих журналов, чтобы загрузить свои собственные результаты матчей и внести свой вклад в набор данных. Здесь я должен подчеркнуть, что загрузка совпадений является добровольной, поэтому имеющиеся там данные не представляют собой надлежащую случайную выборку.
Hotslogs публикует данные за несколько месяцев для загрузки сообществом. Мой набор данных был загружен 4.12.17 и содержал в общей сложности ~ 1,8 миллиона совпадений.

Для каждого матча у меня были следующие функции:

  • Выбор героя / персонажа для каждого члена каждой команды, также известный как «состав» каждой команды.
  • Победный статус каждого игрока - пять победителей и пять проигравших; это были мои лейблы
  • Уровень каждого игрока на соответствующем герое. Думайте об этом как об абстракции того, сколько опыта игрок получил с выбранным героем.
  • MMR каждого игрока. Это показатель мастерства игрока, основанный примерно на его соотношении побед и поражений.
  • Карта / арена, на которой проводился матч. Всего их 20, хотя, поскольку карты меняются по расписанию, мой набор данных включал только 12.
  • Тип очереди, с которой было начато совпадение (подробнее об этом ниже)
  • Куча внутриигровой статистики, такой как: нанесенный урон, количество смертей, количество убийств и т. Д.

Функции, которые я использовал на тренировках, выделены жирным шрифтом выше. Обратите внимание, что единственная исключенная статистика - это набор внутриигровой статистики. Я исключил эти потенциальные возможности, потому что цель этой модели - предсказать победителя до начала матча, когда данные в игре еще не доступны.
Я попытался использовать in - статистика игры косвенным образом с использованием встраиваний, но подробности об этой попытке можно найти в разделе «Что сработало» ниже.

Упомянутый выше «тип очереди» можно примерно сравнить с выбором вслепую и черновиком. Слепой выбор означает, что каждый набор игроков выбирает своих героев, не зная напрямую о выборе другой команды. Нормальный драфт - это установка, в которой каждая команда чередует пикировки, так что они могут постепенно видеть, какой состав работает другая. В этом посте я сосредоточусь исключительно на очереди вслепую, которая в игре известна как Quickmatch или QM. Это сократило мои данные до ~ 1,3 миллиона совпадений.
Поскольку выбор героев слепой, HOTS пытается сбалансировать матчи, обеспечивая одинаковый состав ролей в каждой команде. Таким образом, если одна команда состоит только из убийц, другая команда, скорее всего, будет состоять из ассасинов или смеси ассасинов и специалистов (уникальная роль для HOTS).

Что сработало!

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

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

x = hero_embeddings
x = Flatten () (x)
x = Concatenate () ([x, hero_level_in, MMR_in])
x = Dense (90, Activation = 'relu ') (x)
x = Dropout (p / 5) (x)
x = Concatenate () ([x, map_id_in, match_length_in])
x = Dense (90, активация = 'relu') (x)
x = Dropout (p) (x)
x = Dense (1, activate = 'sigmoid') (x)
nn = Модель ([hero_in, hero_level_in, MMR_in, map_id_in, match_length_in], x)
nn.compile (Adam (0,001), loss = 'binary_crossentropy', metrics = ['precision'])

Эта модель в итоге достигла точности 58,54%.

Одним из наиболее интересных аспектов этого результата было то, что эта точность на полные 1,5% точнее, чем та же модель, обученная исключительно на данных из трех других типов очередей (лига героев, командная лига и драфт без рейтинга). На мой взгляд, есть два возможных объяснения этого явления:

  • Люди ведут себя в быстрых матчах иначе, чем в любой из очередей на драфте без слепых.
  • Мой алгоритм получил некоторое представление об алгоритме сопоставления HOTS quickmatch и смог определить, что композиции регулярно сопоставляются с более слабыми.

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

Можно потратить уйму времени, пытаясь угадать и исследовать, что делает эту команду такой магически могущественной, но моя теория заключается в том, что Тиранда - это стержень. Тиранда выполняет уникальную роль гибридной поддержки / убийцы, и нет героев, которые занимали бы эту должность так, как она. Из-за этого HOTS трудно объединить противостоящих героев против нее, и ей приходится довольствоваться ближайшими альтернативами, такими как Абатур, Тассадар или даже Заря. В каждом из этих случаев состав Тиранды имеет спорное преимущество в среднем над другой командой: Абатур нужно время, чтобы привыкнуть, у Тассадара нет постоянного исцеления, а Заря очень хороша. плохой одиночный танк с посредственными возможностями поддержки.

Замечу, что данные за декабрь позволили получить другой набор топ-команд (наиболее распространенными в данном случае были Чо, Галл и Ана), но они сделали менее интуитивный пример явления, которое я описал выше.

Что вроде сработало!

Встраивания на основе статистики. Одним из самых интересных экспериментов была моя попытка интегрировать внутриигровые данные в вложения героев. Как я уже говорил ранее, я не могу использовать внутриигровые данные в первичной модели, поэтому создал копию моей первичной модели с добавлением внутриигровых данных в качестве входных. Целью здесь было обучить новые вложения, которые взаимодействуют с этими внутриигровыми данными, чтобы научиться различать роли героев.
Вот наивный и чисто познавательный пример того, что, как я думал, может исходить от использования этих новых встраиваний: вложения узнают больше смысла каждой роли и, таким образом, «группируют» героев по этим ролям, таким как что обмен разными героями из группы приведет к аналогичным результатам, а обмен за пределами этой группы создаст другую динамику. Это, конечно, то, что модель могла бы изучить без встраиваний, но я надеялся, что вложения упростят задачу и тем самым улучшат конечную точность.
Хотя эти вложения «статистики» не улучшили точность, когда я их портировал Вернувшись к первичной модели, как необучаемые веса вложения (я также пробовал настроить их на обучаемость), они действительно предложили некоторые интересные идеи относительно эффективности предопределенных ролей. Чтобы понять это, я использовал PCA для векторов внедрения и распечатал 10 лучших героев для каждого из моих основных компонентов. Для экономии места я приведу только пару наиболее интересных случаев. Слева вы увидите оценку героя для этого компонента, а с правой стороны вы увидите имя героя.

  • Главный компонент 0:
    (0,13314108921082315, «Иллидан»),
    (0,11246925453094782, «Валира»),
    (0.1100585505002602, «Зератул»),
    (0,10737316525681083, «Керриган». ),
    (0,10482633804384837, 'Гэндзи'),
    (0,10210617156358424, 'Аларак'),
    (0,10144293633639311, 'Малтаэль'),
    (0,095988347920851258, 'Кассия'),
    (0,089514422410665664, «Хроми»),
    (0,088061771610384476, «Седогрив»)
  • Основной компонент 2:
    (0,18769775448636788, «Хроми»),
    (0,16529753950928272, «Ли-Мин»),
    (0,16420106169510115, «Малтаэль»),
    (0,16186162108466401, « Кель'тас »),
    (0,14546559490616534,« Галл »),
    (0,14165287709468058,« Кел'Тузад »),
    (0,13806908721788147,« Абатур »),
    (0,13639497447922114 , 'Пробиус'),
    (0,12434054645627639, 'Медив'),
    (0,12220752197399824, 'Сильвана')

Если вы не знакомы с HOTS, эти результаты интересны, потому что они, кажется, фиксируют полутонкие различия между разными подгруппами убийц. Чтобы квалифицировать это различие, нужно углубиться в цифры, но одно нестандартное различие, которое я заметил между двумя группами, заключается в том, что первая более строго придерживается «классической» группы убийц с высоким риском и высокой наградой. в то время как последняя группа, которая также включает в себя смесь специалистов, имеет тенденцию к роли мага, основанного на осаде / задней линии. Существуют очевидные исключения из этих ярлыков, например, Хроми и Малтаэль присутствуют в обеих группах, но, учитывая их относительное положение в каждой, я считаю, что моя оценка все еще может выдерживать некоторую критику.

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

Я также попытался тренироваться на модели, используя в качестве входных данных идентификаторы классов, предписанные HOTS, но это не повлияло на точность подгонки.

MMR. Как вы помните, MMR - это показатель навыков каждого игрока, примерно основанный на их соотношении побед / поражений. Поэтому может показаться нелогичным, что мера мастерства бесполезна для прогнозирования шансов команды на победу, и тем не менее, это действительно были результаты. Я обнаружил, что после 18 эпох обучения моей очень простой модели без данных MMR, она дала лишь очень небольшую разницу в точности (в лучшем случае 0,19%) по сравнению с той же моделью, использующей данные MMR.
Я предлагаю следующие причины:

  • HOTS довольно хорошо справляется с балансировкой MMR между подобранными командами, а это означает, что ни одна команда никогда не будет иметь слишком значительного преимущества над другой командой (в быстром матче).
  • Вполне возможно, что HOTS MMR не является идеальным показателем навыков игрока, что, конечно же, повлияет на значение корреляции между MMR и победой.

Я не спорю, что одна из вышеперечисленных причин полностью или даже частично объясняет отсутствие влияния MMR на точность модели, но это идеи, на которых могут быть основаны другие, возможно, более точные предположения / исследования. Независимо от текущего состояния, HOTS скоро внедрит новую систему сопоставления, основанную на игровых характеристиках, а не на выигрыше / проигрыше, и я очень рад увидеть, как модель отреагирует на это изменение.

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

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

Выводы

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

  • Возможно, удастся «поиграть» с алгоритмом сопоставления быстрого совпадения.
  • Встраивание на основе статистики может предложить более глубокое понимание разделения классов и подклассов.
  • Рейтинг HOTS MMR может быть не таким ценным, как можно было бы предположить.

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

Следующие шаги

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

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

Помимо этих моделей, я планирую переоборудовать свои алгоритмы для LoL и Dota, просто чтобы увидеть, как повышается точность в крупнейших MOBA на рынке.