У меня есть 2 нейронные сети:
- Предсказывает значения действий Q (s, a) с использованием обучения подкрепления вне политики - аппроксимирует лучший ответ на среднее поведение оппонента.
- Подражайте своему собственному усредненному поведению лучшего отклика, используя контролируемую классификацию.
Это мои модели (Керас):
# the best response network:
def _build_best_response_model(self):
input_ = Input(shape=self.s_dim, name='input')
hidden = Dense(self.n_hidden, activation='relu')(input_)
out = Dense(3, activation='relu')(hidden)
model = Model(inputs=input_, outputs=out, name="br-model")
model.compile(loss='mean_squared_error', optimizer=Adam(lr=self.lr_br), metrics=['accuracy'])
return model
# Average response network:
def _build_avg_response_model(self):
input_ = Input(shape=self.s_dim, name='input')
hidden = Dense(self.n_hidden, activation='relu')(input_)
out = Dense(3, activation='softmax')(hidden)
model = Model(inputs=input_, outputs=out, name="ar-model")
model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=self.lr_ar), metrics=['accuracy'])
return model
Как указано в статье Генриха и Серебра "Глубокое обучение с подкреплением от себя"-Играть в несовершенно-информационные игры »- сети должны быть обновлены следующим образом:
Я не уверен, правильно ли я это реализовал- Я уверен, что categorical_crossentropy
и mean_squared_error
- правильные функции потерь.Но я не уверен, что softmax
и relu
являются правильными функциями активации.
Как указано в документе:
Для обучения в Leduc Hold'emМы вручную откалибровали NFSP для полностью подключенной нейронной сети с 1 скрытым слоем из 64 нейронов и выпрямленными линейными активациями.
Они используют relu
в качестве функции активации, но я предполагаю, что они относятся к best response network
потому что не имеет смысла использовать relu
в контролируемой классификации, где я хочу получить распределение вероятностей по возможным действиям.
Я не могу воспроизвести эксперименты на бумаге и просто хочу быть уверен, что сети настроены правильно.
Cheers