#keras #deep-learning #conv-neural-network #reinforcement-learning
#keras #глубокое обучение #conv-нейронная сеть #подкрепление-обучение
Вопрос:
У меня есть пользовательская среда, где состояние представляет собой 2D-матрицу из 11 строк (равную количеству удовлетворяемых пользователей) и 3 столбцов. Каждый столбец может принимать значение либо 0, либо 1, и в каждой строке может быть только один столбец со значением 1.
Пример матрицы состояний:
(
(1, 0, 0),
(0, 0, 0),
(0, 1, 0),
(1, 0, 0),
(0, 0, 1),
(0, 0, 1),
(0, 0, 0),
(0, 0, 0),
(1, 0, 0),
(0, 1, 0),
(0, 0, 0)
)
Действие представляет собой еще одну 2D-матрицу с 12 строками (равными общему количеству ресурсов, доступных агенту) и 11 столбцами (равными количеству пользователей, которых агент должен удовлетворить). Агент должен выбрать ресурс для каждого пользователя. У каждого пользователя может быть только один ресурс, и каждый ресурс может быть предоставлен только одному пользователю на каждом временном шаге.
Пример матрицы действий:
(
('O', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'O', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'Z', 'O', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'Z', 'Z', 'O', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'Z', 'Z', 'Z', 'O', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'O', 'Z', 'Z'),
('Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'),
('Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'O', 'Z'),
('Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z')
)
«O» означает Единицу, что означает, что ресурс был выделен пользователю, а «Z» означает ноль, что означает, что ресурс не был выделен пользователю.
row[0] = ('O', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z')
это означает, что resource0 предоставляется user0 (потому row[0][0] == 'O'
что), потому что в матрице состояний, row[0] = (1, 0, 0)
что означает, что user0 запрашивает предоставление ему ресурса.
Вознаграждение возвращается методом step() в среде обучения с подкреплением, если агент не предоставил ресурс пользователю, который не запрашивал предоставление ресурса. В противном случае возвращается штраф.
Другими словами, матрица состояний имеет row[1] = (0, 0, 0)
; если, скажем, в матрице действий row[1] = ('Z', 'O', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z')
, то resource1 выделяется пользователю 1 (потому row[1][1] == 'O'
что), но пользователь1 не запрашивал ресурс, следовательно, возвращается штраф.
Вознаграждение варьируется в зависимости от того, какой столбец равен 1 в каждой строке матрицы состояний.
Я пытаюсь создать CNN, где входными данными является матрица состояний, а выходными данными — матрица действий. Я пробовал это, используя часть свертки, за которой следует часть де-свертки. Однако я не вижу, как я должен указать нейронной сети, что для каждой строки матрицы состояний она должна выбрать ресурс для выделения пользователю, если он его запросил (ограничение 1), и если ресурс выбран, он заблокирован для этого пользователя и не может быть передается другому пользователю на этом временном шаге (ограничение 2).
Вот пока код части CNN:
def _build_model(self):
inp = Input((11, 3, 1)) ##
x = Conv2D(2, (2, 2))(inp) ## Convolution part
x = Conv2D(4, (2, 2))(x) ##
x = Conv2DTranspose(4, (3, 4))(x) ##
x = Conv2DTranspose(2, (2, 4))(x) ## Deconvolution part
out = Conv2DTranspose(1, (2, 4))(x) ##
model = Model(inp, out)
model.summary()
model.compile(optimizer=Adam(learning_rate=self.learning_rate), loss='mean_squared_error')
return model
Я понятия не имею, правильно ли то, что я делаю, или нет, и если метод свертки / де-свертки лучше всего подходит для моей проблемы.
Вместо того, чтобы выводить CNN в виде 2D-матрицы, я подумал, что сделаю вывод в виде массива с ресурсами, пронумерованными от 0 до 11 (12 ресурсов), выбранных сетью для каждого пользователя, затем вручную преобразуйте его в матрицу, потому что среда нуждается в ней как в матрице длярасчет вознаграждения. Однако я не уверен, что это осуществимая идея.