2017-07-12 258 views
1

我正在进行的一个项目有一个使用REINFORCE算法的强化学习阶段。使用的模型具有最终的softmax激活层,并且因为负面的学习率被用作负面奖励的替代品。我对这个过程有些怀疑,并且找不到有关使用负面学习率的文献。用softmax Keras加固培训

是否通过切换正向和负向学习率来重新学习学习工作?如果不是什么会更好的办法,摆脱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的游戏中移动使用监督 学习13,21-24。 SL策略网络pσ(a | s)在具有权重σ的卷积层 和整流器非线性之间交替。一个最终的softmax 图层输出所有合法移动a的概率分布。

+0

我没有看过你链接的论文。您的网络尝试近似的功能是什么?状态值函数?状态动作值函数?还有别的吗?无论如何,如果函数可以取负值,则使用softmax作为输出是不合适的 –

+0

我认为这是RocAlphaGo项目的一部分。你有没有得到负面的学习率工作?我正在尝试将AlphaGo方法用于其他棋盘游戏,并且陷入了同一个地方。 –

+0

事实上,对于RocAlphaGo项目,没有我跑了一堆测试,但没有一个被证明是解决方案。我们得到的最好结果是只用正面增强材料样本进行训练......但这有点浪费。还有一些更紧急的东西,但是当我将注意力转向这个并找到一些解决方案时,我会在这里发布它 – MaMiFreak

回答

0

不知道它是否是最好的方式,但至少我找到了一种可行的方法。

所有否定训练样本我重用网络预测,设定我想忘掉零和调整所有值再次总结到一个

我尝试了几种方法来调整之后他们却没有行动运行足够的测试,以确保有什么效果最好:

  • 申请SOFTMAX(的行动,必须是没有学问得到一个非零值。)
  • 于所有其他行动重新分配的老动作值
  • 设置的所有illigal行为离子值为零,分配总的去除值
  • 分配比例值到其他值的平均值

可能还有其他几种方法可以做到这一点,这可能取决于使用情况下什么最有可能一个更好的方式来做到这一点,但至少可以这样做。