学习 Deep Reinforcement Learning 的过程中,通过阅读经典算法的论文,并在 Pytorch 上实现这些算法,项目在 Github 上 https://github.com/RITCHIEHuang/DeepRL_Algorithms,这里做一些总结和记录。
深度学习的发展为强化学习的发展带来了飞速发展,但随之而来的 Reinforcement Learning 也必须承受 Deep Learning 的痛点, 因此许多深度强化学习算法都是在填补 Reinforcement Learning 在 Deep Learning 中的坑 : (
强化学习框架, 来源: Lil'Log1. 简介
强化学习旨在与环境(Environment)交互中学习一个能够智能决策的智能体(Agent)。交互过程是一个时间序列:Environment 给定一个 Agent 的初始状态 ,Agent 根据当前状态 选择一个动作 , 并执行该动作 ,Environment 基于 Agent 的状态和动作 给出一个奖励信号(reward) 和 Agent 下一时刻的状态 , 然后这个过程不断重复。
注意到 在强化学习中是非常关键的指标,它指明了 Agent 的策略好不好,所以 Reinforcement 的优化都基于 。
强化学习的过程是一个时间上的序列,它会积累所有交互的历史,在 Deep Reinforcement Learning 中我们通常会用某种数据结构存储下这些交互的历史。由于交互过程无法实现并行,所以 Reinforcement Learning 会更加耗费算力,这种交互和我们人类的某种试错非常相似,也就是俗话说———“知错而能改,善莫大焉”,“前事不忘,后事之师” …… 因此,我们更坚信 Reinforcement Learning 是一种更可靠的方法,相比 Deep Learning 的黑盒,显得更符合人类本质 : )
Reinforcement Learning 主要分为 Value based 和 Policy based 两种。
Value based :主要学习一个 Q value 或者 Value (这两者之间是可以相互转换的),相较于 Policy based 方法更间接 (indirect);
Policy based :直接对 Agent 选择动作的策略(Policy)进行优化,就省略了根据Value 来选择 Action 的过程,因此 Policy based 方法现阶段更受研究者的青睐,相应地也就发展出了许多算法。
2. Value based Algorithm
在 Deep Reinforcement Learning 的领域里,Value based 算法从 Q-learning 衍生出来,这里主要是基于 Deep Q-learning (之后我们称之 DQN) 发展出来的一系列算法。
在几个 Gym 环境下验证一下算法性能:
DQNs performance on gym
2.1 Vanilla DQN
这里的 Vanilla 不是香草,而是最原始、最低配的 DQN。它直接源于 Q-learning,但是利用 Deep Learning 参数化 Q 网络,记作 。
参数更新公式如下:
算法伪代码如下:
DQN Algorithm
DQN 很简单,它和 Q-learning几乎一致, 但它总是使用 来估计下一时刻的 Q-value,因此会造成 over-estimation,即其估计总会偏高。
参考论文:
[1]. Playing Atari with Deep Reinforcement Learning
2.2 Double DQN
上面提到DQN会存在 over-estimation 的问题,Double DQN就是从这个角度出发,为了减弱这种 over-estimation而设计的方法。它使用两个网络:行为网络 和目标网络 ,目标网络总是滞后于行为网络(每隔一定的步长更新),因此这种 over-estimation也相应滞后,从而达到缓解的目的。
参数更新公式如下:
算法伪代码如下:
Double DQN Algorithm
参考论文:
[1]. Deep Reinforcement Learning with Double Q-learning
2.3 Dueling DQN
Dueling DQN试图通过修改 Deep Q Network 的结构来达到对Q Value 的估计,具体来说将Q Value 拆解成 Value + Advantage Value,也就突出了在特定的 state 选择 action 所带来的 value 的影响。
来一张图片直观地感受一下:
Dueling DQN Network Structure
Q Value 计算公式:
至于训练可以采用 DQN 也可以采用 Double DQN的方式,因此就不再贴算法了。
参考论文:
[1]. Dueling Network Architectures for Deep Reinforcement Learning
3. Policy based Algorithm
这里主要罗列的算法是基于 Policy Gradient,看到 Gradient,就知道是梯度,这一系列的算法就是将 Policy 建立成一个分布 ,所谓 Policy Gradient 就是 的各种变体。
自己实现了以下算法,在 Mujoco 环境上跑了一个 Benchmark,可以直观地感受一下各种算法的性能。
Performance on Mujoco
3.1 REINFORCE
REINFOCE 是 on-policy 最基础的 model-free 算法,它从理论上给出了状态转移模型无关的算法,并成为许多算法改进的起点,它在 Policy Gradient 系列的算法体系中起了开创性的作用。
REINFORCE 策略参数更新公式
下面给出算法流程:
REINFORCE Algorithm, 来源: Toronto Lecture
参考:
[1]. Deriving Policy Gradients and Implementing REINFORCE
[2]. http://www.cs.toronto.edu/~tingwuwang/REINFORCE.pdf
3.2 Advantage Actor Critic
也就是常听说的 A2C,和 REINFORCE 基本类似,不过这里为了降低 的方差,引入了 来凸显动作本身的价值,同时确保了该估计仍是无偏的。
3.3 Trust Region Policy Optimization
3.4 Proximal Policy Optimization
3.5 Deep Deterministic Policy Gradient
3.6 Twin Delayed Deep Deterministic Policy Gradient
3.7 Soft Actor Critic
参考:
[1]. Richard S. Sutton and Andrew G. Barto. Reinforcement Learning: An Introduction; 2nd Edition. 2017.
[2]. OpenAI Spinning Up Documents.
[3]. Lil'Log: A (Long) Peek into Reinforcement Learning
网友评论