最近组内需要做强化学习相关研究,因为面对的是新项目,同事们对强化学习的原理都不太了解,我们就计划轮流在组内做一些不定期分享,补充相关的基础知识。于是我对强化学习的一些经典算法进行了梳理,并在此进行记录,以后也会不断更新。
本文会先分享《深度强化学习综述》中提到的深度强化学习(DRL)模型,后续将分享PPO, Decision Transformer等新方法。
《深度强化学习综述》论文将深度强化学习(DRL)方法分为7类:
DRL的类别 | 简要描述 |
基于值函数的DRL | 经典,作为下面几种方法的对照组 |
基于策略梯度的DRL | DQN无法表示随机策略、无法表示连续动作,DPG适用范围比DQN更广 |
基于搜索与监督的DRL | 适合海量状态数、动作数的问题,如围棋 |
分层DRL | 适合严重稀疏反馈的复杂任务 |
基于多任务迁移的DRL | 适合需要处理多种任务的场景 |
基于多agent的DRL | 适合需要多个agent协作完成的任务 |
基于记忆与推理的DRL | 适合状态部分可观察和延迟奖励的任务 |
接下来将分别介绍这7类方法的代表性研究。
基于值函数的DRL
Deep Q Network(DQN):
Q learning算法需要维护一个Q table,只适用于离散的状态/动作空间,而DQN利用神经网络来预测value,不需要维护Q table,能够处理连续的状态空间。
Double DQN(DDQN):
DQN一般采用TD error作为损失函数
Q_π(s,a) <==> r +γQ_π(s',π(s'))
每一步计算损失时需要选择s'中最大Q值所对应的动作,DQN是根据target network选择一个具有最大Q值的动作,从而得到Q',由于选择和评价动作都是基于目标值网络的参数,可能会出现过高估计Q的问题。DDQN为了解决这个问题,先利用current network计算s'中最大Q值所对应的动作,然后由target network计算其Q值;DDQN在其他方面与DQN保持一致。DDQN将动作选择和策略评估分离开,降低了过高估计Q值的风险,Atari 游戏上的实验表明,DDQN可以估计出更加准确的Q值,效果比DQN更稳定。
基于优势学习(Advantage Learning)的DQN:
出发点也是为了缓解深度Q网络中存在的过估计问题,降低Q 值的估计误差。基于优势学习的DQN,通过在贝尔曼方程中定义新的操作符,来增大最优动作值和次优动作值之间的差异,从而获得更精确的Q值:
实验表明,用AL 和PAL 误差项来替代贝尔曼方程中的误差项,可以有效地增加最优和次优动作对应值函数之间的差异,从而获得更加精确的Q值。
基于优先级采样的DDQN:
DQN引入了经验回放机制,回放缓冲区里除了有当前策略的最新交互经验,还有旧策略的经验,这样做的出发点有两个:①DRL中耗时多的是与env交互,GPU训练网络耗时反而少,经验"回放"能减少与环境交互的次数 ②我们希望经验越多样越好,避免同质化的经验影响训练(比如可能引起的局部最优问题)。但是DQN是均匀采样所有经验,不区分经验的重要性。针对这个问题,研究者在DDQN中引入了基于优先级的经验采样方法,提高有价值样本的采样概率,从而加快最优策略的学习。
具体的,基于优先级采样的方法将每个样本的TD error作为评价优先级的标准,TD error的绝对值越大,该样本被采样的概率越高(TD-error值越大则表示Q-target与Q-evaluator之间的价值评估的差距越大,从而在梯度上更具学习价值,避免了对无效转移样本的学习)。优先级采样引入了几个关键技术:①重要性采样权重(importance-sampling weights),缓解优先级分布不断更新导致的系统偏差②SumTree总和二叉树,加速实现优先级排序。相比于DDQN,收敛速度有了很大的提高,避免了一些没有价值的迭代,是常用的算法。
Dueling Network:
修改了DQN的网络结构:DQN 将CNN 提取的抽象特征经过全连接层后,直接在输出层输出对应动作的Q 值。而引入竞争网络结构的模型则将CNN 提取的抽象特征分流到两个支路中:其中一路是状态值函数,对状态进行打分;另一路代表优势函数(advantage function),对某个状态下的每个动作打分,输出一个矢量。实际操作中,一般要将某动作优势函数值减去某状态下所有动作优势函数的平均值,以缩小Q 值的范围,去除多余的自由度。
Dueling Network相比于DQN而言,将state和action进行了一定程度的分离,使state不再完全依赖于action的价值来进行判断,当环境中频繁出现采取不同action但对应值函数相等的情况时Dueling Network比DQN有更好的发挥。
Deep Recurrent QN(DRQN):
假设有一个打球的游戏满足部分可观测马尔可夫性,只能看到棍子和球的位置,没有球的速度,这就是一个部分可观测的状态, DQN面对部分可观测的状态,效果会下降,所以DRQN引入了LSTM来解决信息丢失的问题。DRQN对DQN的第一个全连接层换成了LSTM结构,实验证明,对存在部分可观测问题的游戏,DRQN比DQN表现更好。
基于策略梯度的DRL
深度策略梯度方法DPG:
策略梯度的方法直接用神经网络近似策略函数,通过最大化策略的“期望总奖励”进行优化。
基于Actor-Critic的深度策略梯度方法:
深度策略梯度方法的基本思想是通过各种策略梯度方法直接优化用深度神经网络参数化表示的策略。这类方法在每个迭代步,都需要采样批量大小为N 的轨迹,来更新策略梯度。然而在许多复杂的现实场景中,很难在线获得大量训练数据,并且对于连续动作空间问题,在线抽取批量轨迹的方式无法达到令人满意的覆盖面。针对此问题,可以将AC算法扩展到深度策略梯度方法中。深度确定性策略梯度(Deep Deterministic Policy Gradient,DDPG)是一种重要的基于AC框架的深度策略梯度算法。DDPG中,策略网络用来更新策略,对应AC 框架中的Actor;价值网络用来逼近状态动作对的值函数,并提供梯度信息,对应AC 框架中的Critic,目标函数被定义为带折扣的奖励之和,采用随机梯度下降方法来对目标函数进行端到端的优化。实验表明,DDPG 不仅在一系列连续动作空间的任务中表现稳定,而且求得最优解所需要的时间步也远远少于DQN。与基于值函数的DRL 方法相比,基于AC 框架的深度策略梯度方法优化策略效率更高、求解速度更快。
DDPG 使用的是确定性的策略梯度方法,然而在有噪声干扰的复杂环境下,策略一般具有一定的随机性,此时DDPG就不适用了。针对此问题,研究者提出了一种随机值梯度(Stochastic Value Gradient,SVG)方法,SVG 使用“再参数化”(re-parameterization)的数学技巧,将DDPG扩展为一种随机环境下的策略优化过程,从而能够适应具有随机性的环境。
在状态部分可观察的环境中,DDPG和SVG的效果会受到影响。于是研究者将循环神经网络引入DDPG和SVG中,提出了循环确定性策略梯度(Recurrent Deterministic Policy Gradient,RDPG)和循环随机值梯度(Recurrent Stochastic Value Gradient,RSVG)方法,用来处理部分可观察场景下连续动作的控制任务。
异步优势动作评论算法(Asynchronous Advantage Actor-Critic,A3C):
A3C使用优势函数代替Critic网络中的原始回报:
如果优势函数大于零,则说明该动作比平均动作好,如果优势函数小于零,则说明当前动作不如平均动作好。引入优势函数,是为了解决AC的高方差问题,可以让梯度减小,因此梯度下降的步子也就更平缓,从而使训练过程更稳定。
A3C同时引入了异步并行架构。具体来说,整个agent由一个Global Network 和多个并行独立的worker 构成,每个 worker 都包括一套Actor-Critic 网络,会独立的跟自己的环境去交互,并根据当前获取的一轮经验去计算各自的损失函数,每个worker得到各自独立的梯度以后,异步地把这个梯度上传到 Global Network 中,Global Network 会分别根据接收到的梯度进行梯度下降更新自身参数,并用最新的参数去更新对应的worker。
A3C的并行架构相比于AC的优势在于:①打破了经验之间的耦合,增加经验的多样性②充分利用多核CPU的计算资源,缩短训练时间③舍弃了Replay Buffer,就可以使用on policy类的算法,而不用局限于off policy。
优势动作评论算法(Advantage Actor Critic,A2C):
A3C比A2C出现的早,A2C是A3C的同步版本,A2C也会构建多个并行的 worker,它们与独立的环境进行交互,收集独立的经验。但在每轮训练中,Global network 都会等待每个 worker 各自完成当前的 episode,然后把这些 worker 上传的梯度进行汇总并求平均,得到一个统一的梯度并用其更新主网络的参数,最后用这个参数同时更新所有的 worker。A2C跟A3C的一个显著区别就是,在任何时刻,不同worker使用的其实是同一套策略,只不过它们利用了并行的多个环境,可以收集到去耦合的多组独立经验。用Quantum cheese大佬的这张图来表示A2C与A3C结构上的区别:
A2C具有的优点:A3C中各个 agent 都是异步独立更新,每个agent使用不同的策略,可能会导致 global policy 的累计更新效果并不是最优的,而 A2C 通过同步更新解决了这种不一致(inconsistency)的问题;②Open AI的官博(https://openai.com/blog/baselines-acktr-a2c/)提到了A2C效果比A3C好,并发性和系统简洁性也要好。
基于搜索与监督的DRL
除了基于值函数的DRL和基于策略梯度的DRL之外,还可以通过增加额外的人工监督来促进策略探索。蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)作为一种经典的启发式策略搜索方法,被广泛用于游戏博弈问题中的行动规划,目前的基于搜索与监督的DRL方法中,策略搜索大多是通过MCTS来完成的。本方法适合海量状态数、动作数的问题。
结合深度神经网络与MCTS的方法:
经典的AlphaGo围棋算法采用的就是此方法。由于围棋存在状态空间巨大且精确评估棋盘布局、走子困难等原因,开发出一个精通围棋游戏的agent一直被认为是有挑战性的难题,直到研究者将CNN与MCTS相结合,提出了AlphaGo围棋算法,在一定程度上解决了这一难题。AlphaGo 的主要思想有两点:(1)使用MCTS 来近似估计每个状态的值函数;(2)使用基于值函数的CNN 来评估棋盘的当前布局和走子。
分层DRL
针对一些复杂的DRL 任务,直接以最终目标为导向来优化策略,效率很低。因此可以利用分层强化学习(Hierarchical Reinforcement Learning,HRL)将最终目标分解为多个子任务来学习层次化的策略,并通过组合多个子任务的策略形成有效的全局策略。
Hierarchical Deep Q-Network(h-DQN):
在复杂的目标导向型任务中,稀疏反馈的问题一直阻碍着agent性能的提升,这是由于在学习过程中,agent得到的反馈信号极少,导致其对某些重要状态空间的探索很不充分。要在此类复杂的环境中进行有效的学习, agent 必须感知出层次化时空抽象(hierarchical temporal abstraction)的知识表达,并在此基础上通过某些内在激励来促进其探索。于是研究者提出了h-DQN,其顶层的值函数用于确定agent 的下一个子目标,而底层的值函数用于确定agent的行动,以满足顶层选择的子目标。实验表明,h-DQN 模型可以在存在严重稀疏反馈问题的DRL 任务中,保持高效地探索,提升agent在面对复杂任务时的表现。
针对h-DQN,还可以开展的未来工作包括:①将深度生成式模型(Deep Generative Model,DGM)与h-DQN 相结合来区分输入图像中不同的构成因子(如物体、姿态、位置信息等),以解决CNN 提取的抽象状态缺乏结构化表示的问题;②将循环神经网络模块加入h-DQN,以缓解环境中存在的部分可观察和延迟反馈的问题。
Deep Intra-Option Q-learning(DIQ):
h-DQN 模型需要在不同时空尺度上人工设置一些中间目标来促进agent 的探索。然而人工设定中间目标的方式也限制了h-DQN 的适用场景。针对此问题,研究者提出了DIQ,这是一种利用PCCA+聚类算法,自动完成子目标学习的DRL方法。该方法与h-DQN相比,省去了特定的内在激励和人工设定中间目标这两个环节,增强了模型在其他任务上的泛化能力。
Deep Successor Reinforcement Learning(DSRL):
DSRL利用后续状态表示(Successor Representation,SR)来学习值函数,可以解决大规模状态空间的DRL。SR 将值函数分解为两个部分:后续状态映射图(successor map)和奖励预测器(reward predictor)。successor map表示在给定当前状态下到达未来某一状态的期望概率,reward predictor表示从状态到奖励值的映射。在DSRL中,successor map和reward predictor以内积的形式构成Q值函数,这种构造方式使得agent 对突出奖励(distal reward)更加敏感,使agent能够在随机策略的情况下分解出更有价值的子目标。DSRL的优点是能够适应存在延迟反馈的任务。
多任务迁移DRL
传统DRL,每个训练完成后的agent只能解决单一任务。然而在一些复杂的现实场景中,需要agent 能够同时处理多个任务,这是多任务学习和迁移学习DRL的出发点。
行为模拟(Actor-Mimic)的多任务迁移DRL:
行为模拟是基于策略的方法,利用多个不同任务的expert network产生的state-action样本,去指导student network的训练,基本思想是通过监督信号的指导,使得单一的策略网络学会各自任务相对应的策略。
基于策略蒸馏(Policy Distillation)的多任务迁移DRL:
策略蒸馏是基于值函数的方法,是一种从expert network向student network迁移知识的方法。应用到多任务迁移DRL上,会有多个expert network,并根据student network和expert network之间Q值的偏差来确定Q 值回归目标函数,引导student network逼近expert network的值函数空间。
基于渐进式神经网络(progressive neural networks)的迁移DRL:
行为模拟和策略蒸馏的迁移学习方法存在局限性:在迁移知识之前,都需要耗费大量的样本来指导expert network的训练,一些真实场景下的机器人控制任务就很难在线获取大量的训练数据,自由探索的训练成本很高。基于渐进式神经网络的DRL方法,可以通过逐层存储迁移知识和提取有价值特征,解决从仿真环境中迁移知识到真实环境的难题。
上图是一个简单的渐进式神经网络,其构成过程可以描述为:
(1)在第1列构造1个深度神经网络来训练某一任务;
(2)固定第1列神经网络的参数,并将其网络中各个隐藏层的激活值经过处理后,输入到第2列神经网络的对应层,以作为额外输入;
(3)固定前两列神经网络的参数,前两列网络各个隐藏层的激活值经过处理之后,输入到当前神经网络的对应层以作为额外的输入。
渐进式神经网络在一系列序列任务中,通过逐层推进的方式来存储迁移知识和提取有价值特征,完成了对知识的迁移。其优势在于,不需要提前训练expert network;训练新任务时保留了之前训练模型的隐藏层状态,层次性地组合之前网络中每一隐藏层的有用特征,使得迁移学习拥有一个长期依赖的先验知识。
基于多agent 的DRL
在拥有多玩家的Atari 2600游戏中,多个决策者之间存在相互合作或竞争的关系,此时单agent系统的决策能力是不够的,需要将DRL 模型扩展为多个agent 之间相互合作、通信及竞争的多agent系统。
在多agent RL算法中,大多数情况下采取为每个agent 单独分配训练机制的学习方式。例如,采取相互独立的Q learning算法来训练每个agent。上述分布式的学习架构降低了实施学习的难度和计算的复杂度。对于大规模状态空间的DRL问题,用DQN算法替代Q learning算法来单独训练每个agent,就可以构造出一个简易的多agent的DRL系统。
Deep Distributed Recurrent Q-Networks(DDRQN):
全称是分布式深度循环Q网络,采取为每个agent单独分配DRQN训练模块的方式来构建多agent系统,但是为每个agent 单独分配一个Q 值网络,所消耗的计算和存储资源太大,于是DDRQN进行了改进:①在任何时刻,对每个agent 都在输入中增加上一时刻的动作信息,使得每个agent 可以近似地估计状态动作历史序列;②多agent 之间共享网络参数,但每个agent的策略是基于自身历史信息产生的,该方法大幅度减少了网络中可学习参数的数目,加快了学习的速度。
实验表明,经过训练的DDRQN 模型能够解决状态部分可观测的多agent通信与合作的任务。
基于记忆与推理的DRL
传统的DRL在解决更高层次的认知启发式任务(cognition-inspired tasks)时表现很差,因为这种任务不仅要求agent具有很强的感知能力,也需要具备一定的记忆与推理能力,才能学习到有效的决策,所以面对这种任务,赋予DRL模型主动记忆与推理的能力就很重要。
基于Memory Network的DRL:
之前有提到DRQN可以解决状态部分可观测的问题,但是其只能解决简单的任务,在复杂任务上效果不佳。于是有研究者们通过在DRL模型中加入Memory Network,使模型拥有了一定的记忆和推理能力。这类模型包括:Memory Q-Network(MQN)、Recurrent Memory Q-Network(RMQN)、Feedback Recurrent Memory Q-Network(FRMQN)。MQN模型加入记忆模块,使得agent 拥有类似于人类大脑的记忆、认知与推理能力。MRQN在MQN基础上加入由LSTM部件构成的循环神经网络,进一步提升模型在时间轴上的记忆能力。FRMQN在MRQN基础上加入循环神经网络和反馈控制机制,通过反馈机制该模型在LSTM的输入中加入了上一时刻检索的记忆信息,使得FRMQN随着时间的推移逐步拥有越来越强大的自主推理能力。实验表明,在启发式认知任务上,经过训练后的MQN、RMQN 和FRMQN 模型与DQN 和DRQN 模型相比,能够取得更好的表现。模型间的具体效果对比,可以参考FRMQN的论文。
文末总结
基于值函数的DRL | 简要描述 |
DQN | Q-learning与DNN结合,能处理连续状态空间 |
DDQN | DQN Target Net选择a估计Q是有偏估计,DDQN Cur Net选择a,Target Net估计Q,是无偏估计 |
Advantage Learning DQN | 修改误差项,增加最优动作值和次优动作值的差异 |
基于优先级采样的DDQN | TD error衡量样本的重要性,避免学习无效样本,加快收敛 |
Dueling Network | 将state和action进行分离。论文给的解释:在游戏中,存在很多状态,不管你采用什么样的action对下一步的状态转变是没什么影响的。这些情况下计算Q的意义没有计算V的意义大。 |
DRQN | LSTM结合DQN,可处理简单的状态部分可见任务 |
Rainbow DQN | double DQN,优先级采样,Dueling Network,结合起来 |
基于策略梯度的DRL | |
DPG | 策略梯度与DNN结合,能处理连续的状态空间/动作空间 |
DDPG(基于AC) | DPG需要完整的episode进行训练,效率低,DDPG基于AC框架开展学习来解决此问题,训练效率更高 |
SVG(基于AC) | DDPG只适用于确定性环境,SVG对DDPG引入了随机性 |
RDPG,RSVG(基于AC) | DDPG/SVG对状态部分可见的问题效果不佳,可引入LSTM后得到RDPG/RSVG,能够解决简单的状态部分可见问题 |
A3C | 引入优势函数解决AC高方差问题;异步并行架构与AC相比的优势:①打破经验的耦合,增加经验的多样性;②充分利用多核CPU;③代替replay buffer,不用局限于off policy算法 |
A2C | A3C的同步版本,Open AI的官博有说A2C效果比A3C好 |
基于搜索与监督的DRL | |
基于DNN的MCTS (AlphaGo) | 适合海量状态空间和动作空间的场景,如围棋。代表工作:AlphaGo |
分层DRL | |
h-DQN | DQN无法解决奖励稀疏且过程复杂的任务,h-DQN通过人为将目标分解成多个子任务,逐个攻破 |
DIQ | h-DQN的子目标需要人工设置,DIQ采用PCCA+聚类算法自动学习子目标,增强模型的泛化性 |
多任务迁移DRL | |
行为模拟的DRL | 利用多个专家网络产生的经验去指导单个学生网络 |
策略蒸馏的DRL | 根据学生网络和专家网络之间Q值的偏差来确定Q 值回归目标函数 |
渐进式神经网络的DRL | 行为模拟和策略蒸馏需要耗费大量样本指导专家网络的训练,渐进式神经网络可以直接训练多任务模型 |
基于多agent的DRL | |
分布式DRQN | 基于DRQN构建分布式多agent系统,能够处理状态部分可观测的多agent通信与合作任务 |
基于记忆网络的DRL | |
MQN | 为DQN加入memory network,使DQN拥有记忆、推理能力 |
RMQN | 在MQN 基础上加入LSTM,进一步提升模型在时间轴上的记忆能力 |
FRMQN | 在RMQN基础上加入反馈控制机制,增强模型逐步推理能力 |
论文推荐(括号内为 Google scholar 引用量, 截止到2022-9-14):
DDQN(5500+): Deep Reinforcement Learning with Double Q-learning
优先级采样(3100+):Prioritized Experience Replay
Dueling Network(2900+):Dueling Network Architectures for Deep Reinforcement
DRQN(1300+):Deep recurrent q-learning for partially observable mdps
DDPG(9700+):Continuous control with deep reinforcement learning
A3C(7300+):Asynchronous Methods for Deep Reinforcement Learning
AlphaGo(13800+):Mastering the game of Go with deep neural networks and tree search
h-DQN(1000+):Hierarchical deep reinforcement learning: Integrating temporal abstraction and intrinsic motivation
渐进式神经网络(1600+):Progressive neural networks
个人认为具有实践价值的方法与理由(将这些方法进行组合尝试,而不是单独采用某个方法):
DDQN:解决过估计问题
优先级采样:关注重要经验,丢弃对模型参数更新无影响的经验,增加收敛速度
Dueling Network:当时的state of art
rainbow:集合多种方法(包括前述几种方法)的优点
DRQN:RPA场景下可能出现状态部分可见问题
A2C:比A3C实现起来方便,更少的坑
h-DQN:RPA场景的一个任务较为复杂,或可拆分成多个子任务来做
渐进式神经网络:假如拆分成多个子任务,本身就是一个多任务场景,适合该方法,并且该方法泛化性较强,当有新任务加进来可以方便进行迁移