使用softmax进行Keras强化训练

时间:2017-07-12 14:28:53

标签: keras reinforcement-learning softmax

我正在研究的项目使用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,这是一个缓慢的政策网:

  

对于培训管道的第一阶段,我们以先前的工作为基础   用监督来预测Go游戏中的专家动作   learning13,21-24。 SL策略网络pσ(a | s)在卷积之间交替   具有权重σ的层和整流器非线性。最终的softmax   层输出所有合法移动的概率分布a。

1 个答案:

答案 0 :(得分:0)

不确定这是否是最佳方式,但至少我发现了一种有效的方法。

对于所有负面训练样本我重用网络预测,将我想要忘记的动作设置为零并调整所有值以再次总结为一个

我尝试了几种方法来调整它们,但没有运行足够的测试来确定什么效果最好:

  • 应用softmax(必须未学习的操作获得非零值...)
  • 将旧操作值重新分配给所有其他操作
  • 将所有illigal操作值设置为零并分配总移除值
  • 分配与其他值的值成比例的值

可能有其他几种方法可以做到这一点,它可能取决于最佳使用情况的用例,并且可能有更好的方法,但这个方法至少有效。