21/9/4 A3C PPO
21/9/4 读书笔记
强化学习 其他算法
Asynchronous Advantage Actor-Critic (A3C)
之前我们介绍了通过经验回放的方式降低每次网络更新间的相关性(即Double DQN的方式),但是这种方式仍然有一定的瓶颈,因为经验回放池中的数据相关性还是太强。这种相关性归根结底是因为所有的数据都是这一个智能体得到的,因此我们希望同时让多个不同的智能体参与到学习中来。
Asynchronous是异步的意思,这意味着让我们的训练过程进行异步化,具体来说就是同时进行多个智能体的训练,而让他们相互传授知识,加速学习的过程。同时,由于各个智能体之间的相对独立性,使得连续性进一步被破坏,更好地提高了网络的收敛性。
具体来说,A3C使用了一个主智能体作为所有智能体的总代表,其持有global_net,其他智能体则持有其副本local_net。每个其他智能体向主智能体可以执行push和pull操作,将个人的更新推送到主智能体,或者从主智能体的global_net获取最新的参数来进行自己的更新。注意A3C中每个智能体执行pull时直接复制主智能体的参数,而执行push时向主智能体传递自己当前的梯度来进行更新。
A3C希望所有的智能体向主智能体的推送是不连续的,即不要总是某个特定智能体在连续提交,这是为了降低每次更新之间的相关性。
每个线程和环境交互到一定量的数据后,就计算在自己线程里的神经网络损失函数的梯度,但是这些梯度却并不更新自己线程里的神经网络,而是去更新公共的神经网络。也就是n个线程会独立的使用累积的梯度分别更新公共部分的神经网络模型参数。每隔一段时间,线程会将自己的神经网络的参数更新为公共神经网络的参数,进而指导后面的环境交互。
Proximal Policy Optimization (PPO)
如果我们选择的学习率过高,Policy Gradient 的策略更新会振荡而不能收敛;如果学习率过小,那么策略的学习过程会过于漫长。由于学习率的重要性和它的不确定性,我们引入PPO。PPO限制了New policy的更新幅度,使得其对较大的学习率不至于太过敏感。根据论文中的描述,其在复杂环境下具有更好的表现。PPO本质还是一个Actor-Critic结构,其主要的改动在于Actor的更新中引入了关于更新幅度的惩罚项。如果Actor更新策略的幅度过大,那么惩罚项也会更大,从而促使Actor在策略提升和更新幅度之间进行trade-off。
同时,PPO也是一个off-policy的策略(而普通AC是on-policy的),因为其引入了重要性采样技术Important-sampling,采用重要性权重来对策略中动作的TD-error进行重新计算,从而使得不同的策略之间能够相互进行更新。假设我们要用策略\(S_2\)的数据来训练\(S_1\),\(S(a)\)表示该策略选择动作\(a\)的概率,重要性权重IW的计算和TD-error的修正方式如下:
为了理解为什么重要性采样能够使得PPO成为off-policy,我们首先要了解为什么普通AC是on-policy的。
考虑两个策略\(S_1[0.5,0.5]\)和\(S_2[0.1,0.9]\),数字代表着他们选择a和b两个动作各自的概率。a的TD-error是2,b的TD-error是1,采样10次,\(S_1\)采样五次a五次b,\(S_2\)采样一次a九次b。我们如果直接用\(S_2\)的采样结果来更新\(S_1\),那么a会更新一次,b会更新9次,即使b的TD-error显著小于a,但是由于更新次数多,导致b的更新幅度反而会大于a。这里的\(S_2\)是一个较差的策略,因为它过多地偏向于TD-error较小的策略,这导致用它更新较好的策略\(S_1\)时反而污染了\(S_1\)。
而重要性采样重新计算TD-error使得a的TD-error显著提高到5,而b的TD-error降低到0.56,这样的话即使更新九次b一次a,也能让a的更新幅度尽可能大,从而避免了上述问题。

浙公网安备 33010602011771号