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 Здесь вы можете узнать больше о том, что и где я работаю