我有 2 个神经网络:
- 使用离策略强化学习预测动作值 Q(s, a) - 估计对对手平均行为的最佳响应。
- 使用监督分类模仿自己的平均最佳响应行为。
这是我的模型(Keras):
# 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
正如 Heinrich 和 Silver 的论文“不完美信息游戏中的自我游戏的深度强化学习”中所述 - 网络必须更新如下:
我不确定我是否正确实施了它 - 我确定categorical_crossentropy
并且mean_squared_error
是正确的损失函数。但我不确定是否softmax
并且relu
是正确的激活函数。
如论文所述:
为了在 Leduc Hold'em 中学习,我们手动校准了 NFSP,用于具有 64 个神经元的 1 个隐藏层和校正线性激活的全连接神经网络。
他们relu
用作激活函数,但我猜他们认为是best response network
因为在监督分类中使用它没有意义relu
,我想获得可能动作的概率分布。
我无法重现论文中的实验,只是想确保网络设置正确。
干杯