StarCraft II используется как среда машинного обучения для исследований со времен BloodWar. Пару лет назад DeepMind выпустил pysc2, исследовательскую среду для StarCraft II, а позже, в 2019 году, Whiteson Oxford Research Lab с открытым исходным кодом SMAC, кооперативную многоагентную среду, основанную на pysc2 с кооперативной настройкой, что означает, что в этой среде несколько агенты сотрудничают для достижения общей цели. Эта среда отличается от среды, встроенной в pysc2: она задумана не для решения задачи полной лестничной игры, а для создания нового ограниченного набора многоагентных задач в кооперативной установке с упором на микрозадачу.

Сегодня мы погрузимся в общий алгоритм и архитектуру QMIX.

Многоагентное обучение с подкреплением (MARL) имеет дело с такими проблемами, как проклятие размерности в действиях, проблема назначения кредитов для нескольких агентов и моделирование информационного состояния других агентов. Нововведения в MARL также заключаются в вычислении, представлении и использовании функции «действие-значение», которую изучает большинство методов RL.

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

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

Концепция децентрализованной политики сводится к тому, что каждый агент принимает индивидуальные решения на основе как информации, наблюдаемой локально, так и сообщений, полученных от соседей. Централизованное обучение говорит о методе обучения. Итак, мы определяем функцию Action-Value Qtot (централизованное обучение) и функцию Action-Value Qa, которые соответствуют каждому из агентов.

Q-MIX: между COMA и VDN

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

Одна из основных первых идей - проверить ограничение, которое обеспечивает монотонность (не возрастающую, в данном случае первая производная положительна) взаимосвязи между функцией глобального действия-значение и Действие-значение функции каждого из агентов в каждом действии, избегая факторизации, исходящей от VDN

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

Общая архитектура QMIX.

Общая архитектура Q mix состоит из 3-х различных частей:

  • Агентские сети: для каждого агента a существует агентская сеть, которая представляет его функцию значения. Он получает текущее наблюдение и последнее действие в качестве входных данных на каждом временном шаге и возвращает функцию значения действия Q. Топология NN находится в семействе DRQN, в котором используется GRU, поскольку она облегчает обучение в более длительных временных масштабах и, вероятно, быстрее сходится.

Это означает, что если мы имеем дело со средой, например, с четырьмя агентами, у нас может быть 4 агента RNN. Реализованный код определен в PyMARL в pytorch

import torch.nn as nn
import torch.nn.functional as F
class RNNAgent(nn.Module):
    def __init__(self, input_shape, args):
        super(RNNAgent, self).__init__()
        self.args = args
        self.fc1 = nn.Linear(input_shape, args.rnn_hidden_dim)
        self.rnn = nn.GRUCell(args.rnn_hidden_dim, args.rnn_hidden_dim)
        self.fc2 = nn.Linear(args.rnn_hidden_dim, args.n_actions)
def init_hidden(self):
        # make hidden states on same device as model
        return self.fc1.weight.new(1, self.args.rnn_hidden_dim).zero_()

Этап обучения кодируется во фреймворке PyMARL, здесь

  • Смешивающая сеть: сеть прямого распространения, которая принимает выходные данные агентов (функции Qa Action-Value каждого из агентов) и выдает общую функцию Action-value (Qtot).

А вот и самое интересное: веса нейронной сети производятся отдельной гиперсетью, что означает, что существует нейронная сеть, которая генерирует веса для другой сети. Выходной сигнал гиперсети - это вектор. Использование гиперсетей (принудительно положительных) позволяет обусловить веса монотонной сети

Чтобы наложить ограничение, описанное выше, веса должны быть неотрицательными.

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

Реализация Mixing Network QMixer приведена ниже.

class QMixer(nn.Module):
    def __init__(self, args):
        super(QMixer, self).__init__()
         self.args = args
        self.n_agents = args.n_agents        
self.state_dim = int(np.prod(args.state_shape))         self.embed_dim = args.mixing_embed_dim
         self.hyper_w_1 = nn.Linear(self.state_dim, self.embed_dim * self.n_agents)
        self.hyper_w_final = nn.Linear(self.state_dim, self.embed_dim)
         # State dependent bias for hidden layer        self.hyper_b_1 = nn.Linear(self.state_dim, self.embed_dim)
# V(s) instead of a bias for the last layers
        self.V = nn.Sequential(nn.Linear(self.state_dim, self.embed_dim),
                               nn.ReLU(),                               nn.Linear(self.embed_dim, 1))

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

Благодарим за то, что вы достигли этого момента и узнали больше о многоагентной совместной настройке и QMIX. Не стесняйтесь читать газету, чтобы узнать о ней больше.

Хотел бы предложить вам узнать больше о SMAC и его реализациях с фреймворком PyMARL!

gl & hf!

Хотите начать работу со средой обучения StarCraft II? Посетите эту codelab Здесь вы можете узнать больше о том, что и где я работаю