- 参考链接:
DPG
- 原始论文:Deterministic Policy Gradient Algorithms(论文中详细描述了 SGD,DPG 两种算法的 off-policy,on-policy 版本的分析)
Stochastic Actor-Critic Algorithms
- Critic 网络损失函数
$$
Loss_{\text{critic}} = \sum_t (r_t + \gamma Q^{\bar{w}}(s_{t+1}, a_{t+1}) - Q^{w}(s_{t}, a_t)) ^ 2
$$- 这里要求 \(a_{t+1} \sim \pi_\theta\), \(Q^w(s_t,a_t)\) 值拟合的目标是策略 \(\pi_\theta\) 对应的Q值 \(Q^{\pi_\theta}(s_{t}, a_t)\) ,代码中使用
next_action = self.actor(next_states)代替动作即可 - 这里训练使用的 \((s_t,a_t,s_{t+1})\) 是当前策略采样到的数据(实际上,Q值的学习样本保证 \(a_{t+1}\) 的采样策略即可,样本可以是任意策略采样的,当然,用当前策略采样的会更好些)
- 这里要求 \(a_{t+1} \sim \pi_\theta\), \(Q^w(s_t,a_t)\) 值拟合的目标是策略 \(\pi_\theta\) 对应的Q值 \(Q^{\pi_\theta}(s_{t}, a_t)\) ,代码中使用
- Actor 网络优化梯度:
$$
\nabla_\theta J(\pi_\theta) = \mathbb{E}_{s\sim \rho^{\pi},a\sim\pi_\theta}\left[ \nabla_\theta \log \pi_\theta(a|s)Q^w(s,a) \right]
$$- 问题: \(s\sim \rho^{\pi}\) 中的 \(\pi\) 必须是 \(\pi_\theta\) 吗?
- 回答:是的,原始推导中,回合 \(\tau\) 必须是来自当前策略的
- 问题: \(s\sim \rho^{\pi}\) 中的 \(\pi\) 必须是 \(\pi_\theta\) 吗?
Off-Policy Actor Critic
- Critic 网络损失函数
$$
Loss_{\text{critic}} = \sum_t (r_t + \gamma Q^{\bar{w}}(s_{t+1}, a_{t+1}) - Q^{w}(s_{t}, a_t)) ^ 2
$$- 这里要求 \(a_{t+1} \sim \pi_\theta\), \(Q^w(s_t,a_t)\) 值拟合的目标是策略 \(\pi_\theta\) 对应的Q值 \(Q^{\pi_\theta}(s_{t}, a_t)\) ,代码中使用
next_action = self.actor(next_states)代替动作即可 - 这里训练使用的 \((s_t,a_t,s_{t+1})\) 是当前其他行为策略采样到的数据
- 这里要求 \(a_{t+1} \sim \pi_\theta\), \(Q^w(s_t,a_t)\) 值拟合的目标是策略 \(\pi_\theta\) 对应的Q值 \(Q^{\pi_\theta}(s_{t}, a_t)\) ,代码中使用
- Actor 网络优化梯度:
$$
\nabla_\theta J(\pi_\theta) = \mathbb{E}_{s\sim \rho^\beta,a\sim \beta}\left[ \frac{\pi_\theta(a|s)}{\beta_\theta(a|s)} \nabla_\theta \log \pi_\theta(a|s)Q^w(s,a) \right]
$$- 问题:动作的偏移通过重要性采样 \(\frac{\pi_\theta(a|s)}{\beta_\theta(a|s)} \) 来解决,但是状态也可以吗?
- 回答:不可以,这里状态采用行为策略采样是因为off-policy场景下,策略梯度的目标就是在行为策略采样的状态上最大化目标函数(这样得到的不是最优策略,线上serving时的状态分布肯定与当前行为策略采样的状态不一致,所以是一个妥协的次优解)
- 思考:off-policy AC 与 DQN 的区别
- 对于DQN,我们通过在每一个状态上让Q值拟合到最优策略对应的Q值(与状态分布无关,任意的状态我们都可以找到最优策略对应的Q值),然后通过 \(\mathop{\arg\max}_a Q(s,a)\) 来找到最优策略
- 对于off-policy AC,如果不考虑状态的分布,这里带来的偏差是从优化目标上出现的,即off-policy AC最大化的目标是,在行为策略采样的状态分布下,寻找一个策略,最大化累计策略收益期望。这里的目标显然与on-policy的原始目标不同了,状态分布线上线下不一致问题会导致天然的偏差
- 问题:为什么不可以理解为与DQN一样?任意给定的状态我都做到策略最大化了,实际上就已经求到了最优策略了?(按照这个理解,除了off-policy都会遇到的训练评估数据分布不一致外,没有别的问题?)
- 回答:不可以,因为DQN的目标是拟合 \(Q^*(s,a)\),与状态分布无关;而策略梯度法的目标找到一个最优策略 \(\pi^*\),最大化策略该策略下的累计收益,这里要求状态分布和动作分布均来自求解到的最优策略 \(\pi^*\) ,off-policy AC下的状态分布是行为策略的,存在偏差
- 问题:动作的偏移通过重要性采样 \(\frac{\pi_\theta(a|s)}{\beta_\theta(a|s)} \) 来解决,但是状态也可以吗?
- 注:off-policy AC方法中,若使用n-step回报,则每一步都需要重要性采样,使用连乘方式将新旧策略的重要性采样比值乘上去即可
- off-policy AC方法不常用,因为从目标上天然旧带着偏差
Off-Policy AC如何对混合策略采样的样本进行重要性采样?
在 Replay Buffer 中记录下每个样本的采样策略(代码示例),并在更新时逐个样本计算动作概率比值(代码示例),参见:
1
2
3
4
5
6
7
8## 策略记录
memory.append(state, action, reward, policy.detach())
## 动作概率比值计算
if off_policy:
rho = policies[i].detach() / old_policies[i]
else:
rho = torch.ones(1, action_size)上面的代码是 ACER(Actor-Critic with Experience Replay)方法的样例
- ACER 基于 Actor-Critic 框架
- ACER 利用经验回放技术来提高样本效率
- ACER 使用通过重要性采样权重来修正策略更新时的偏差,确保梯度估计的无偏性
On-Policy Deterministic Actor-Critic
- 优化目标
$$ J(\theta) = \int_\mathcal{S} \rho^{\mu_\theta}(s) Q^{\mu_\theta}(s, \mu_\theta(s)) ds $$- 其中 \(\rho^{\mu_\theta}(s’) = \int_\mathcal{S} \sum_{k=1}^\infty \gamma^{k-1} \rho_0(s) \rho^\mu(s \to s’, k) ds\)
- 确定性梯度定理:
$$
\begin{aligned}
\nabla_\theta J(\theta)
&= \int_\mathcal{S} \rho^{\mu_\theta}(s) \nabla_a Q^{\mu_\theta}(s, a) \nabla_\theta \mu_\theta(s) \rvert_{a=\mu_\theta(s)} ds \\
&= \mathbb{E}_{s \sim \rho^{\mu_\theta}} [\nabla_a Q^{\mu_\theta}(s, a) \nabla_\theta \mu_\theta(s) \rvert_{a=\mu_\theta(s)}]
\end{aligned}
$$ - 确定性策略看作是随机策略的一种特殊形式,也就是策略的概率分布仅在某一个动作上有非零概率(该动作概率为1)
- 实际上,在 DPG 的论文中,作者指出:如果对随机策略,通过确定性策略和一个随机变量进行重参数化(re-parameterize),那么随机策略最终会在方差 \(\sigma=0\) 时与确定性策略等价
- 由于随机策略需要对整个状态和动作空间进行积分,我们可以预计随机策略的学习需要比确定性策略更多的样本(这里只是猜测,没有证据证明)
Off-Policy Deterministic Actor-Critic
优化目标
$$ J_\beta(\theta) = \int_\mathcal{S} \rho^\beta(s) Q^{\mu_\theta}(s, \mu_\theta(s)) ds $$- 其中 \(\rho^\beta(s)\) 是行为策略上采样得到的样本状态分布,这里直接导致了优化目标不是在最优策略下的回合(回合包含状态和动作)分布下的奖励期望最大,相对on-policy Deterministic AC算是次优解
推导结果:
$$
\begin{aligned}
\nabla_\theta J_\beta(\theta) &= \mathbb{E}_{s \sim \rho^\beta(s)} \left[\nabla_a Q^{\mu_\theta}(s, a) \nabla_\theta \mu_\theta(s) \rvert_{a=\mu_\theta(s)} \right]
\end{aligned}
$$Critic 网络更新(TD-Error)
$$
Loss_{\text{critic}} = \sum_t (r_t + \gamma Q^{\bar{w}}(s_{t+1}, a_{t+1}) - Q^{w}(s_{t}, a_t)) ^ 2
$$这里要求 \(a_{t+1} = \mu_\theta(s_{t+1})\), \(Q^w(s_t,a_t)\) 值拟合的目标是策略 \(\mu_\theta\) 对应的Q值 \(Q^{\mu_\theta}(s_{t}, a_t)\),实际更新中常使用Target网络 \(\bar{\theta}\) 一个简单的实现示例如下(参考自《动手学强化学习书籍》):
1
2
3next_q_values = self.target_critic(next_states, self.target_actor(next_states))
q_targets = rewards + self.gamma * next_q_values * (1 - dones)
critic_loss = torch.mean(F.mse_loss(self.critic(states, actions), q_targets))这里训练使用的 \((s_t,a_t,s_{t+1})\) 是行为策略采样到的数据(Q值 \(Q^{\mu_\theta}(s_{t}, a_t)\) 的学习样本保证 \(a_{t+1}\) 的采样策略是 \(\mu_\theta\) 即可,样本可以是任意策略采样的,当然,用当前策略采样的会更好些)
Actor 网络更新
$$
\begin{aligned}
Loss_{\text{actor}} = - \mathbb{E}_{s_t \sim \rho^\beta(s)} [Q_w(s_t,\mu_\theta(s_t))]
\end{aligned}
$$- 上面的Loss求导就可以得到梯度是 \(\mathbb{E}_{s \sim \rho^\beta(s)} \left[\nabla_a Q^{\mu_\theta}(s, a) \nabla_\theta \mu_\theta(s) \rvert_{a=\mu_\theta(s)} \right]\),与之前推导结论一致
- 直观上理解,这里的目标是对于任意给定的状态 \(s_t\) 下(这个状态样本是行为策略采样得到的),找到一个最大最大化当前 \(Q_w(s_t,\mu_\theta(s_t)) \) 的动作参数 \(\mu_\theta\)
DDPG
- Deep Deterministic Policy Gradient Algorithms,是 DPG 的 Deep 网络版本,原始论文地址CONTINUOUS CONTROL WITH DEEP REINFORCEMENT LEARNING
DDPG训练流程
伪代码如下(其中 \(\theta^{\mu’}\) 和 \(\theta^{Q’}\) 分别表示策略 \(\mu’\) 和价值 \(Q’\) 的参数):
随机探索 :做选择动作 \(a_t\) 时,添加一个随机噪声,可以增强探索能力,使得模型更加鲁棒,如果没有随机噪声,可能会很快收敛到局部最优
软更新 :Target网络的更新选择软更新,DQN中是硬更新
DDPG 为什么可以是 off-policy 的?
- DDPG 是 off-policy 的,原因如下:
- Q函数的学习 :DQN 和 DDPG 本质都是基于贝尔曼最优公式迭代Q值的,因为 Q 函数都是在学习某个策略 \(\pi_0\) (\(\pi_0\) 实际上就是截止到当前的最优策略)下对应的 Q 值,只要 TD-Error中 的 Q 值目标 \(r(s,a)+\gamma Q(s’,a’) - Q(s, a)\) 中的 \(a’\) 是策略 \(\pi_0\) 采样的,即服从策略 \(a\sim\pi_0(\cdot|s’)\) 即可保证学到的Q值是 \(Q^{\pi_0}(s,a)\),与 \((s,a,s’)\) 本身的采样策略无关
- 策略的学习 :在保证Q函数预估的是当前策略(即截止到目前的最优策略)对应的Q值以后,我们只需要求解一个策略,保证当前策略对应的动作分布下的Q值最大即可,此时有:
- DDPG如何找到最优策略? :目标是找到一个确定性策略 \(\pi_\theta(s)\),最大化 \(Q(s,\pi_\theta(s))\) (本质可以理解为Q值在策略下的期望 \(\pi_\theta(s)\),确定性策略的期望就是这个策略对应的Q值),可采用梯度直接回传的方式链式求导;
- 注意:DDPG/SAC等方法中 ,策略学习的目标是找到使得当前 \(Q(s,a)|a\sim\pi_\theta(s)\) 值最大的策略 \(\pi_\theta\),学习时状态 \(s\) 是从什么策略采样来的无关,即任意给我一个状态 \(s\),目标策略都能使得该状态下的 \(Q\) 值最大化(这里的Q值在学习中拟合目标是在当前策略下的Q值);但普通的AC方法中 ,Actor是直接对Reward的期望求梯度来更新的,这个期望是需要在当前策略下的期望,故而状态和动作都需要是当前状态下采样得到的,否则梯度有偏,而DDPG/SAC中则因为直接最大化Q值(该Q值是当前策略下的Q值)来实现了,绕过了必须保证状态 \(s\) 是当前策略采样得到的这一步了
- 更多详情讨论可参考:RL——强化学习相关笔记
TD3
- TD3 是对 DDPG 的改进,全称为 Twin Delayed Deep Deterministic Policy Gradient Algorithm,原始论文:Addressing Function Approximation Error in Actor-Critic Methods,ICML 2018,Google Research, Brain Team,代码地址:github.com/sfujim/TD3
- 有两个改进包含在名字中,Twin和Delayed
- 其他改进是在Actor 的target网络输出中,增加噪声
TD3 训练流程
- 伪代码如下(其中, \(t \ \text{mod} \ d\) 表示策略更新比Q值更新慢一些, \(d\) 次Q值更新对应一次策略更新):
改进1:Twin
- 采用双Critic网络(训练网络和target网络均为双网络),缓解Q值高估问题
改进2:Delayed
- Actor的目标是在Q值更新时,寻找最优的策略,如果Q值更新太快,容易波动,可以让Q值比较稳定了再更新Actor网络
- 具体做法,Critic网络更新 \(d\) 次再更新一次Actor
改进3:Target 策略网络增加噪声
- 在Actor 的target策略网络输出的策略中,增加噪声,可以缓解Q值高估问题
TD3+BC(TD3 with behavior cloning,for Offline RL)
- 原始论文(与TD3同一个作者):A Minimalist Approach to Offline Reinforcement Learning,NeurIPS 2021,Google Research, Brain Team,开源代码:github.com/sfujim/TD3_BC
- TD3+BC,在 TD3 的基础上,增加策略模仿,即对策略进行迭代时,损失函数中增加 \(loss_{\text{BC}} = (\pi_{\theta}(s) - a)^2\)
- 论文中提到三个改进点:
- 加入带权重的 BC 正则项
- 状态归一化(不一定很重要)
- 提出对权重的一种设定方式
- DDPG 是 Online RL 的算法,TD3+BC 是 Offline RL 的算法