首页 文章

Keras的政策梯度

提问于
浏览
17

我've been trying to build a model using '深度Q-Learning'我有很多动作(2908) . 在使用标准DQN取得了一些有限的成功之后:(https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf),我决定做更多的研究,因为我认为动作空间太大而无法进行有效的探索 .

然后我发现了这篇论文:https://arxiv.org/pdf/1512.07679.pdf,他们使用演员评论模型和政策渐变,然后引导我:https://arxiv.org/pdf/1602.01783.pdf他们使用政策梯度来获得比DQN更好的结果 .

我找到了一些网站,他们已经在Keras中实施了政策渐变,https://yanpanlau.github.io/2016/10/11/Torcs-Keras.htmlhttps://oshearesearch.com/index.php/2016/06/14/kerlym-a-deep-reinforcement-learning-toolbox-in-keras/但是我很困惑它们是如何实现的 . 在前者(当我阅读论文时)似乎不是为演员网络提供输入和输出对,而是为所有权重提供渐变,然后使用网络来更新它,而在后者中他们只计算输入 - 输出对 .

我只是困惑自己吗?我应该通过提供输入 - 输出对来训练网络并使用标准的“适合”,还是我必须做一些特别的事情?如果是后者,我如何使用Theano后端进行操作? (上面的例子使用TensorFlow) .

1 回答

  • 5

    TL; DR

    • 了解如何使用Keras.backend实现自定义丢失函数和渐变 . 你将需要它来获得更高级的算法,一旦你掌握了它,它实际上要容易得多

    • 使用keras.backend的一个CartPole示例可能是https://gist.github.com/kkweon/c8d1caabaf7b43317bc8825c226045d2(虽然它的后端使用Tensorflow但是如果不相同它应该非常相似)

    问题

    玩的时候

    代理需要一个策略,该策略基本上是一个将状态映射到策略的函数,该策略是每个操作的概率 . 因此,代理商将根据其政策选择一项行动 .

    即,政策= f(国家)

    培训时,

    Policy Gradient没有丢失功能 . 相反,它试图最大化预期的奖励回报 . 而且,我们需要计算log(action_prob)*优势的梯度

    • 优势是奖励的功能 .

    • advantage = f(奖励)

    • action_prob是states和action_taken的函数 . 例如,我们需要知道我们采取了哪些操作,以便我们可以更新参数以增加/减少我们采取的操作的概率 .

    • action_prob = sum(policy * action_onehot)= f(states,action_taken)

    我假设是这样的

    • policy = [0.1,0.9]

    • action_onehot = action_taken = [0,1]

    • 然后action_prob = sum(policy * action_onehot)= 0.9

    摘要

    我们需要两个功能

    • 更新功能:f(状态,动作,奖励)

    • 选择动作功能:f(状态)

    你已经知道实现像典型的分类问题并不容易,你只需要模型.compile(...) - > model.fit(X,y)

    然而,

    • 为了充分利用Keras,您应该熟悉定义自定义丢失函数和渐变 . 这与前者的作者基本相同 .

    • 您应该阅读更多关于Keras功能API和keras.backend的文档

    此外,还有许多种政策梯度 .

    • 前者被称为DDPG,实际上与常规政策梯度完全不同

    • 我看到的后者是一个传统的REINFORCE政策梯度(pg.py),它基于Kapathy 's policy gradient example. But it'非常简单,例如它只假设一个动作 . 这就是为什么它可以以某种方式使用model.fit(...)来实现 .

    参考文献

相关问题