强化学习的数学原理(十):Actor Critic方法
Actor-Critic 方法使用两个神经网络协同工作:Actor (策略网络):负责决策,学习在特定状态下应该采取什么动作。它输入状态,输出动作的概率;Critic (价值网络):负责评估,学习当前状态有多好。它输入状态,输出一个价值评分。工作流程:训练时,Actor 做出动作,Critic 对其进行评分。Actor 根据 Critic 的评分来调整自己的策略,力求做出更好的决策。最终策略:训练过程中策略是随机的以鼓励探索,训练完成后则变为贪心的,总是选择概率最高的动作以获得最大回报。
1. Actor-Critic 方法概览
Actor-Critic 方法是强化学习中一类重要的算法,它依然属于策略梯度(Policy Gradient)方法的范畴。这类方法的核心思想是将策略的更新(Actor)与价值的估计(Critic)分开处理,并通过两者的协同作用来学习最优策略。
Actor 和 Critic 的职责:
- Actor(行动者):负责策略的更新,即根据 Critic 提供的价值信息来调整其行动策略,以期获得更高的回报。
- Critic(评论者):负责策略的评估,即估计当前策略下状态或状态-动作对的价值(Value Estimation),并以此来指导 Actor 的策略更新。
最简单的 Actor-Critic (QAC)
我们首先回顾之前介绍的策略梯度思想。
目标函数:我们通常定义一个标量指标 $J(\theta)$ 来衡量策略的好坏,例如平均价值 $\bar{V}_{\pi}$或平均奖励 $\bar{r}_{\pi}$。我们希望最大化这个指标。
梯度上升算法:最大化 $J(\theta)$ 的梯度上升算法表达式为: $$ \begin{aligned} \theta_{t+1} &= \theta_t + \alpha \nabla_{\theta} J(\theta_t) \\ &= \theta_t + \alpha E_{S \sim \eta, A \sim \pi} [\nabla_{\theta} \ln \pi(A|S, \theta_t) q_{\pi}(S,A)] \end{aligned} $$ 其中,$\theta$ 是策略 $\pi$ 的参数,$\alpha$ 是学习率,$E$ 表示期望,$\eta$ 是状态分布,$q_{\pi}(S,A)$ 是在策略 $\pi$ 下状态 $S$ 和动作 $A$ 的真实动作价值。
随机梯度上升算法:在实际应用中,我们通常采用随机梯度上升,使用经验样本来近似期望: $$ \theta_{t+1} = \theta_t + \alpha \nabla_{\theta} \ln \pi(a_t|s_t, \theta_t) q_t(s_t, a_t) $$ 这里的 $q_t(s_t, a_t)$ 是通过 TD (Temporal Difference) 方法估计的状态-动作价值函数。这就是最简单形式的 Actor-Critic,其中 Actor 根据 Critic (TD 估计的 $q_t$) 的反馈来更新策略。
2. Advantage Actor-Critic (A2C)
在 QAC 的基础上,引入偏置量(baseline)是一个有效的减少方差的方法。
性质: 策略梯度对额外的基线(baseline)是不变的。这意味着在策略梯度公式中减去一个基线 $b(S)$ 不会改变梯度的期望值,但可以显著减小其方差。
数学上,这个不变性可以表示为: $$ \begin{aligned} \nabla_{\theta} J(\theta) &= E_{S \sim \eta, A \sim \pi} [\nabla_{\theta} \ln \pi(A|S, \theta_t) q_{\pi}(S,A)] \\ &= E_{S \sim \eta, A \sim \pi} [\nabla_{\theta} \ln \pi(A|S, \theta_t) (q_{\pi}(S,A) - b(S))] \end{aligned} $$ 这个不变性成立的原因是,基线项的期望为零: $$ \begin{aligned} E_{S \sim \eta, A \sim \pi} [\nabla_{\theta} \ln \pi(A|S, \theta_t) b(S)] &= \sum_{s \in S} \eta(s) \sum_{a \in A} \pi(a|s, \theta_t) \nabla_{\theta} \ln \pi(a|s, \theta_t) b(s) \\ &= \sum_{s \in S} \eta(s) b(s) \sum_{a \in A} \nabla_{\theta} \pi(a|s, \theta_t) \\ &= \sum_{s \in S} \eta(s) b(s) \nabla_{\theta} \sum_{a \in A} \pi(a|s, \theta_t) \\ &= \sum_{s \in S} \eta(s) b(s) \nabla_{\theta} 1 \\ &= 0 \end{aligned} $$ 因此,梯度可以表示为 $\nabla_{\theta} J(\theta) = E[X]$,其中 $X(S,A) = \nabla_{\theta} \ln \pi(A|S, \theta_t) [q(S,A) - b(S)]$。
关于方差:
- $E[X]$ 对于 $b(S)$ 是不变的。
- $Var[X]$ 对于 $b(S)$ 不是不变的,选择合适的 $b(S)$ 可以减小方差。
方差的计算公式为: $tr[Var(X)] = E[X^T X] - \bar{X}^T \bar{X}$ 其中 $$ \begin{aligned} E[X^T X] &= E[(\nabla_{\theta} \ln \pi)^T (\nabla_{\theta} \ln \pi) (q(S,A) - b(S))^2] \\ &= E[||\nabla_{\theta} \ln \pi||^2 (q(S,A) - b(S))^2] \end{aligned} $$
2.1. 最优基线与优势函数(Advantage Function)
我们的目标: 选择一个最优的基线 $b$ 来最小化 $Var(X)$。
对于任意状态 $s \in S$,能够最小化 $Var(X)$ 的最优基线 $b^*(s)$ 为: $$b^*(s) = \frac{E_{A \sim \pi}[||\nabla_{\theta} \ln \pi(A|S, \theta_t)||^2 q_{\pi}(S,A)]}{E_{A \sim \pi}[||\nabla_{\theta} \ln \pi(A|S, \theta_t)||^2]}$$ 尽管这个基线是理论最优的,但它在实际计算中非常复杂。
一个更简单的选择 是将基线 $b(s)$ 设置为状态价值函数 $V_{\pi}(s)$,即 $b(s) = E_{A \sim \pi} [q(S,A)] = V_{\pi}(s)$。
当 $b(s) = V_{\pi}(s)$ 时:
梯度上升算法变为: $$ \begin{aligned} \theta_{t+1} &= \theta_t + \alpha E[\nabla_{\theta} \ln \pi(A|S, \theta_t) (q_{\pi}(S,A) - V_{\pi}(S))] \\ &\doteq \theta_t + \alpha E[\nabla_{\theta} \ln \pi(A|S, \theta_t) \delta_{\pi}(S,A)] \end{aligned} $$ 其中,$\delta_{\pi}(S, A) = q_{\pi}(S,A) - V_{\pi}(S)$ 被称为优势函数 (Advantage Function)。优势函数衡量了在给定状态下,执行某个动作比按策略平均表现好多少。
对应的随机梯度上升算法为: $$ \begin{aligned} \theta_{t+1} &= \theta_t + \alpha \nabla_{\theta} \ln \pi(a_t|s_t, \theta_t) [Q_t(s_t, a_t) - V(s_t)] \\ &= \theta_t + \alpha \nabla_{\theta} \ln \pi(a_t|s_t, \theta_t) \delta_t(s_t, a_t) \end{aligned} $$
2.2. TD Error 作为优势函数的近似
此外,上述算法可以进一步改写为: $$ \begin{aligned} \theta_{t+1} &= \theta_t + \alpha \nabla_{\theta} \ln \pi(a_t|s_t, \theta_t) \delta_t(s_t, a_t) \\ &= \theta_t + \alpha \frac{\nabla_{\theta} \pi(a_t|s_t, \theta_t)}{\pi(a_t|s_t, \theta_t)} \delta_t(s_t, a_t) \end{aligned} $$
- 这里的步长与相对价值 $\delta_t$ 成比例,而不是绝对价值 $q_t$,这在直觉上更合理。
- 这种方法也能很好地平衡探索(exploration)和利用(exploitation)。
优势函数 $\delta_t = q_{\pi}(S_t, A_t) - V_{\pi}(S_t)$ 通常用 TD error 来近似: $$\delta_t \approx r_{t+1} + \gamma V(S_{t+1}) - V_t(S_t)$$ 这种近似是合理的,因为: $$E[q_{\pi}(S,A) - V_{\pi}(S) | S=s_t, A=a_t] = E[R + \gamma V_{\pi}(S’) - V_{\pi}(S) | S=s_t, A=a_t]$$
2.3伪代码: Advantage Actor-Critic (A2C) 或 TD Actor-Critic。
目标 (Aim): 通过最大化 $J(\theta)$ 来寻找最优策略。
在每个回合 (episode) 的时间步 $t$ 执行:
生成动作 (Generate action): 根据当前策略 $\pi(a|s_t, \theta_t)$ 生成动作 $a_t$,然后观测到奖励 $r_{t+1}$ 和下一状态 $s_{t+1}$。
计算TD误差 (TD error / advantage function): $$ \delta_t = r_{t+1} + \gamma v(s_{t+1}, w_t) - v(s_t, w_t) $$
更新 Critic (价值网络): $$ w_{t+1} = w_t + \alpha_w \delta_t \nabla_w v(s_t, w_t) $$
更新 Actor (策略网络): $$ \theta_{t+1} = \theta_t + \alpha_\theta \delta_t \nabla_\theta \ln \pi(a_t|s_t, \theta_t) $$
3. Off-Policy Actor-Critic (用于随机策略)
3.1 动机与重要性采样
策略梯度是 On-Policy 的。
- 原因:因为梯度是对我们试图改进的策略 $\pi$ 生成的轨迹的期望。这意味着用于计算梯度的样本必须来自当前策略。
能否将其转换为 Off-Policy?
- 答案是可以,通过重要性采样 (Importance Sampling)。
- 重要性采样技术不仅限于 Actor-Critic,也适用于任何旨在估计期望的算法。
我们的目标是估计 $E_{A \sim \pi}[x]$,其中 $\pi$ 是目标策略,但我们只有来自行为策略 $\beta$ 的样本。这意味着我们使用由 $\beta$ 产生的样本 ${x_i}$ 来估计由 $\pi$ 产生的期望 $E_{x \sim \pi}[x]$。
重要性采样原理: 假设我们想计算分布 $p_0(x)$ 下随机变量 $X$ 的期望 $E_{X \sim p_0}[X]$,但我们只能从另一个分布 $p_1(x)$ 中采样。我们可以利用以下恒等式: $$ \begin{aligned} E_{X \sim p_0}[X] &= \sum_x p_0(x) X = \sum_x p_1(x) \frac{p_0(x)}{p_1(x)} X \ &= E_{X \sim p_1}[\frac{p_0(x)}{p_1(x)} X] \end{aligned} $$ 因此,为了估计 $E_{X \sim p_0}[X]$,我们可以在 $p_1$ 分布下估计 $E_{X \sim p_1}[f(x)]$,其中 $f(x) = \frac{p_0(x)}{p_1(x)} X$。
如何估计 $E_{X \sim p_1}[f(x)]$? 我们从 $p_1$ 中抽取 $n$ 个样本 $x_i \sim p_1$,然后用样本均值 $\bar{f} = \frac{1}{n} \sum_{i=1}^{n} f(x_i)$ 来近似:
- $E_{X \sim p_1}[\bar{f}] = E_{X \sim p_1}[f(x)]$
- $Var_{X \sim p_1}[\bar{f}] = \frac{1}{n} Var_{X \sim p_1}[f(x)]$
3.2 重要性采样的细节
基于上述原理,$\bar{f}$ 是 $E_{X \sim p_1}[f(x)] = E_{X \sim p_0}[X]$ 的良好近似: $$E_{X \sim p_0}[X] \approx \bar{f} = \frac{1}{n} \sum_{i=1}^{n} f(x_i) = \frac{1}{n} \sum_{i=1}^{n} \frac{p_0(x_i)}{p_1(x_i)} X_i$$
- $\frac{p_0(x_i)}{p_1(x_i)}$ 被称为重要性权重 (importance weight)。
- 如果 $p_1(x_i) = p_0(x_i)$,重要性权重为 1,$\bar{f}$ 退化为普通的样本均值 $\bar{X}$。
- 如果 $p_0(x_i) \geq p_1(x_i)$,这意味着目标策略 $\pi$ 在某些地方比行为策略 $\beta$ 更倾向于采样 $X_i$。
问题: 既然 $\bar{f} = \frac{1}{n} \sum_{i=1}^{n} \frac{p_0(x_i)}{p_1(x_i)} X_i$ 需要知道 $p_0(x)$,那为什么不直接计算期望呢?
答案: $p_0(x)$ 对于给定的 $x$ 来说计算可能很简单,但计算整个期望通常很困难。
- 例如,在连续状态空间中, $p_0$ 的表达式可能非常复杂,或者 $p_0$ 可能由神经网络表示,没有显式的解析形式来直接计算积分形式的期望。
总结:
- 如果样本 ${x_i} \sim p_1$,那么 $\bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_i \rightarrow E_{X \sim p_1}[X]$。
- 如果样本 ${x_i} \sim p_1$,那么 $\bar{f} = \frac{1}{n} \sum_{i=1}^{n} \frac{p_0(x_i)}{p_1(x_i)} X_i \rightarrow E_{X \sim p_0}[X]$。
3.3 Off-Policy 策略梯度定理
- 假设 $\beta$ 是生成经验样本的行为策略。
- 我们的目标是利用这些样本来更新一个目标策略 $\pi$,使其最大化以下指标: $J(\theta) = \sum_{s \in S} d_{\beta}(s) V_{\pi}(s) = E_{s \sim d_{\beta}}[V_{\pi}(S)]$,其中 $d_{\beta}$ 是策略 $\beta$ 下的平稳分布。
定理 (Off-policy 策略梯度定理): 在折扣系数 $\gamma \in (0, 1)$ 的情况下,目标函数 $J(\theta)$ 的梯度为: $$\nabla_{\theta} J(\theta) = E_{S \sim \rho, A \sim \beta} \left[ \frac{\pi(A|S, \theta)}{\beta(A|S)} \nabla_{\theta} \ln \pi(A|S, \theta) q_{\pi}(S,A) \right]$$ 其中,$\beta$ 是行为策略,$\rho$ 是状态分布(通常为 $d_{\beta}$ 或起始状态分布)。
- Off-policy 策略梯度对于基线 $b(S)$ 同样是不变的。具体地,我们可以得到: $$\nabla_{\theta} J(\theta) = E_{S \sim \rho, A \sim \beta} \left[ \frac{\pi(A|S, \theta)}{\beta(A|S)} (\nabla_{\theta} \ln \pi(A|S, \theta) (q_{\pi}(S,A) - b(S))) \right]$$
- 为了减小估计的方差,我们可以选择基线为 $b(S) = V_{\pi}(S)$,从而得到: $$\nabla_{\theta} J(\theta) = E \left[ \frac{\pi(A|S, \theta)}{\beta(A|S)} \nabla_{\theta} \ln \pi(A|S, \theta) (q_{\pi}(S,A) - V_{\pi}(S)) \right]$$
对应的随机梯度上升算法为: $$\theta_{t+1} = \theta_t + \alpha \frac{\pi(a_t|s_t, \theta_t)}{\beta(a_t|s_t)} \nabla_{\theta} \ln \pi(a_t|s_t, \theta_t) (q_t(s_t, a_t) - V_t(s_t))$$ 类似于 On-policy 的情况,我们可以用 TD error 来近似优势函数:$q_t(s_t, a_t) - V_t(s_t) \approx r_{t+1} + \gamma V_t(S_{t+1}) - V_t(S_t) \doteq \delta_t(s_t, a_t)$。
3.4 Off-Policy 更新规则分析
因此,算法更新规则变为: $$\theta_{t+1} = \theta_t + \alpha \frac{\pi(a_t|s_t, \theta_t)}{\beta(a_t|s_t)} \nabla_{\theta} \ln \pi(a_t|s_t, \theta_t) \delta_t(s_t, a_t)$$ 进一步改写可得: $$\theta_{t+1} = \theta_t + \alpha \frac{\delta_t(s_t, a_t)}{\beta(a_t|s_t)} \nabla_{\theta} \pi(a_t|s_t, \theta_t)$$
步长: $\frac{\delta_t(s_t, a_t)}{\beta(a_t|s_t)}$。
- 这个步长中可变因素只有 $\delta_t(s_t, a_t)$,这在一定程度上意味着在更新时更多地依赖于“利用”当前的优势信息,而较少体现“探索”的特性(探索由行为策略 $\beta$ 决定)。
3.5伪代码: Off-policy actor-critic based on importance sampling
初始化 (Initialization):
- 给定的行为策略 (behavior policy) $\beta(a|s)$。
- 目标策略 (target policy) $\pi(a|s, \theta_0)$,其中 $\theta_0$ 是初始参数。
- 价值函数 (value function) $v(s, w_0)$,其中 $w_0$ 是初始参数。
目标 (Aim): 通过最大化 $J(\theta)$ 来寻找最优策略。
在每个回合 (episode) 的时间步 $t$ 执行:
生成动作 (Generate action): 根据行为策略 $\beta(s_t)$ 生成动作 $a_t$,然后观测到奖励 $r_{t+1}$ 和下一状态 $s_{t+1}$。
计算TD误差 (TD error / advantage function): $$ \delta_t = r_{t+1} + \gamma v(s_{t+1}, w_t) - v(s_t, w_t) $$
更新 Critic (价值网络): $$ w_{t+1} = w_t + \alpha_w \frac{\pi(a_t|s_t, \theta_t)}{\beta(a_t|s_t)} \delta_t \nabla_w v(s_t, w_t) $$
更新 Actor (策略网络): $$ \theta_{t+1} = \theta_t + \alpha_\theta \frac{\pi(a_t|s_t, \theta_t)}{\beta(a_t|s_t)} \delta_t \nabla_\theta \ln \pi(a_t|s_t, \theta_t) $$
7. 确定性 Actor-Critic (DPG)
7.1 确定性策略
- 到目前为止,我们通常用 $\pi(a|s, \theta) \in [0, 1]$ 来表示一个一般性的策略,它可以是随机的,也可以是确定性的。
- 现在,我们专门讨论确定性策略,它被表示为 $a = \mu(s, \theta) \doteq \mu(s)$。
- $\mu$ 是一个从状态空间 $S$ 到动作空间 $A$ 的映射。
- $\mu$ 可以由一个神经网络表示,其中输入是状态 $s$,输出是动作 $a$,参数是 $\theta$。
- 为简洁起见,我们有时将 $\mu(s, \theta)$ 简写为 $\mu(s)$。
我们需要一个新的策略梯度定理来处理确定性策略。 考虑折扣情况下平均状态价值的指标: $$J(\theta) = E[V_{\mu}(s)] = \sum_{s \in S} d_0(s) V_{\mu}(s)$$ 其中 $d_0(s)$ 是一个概率分布,满足 $\sum_{s \in S} d_0(s) = 1$。
- $d_0(s)$ 可以独立于 $\mu$ 的选择,这使得计算更容易。
- 例如,我们可以设置 $d_0(s_0)=1$ 且 $d_0(s \neq s_0)=0$,即从固定起始状态开始。
- 或者, $d_0$ 可以是某个行为策略下的平稳状态分布,它与目标策略 $\mu$ 不同。
7.2 确定性策略梯度定理
定理 (折扣情况下的确定性策略梯度定理): 在折扣系数 $\gamma \in (0, 1)$ 的情况下,目标函数 $J(\theta)$ 的梯度为: $$ \begin{aligned} \nabla_{\theta} J(\theta) &= \sum_{s \in S} \rho_{\mu}(s) \nabla_{\theta} \mu(s) (\nabla_a q_{\mu}(s,a))|_{a=\mu(s)} \\ &= E_{s \sim \rho_{\mu}}[\nabla_{\theta} \mu(s) (\nabla_a q_{\mu}(s,a))|_{a=\mu(s)}] \end{aligned} $$ 其中,$\rho_{\mu}$ 是状态分布。
- 这个梯度公式不涉及动作 $A$ 的分布。这意味着我们不需要对动作空间进行积分或求和。
- 因此,确定性策略梯度方法天生就是离策略 (off-policy) 的。
伪代码: (此处省略具体伪代码,但DDPG (Deep Deterministic Policy Gradient) 是其一个著名应用。)