用softmax Keras强化训练
我正在进行的一个项目有一个使用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))
更新,测试结果
我只用正面强化样本进行了一项测试,省略了所有负面的例子,因此也是负面的学习率。 获胜率在上升,这是提高,我可以放心地假设使用负面的学习率是不正确的 。
任何人有什么想法,我们应该如何实施它?
更新,模型说明
我们正在尝试按照慢策略网络DeepMind所述重新创建AlphaGo:
对于训练管道的第一阶段,我们利用监督学习13,21-24预测了围棋游戏中的专家动作。 SL策略网络pσ(a | s)在具有权重σ的卷积层和整流器非线性之间交替。 最终的softmax层输出所有合法移动的概率分布a。
不知道它是否是最好的方式,但至少我找到了一种可行的方法。
对于所有负面训练样本,我重新使用网络预测,将我想要忘记的动作设置为零,并调整所有值再次总计为1
我尝试了几种方法来调整它们,但没有运行足够多的测试来确定最佳效果:
可能还有其他几种方法可以这样做,这可能取决于用例的最佳效果,并且可能有更好的方法来实现,但至少可以起作用。
链接地址: http://www.djcxy.com/p/84699.html上一篇: Keras reinforcement training with softmax
下一篇: Automatic feature extraction from chess board positions