当前位置: 首页 > 知识库问答 >
问题:

为什么DQN会为所有观测的动作空间(2)中的所有动作提供类似的值

闾丘德业
2023-03-14

我有一个DQN算法,可以学习(损失收敛到0),但不幸的是,它学习了一个Q值函数,使得两个可能动作的Q值都非常相似。值得注意的是,Q值在每次观测中变化很小。

详细信息:

>

  • 该算法播放OpenAI Gym的CartPole-v1,但使用屏幕像素作为观察值,而不是提供的4个值

    我提供的奖励功能提供的奖励为:如果游戏未结束,则为0.1;如果游戏结束,则为-1

    衰变率(γ)为0.95

    对于前3200个动作(填充一些重播内存),epsilon为1,然后退火100000多个步骤,使其值为0.01

    回放内存大小为10,000

    conv网络的体系结构是:

    • 输入大小为screen\u像素的层
    • conv第1层有32个过滤器,带有内核(8,8)和步幅(4,4),relu激活功能,并且在输出时填充为与输入相同的大小
    • conv第2层有64个过滤器,带有内核(4,4)和跨距(2,2),relu激活功能,并且在输出时填充为与输入相同的大小
    • conv第3层有64个过滤器,带有内核(3,3)和跨距(1,1),relu激活功能,并且在输出时填充为与输入相同的大小
    • 一个扁平层(这是为了改变数据的形状,以便将其输入到一个完全连接的层中)
    • 具有512个节点和relu激活功能的全连接层
    • 具有2个节点的输出完全连接层(动作空间)
  • 共有1个答案

    傅雪松
    2023-03-14

    只要游戏还没有结束,每一步都提供0.1的正奖励,可能会使游戏超过1的惩罚几乎无关紧要。特别是考虑到您使用的折扣系数。

    不看源代码就很难判断,但我最初建议您在游戏结束时只提供负面奖励,并删除正面奖励。

     类似资料:
    • 问题内容: 我不明白为什么这会使编译器感到困惑。我正在使用泛型类型来保存与和方法无关的对象。我一直认为并且在功能上是相同的,但是我一定会误会。当上课的时候我得到了。这堂课符合我的期望。这里发生了什么? 问题答案: 关于原始类型是如何工作的(您已省略了参数的泛型类型)是,它们的 所有 泛型及其方法也将被删除。因此,对于raw ,和方法 也将 丢失其泛型。

    • 我有一个GridLayout(我以编程方式向其中添加子元素)。 结果很糟糕,因为GridLayout没有填满所有可用空间。 这就是结果: 这是我的XML:

    • 我已经使用$.mobile.changepage在我的phonegap jquerymobile项目中进行重定向。然而,让我困惑的是,我需要将所有页面的脚本放在同一个文件中index.html.否则,重定向页面无法执行其标头中的功能。 例如,我的index.html似乎是 然后,我的设备将重定向到测试。html,似乎是 然而,脚本永远不会在test.html.执行然后我把脚本index.html,

    • 我正在尝试创建一个地图减少工作在Java的表从一个HBase数据库。使用这里的示例和internet上的其他内容,我成功地编写了一个简单的行计数器。然而,试图编写一个实际对列中的数据执行某些操作的程序是不成功的,因为接收的字节总是空的。 我的司机工作的一部分是这样的: 如您所见,该表称为。我的映射器如下所示: 一些注意事项: 表中的列族只是。有多个列,其中一些列称为和(第一次看到); 即使值正确显

    • 问题内容: 当我运行以下代码片段时 我收到以下消息: 并有4个条目(与打印相对应的3的a为0(实际错误为18) 但是,如果我替换为,则会得到预期的结果: 消息是,我在…中只有一个条目 有什么办法可以避免??的奇怪行为? 问题答案: 不,您无法避免这种行为。它是TdsParser.ThrowExceptionAndWarning()编写方式的结果 特别是这条线 我的猜测是,无论出于何种原因,对于Ex

    • 在Scala中,有一个方便的惯例,即通过伴随对象提供集合工厂方法,使用伴随对象的方法。所以,如果我想创建一个包含元素1、2和3的列表,我只需使用。所有集合类型的模式都是一致的。 在Kotlin中,如果我写我会得到一个编译错误。要创建包含1、2和3的列表,必须使用<代码>列表是一个接口,所以它显然没有构造函数。可能有伴星,但没有。有一个函数,不过它的签名与Scala(