目标网络,这里在实践之中是为了提高稳定性,整体思想上和之前使用的放回replay Buffer的Q learning算法没有什么区别,只是在执行若干步(如10000步)整个算法迭代后,就把整个网络的参数 存下来称为目标网络 ,然后我们每次做的梯度步变成了:
结合了上两个方法就构成了经典的DQN算法。
先从宏观上来开三个步骤,步骤一、数据采集(data collection);步骤二、更新目标网络(target uupdate);步骤三、对Q-function做回归(Q-function regression)。
从前面的分析我们知道,Q function的意义是在某个状态下,我们执行了某个action,期望reward是多少。但是再DQN算法的实际运行中,我们会发现Q function再实际运行中通常都不精确,他们都是被高估了。虽然高估的确是很离谱,但是也没有妨碍DQN确实是有效的,因为再我再执行动作 与 的时候,只要让估计的 这个差值和真实值差不多就可以让DQN很好得运行。
overestimate问题是DQN中的系统性问题,原因出在目标值中的max部分:
Double Q-leanring的提出就是为了解决overestimate的问题。他的基本想法就是让选择动作(choose action)和评估值(evaluate value)两部分使用不同的网络:
当两个网络的噪音是独立的时候,overestimate的问题就会缓解一些。在实际的的应用中相对于标准的DQN,double Q-learning只是使用当前的网络(不是target网络)去评估action并确定我们选择哪个行动,然后使用target network去评估value。
我们使用Q学习,在回归中会设置训练的目标:
在连续动作空间之下,我们要考虑的是如何去计算max。
a. 从一些简单的可靠性高点的任务入手,先保证我们的算法实施的正确性。
b. replay buffer建议大一些
c. 算法运行效果通常需要较长时间
d. exploration程度建议开始高一些,后续慢慢降低。
e. Bellman error的梯度可能很大,适时切断过大的梯度。
f. Double Q-learning在实际中很有用并且没什么缺点
g. N-step returns的方法也很有用,但是如上文所述还是有一些问题。
h. 运行的时候随机种子需要考虑多一点。
i. 探索的程度,学习率的大小以及优化方法的选择都影响很大。
DQN特点
以值为基础,可以单步更新。这种结构只需要输入一个state,然后输出是所有动作的Q-value,当Action太多时,这种结构明显的就不适用。适合小动作空间。
Policy Gradients的特点
1.可以不分析奖惩,直接输出行为,甚至可以为 Policy Gradients 加上一个神经网络来输出预测的动作。对比起以值为基础的方法, Policy Gradients 直接输出动作的最大好处就是, 它能在一个连续区间内挑选动作, 而基于值的, 比如 Q-learning, 它如果在无穷多的动作中计算价值, 从而选择行为,则可能崩溃。
2.观测的信息通过神经网络分析, 选出了行为, 我们直接进行 反向传递 , 使之下次被选的可能性增加, 但是 奖惩信息 却告诉我们, 这次的行为是不好的, 那我们的动作可能性增加的幅度随之被减低. 这样就能 靠奖励来左右我们的神经网络反向传递 。
3.Policy Gradients没有误差。 但是他的确是在进行某一种的反向传递,这种反向传递的目的是让 这次被选中的行为更有可能在下次发生 。这次被选中的行为在下次发生的概率由 奖惩 决定。
4.适合大动作空间
Actor Critic的特点
1.原来 Actor-Critic 的 Actor 的前生是Policy Gradients, 这能让它毫不费力地在连续动作中选取合适的动作 , 而 Q-learning 做这件事会瘫痪. 那为什么不直接用 Policy Gradients 呢? 原来 Actor Critic 中的 Critic 的前生是 Q-learning 或者其他的 以值为基础的学习法 , 能进行单步更新, 而传统的Policy Gradients 则是回合更新, 这降低了学习效率。
2.Policy Gradients中, 现实中的奖惩会左右 Actor 的更新情况。 Policy Gradients 也是靠着这个来获取适宜的更新. 那么 何时会有奖惩这种信息 能不能被学习呢?
这看起来不就是以值为基础的强化学习方法做过的事吗。那我们就拿一个 Critic 去学习这些奖惩机制, 学习完了以后,由 Actor 来指手画脚, 由 Critic 来告诉 Actor 你的那些指手画脚哪些指得好, 哪些指得差, Critic 通过学习环境和奖励之间的关系, 能看到现在所处状态的潜在奖励, 所以用它来指点 Actor 便能使 Actor 每一步都在更新, 如果使用单纯的 Policy Gradients, Actor 只能等到回合结束才能开始更新。
3.适合大的动作空间。
小结:Actor的前生是Policy Gradients,而Policy Gradients是回合更新,学习效率低。Critic的前生是Q-learning或者其他的以值为基础的学习法,可以进行单步更新,效率更高。Actor输入一个具体的state,输出一个action,然后Critic输入这个state和Actor输出的action,得到一个Q-value。Actor根据Critic的反馈来更新自身的策略。
1
2
3
4
5
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)