首页 文章

使用softmax进行Keras强化训练

提问于
浏览
1

我正在研究的项目使用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))

Update, test results

我只用正强化样本进行测试,省略所有负面例子,从而消除负面学习率 . 获胜率正在上升,它正在改善,我可以安全地假设使用负学习率 is not correct .
有人对我们应该如何实施它的任何想法?

Update, model explanation

我们正在尝试重新创建缓慢的政策网络AlphaGo as described by DeepMind

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

1 回答

  • 0

    不确定它是否是最好的方式,但至少我发现了一种有效的方法 .

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

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

    • 应用softmax(必须未学习的动作获得非零值...)

    • 在所有其他操作上重新分配旧操作值

    • 将所有illigal动作值设置为零并分配总删除值

    • 分配与其他值的值成比例的值

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

相关问题