Actor Critic对比PG&Value-Based

发布于:2025-07-08 ⋅ 阅读:(25) ⋅ 点赞:(0)

目录

回顾一下policy gradient:

QAC算法:

A2C- advantage actor critic

问题:

1. 为什么要结合起来,能解决什么问题?

1. 策略梯度 (PG) 的优势与核心问题

2. 基于价值方法 (Value-Based) 的优势与局限性

3. 潜在挑战与权衡

2.policy gradient和DQN的区别?

3.连续动作空间中,AC如何将输出值映射为具体的动作?

1. 确定性策略 + 输出层激活函数缩放 (DDPG, TD3 的核心方式)

2. 随机策略 + 参数化概率分布 (SAC, A2C/PPO 用于连续空间的核心方式)

总结:Actor 如何输出连续动作值

4.为什么具有探索能力?


Actor Critic是 actor与critic方法的组合

actor:policy update to take action

critic: policy evaluation

回顾一下policy gradient:

\theta_{t+1}=\theta_t +\alpha\bigtriangledown_{\theta} J(\theta_t)

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)q_{\pi}(S,A)]

其实从这个公式中就可以发现actor 和critic: 这个策略更新对应actor,而策略更新需要计算q_tq_t的计算对应于critic。

其中q_t的计算可以有两种方式:

1. Monte Carlo learning:对应的算法为REINFORCE 或者 Monte Carlo policy gradient。

2. Temporal-difference learning(TD):对应的算法称作actor-critic。

QAC算法:

其中

critic: 对应于“SARSA + value function approximation”

actor: 对应于policy update 算法

这个算法是on-policy的(每个轮次会根据新更新的policy进行数据采样)。

且policy是随机的,不需要\varepsilon -greedy技术。

A2C- advantage actor critic

基本思想:在AC中引入一个baseline,来降低方差:

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)q_{\pi}(S,A)]

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)(q_{\pi}(S,A)-b(S))]

为什么该公式成立且这种方式可以降低方差?

公式证明:

\Xi _{S \sim d, A \sim \pi}[\bigtriangledown_{\theta}In\pi(A|S, \theta)b(S)]=0

证明过程:

\bigtriangledown_{\theta} J(\theta_t)=\Xi [X]

X(S,A) = \bigtriangledown_{\theta}In\pi(A|S, \theta_t)[(q(S,A)-b(S))]

E[X]相对于b(S)是不变的,但是var(X)相对b(S)是变化的。

目标是找到一个baseline b 来最小化var(X)。这样通过一个随机采样来近似\Xi [X],方差会更小。

最优的baseline:可以通过状态函数v_{\pi}(s)来近似

这样:梯度上升算法变为:

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)(q_{\pi}(S,A)-v_{\pi}(S))]

\theta_{t+1}=\theta_t +\alpha\Xi [\bigtriangledown_{\theta}In\pi(A|S, \theta)\delta _{\pi}(S,A)]

其中:\delta _{\pi}(S,A) = q_{\pi}(S,A)-v_{\pi}(S) ,这就是advantage function

与PG一样,这个算法可以被转化为(推导过程见:Policy Gradient【强化学习的数学原理】-CSDN博客):

\theta_{t+1}=\theta_t +\alpha (\frac{\delta _{t}(s_t,a_t)}{\pi(a_t|s_t, \theta_t)})\bigtriangledown_{\theta}\pi (a_t|s_t, \theta_t)

与相对值\delta _{t} 成比例,而不是绝对值q_t,不在乎绝对值,在乎相对值。

advantahe function可以通过TD error来近似,这样可以只通过一个网络来近似v函数,而不需要近似q和v两个网络。

\delta _{t}(s,a) = q_{t}(s_t,a_t)-v_{\pi}(s_t)

\delta _{t}(s,a) =r_{t+1} + \gamma *v_{t}(s_{t+1}) -v_{\pi}(s_t)

具体算法:

问题:

1. 为什么要结合起来,能解决什么问题?

1. 策略梯度 (PG) 的优势与核心问题

  • 优势:

    • 直接优化策略: 直接参数化策略函数 $\pi_\theta(a|s)$ 并沿着提升期望回报的方向更新参数 $\theta$。

    • 处理连续动作空间: 天然适用于动作是连续的或高维的场景(如机器人控制、自动驾驶),因为它直接输出动作或动作分布。

    • 学习随机策略: 可以学习最优的随机策略(这在部分可观测环境或需要探索性的博弈中很重要)。

  • 核心问题:高方差

    • 策略梯度方法(如REINFORCE)使用蒙特卡洛(MC)方法估计整个轨迹的回报 $G_t$ 作为期望回报梯度的无偏估计。

    • 问题在于,$G_t$ 是通过采样得到的,其方差非常大。环境的内在随机性(状态转移、奖励)、策略本身的随机性以及长轨迹都会累积巨大的方差。

    • 高方差的后果:

      • 训练不稳定: 更新方向波动剧烈,导致策略参数剧烈震荡。

      • 收敛缓慢: 需要大量样本(轨迹)才能获得可靠的梯度估计,样本效率低。

      • 难以收敛到最优策略: 巨大的噪声可能使优化过程难以找到正确的方向。

2. 基于价值方法 (Value-Based) 的优势与局限性

  • 优势:

    • 低方差: 通过学习价值函数 $V(s)$ 或 $Q(s, a)$ 来评估状态或状态-动作对的好坏。

    • 样本效率相对较高: 价值函数估计可以利用时序差分(TD)学习进行 Bootstrap(自举),即利用当前估计的值来更新之前的估计,这大大降低了方差(相比MC)。

  • 局限性:

    • 间接优化策略: 需要从学到的价值函数(通常是 $Q$ 函数)中派生策略(例如 $\epsilon$-greedy 或 max操作 $\arg\max_a Q(s, a)$)。

    • 处理连续动作空间困难: 执行 $\arg\max_a Q(s, a)$ 在连续或高维动作空间中非常困难(需要昂贵的优化过程)。(DQN也不行:也需要输入action进行argmax;DQN同PG都是使用的神经网络建模,为什么DQN没有办法建模连续状态空间?

    • 通常学习确定性策略: 标准的基于价值的方法倾向于学习确定性策略或带探索噪声的确定性策略,不一定能学习到最优的随机策略。

通过这种结合,Actor-Critic 有效地解决了 PG 的核心痛点:

  • 显著降低方差: Critic 提供的价值估计(尤其是利用 TD 学习的)比原始的蒙特卡洛回报 $G_t$ 的方差低得多。这直接解决了 PG 方法高方差的核心问题。

  • 提高样本效率: 更低的方差意味着需要更少的样本来获得可靠度足够高的梯度信号,从而提高了样本利用效率

  • 提升训练稳定性: 更平滑、方差更小的梯度信号使得策略参数的更新更加稳定,减少了震荡,更容易收敛。

  • 保持 PG 的优势: 同时,它保留了策略梯度方法的优点:能够直接参数化和优化策略,轻松处理连续动作空间,并能学习随机策略

  • 解决基于价值方法的局限性: Actor 直接输出动作,绕过了基于价值方法在连续动作空间中执行 $\arg\max$ 的难题。

3. 潜在挑战与权衡

  • 引入偏差: Critic 的价值函数估计本身可能是有偏的(尤其是在函数逼近和 Bootstrap 的情况下)。虽然方差降低了,但可能引入了偏差。设计良好的 Critic 和算法(如使用 n-step TD 或 GAE)可以在偏差和方差之间取得良好平衡。

  • 需要训练两个网络: 需要同时学习和更新策略网络(Actor)和价值网络(Critic),增加了算法的复杂性和调参难度。

  • 相互依赖: Actor 的性能依赖于 Critic 的评估质量,而 Critic 评估的质量又依赖于 Actor 生成的样本。如果一方训练不好,会影响另一方。这可能导致训练不稳定。

简而言之,Actor-Critic 解决了“如何在保持策略梯度灵活性的前提下,使其学习过程更高效、更稳定”这个关键问题,使其成为解决复杂连续控制任务的主流且强大的强化学习框架。后续的许多先进算法(如 A2C/A3C, PPO, TRPO, SAC, TD3)都是 Actor-Critic 框架的改进和发展。

2.policy gradient和DQN的区别?

3.连续动作空间中,AC如何将输出值映射为具体的动作?

是一个非常关键的技术细节!Actor-Critic 方法(尤其是用于连续动作空间的算法如 DDPG, TD3, SAC)通过 Actor 网络的输出层设计采样策略,将网络输出的数值映射到具体的、有物理意义的连续动作值(如扭矩、角度)。核心思路是利用参数化的概率分布确定性函数,并结合激活函数进行缩放。

1. 确定性策略 + 输出层激活函数缩放 (DDPG, TD3 的核心方式)

  • Actor 网络结构: Actor 网络 $\pi_\theta(s)$ 是一个神经网络,输入是状态 s输出层直接输出一个动作向量 a。动作向量的维度等于动作空间的维度(例如,n 个关节就是 n 维向量)。

  • 关键:输出层激活函数: 为了将网络输出限制在期望的范围内(如 $[-1, 1]^n$ 或 $[-\pi, \pi]$),输出层使用有界激活函数。最常用的是:

    • tanh 函数: 输出范围是 $[-1, 1]$。这是最直接和常用的方式。

      • 例如,对于扭矩 $a_i \in [-1, 1]$:

        # Actor 网络最后一层
        raw_output = ...  # 神经网络中间层输出
        torque_i = torch.tanh(raw_output_i)  # 将每个维度的输出压缩到 [-1, 1]
    • sigmoid 函数 + 线性缩放: 输出范围是 $[0, 1]$。如果需要范围 $[min, max]$,可以线性缩放:

      • 例如,对于方向盘转角 $a \in [-90^\circ, 90^\circ]$:

        raw_output = ...  # 神经网络中间层输出 (假设是标量或单维向量)
        normalized_angle = torch.sigmoid(raw_output)  # [0, 1]
        steering_angle = min_val + normalized_angle * (max_val - min_val)  # [-90, 90]
        # 即:steering_angle = -90 + 180 * normalized_angle
      • 更常见的是直接用 tanh 缩放:

        steering_angle = max_val * torch.tanh(raw_output)  # 因为 tanh 在 [-1, 1], max_val=90 => [-90, 90]
  • 动作选择: 在训练和测试时(确定性策略),Actor 网络直接输出缩放后的动作值 a = \pi_\theta(s)

2. 随机策略 + 参数化概率分布 (SAC, A2C/PPO 用于连续空间的核心方式)

  • Actor 网络结构: Actor 网络 $\pi_\theta(s)$ 的输出层不再直接输出动作 a,而是输出一个概率分布的参数。对于连续动作空间,最常用的是多元高斯分布 (Multivariate Gaussian Distribution),通常假设各维度独立(对角协方差矩阵)。

    • 输出内容:

      • 均值 (mu, $\mu$): 一个向量,维度等于动作空间维度。表示每个动作维度的中心位置。

      • 标准差 (sigma, $\sigma$) 或 对数标准差 (log_sigma, $\log \sigma$): 一个向量(与 mu 同维),表示每个动作维度的分布宽度(不确定性/探索性)。通常输出 log_sigma 是为了确保 $\sigma > 0$ (通过 exp 转换)。

  • 映射动作范围:

    • 均值 mu 和确定性策略一样,mu 的输出层使用有界激活函数(如 tanh)进行缩放,使其落在 [min, max] 内。

    • 标准差 sigma 其输出层通常使用 softplus 或 exp 激活函数,确保其值为正数。

      • softplussigma = torch.nn.functional.softplus(raw_sigma) (输出 > 0, 更平滑)

      • expsigma = torch.exp(raw_sigma) (输出 > 0)

  • 动作选择 (采样): 在给定状态 s 下,动作 a 通过从该状态对应的参数化高斯分布中采样得到:

    mu = ... # Actor 网络输出的均值 (已缩放) e.g., [0.5, -0.3]
    log_sigma = ... # Actor 网络输出的对数标准差 e.g., [-1.0, -0.5]
    sigma = torch.exp(log_sigma)  # e.g., [0.367, 0.606]
    
    # 创建独立高斯分布 (假设各维度独立)
    dist = torch.distributions.Normal(loc=mu, scale=sigma)
    # 从分布中采样一个动作
    action_sampled = dist.sample()  # e.g., [0.62, -0.15]
  • 确保动作在范围内 (可选但推荐): 采样得到的动作可能略微超出 [min, max] 范围(尤其是在分布边缘时)。常见做法:

    1. Clipping: 直接将采样动作裁剪到范围内 action = torch.clamp(action_sampled, min_val, max_val)。简单有效,但会改变分布形状(概率质量累积在边界)。

    2. Squashing: 使用 tanh 等压缩函数将采样动作映射到范围内(SAC 使用此法)。但这引入了分布变换,计算对数概率 (log_prob) 时需要加入 Jacobian 行列式的修正项(SAC 论文处理了这点)。

  • 探索: 探索性来源于分布采样本身。标准差 sigma 控制探索程度。训练算法(如 SAC)通常会包含策略熵正则化项,鼓励策略保持一定的探索性(避免 sigma 过早坍缩到 0)。

  • 测试/部署时: 可以选择:

    • 使用均值 mu 作为动作(确定性输出,不探索)。

    • 继续采样(保持一定的随机性,可能更鲁棒)。

总结:Actor 如何输出连续动作值

方法类型 输出内容 动作范围映射关键 动作选择 (训练) 探索来源 测试/部署常用动作
确定性策略
(DDPG, TD3)
动作向量 a tanh 激活函数 直接输出到 [-1, 1]
(或缩放至 [min, max])
a = \pi_\theta(s) + 外部噪声 添加的外部噪声 a = \pi_\theta(s)
随机策略
(SAC, PPO)
分布参数 (mulog_sigma) mu 用 tanh 缩放
sigma 用 exp/softplus 保证 >0
从 Normal(mu, sigma) 分布采样
(+ Clipping/Squashing)

4.为什么具有探索能力?

祥见:Policy Gradient【强化学习的数学原理】-CSDN博客


网站公告

今日签到

点亮在社区的每一天
去签到