Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neural network 基于神经网络的幕式半梯度Sarsa_Neural Network_Reinforcement Learning_Sarsa - Fatal编程技术网

Neural network 基于神经网络的幕式半梯度Sarsa

Neural network 基于神经网络的幕式半梯度Sarsa,neural-network,reinforcement-learning,sarsa,Neural Network,Reinforcement Learning,Sarsa,在尝试使用神经网络作为近似器来实现幕式半梯度Sarsa时,我想知道如何根据当前学习到的网络权重选择最佳操作。如果动作空间是离散的,我可以计算当前状态下不同动作的估计值,然后选择一个给出最大值的动作。但这似乎不是解决问题的最佳方式。此外,如果动作空间是连续的(比如自动驾驶汽车的加速度),它就不起作用 因此,基本上我想知道如何解决第10行选择A'作为q(S',w)的函数,在萨顿的伪代码中: 这些问题通常是如何解决的?你能推荐一个使用Keras的这种算法的好例子吗 编辑:当使用网络作为近似器时,是否

在尝试使用神经网络作为近似器来实现幕式半梯度Sarsa时,我想知道如何根据当前学习到的网络权重选择最佳操作。如果动作空间是离散的,我可以计算当前状态下不同动作的估计值,然后选择一个给出最大值的动作。但这似乎不是解决问题的最佳方式。此外,如果动作空间是连续的(比如自动驾驶汽车的加速度),它就不起作用

因此,基本上我想知道如何解决第10行
选择A'作为q(S',w)
的函数,在萨顿的伪代码中:

这些问题通常是如何解决的?你能推荐一个使用
Keras
的这种算法的好例子吗

编辑:当使用网络作为近似器时,是否需要修改伪代码?例如,我只是最小化网络预测的
MSE
和报酬
R

我想知道如何根据当前学习到的网络权重选择最佳行动

您有三个基本选择:

  • 多次运行网络,针对您正在考虑的“to go with the S”值的每个可能值运行一次。将最大值作为预测的最佳行动(概率为1-ε,否则随机选择用于SARSA中通常使用的ε-贪婪策略)

  • 设计网络以一次估算所有动作值,即有| A(s)|输出(可能填充以涵盖需要过滤掉的“不可能”动作)。这将略微改变梯度计算,最后一层非活动输出(即任何与(S,A)的A不匹配的输出)应为零梯度。同样,只需将最大有效输出作为估计的最佳操作。这比多次运行网络更有效。这也是最近DQN Atari games playing bot和AlphaGo的策略网络所使用的方法

  • 使用a,它通过使用样本来估计梯度,从而改进策略估计器。有关详细信息,请参见的第13章。当存在大量可能的行动时,政策梯度方法变得很有吸引力,并且可以处理连续的行动空间(通过估计最优政策的分布函数-例如,选择正态分布的均值和标准差,您可以从中取样采取行动)。您还可以将策略梯度与中的状态值方法相结合,这可能比纯策略梯度方法更有效

  • 请注意,如果动作空间是连续的,则不必使用策略梯度方法,只需量化动作即可。此外,在某些情况下,即使动作在理论上是连续的,您可能会发现最优策略只涉及使用极值(经典的属于这一类,唯一有用的动作是最大加速和最大向后加速)

    当使用网络作为近似器时,是否需要修改伪代码?例如,我只是最小化网络预测的MSE和报酬
    R


    不。伪代码中没有单独的损失函数,例如在监督学习中使用的MSE。误差项(通常称为TD误差)由方括号中的零件给出,并达到类似效果。字面意思是∇q(S,A,w)(很抱歉没有帽子,上面没有乳胶)表示估计器本身的梯度,而不是任何损失函数的梯度。

    好的,谢谢。我决定采用选项1。并尝试使用
    Keras
    实现此问题。但我仍然不知道如何更新权重。我试图这样解决问题,但遗憾的是,经纪人没有真正学到任何东西。你能告诉我关于这一步的更多细节吗?我不太熟悉合并方法在Keras中的工作原理,但我假设你最终创建了一个小批量3,用于在选择操作时预测,然后创建一个小批量1,用于更新。我有一个问题:
    output\u layer=Dense(1,activation=“tanh”)(x)
    -我不认为
    tanh
    涵盖了全部奖励范围,在执行此任务时,可能会获得-300等奖励。您似乎已经修改了培训目标(使用TD目标,而不是TD错误),但我认为这是一个正确的修改,可以简单地使用Keras Optimizer。@FlashTek:我认为除了tanh问题之外,您还差一点,请参阅gist.github.com/neilslater/28004397a544f97b2ff03d25d4ddae52,我正在处理该问题(这是一个回归问题,所以通常你希望最后一层是线性的)。我对模型做了一些简化,因为它可能不稳定,还添加了“backstop”将速度设置为零在MountainCar中是正常的。@FlashTek:我说得太快了-我发布的实现似乎不稳定-它得到了一些长度为450的初始片段,但随后开始发散。我不确定原因。@FlashTek:我尝试将体验重播添加到您的代码中,这是一个显著的改进。它仍然不如fast与Sutton书中的线性平铺特征和半梯度SARSA(λ)一样,但它似乎收敛到了一个成功的策略。我更新了要点:-也许它可以在数组操作方面进行更有效的编码。