RL 学习笔记 #9 Actor-Critic 方法
本文最后更新于:2024年12月25日 凌晨
在今天的强化学习中,Actor-Critic 方法依旧是最流行的一类算法。它将 Value-based 值函数方法和 Policy-based 策略梯度方法结合起来,改进了各自的一些缺陷(但仍属于策略梯度方法)。正如其名所示,Actor-Critic 方法由两个主要部分组成:
- Actor:负责策略更新(PU),决定了智能体在每个状态下的行动选择。
- Critic:负责策略评估(PE),通常通过计算状态价值函数或优势函数来给出反馈。
这两个模块相互协作,Actor 负责采取动作并推动策略的优化,Critic 负责评估当前策略的效果并为 Actor 提供更新的指导。
Q-Value based Actor-Critic (QAC)
我们先回顾一下上一节的策略梯度算法。首先,我们定义了两个目标函数的指标 \(\bar{v}_\pi\) 和 \(\bar{r}_\pi\),并使用梯度上升来最大化目标函数 \(J(\theta)\): \[ \begin{aligned} \theta_{t+1} &= \theta_t + \alpha \nabla_\theta J(\theta) \\ &= \theta_t + \alpha \mathbb{E} \left[\nabla_\theta \ln \pi(A \mid S;\theta) \cdot q_\pi(S, A)\right]\\ \end{aligned} \] 对于其中的期望,我们使用随机采样的 \((s_t,a_t)\) 替换: \[ \theta_{t+1} =\theta_t + \alpha \nabla_\theta \ln \pi(a_t \mid s_t;\theta_t) \cdot q_t(s_t, a_t) \] 我们可以发现,根据 Actor 和 Critic 的定义:这个随机梯度上升算法就是负责策略更新的 Actor,其中用于估计 \(q_t(s_t, a_t)\) 的算法就是负责策略评估的 Critic。
在上节课的末尾,我们提到 REINFORCE 算法使用蒙特卡洛方法来估计 \(q_t(s_t, a_t)\),但它没法边采样边更新策略;而一旦引入时序差分方法,就能完美解决这一问题。此时我们就得到了最简单的 Q-Value based Actor-Critic (QAC) 算法。
基于 SARSA 的 Critic 定义
在 TD Learning 中,我们用于估计动作价值函数的方法就是 SARSA。其根据策略 \(\pi\) 产生的经验数据 \(\{(s_t, a_t, r_{t+1}, s_{t+1}, a_{t+1})\}\) 进行更新: \[ q_{t+1}\left(s_t, a_t\right) =q_t\left(s_t, a_t\right)-\alpha_t\left(s_t, a_t\right)\left[q_t\left(s_t, a_t\right)-\left[r_{t+1}+\gamma q_t\left(s_{t+1}, a_{t+1}\right)\right]\right] \] 为了能够实现对高维空间的近似,我们引入值函数估计的 \(\hat{q}(s_t, a_t; w_t)\): \[ w_{t+1} = w_t + \alpha_w \left( r_{t+1} + \gamma \hat{q}(s_{t+1}, a_{t+1}; w_t) - \hat{q}(s_t, a_t; w_t) \right) \nabla_w \hat{q}(s_t, a_t; w_t) \]
这里使用 \(w\) 表示值函数的参数,用于和策略函数的参数 \(\theta\) 区分。
算法步骤
QAC 的算法步骤通常如下:
初始化策略网络和价值网络,并设定学习率 \(\alpha_w\) 和 \(\alpha_\theta\)。
采样:根据当前策略网络 \(\pi(a \mid s; \theta_t)\) 与环境进行一次交互,得到 \(\{(s_t, a_t, r_{t+1}, s_{t+1}, a_{t+1})\}\)。
策略估计:使用 SARSA + 值函数近似更新价值网络: \[ w_{t+1} = w_t + \alpha_w \left( r_{t+1} + \gamma q(s_{t+1}, a_{t+1}; w_t) - q(s_t, a_t; w_t) \right) \nabla_w q(s_t, a_t; w_t) \]
更新策略:根据价值网络的估计结果,使用策略梯度方法来更新策略网络: \[ \theta_{t+1} =\theta_t + \alpha \nabla_\theta \ln \pi(a_t \mid s_t;\theta_t) \cdot q_t(s_t, a_t;w_{t+1}) \]
迭代:继续采样,直到策略网络和价值网络均收敛。
需要注意的是,QAC 算法:
- 属于 On-Policy 算法,因为每次采样都要基于 \(\pi_\theta\) 去获取 \(a_t\) 和 \(a_{t+1}\);
- 属于随机性策略,因为基于 Softmax 的概率 \(\pi(A \mid S;\theta) >0\)。
Advantage Actor-Critic (A2C)
Advantage Actor-Critic (A2C) 方法是 Actor-Critic 方法的一个扩展,它通过引入优势函数(Advantage Function)作为偏置量来减少估计的方差,提高学习效率。优势函数 \(A(s, a)\) 衡量了某个特定动作相对于平均水平的表现。通常,优势函数定义为: \[ A(s, a) = Q(s, a) - V(s) \] 其中:
- \(Q(s, a)\) 是状态-动作值函数,表示从状态 \(s\) 开始采取动作 \(a\) 后的预期回报。
- \(V(s)\) 是状态值函数,表示在状态 \(s\) 下,智能体能够获得的预期回报,可以认为是状态 \(s\) 下所有动作价值的平均水平。
下面我们将介绍 Actor-Critic 的高方差问题,并解释为什么需要引入优势函数来指导策略更新。
Baseline Invariance 性质
首先要介绍一个重要性质——在策略梯度定理中,引入一个与状态分布相关的基线(baseline)作为偏置量,不会改变梯度的值: \[ \begin{aligned} \nabla_\theta J(\theta) & =\mathbb{E}_{S\sim \eta, A \sim \pi} \left[\nabla_\theta \ln \pi(A \mid S;\theta) \cdot q_\pi(S, A)\right]\\ &=\mathbb{E}_{S\sim \eta, A \sim \pi} \left[\nabla_\theta \ln \pi(A \mid S;\theta) \cdot \left( q_\pi(S, A) - b(S) \right) \right] \end{aligned} \] 为什么引入 baseline 不会改变梯度值?我们需要证明下式成立: \[ \mathbb{E}_{S\sim \eta, A \sim \pi} \left[\nabla_\theta \ln \pi(A \mid S;\theta) \cdot b(S)\right]=0 \] 我们将其原式展开,并依次将与 \(a\) 无关的项提到 \(\sum\) 外: \[ \begin{aligned} \mathbb{E}_{S \sim \eta, A \sim \pi}\left[\nabla_\theta \ln \pi\left(A \mid S, \theta\right) b(S)\right] & =\sum_{s \in \mathcal{S}} \eta(s) \sum_{a \in \mathcal{A}} \pi\left(a \mid s, \theta\right) \nabla_\theta \ln \pi\left(a \mid s, \theta\right) b(s) \\ & =\sum_{s \in \mathcal{S}} \eta(s) \sum_{a \in \mathcal{A}} \nabla_\theta \pi\left(a \mid s, \theta\right) b(s) \\ & =\sum_{s \in \mathcal{S}} \eta(s) b(s) \sum_{a \in \mathcal{A}} \nabla_\theta \pi\left(a \mid s, \theta\right) \\ & =\sum_{s \in \mathcal{S}} \eta(s) b(s) \nabla_\theta \sum_{a \in \mathcal{A}} \pi\left(a \mid s, \theta\right) \\ & =\sum_{s \in \mathcal{S}} \eta(s) b(s) \nabla_\theta 1=0 \end{aligned} \] 于是,我们就证明了策略梯度的 Baseline Invariance 性质:对于 \[ X(S,A) \doteq \nabla_\theta \ln \pi(A \mid S;\theta) \cdot \left( q_\pi(S, A) - b(S) \right) \] 期望 \(\mathbb{E}[X]\) 对 \(b(S)\) 具有不变性。
此外,我们还注意到,方差 \(\mathrm{Var}(X)\) 是不具有不变性的:因为 \(\mathrm{tr}(\mathrm{Var}(X))=\mathbb{E}[X^\top X]-\bar{x}^\top \bar{x}\),其中后者不会受到 \(b(S)\) 的影响,但前者 \[ \begin{aligned} \mathbb{E}\left[X^T X\right] & =\mathbb{E}\left[\left(\nabla_\theta \ln \pi\right)^T\left(\nabla_\theta \ln \pi\right)(q(S, A)-b(S))^2\right] \\ & =\mathbb{E}\left[\left\|\nabla_\theta \ln \pi\right\|^2(q(S, A)-b(S))^2\right] \end{aligned} \] 此时 \(b(S)\) 显然会带来影响。因此,我们的目标就是:寻找一个最好的 Baseline 来尽可能降低梯度的方差,进而提高学习效率。
在 REINFORCE 和 QAC 中,我们可以认为 \(b=0\),这并不是一个很好的 Baseline。
最优 Baseline 与优势函数
可以证明,最优的 Baseline 为: \[ b^*(s)=\frac{\mathbb{E}_{A \sim \pi}\left[\left\|\nabla_\theta \ln \pi\left(A \mid s, \theta_t\right)\right\|^2 q(s, A)\right]}{\mathbb{E}_{A \sim \pi}\left[\left\|\nabla_\theta \ln \pi\left(A \mid s, \theta_t\right)\right\|^2\right]} \] 具体的证明不再展开。虽然这个基线可以达到最小的方差,但是由于太过复杂,在实际中我们会去掉权重项,直接使用: \[ b(s) =\mathbb{E}_{A \sim \pi}\left[q(s, A)\right]=v_\pi(s) \] 将其代入更新表达式: \[ \begin{aligned} \theta_{t+1} &= \theta_t + \alpha \mathbb{E} \left[\nabla_\theta \ln \pi(A \mid S;\theta) \cdot \left( q_\pi(S, A) - v_\pi(S) \right)\right]\\ & \doteq \theta_t + \alpha \mathbb{E} \left[\nabla_\theta \ln \pi(A \mid S;\theta) \cdot \delta_\pi(S,A) \right] \end{aligned} \] 其中,我们定义优势函数: \[ \delta_\pi(S,A) \doteq q_\pi(S, A) - v_\pi(S) \] 考虑到随机采样,我们还可以将更新表达式写作: \[ \theta_{t+1} =\theta_t + \alpha \nabla_\theta \ln \pi(a_t \mid s_t;\theta_t)\delta_t(s_t,a_t) \] 并且,和上一节介绍的类似,\(\delta_t(s_t,a_t)\) 也起到平衡探索和采样的作用: \[ \begin{aligned} \theta_{t+1} & =\theta_t+\alpha \nabla_\theta \ln \pi\left(a_t \mid s_t; \theta_t\right) \delta_t\left(s_t, a_t\right) \\ & =\theta_t+\alpha \underbrace{\left(\frac{\delta_t\left(s_t, a_t\right)}{\pi\left(a_t \mid s_t; \theta_t\right)}\right)}_{\text{step size}} \nabla_\theta \pi\left(a_t \mid s_t; \theta_t\right) \end{aligned} \] 分子 \(\delta_t(s_t,a_t)\) 与之前的 \(q_t\left(s_t, a_t\right)\) 类似,意味着新策略会将更大的概率分配给更好的动作,并且此时不再关注绝对价值,而是关注相对价值!防止出现 \(q_t\left(s_t, a_t\right)\) 绝对值过大但是没有相对优势的情况。
算法步骤
在实际算法中,我们通常会将优势函数进一步改写成: \[ \begin{aligned} \delta_t\left(s_t, a_t\right)& = q_t\left(s_t, a_t\right) - v_t(s_t)\\ &= r_{t+1} +\gamma v_t(s_{t+1}) -v_t(s_t) \end{aligned} \] 这样做的好处是:我们可以只用一个价值网络来近似 \(v(s)\),而不需要再引入一个 \(q(s,a)\) 网络。这个式子形如 TD Error,因此 A2C 算法有时也被称为 TD Actor-Cricic。
A2C 的算法步骤通常如下:
初始化策略网络和价值网络,并设定学习率 \(\alpha_w\) 和 \(\alpha_\theta\)。
采样:根据当前策略网络 \(\pi(a \mid s; \theta_t)\) 与环境进行一次交互,得到 \(\{(s_t, a_t, r_{t+1}, s_{t+1})\}\)。
计算优势:使用 TD Error 形式: \[ \delta_t = r_{t+1} +\gamma v(s_{t+1};w_t) -v(s_t;w_t) \]
策略估计:使用优势函数更新价值网络: \[ w_{t+1} = w_t + \alpha_w \delta_t \nabla_w v(s_t; w_t) \]
更新策略:再次复用优势函数,使用策略梯度方法来更新策略网络: \[ \theta_{t+1} =\theta_t + \alpha \delta_t \nabla_\theta \ln \pi(a_t \mid s_t;\theta_t) \]
迭代:继续采样,直到策略网络和价值网络均收敛。
需要注意的是,A2C 算法:
- 属于 On-Policy 算法,因为每次采样都要基于 \(\pi_\theta\) 去获取 \(a_t\);
- 属于随机性策略,因为基于 Softmax 的概率 \(\pi(A \mid S;\theta) >0\)。
Off-Policy Actor-Critic
在某些应用场景中,我们希望能够使用 Off-Policy 方法来进行学习,以利用现有的经验数据。在之前的方法中: \[ \nabla_\theta J(\theta) =\mathbb{E}_{S\sim \eta, \textcolor{blue}{A \sim \pi}} \left[*\right] \] 我们的目标策略 \(\pi\),同时也是采样中使用的行为策略。如果要使用其他行为策略采样的数据,就会遇到分布差异的问题。为此,我们需要引入重要性采样(Importance Sampling),解决分布问题,从而提高数据效率。
注意:虽然我们到这里才首次介绍重要性采样,但实际上任何求期望(采样)的算法,只要涉及 On-Policy 到 Off-Policy 的转换,都可以用到这个技术。
重要性采样 | Importance Sampling
我们先从一个例子开始:给定一个随机变量 \(X \in \mathcal{X}=\{+1, -1\}\),其概率分布为 \(p_0\): \[ p_0(X=+1)=0.5,\quad p_0(X=-1)=0.5 \] 在这个分布下采样得到 \(\{x_i\}\) 后,我们可以用这组数的平均值来估计其期望: \[ \bar{x}=\sum_{i=1}^n \frac{1}{n} x_i \rightarrow \mathbb{E}_{X \sim p_0}[X]=0 \] 然而,如果 \(\{x_i\}\) 是采样自另一个分布 \(p_1\): \[ p_0(X=+1)=0.8,\quad p_0(X=-1)=0.2 \] 此时用平均值去估计期望就是造成差异: \[ \bar{x}=\sum_{i=1}^n \frac{1}{n} x_i \rightarrow \mathbb{E}_{X \sim p_1}[X]=0.6 \neq \mathbb{E}_{X \sim p_0}[X] \] 那么要如何使用 \(\{x_i\} \sim p_1\) 去估计 \(\mathbb{E}_{X \sim p_0}[X]\)?这就是重要性采样试图解决的问题。在强化学习中,我们希望使用来自行为策略 \(\pi_b\) 的数据去估计目标策略 \(\pi_\theta\) 下的 \(\mathbb{E}_{A \sim \pi_\theta} \left[*\right]\)。
我们记: \[ \mathbb{E}_{X \sim p_0}[X]=\sum_x p_0(x) x=\sum_x p_1(x) \underbrace{\frac{p_0(x)}{p_1(x)} x}_{f(x)}=\mathbb{E}_{X \sim p_1}[f(X)] \] 其中 \(f(x)\) 就是重要性变换,通过这个函数映射,我们可以将分布 \(p_1\) 下的样本 \(x_i\) 模拟为分布 \(p_0\) 下的样本 \(f_i\)。那么如何估计 \(\mathbb{E}_{X \sim p_1}[f(X)]\) 呢?还是依赖大数定律: \[ \mathbb{E}_{X \sim p_0}[X] \approx \bar{f}=\frac{1}{n} \sum_{i=1}^n f\left(x_i\right)=\frac{1}{n} \sum_{i=1}^n \frac{p_0\left(x_i\right)}{p_1\left(x_i\right)} x_i \] 其中,$ $ 就是重要性权重(Importance Weight)。之所以叫「重要性」也很直观:如果 $ p_0(x_i) > p_1(x_i)$,那么可以认为 \(x_i\) 在 \(p_0\) 下容易采到,而在 \(p_1\) 下则不容易采到,因此当我们想计算 \(p_0\) 下的期望,就应该很珍惜这个重要的样本。
这个时候初学者可能会有一个问题:在求权重的时候,我如果知道 \(p_0\left(x_i\right)\),那我直接根据定义 \(\mathbb{E}_{X \sim p_0}[X] = \sum p_0\left(x\right)x\) 不就能求出期望了吗?
考虑一个情况:\(p_0\) 是一个神经网络,此时它的输出是连续的,定义式需要改为积分符号 \(\int\),并且神经网络是没有表达式的,自然也没法求积分。我们只能给定一个 \(x_i\),返回一个 \(p_0(x_i)\),然后慢慢采样累加。这就是我们用在策略网络 \(\pi(a \mid s; \theta)\) 中的情况。
重要性采样应用于 Actor-Critic
在 Off-Policy Actor-Critic 方法中,我们使用重要性采样来修正策略的更新。与 On-Policy 方法不同,行为策略 \(\pi_b\) 和目标策略 \(\pi_\theta\) 不再相同。我们首先要获取新的梯度表达式,再将其用到梯度上升算法中进行优化。此时的目标函数为: \[ J(\theta) = \sum_{s\in \mathcal{S}}d_{\pi_b}v_{\pi_\theta}=\mathbb{E}_{S\sim d_{\pi_b}}[v_{\pi_\theta}(S)] \] 其中 \(d_{\pi_b}\) 为行为策略 \(\pi_b\) 下的稳态分布。在 Q-value based 方法中,策略梯度更新公式通常为:
\[ \nabla_\theta J(\theta) = \mathbb{E}_{S \sim \eta, A \sim \pi_b} \left[\frac{\pi_\theta(A \mid S)}{\pi_b(A \mid S)} \nabla_\theta \ln \pi_\theta(A \mid S) \cdot q_{\pi_\theta}(S, A)\right] \]
在这个公式中,\(\frac{\pi_\theta(A \mid S)}{\pi_b(A \mid S)}\) 就是重要性采样比率,它校正了采样分布与目标策略之间的差异。其中 \(S\) 的分布通常不需要在意,\(A\) 的分布则需要使用行为策略 \(\pi_b\) 获取。
同理,我们也可以应用优势函数进行改进: \[ \nabla_\theta J(\theta) = \mathbb{E}_{S \sim \eta, A \sim \pi_b} \left[\frac{\pi_\theta(A \mid S)}{\pi_b(A \mid S)} \nabla_\theta \ln \pi_\theta(A \mid S) \cdot (q_{\pi_\theta}(S, A)-v_{\pi_\theta}(S))\right] \] 引入随机采样的梯度上升更新表达式: \[ \theta_{t+1} =\theta_t + \alpha_\theta \frac{\pi_\theta(a_t \mid s_t)}{\pi_b(a_t \mid s_t)} \nabla_\theta \ln \pi(a_t \mid s_t;\theta_t)\delta_t(s_t,a_t) \]
算法步骤
Off-Policy Actor-Critic 的算法步骤通常如下:
初始化策略网络和价值网络,并设定学习率 \(\alpha_w\) 和 \(\alpha_\theta\)。
初始化行为策略 \(\pi_b\),它通常是一个探索性策略(例如 \(\epsilon\)-greedy 或者是通过一个探索性噪声的策略)。
采样:根据行为策略 \(\pi_b\) 从环境中采样(也可以从经验池中获取),得到经验数据 \(\{(s_t, a_t, r_{t+1}, s_{t+1})\}\)。
计算重要性权重:计算每个时间步的采样权重: \[ \rho_t = \frac{\pi_\theta(a_t \mid s_t)}{\pi_b(a_t \mid s_t)} \]
计算优势:使用 TD Error 形式优势函数: \[ \delta_t = r_{t+1} +\gamma v(s_{t+1};w_t) -v(s_t;w_t) \]
更新价值网络:使用重要性采样权重修正的优势函数来更新价值网络: \[ w_{t+1} = w_t + \alpha_w \rho_t \delta_t \nabla_w v_\pi(s_t; w_t) \]
更新策略网络:根据重要性采样权重修正的策略梯度更新策略网络: \[ \theta_{t+1} = \theta_t + \alpha_\theta \rho_t \delta_t \nabla_\theta \ln \pi_\theta(a_t \mid s_t) \]
迭代:继续采样,直到策略网络和价值网络均收敛。
Deterministic Actor-Critic (DPG)
在前面的方法中,我们都是在讨论随机性策略。什么情况下需要一个确定性策略呢?
考虑到随机性策略函数 \(\pi_\theta\) 的一个天然缺陷——它要求输出的动作 \(a\) 必须是有限的,因为我们需要一个函数 \(\pi(a \mid s;\theta)\) 将状态 \(s\) 映射到一个有限的动作集合中。这对于离散动作空间是没问题的,但如果动作空间是连续的(如控制任务中的物理机器人),那么使用这种方式就不再适用。
这个时候我们可以换一种形式表示确定性策略: \[ a=\mu(s;\theta) \] 这里的 \(\mu(s; \theta)\) 是一个确定性函数,它会根据当前的状态 \(s\) 输出一个特定的动作 \(a\),而不再是基于概率的选择。这种方法尤其适用于连续动作空间(例如控制系统),并且通常能更高效地进行学习。
DPG 的梯度计算
在 Deterministic Actor-Critic (DPG) 方法中,策略函数 Actor 不再是一个概率分布,而是确定性的函数。此时,Critic 的任务是评估由 Actor 产生的每个动作的价值。
为了更新策略网络 \(\mu(s; \theta)\),我们依然使用策略梯度方法,但由于策略是确定性的,我们需要调整梯度的计算。首先,我们定义目标函数: \[ J(\theta)= \mathbb{E}_{s \sim d} \left[ v_\mu(s) \right]=\sum_{s\in \mathcal{S}}d(s) v_\mu(s) \] 这里的 \(d(s)\) 是一个概率分布,满足 \(\sum d(s)=1\)。它可以和策略 \(\mu\) 相关,也可以无关,此时又两种特殊情况:
- 与任何策略都无关的 \(d_0\),此时为了方便我们一般设定 \(d_0(s_0)=1\) 而 \(d_0(s\ne s_0)=0\),这样做可以最大化起始状态的权重,也符合需求;
- 与另一个行为策略 \(b\) 相关的 \(d_b\),此时 \(d_b\) 是策略 \(b\) 下的稳态分布,构成了 Off-Policy 的方法。注意,待会我们就会发现,其实 DPG 天然就是 Off-Policy 算法。
现在我们给出目标函数的梯度: \[ \begin{aligned} \nabla_\theta J(\theta) & =\sum_{s \in \mathcal{S}} \rho_{\mu} \nabla_\theta \mu(s;\theta)\left(\nabla_a q_\mu(s, a)\right)|_{a=\mu(s;\theta)} \\ & =\mathbb{E}_{S \sim \rho_\mu}\left[\nabla_\theta \mu(S;\theta)\left(\nabla_a q_\mu(S, a)\right)|_{a=\mu(S;\theta)}\right] \end{aligned} \] 其中:
- \(S\) 需要服从 \(\rho_\mu\) 的分布,具体推导过程这里不再展开;
- \(\left(\nabla_a q_\mu(S, a)\right)|_{a=\mu(S;\theta)}\) 表示先对 \(q_\mu\) 求梯度,再将 \(a\) 替换为 \(\mu(S;\theta)\) 后计算外层的链式求导。
注意这个表达式中与前面不同的一点:因为没有涉及到 \(A\),因此在求期望 \(\mathbb{E}_{S \sim \rho_\mu}[*]\) 的时候也不需要分布 \(A\sim \pi(S)\)。所以这里天然就是 Off-Policy 的,之后也无需重要性采样来修正分布。
于是,我们就可以给出引入随机采样的梯度上升更新表达式: \[ \theta_{t+1} =\theta_t + \alpha_\theta \nabla_\theta\mu(s_t;\theta)\left(\nabla_a q_\mu(s_t, a)\right)|_{a=\mu(s_t;\theta)} \]
DPG 算法步骤
DPG 算法的步骤通常如下:
初始化动作选择策略网络和价值网络,并设定学习率 \(\alpha_w\) 和 \(\alpha_\theta\)。
采样:使用任何一个策略与环境进行交互(也可以从经验池中获取),得到一批经验 \(\{(s_t, a_t, r_{t+1}, s_{t+1})\}\)。
计算优势:使用 TD Error 形式优势函数: \[ \delta_t= r_{t+1} + \gamma q(s_{t+1}, \mu(s_{t+1}; \theta_t); w_t) - q(s_t, a_t; w_t) \]
更新价值网络:使用的优势函数来直接更新价值网络,无需修正: \[ w_{t+1} = w_t + \alpha_w \delta_t \nabla_w q(s_t, a_t; w_t) \]
更新策略网络:使用确定性策略梯度更新策略网络: \[ \theta_{t+1} = \theta_t + \alpha_\theta \nabla_\theta \mu(s_t; \theta_t) \cdot \nabla_a q(s_t, a_t; w_{t+1}) \big|_{a_t = \mu(s_t; \theta_t)} \]
迭代:重复采样和更新过程,直到策略和价值网络都收敛。
需要注意的是,DPG 算法:
- 属于 Off-Policy 算法,但采样所用的行为策略也可以从 \(\mu\) 中复制,但此时要对策略进行扰动,使得策略具有探索性。例如,在连续动作空间内,加上一个正态分布的微小噪音。
- 这里的 \(q(s_t, a_t; w_t)\) 可以选取线性函数 \(\phi^\top(s,a)w\)(出自 DPG 原始论文)或神经网络模型(出自改进的 DDPG 论文)。