【发布时间】:2017-07-12 14:28:53
【问题描述】:
我正在进行的一个项目有一个使用REINFORCE 算法的强化学习阶段。使用的模型有一个最终的 softmax 激活层,因此负学习率被用作负奖励的替代品。我对这个过程有些怀疑,并且找不到太多关于使用负学习率的文献。
强化学习是否适用于在正负之间切换学习率?如果不是更好的方法,请摆脱 softmax 或让 keras 成为一个不错的选择?
损失函数:
def log_loss(y_true, y_pred):
'''
Keras 'loss' function for the REINFORCE algorithm,
where y_true is the action that was taken, and updates
with the negative gradient will make that action more likely.
We use the negative gradient because keras expects training data
to minimize a loss function.
'''
return -y_true * K.log(K.clip(y_pred, K.epsilon(), 1.0 - K.epsilon()))
切换学习率:
K.set_value(optimizer.lr, lr * (+1 if won else -1))
learner_net.train_on_batch(np.concatenate(st_tensor, axis=0),
np.concatenate(mv_tensor, axis=0))
更新,测试结果
我只使用正强化样本进行了测试,省略了所有负样本,因此忽略了负学习率。获胜率正在上升,正在提高,我可以放心地假设使用负学习率不正确。
有人对我们应该如何实现它有任何想法吗?
更新、模型说明
我们正在尝试重新创建 AlphaGo as described by DeepMind,缓慢的策略网:
对于训练管道的第一阶段,我们以之前的工作为基础 关于使用监督预测围棋游戏中的专家移动 学习13,21-24。 SL 策略网络 pσ(a| s) 在卷积 权重为 σ 和整流器非线性的层。最终的 softmax 层输出所有合法移动 a 的概率分布。
【问题讨论】:
-
我没有阅读你链接的论文。您的网络试图逼近什么功能?状态价值函数?状态-动作价值函数?还有什么?在任何情况下,如果函数可以取负值,则使用 softmax 作为输出是不合适的
-
我认为这是 RocAlphaGo 项目的一部分。你有没有让负学习率起作用?我正在尝试将 AlphaGo 方法用于其他棋盘游戏并且卡在同一个地方。
-
确实对于 RocAlphaGo 项目,不,我运行了一堆测试,但没有一个被证明是解决方案。我们得到的最好结果是仅使用正强化样本进行训练时......但这有点浪费。还有一些其他更紧急的事情,但是当我把注意力转向这个并找到一些解决方案时,我会在这里发布
标签: keras reinforcement-learning softmax