维数灾难
在之前的问题中,我们用了 Q-Learning, DQN, Actor-Critic, REINFORCE 等一系列办法,但是策略网络的输出始终是一个向量,每个维度的数值表示对对应动作的打分,这样的动作是离散的,向量的维数等于动作空间的个数。当我们要研究连续控制问题(比如机器臂的转角),我们只能把控制量离散化。但是假设这个机器人的自由度很多,每个控制量都直接离散化研究,这必然使得动作空间极大,很难计算。所以,我们需要研究连续控制算法,这主要包含 DDPG 和 TD3, 在实践中 TD3 运用较多。
DDPG
DDPG(深度确定性策略网络)的整个流程可以如下所示,值得注意的是:
- 策略网络的输出还是一个向量,不过此向量的维数等于自由度,每一个元素是控制量的一个取值,这就是确定性策略,输出什么执行什么。
- DDPG 仍然是一种 AC 类算法,有一个策略网络和一个价值网络。价值网络按照 TD 算法更新,而策略网络依据价值网络更新。
- DDPG 是一种异策略,它的目标策略不同于行为策略,可以跑完很多步之后从内存中取出四元组(batch)进行训练,即可以经验回放。
- 其实从上面几点就可以看出 DDPG 简直是四不像,它融合了之前几乎所有的办法。它有点像 Q学习(或DQN),因为都是异策略,用经验回放更新价值网络;它有点像策略学习,因为采用的是策略网络;它又是一种 AC 类算法。
- DDPG 仍然使用了目标网络的办法来降低高估的问题。
- DDPG 实践效果并不好,实际中应该用它的改良版 TD3。
下面贴一个 DDPG 的伪代码:
TD3
TD3 (Twin Delayed Deep Deterministic Policy Gradient),译为孪生延迟深度确定性策略梯度算法。TD3 是 DDPG 的改良版,主要做了以下改进:
- 截断的 Double Q-Learning:通过学习两个 Q 值函数,用类似 Double Q-Learning 的方式更新critic 网络。这个目的还是降低高估,训练两个价值网络,让他们做预测,然后选较小的那个作为 TD Target.
- 延迟策略更新:更新过程中,策略网络的更新频率低于 Q 值网络。这是实验发现,也可以这么解释:当裁判员的打分还不够精确的时候,我们应该先训练裁判员,使之打分准确,然后拿这个裁判去训练选手。所以策略网络应该比价值网络更新的慢一些,而目标网络为了降低高估,更新的也应该慢一些。这样一来,每轮都更新的只有价值网络,而三个目标网络和策略网络是隔几轮更新一次。
- 目标策略平滑:在目标策略的输出动作中加入噪声,以此平滑 Q 值函数的估计,避免过拟合。这个噪声用的是截断正态分布。
TD3 的流程图如下:
下面贴一个 TD3 的伪代码:
(以上伪代码摘自《深度强化学习:基础、研究与应用》)