【问题标题】:Keras reinforcement training with softmax使用 softmax 进行 Keras 强化训练
【发布时间】: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


【解决方案1】:

不确定这是否是最好的方法,但至少我找到了一种可行的方法。

对于所有负训练样本,我重用网络预测,将我想要取消学习的操作设置为零,然后调整所有值以再次加起来为 1

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

  • 应用 softmax(必须取消学习的操作会获得非零值..)
  • 将旧的操作值重新分配给所有其他操作
  • 将所有非法操作值设置为零并分配总移除值
  • 根据其他值的值按比例分配值

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 2021-06-13
    • 1970-01-01
    • 2019-03-20
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多