Каким образом команда OpenAI Five для игры в Dota объединяла игровые юниты (units)?
Краткое содержание
Я не являюсь экспертом в области искусственного интеллекта, поэтому прошу прощения, если этот вопрос покажется простым или легким. Я пытался реализовать сеть, аналогичную сети OpenAI, для другой игры и заметил, что полностью не понимаю, как работает эта сеть. Ниже приведено изображение сети OpenAI Five. Основной вопрос: Каким образом данные конкатенируются? Каковы размеры данных сразу после конкатенации перед входом в LSTM-слои (или непосредственно перед их вводом)? Далее я изложу свои мысли, чтобы прояснить ситуацию. Первое толкование: В синей области для юнитов мое первоначальное понимание заключалось в том, что для каждого видимого юнита выход max-pooling'а конкатенируется по столбцам. Таким образом, предполагая, что количество строк равно 1 (так как применяется одномерный max-pooling для каждого юнита), число колонок — $n$, а количество видимых юнитов — $N$, итоговый размер матрицы при конкатенации будет $(1, n \cdot N)$, плюс несколько дополнительных колонок от "pickups" и подобных элементов, показанных на левой стороне модели. Проблемы с этим подходом:
Полный текст
Задать вопрос
Задан 6 лет, 8 месяцев назад
Изменён сегодня
Просмотрен 698 раз
Задан 6 лет, 8 месяцев назад
4
$\begingroup$
Я не эксперт в области искусственного интеллекта, поэтому заранее прошу прощения, если мой вопрос покажется слишком простым или очевидным.
Пытаясь реализовать нейросеть, аналогичную сети OpenAI, для другой игры, я обнаружил, что недостаточно хорошо понимаю принцип её работы.
Ниже приведена схема сети OpenAI Five:
Основной вопрос:
Как именно происходит объединение данных и каковы размеры результирующего массива после объединения перед входом в слои LSTM?
Далее приведены мои рассуждения с целью прояснения вопроса.
Первая интерпретация:
В синей зоне схемы, соответствующей обработке игровых юнитов, изначально я полагал, что выход каждого видимого юнита после применения операции Max-Pooling конкатенируется по столбцам. То есть, при условии, что количество строк равно единице (так как применяется одномерное Max-Pooling отдельно для каждого юнита), а число колонок — $n$, и общее количество видимых юнитов — $N$, то размер итоговой матрицы после конкатенации будет $(1, n \cdot N)$, плюс несколько дополнительных колонок за счёт таких элементов, как предметы на земле, показанных слева от модели.
Проблема этой интерпретации заключается в том, что количество наблюдаемых юнитов игроком может варьироваться от хода к ходу. В таком случае полностью соединённый слой после слоя конкатенации не сможет корректно выполнять свою функцию из-за невозможности выполнения операций умножения матриц при переменном количестве колонок.
Возможное решение данной проблемы — установить максимальное значение количества наблюдаемых юнитов ($N_{\text{max}}$) и дополнять недостающие данные константами, если фактическое количество меньше максимального значения. Так ли это?
Вторая интерпретация:
Моя вторая версия предполагает, что данные конкатенируются по строкам. При этом подходе становится возможным прохождение данных через полносвязный слой, так как количество колонок остаётся постоянным. Исходя из этого предположения, непосредственно перед прохождением через LSTM-данные преобразуются в форму (размер батча, количество строк, количество колонок).
Однако у данного подхода также есть свои недостатки. Если следовать этому подходу, то использование LSTM кажется избыточным, поскольку порядок следования данных здесь не имеет особого смысла (шаг времени в LSTM просто соответствует следующей строке данных, а не реальному временному шагу). Есть ли необходимость использовать LSTM в данном контексте?
Извиняюсь заранее за возможные неясности изложения. Пожалуйста, укажите на них в комментариях, и я постараюсь пояснить подробнее!
Глубокое обучение · OpenAI · Глубокое RL
Поделиться Улучшить этот вопрос Следить Изменено 17 июн. 2020 г., в 9:57 Community Bot 1 Задан 25 мар. 2019 г., в 9:19 Isamu Isozaki 1412 бронзовых знака $\endgroup$
Добавить комментарий | 1 ответ 1 Отсортировано по: Сбросить сортировку По наибольшему количеству голосов (по умолчанию) По дате изменения (последние сначала) По дате создания (старые сначала)
0
$\begingroup$
Коротко говоря: операция Max-Pooling.
На схеме видно, что везде, где имеется переменное количество входных данных (предметы на земле, юниты, модификаторы героев, способности и т.д.), следует операция Max-Pooling. Конкретная реализация Max-Pooling мне неизвестна.
По ссылке https://neuro.cs.ut.ee/the-use-of-embeddings-in-openai-five можно найти следующее объяснение:
Обратите внимание, что хотя количество модификаторов, способностей и предметов является переменным, сеть выполняет операцию Max-Pooling над каждым из этих списков. Это означает, что фактически проходит только самое большое значение во всех измерениях. На первый взгляд это выглядит бессмысленно — может показаться, будто вы обладаете способностью, представляющей собой комбинацию всех существующих способностей, например дальнобойной пассивной способностью исцеления. Но похоже, что такой подход работает.
Обработка выполняется отдельно для каждого близлежащего юнита. Результаты обработки общих атрибутов, модификаторов героя, его способностей и предметов затем объединяются вместе. Далее применяются различные методы постобработки в зависимости от типа юнита (вражеский негерой, союзный негерой, нейтральный, союзный герой или вражеский герой).
Наконец результаты постобработки подвергаются операции Max-Pooling по всем юнитам одного типа. Таким образом, эта обработка...