Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

RL——Eligibility-Traces-for-Off-Policy-Policy-Evaluation

  • 参考链接:
    • 原始论文:Eligibility Traces for Off-Policy Policy Evaluation, 2000, Sutton Richard

整体总结

  • 一篇很古早的论文,主要探讨了如何在 Off-policy 场景下使用 资格迹(eligibility traces) 进行策略评估
  • 包含了同一个轨迹来自不同行为策略的处理方式

研究背景与动机

  • 在强化学习中,策略评估是指估计一个策略 \(\pi\) 的值函数 \(Q^\pi(s,a)\)
  • 传统方法如 TD(0) 和 TD(\(\lambda\)) 通常是在 On-policy Setting 下工作,即数据由当前正在评估的策略生成
  • 在许多实际场景中,我们希望从由 行为策略(behavior policy) \(b\) 生成的数据中学习 目标策略(target policy) \(\pi\) 的值函数,这就是 Off-policy learning
  • 本文就聚焦于Off-policy 评估这一子问题,提出并分析了几种基于资格迹的算法,重点研究了它们与 重要性采样(importance sampling) 的关系

问题定义与符号说明

  • 环境为 episodic MDP ,每幕从初始状态开始,直到终止状态
  • 行为策略 \(b\) 满足对所有状态-动作对,\(b(s,a) > 0\)
  • 目标策略 \(\pi\) 可以是任意的
  • 目标:估计 \(Q^\pi(s,a)\),即在状态 \(s\) 下执行动作 \(a\) 后,按照 \(\pi\) 行动的期望折扣累积奖励

重要性采样方法

经典重要性采样(Importance Sampling, IS)

  • 对于每个包含 \((s,a)\) 的幕 \(m\),定义:
    • \(R_m\):从 \((s,a)\) 之后的折扣回报
    • \(w_m\):重要性权重,表示从该点之后,按照 \(\pi\) 而非 \(b\) 行动的概率比
      $$
      Q^{IS}(s,a) = \frac{1}{M} \sum_{m=1}^{M} R_m w_m
      $$
    • 该估计是无偏且一致的,但方差大

加权重要性采样(Weighted Importance Sampling, WIS)

  • WIS 的定义
    $$
    Q^{WIS}(s,a) = \frac{\sum_{m=1}^{M} R_m w_m}{\sum_{m=1}^{M} w_m}
    $$
    • 该估计是有偏但一致的,方差更小,实践中更稳定

Per-Decision 重要性采样算法

核心思想

  • 将回报分解为每一步的奖励,并对每个奖励单独加权:
    $$
    Q^{PD}(s,a) = \frac{1}{M} \sum_{m=1}^{M} \sum_{k=1}^{T_m - t_m} \gamma^{k-1} r_{t_m + k} \prod_{i=t_m+1}^{t_m+k-1} \frac{\pi_i}{b_i}
    $$
  • Theorem 1 :该估计是 \(Q^\pi\) 的无偏一致估计
  • 注:在此之前,人们通常对整条轨迹计算一个总的重要性权重
    $$ W = \prod \frac{\pi(a_i|s_i)}{\mu(a_i|s_i)}$$
    • 如果轨迹很长,方差会爆炸
  • 本文没有明确提到,但事实上作者的证明不要求同一个轨迹来自同一个策略,即不需要整条轨迹都来自同一个策略(同一轨迹可以不同策略/不同行为策略)
    • 只要在每一个时间步 \(t\),都知道生成该动作 \(a_t\) 的特定策略 \(\mu_t\) 的概率,就可以通过累积乘积的方式来修正价值估计
    • 即,作者从数学上证明了,即使 \(t=1\) 的 \(\mu_1\) 和 \(t=2\) 的 \(\mu_2\) 不同,只要记录了各自的概率,就可以通过加权来无偏地估计目标策略 \(\pi\) 的 Value
    • 核心:将回报分解为每个时间步的奖励,并对每个奖励单独加权,权重只依赖于到该奖励为止的轨迹,而不依赖于未来的行为策略

加权版本

  • Per-Decision 重要性采样算法的加权版本
    $$
    Q^{PDW}(s,a) = \frac{\sum_{m=1}^{M} \sum_{k=1}^{T_m - t_m} \gamma^{k-1} r_{t_m + k} \prod_{i=t_m+1}^{t_m+k-1} \frac{\pi_i}{b_i} }{\sum_{m=1}^{M} \sum_{k=1}^{T_m - t_m} \gamma^{k-1} \prod_{i=t_m+1}^{t_m+k-1} \frac{\pi_i}{b_i} }
    $$
  • 该估计是有偏一致估计

算法1:Per-Decision 重要性采样的资格迹版本

  • 每个状态-动作对维护一个 eligibility trace \(e_t(s,a)\)
  • 每一步更新:
    $$
    \begin{align}
    e_t(s,a) &= e_{t-1}(s,a) \cdot \gamma \lambda \cdot \frac{\pi(s_t,a_t)}{b(s_t,a_t)} \\
    \delta_t &= r_{t+1} + \gamma \frac{\pi(s_{t+1},a_{t+1})}{b(s_{t+1},a_{t+1})} Q_t(s_{t+1},a_{t+1}) - Q_t(s_t,a_t) \\
    Q_{t+1}(s,a) &= Q_t(s,a) + \alpha e_t(s,a) \delta_t
    \end{align}
    $$
  • Theorem 2 :在离线更新下,该算法收敛到 \(Q^\pi\)

Tree Backup 算法

核心思想

  • Tree Backup 不依赖于行为策略的显式概率,只需行为策略非饥饿(non-starving) ,即每个状态-动作对都会被无限次访问
  • 在每一步,它考虑所有可能的动作,并根据目标策略的概率加权更新:
    $$
    Q_n^{TB}(s,a) = \frac{1}{M} \sum_{m=1}^{M} \left[ \gamma^n Q(s_{t_m+n}, a_{t_m+n}) \prod_{i=t_m+1}^{t_m+n} \pi_i + \sum_{k=t_m+1}^{t_m+n} \gamma^{k-t_m+1} \prod_{i=t_m+1}^{k-1} \pi_i \left( r_k + \gamma \sum_{a \neq a_k} \pi(s_k,a) Q(s_k,a) \right) \right]
    $$
  • 当 \(n=1\) 时,退化为 TD(0)

算法2:Tree Backup 的资格迹版本

  • 更新 eligibility trace:
    $$
    e_t(s,a) = e_{t-1}(s,a) \cdot \gamma \lambda \pi(s_t,a_t) \\
    e_t(s,a) = 1 \quad \text{If } \quad (s,a) \text{ is current state-action pair}
    $$
  • TD 误差:
    $$
    \delta_t = r_{t+1} + \gamma \sum_{a} \pi(s_{t+1},a) Q(s_{t+1},a) - Q(s_t,a_t)
    $$
  • 更新 Q:
    $$
    Q_{t+1}(s,a) = Q_t(s,a) + \alpha e_t(s,a) \delta_t
    $$
  • Theorem 3 :对于任意非饥饿行为策略,算法收敛到 \(Q^\pi\)

作者实验结果

  • 作者在 100 个随机生成的 MDP 上比较了以下方法:
    • 重要性采样(IS)
    • 加权重要性采样(WIS)
    • 每决策重要性采样(PD)
    • 加权每决策重要性采样(PDW)
    • 单步 TD(TD(0))
    • Tree Backup(TB)

作者的结果总结

  • IS 收敛慢,方差大
  • WIS 显著优于 IS,更稳定
  • PD 在行为策略均匀时表现良好,但在行为策略与目标策略差异大时表现较差
  • PDW 在差异大的情况下优于 PD,但整体不如 TB
  • Tree Backup(TB) 在所有设置中表现最好 ,尤其在中长期收敛速度和稳定性方面

建议:理论统一与扩展

  • 论文还提出了 Tree Backup 和 Per-Decision 方法的统一视角:
    • 在已知行为策略的地方,使用 Per-Decision 方法;
    • 在未知或非平稳行为策略的地方,使用 Tree Backup;
    • 两者可以结合,形成更鲁棒的 Off-policy 评估算法

RL——AC、A2C和A3C


策略梯度法的推导结论

  • 策略梯度法推导结论是
    $$
    \begin{align}
    \nabla_\theta J(\theta) &= \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)] \\
    & = \mathbb{E}_{\tau \sim p_\theta(\tau)} \left[\sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) R(\tau) \right] \\
    & = \mathbb{E}_{\tau \sim p_\theta(\tau)} \left[\sum_t \psi_t \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \\
    \end{align}
    $$
    • 推导详情见RL——策略梯度法推导
    • \(\psi_t\) 来替换 \(R(\tau)\) 的理由是可以考虑用一个与时间相关的变量来替换与时间无关的累计收益
  • 进一步地,其中的 \(\psi_t\) 可以换成不同的形式,包括:
    • \(\sum_{t’=0}^T \gamma^t r_{t’}\):完成的轨迹收益
    • \(\sum_{t’=t}^T \gamma^{t’-t} r_{t’}\):从第 \(t\) 步开始的轨迹收益,理由是策略主要影响的是 \(t\) 步开始收益,对前面步骤的收益影响不大
    • \(\sum_{t’=t}^T \gamma^{t’-t} r_{t’} - b(s_t)\):进一步降低方差,详细证明见RL——策略梯度法
    • \(Q^{\pi_\theta}(s_t,a_t)\):动作价值函数,是 \(\sum_{t’=t}^T \gamma^{t’-t} r_{t’}\) 的估计值
    • \(A^{\pi_\theta}(s_t,a_t)\):优势函数,仅考虑当前状态 \(s_t\) 下不同动作带来的收益,忽略状态本身的价值
    • \( r_t + \gamma V^{\pi_\theta}(s_{t+1}) - V^{\pi_\theta}(s_{t}) \): V 值的TD-Error形式,即贝尔曼残差,本质等价于优势函数
  • 问题:将 \(\psi_t\) 换成 \( r_t + \gamma Q^{\pi_\theta}(s_{t+1}, a_{t+1}) - Q^{\pi_\theta}(s_{t}, a_t) \) 可以吗?
    • 答案是不可以。理由是 \( r_t + \gamma Q^{\pi_\theta}(s_{t+1}, a_{t+1}) - Q^{\pi_\theta}(s_{t}, a_t) \) 本身不是优势函数 \(A(s,a)\),也不是 \(Q(s,a)\) 没有别的含义,只有 Q 值自身更新时的TD-Error
    • 证明:如果 \(a_{t+1} \sim \pi_\theta\),则 \(Q^{\pi_\theta}(s_{t+1}, a_{t+1}) = V^{\pi_\theta}(s_{t+1})\) ;但是因为 \(Q^{\pi_\theta}(s_{t}, a_t) \neq V^{\pi_\theta}(s_{t})\) (因为 \(a_t\) 是已经发生的事实),故而 \( r_t + \gamma Q^{\pi_\theta}(s_{t+1}, a_{t+1}) - Q^{\pi_\theta}(s_{t}, a_t) \) 本身不是优势函数,也能等价于优势函数
    • 改进:如果非要用 Q 值来作为 Actor Critic 的价值网络,则需要求解策略 \(\pi_{\theta^*} = \mathop{\arg\max}_{\pi_\theta} \mathbb{E}_{a_t \sim \pi_\theta(\cdot|s_t)} [Q(s_t, a_t)]\),比如DDPG就是如此

AC 算法

  • 普通 AC(Actor Critic)算法一般是直接使用 \(Q(s_t,a_t)\) 来替换 \(\psi_t\)

Critic 网络的更新

  • Critic 网络更新方式
    $$
    Loss_{\text{critic}} = \sum (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\)(实际上是 SARSA 的更新方式), \(Q^{w}\) 值拟合的目标是策略 \(\pi_\theta\) 对应的 Q 值 \(Q^{\pi_\theta}(s_{t}, a_t)\)
  • 这里虽然使用 Target 网络的表达,但 AC 算法一般不需要 Target 网络,加入 Target 网络可能会导致收敛变慢
  • Critic 网络往往可以使用比 Actor 网络更大的学习率或更多的更新次数,这称为双时间尺度 AC 算法(Two-time Scale Actor-Critic Algorithms),该算法中,使用两种不同的学习速率(或时间尺度)来更新 Actor 和 Critic

Actor 网络的更新

  • Actor 网络的损失函数
    $$
    \begin{align}
    Loss_{\text{actor}} &= - \sum Q^{w}(s_{t}, a_t) \log \pi_\theta(a_t|s_t) \\
    Q^{w}(s_{t}, a_t) &= \text{Stop_Gradient}(Q^{w}(s_{t}, a_t))
    \end{align}
    $$
  • 这里面的 \(Q^{w}(s_{t}, a_t)\) 是不参与 Actor 参数的更新的
  • \(a_t \sim \pi_\theta(\cdot|s_t)\)

AC 算法的问题

  • AC 算法虽然是直接优化策略的,但是由于它是 on-policy 的,样本利用率很低,导致训练缓慢

A2C 算法

  • A2C(Advantage Actor Critic)算法引入了优势函数(Advantage),这也是 A2C 名字的由来
    • 即使用 \( r_t + \gamma V^{\pi_\theta}(s_{t+1}) - V^{\pi_\theta}(s_{t}) \) 来替换 \(\psi_t\) 的方法
  • 很多书籍里面会直接默认使用 A2C 算法作为 AC 算法的 等价 表述

Critic 网络的更新

  • Critic 网络的损失函数:
    $$
    Loss_{\text{critic}} = \sum (r_t + \gamma V^{\bar{w}}(s_{t+1}) - V^{w}(s_{t})) ^ 2
    $$
  • 这里 V 值拟合的目标是策略 \(\pi_\theta\) 对应的 V 值 \(V^{\pi_\theta}\)
  • 这里虽然使用 Target 网络的表达,但A2C 算法一般不需要 Target 网络,加入 Target 网络可能会导致收敛变慢
  • Critic 网络往往可以使用比Actor 网络更大的学习率或更多的更新次数

Actor 网络的更新

  • Actor 网络损失函数:
    $$
    \begin{align}
    Loss_{\text{actor}} &= - \sum \delta \log \pi_\theta(a_t|s_t) \\
    \delta &= \text{Stop_Gradient}(r_t + \gamma V^{w}(s_{t+1}) - V^{w}(s_{t}))
    \end{align}
    $$
  • 这里面的 \(r_t + \gamma V^{w}(s_{t+1}) - V^{w}(s_{t})\) 是不参与 Actor 参数的更新的

A2C 算法的问题

  • A2C 算法是同步更新的,需要每个 Worker 都收集完成数据才能执行一次更新,很多时候数据交互完成的时间是很不一致的,训练也较慢

A3C 算法

  • A3C(Asynchronous Advantage Actor Critic),是 Actor Critic 方法的异步版本
  • 注意:这里的异步是参数更新的异步,类似 PS 架构,不会导致 A3C 变成 Off-Policy 的
    • 也就是说:A3C 始终是 On-Policy 的

A3C 的主要优化点

异步训练框架优化:
  • 一个全局网络(包括V网络和Actor 网络)和多个相互独立的 Local 网络(即 Worker)
  • 训练时:使用多个 Worker 并行的和环境分别交互,各自收集数据、计算梯度、异步更新全局网络参数
  • inference 时:仅适用全局网络中的 Actor 网络就可以
A3C 的“异步”更新流程
  • A3C 的“异步”特指 “多线程并行更新全局网络的方式” ,而非“采样策略与更新策略的分离”
    • 其核心逻辑是通过“多个本地线程独立采样+异步向全局网络传梯度”提升训练效率
  • A3C 具体流程如下:
    • 全局网络(Global Network) :
      • 存储共享的策略参数\( \theta \)(Actor和Critic共享一套参数),是最终需要优化的目标网络
    • Local Workers :通常有多个独立线程,每个线程的工作流程是:
      • 同步参数 :先从全局网络复制当前最新的参数\( \theta \)到本地(此时本地策略=全局策略);
      • 采样轨迹 :用本地策略\( \pi_\theta \)与环境交互,采样一段短轨迹(如n-step,5~20步);
      • 计算梯度 :基于采样轨迹计算 Actor(策略)和 Critic(价值)的损失梯度(此时本地行为策略=本地待更新策略);
        • 注意:这一步计算梯度时是在行为策略的基础上计算的,所以是 On-policy,不是 Off-policy
      • 异步更新 :将本地梯度发送给全局网络,全局网络用这些梯度更新参数\( \theta \)(无需等待其他线程,即“异步”);
      • 重置本地参数 :下一轮循环前,再次从全局网络同步最新的\( \theta \),覆盖本地旧参数
  • 注:A3C 的“异步”仅描述“多个本地线程与全局网络的交互方式”,不改变“每个线程采样时用的策略=当前待更新的全局策略”这一核心事实
策略更新损失增加熵
  • 增加熵的损失函数定义如下:
    $$
    \begin{align}
    Loss_{\text{actor}} &= - \sum \delta \log \pi_\theta(a_t|s_t) + c H(\pi_\theta(a|s)) \\
    \delta &= \text{Stop_Gradient}(r_t + \gamma V^{w}(s_{t+1}) - V^{w}(s_{t}))
    \end{align}
    $$
  • 增加熵相当于是一种正则,与 SAC 思想相似

AC/A2C/A3C的区别

  • AC(Actor-Critic)、A2C(Advantage Actor-Critic)和 A3C(Asynchronous Advantage Actor-Critic)三者可以从名字上看出来算法的区别

AC(Actor-Critic)

  • Actor-Critic 方法结合了值函数方法和策略梯度方法的优点。它由两部分组成:一个称为“actor”的网络负责学习采取什么行动;另一个称为“critic”的网络评估采取的动作的好坏,即这个动作的价值

A2C(Advantage Actor-Critic)

  • 关键词:Advantage
  • A2C 是 Actor-Critic 方法的一个变种,它引入了优势函数(advantage function)的概念来代替直接使用价值函数
  • 优势函数 (A(s, a)) 定义为执行特定动作相对于遵循当前策略下的平均行为所能获得的优势或劣势。这种方法有助于更准确地估计哪些动作比其他动作更好,从而提高学习效率
  • 更新方式 :A2C 使用同步的方式更新参数,可以考虑使用多个网Actor分别于环境进行交互,然后共同的样本一起同步更新主网络 ,这意味着所有代理(agents)共享同一个模型,并且在每个训练步骤结束时同步更新模型权重

A3C(Asynchronous Advantage Actor-Critic)

  • 关键词:Asynchronous
  • A3C 是 A2C 的异步版本,它允许多个代理同时在不同的环境中学习
  • 更新方式 :每个代理都有自己的环境副本和局部模型副本,它们独立地探索环境并收集经验。然后,这些经验被用来异步地更新全局模型,这样可以增加数据多样性并加快学习速度
  • 优点 :通过异步更新,A3C 可以有效利用多核处理器的能力,实现更快的学习速度和更好的性能

附录:为什么 A3C 不需要重要性采样?

  • 标准 A3C 不需要重要性采样,因为其 “本地线程采样的策略” 与 “全局网络待更新的策略” 完全一致,无分布偏差
  • A3C 的“异步”是工程实现层面的并行更新方式 ,解决“单线程采样慢”的问题;
  • “On/Off-policy” 是算法理论层面的策略更新逻辑 ,解决“采样数据是否匹配目标策略”的问题
  • A3C 中“异步(Asynchronous)”与“Off-policy”的概念辨析
    • A3C 的“异步”是“更新方式的异步”,而非“采样与更新策略的偏离(即Off-policy)”
    • 正因为 A3C 本质上仍是On-policy(同策略) 算法,所以依然不需要重要性采样
  • 对 A3C 而言,每个本地线程的采样过程完全满足 On-policy:
    • 1)线程在采样前,会强制同步全局网络的最新参数\( \theta \)到本地采样用的策略\( \pi_\theta \),就是当前全局网络正在优化的“目标策略”;
    • 2)采样得到的轨迹,仅用于更新“产生该轨迹的策略\( \pi_\theta \)”(即全局网络的\( \theta \));
      • 旧轨迹不会被重复用于更新新策略
    • 3)A3C 的异步可以保证每个 Local Worker 上计算得到的梯度是 On-policy 的,但是这个参数更新的异步会导致更新使用的参数是过期的(比如使用到上一个版本的 Actor 计算的梯度来更新这个版本)
      • 再次强调:这里不是 Off-policy,只是参数梯度更新存在一定的滞后性,这是 A3C 为了效率使用 异步导致的,是可以容忍的

RL——COMBO

本文简单介绍COMBO模型

  • 参考链接:
    • 原始论文:COMBO: Conservative Offline Model-Based Policy Optimization, Stanford & UC Berkeley & Facebook AI Research, NeurIPS 2021

COMBO 基本思想

  • 主要用于解决Offline RL的问题,属于Model-based方法
  • COMBO是结合了CQL思想的一种Model-based方法

原始 CQL 的更新公式

  • 策略评估更新公式:
    $$\hat{Q}^{k+1} = \mathop{\arg\min}_Q \alpha \left(\mathbb{E}_{\color{red}{s\sim \mathcal{D}, a\sim \mu(a\vert s)}}[Q(s, a)] - \mathbb{E}_{\color{blue} {s\sim \mathcal{D}, a\sim\hat{\pi}_\beta(a\vert s)}}[Q(s, a)] \right) + \frac{1}{2} \mathbb{E}_{\color{red} {\mathbf{s}, \mathbf{a}, \mathbf{s’} \sim \mathcal{D}}}\left[\left(Q(\mathbf{s}, \mathbf{a})-\hat{\mathcal{B}}^{\pi} \hat{Q}^{k}(\mathbf{s}, \mathbf{a})\right)^{2}\right]$$
  • 注,以上更新公式并不直接用于CQL的训练,是损失函数的中间结果

COMBO 的训练流程

  • COMBO 训练代码:

  • 模型的训练:

    • 模型输入是 \(s,a\),预估目标是 \(s’,r\),上面的训练代码中将输出建模成表达成高斯分布的形式(适用于连续型的场景),如果是离散型的场景,可以使用分类模型
  • 策略评估更新公式:
    $$\hat{Q}^{k+1} = \mathop{\arg\min}_Q \color{red}{\beta} \left(\mathbb{E}_{\color{red} {s,a\sim\rho(s,a)}}[Q(s, a)] - \mathbb{E}_{\color{blue} {s,a\sim\mathcal{D}}}[Q(s, a)] \right) + \frac{1}{2} \mathbb{E}_{\color{red} {\mathbf{s}, \mathbf{a}, \mathbf{s’} \sim \mathcal{d_f}}}\left[\left(Q(\mathbf{s}, \mathbf{a})-\hat{\mathcal{B}}^{\pi} \hat{Q}^{k}(\mathbf{s}, \mathbf{a})\right)^{2}\right]$$

  • 以上红色部分是COMBO和CQL的核心区别,蓝色部分表达不同,但是本质是相同的,都是从离线的数据集中采样样本

    • 第一部分:\(\rho(s,a) = \color{red}{\mathcal{d}^\pi_{\hat{\mathcal{M}}}(s)}\pi(a|s)\),其中 \(\color{red}{\mathcal{d}^\pi_{\hat{\mathcal{M}}}(s)}\) 表示策略 \(\pi\) 与模型 \(\hat{\mathcal{M}}\) 交互时的状态 \(s\) 的访问概率
      • 注意这里只有状态的概率 \(\color{red}{\mathcal{d}^\pi_{\hat{\mathcal{M}}}(s)}\) 选取与CQL的 \(\color{red}{\mathcal{D}}\) 不同,后面的策略还是当前策略 \(\pi(a|s)\),策略这个点与CQL是相同的
    • 第二部分:\(\mathcal{d}^\mu_f := f\ \mathcal{d}(s,a) + (1-f)\ \mathcal{d}^\mu_{\hat{\mathcal{M}}}(s,a)\),其中 \(f\in [0,1]\) 表示数据混合比例
      • CQL中使用的全是真实数据集,在COMBO中则使用到了部分当前策略与模型交互生成的结果
      • COMBO论文中关于 \(f\) 的选取一般在0.5或0.8不等,个人理解:在真实数据集较多的场景,这个混合比例不宜过低

实验结果

  • COMBO实验结果

RL——DDPG和TD3

  • 参考链接:
    • 强化学习之图解PPO算法和TD3算法

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}\) 的采样策略即可,样本可以是任意策略采样的,当然,用当前策略采样的会更好些)
  • 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\) 必须是来自当前策略的

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})\) 是当前其他行为策略采样到的数据
  • 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下的状态分布是行为策略的,存在偏差
  • 注: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
      3
      next_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 的算法

RL——HER技术

Hindsight Experience Replay,简称HER,一种用于解决奖励稀疏问题的方法

  • 参考链接:
    • 原始论文:Hindsight Experience Replay,NIPS 2017,OpenAI
    • 论文解读:Hindsight Experience Replay,Kenvnn’s Blog,论文的许多笔记参考自该博客

Background

  • 在机器人领域,要想使强化学习训练它完美执行某任务,往往需要设计合理的奖励函数,但是设计这样的奖励函数工程师不仅需要懂得强化学习的领域知识,也需要懂得机器人、运动学等领域的知识。而且,有这些知识也未必能设计出很好的奖励函数供智能体进行学习
  • 因此,如果可以从简单的奖励函数(如二分奖励)学习到可完成任务的模型,那就不需要费心设计复杂的奖励函数了

HER 技术思路

  • 奖励函数的设计往往需要很强的先验知识,且往往比较难,特别在稀疏奖励和二分奖励场景中
    • 系数奖励:完成目标的episode太少或者完成目标的步数太长,导致负奖励的样本数过多
    • 二分奖励:完成目标时,奖励为A值,完不成目标时,奖励为B值
  • 一句话说:通过在经验池中引入“Hindsight”(事后聪明)来解决稀疏奖励和二分奖励中的问题
    • Hindsight的理解:hind表示“后面的”,sight则表示“看见;视力;视野等”,综合起来表示“事后聪明;事后的领悟”。与Foresight表示“先见之明”对比来看,翻译Hindsight为“后见之明”可能更为合适
  • 可以用于所有Off-policy方法中

A motivating example

  • 一个来自HER论文中的例子:bit-flipping environment
    • 状态空间 \(\mathcal{S}=\left \{ 0,1 \right \}^{n}\),维度为n
    • 动作空间 \(\mathcal{A}=\left \{ 0,1,\cdots,n-1 \right \}\),动作空间大小也为n
    • 规则:对于每个episode,给定目标状态 \(s_{g}\),从任意初始状态 \(s_{0}\) (如 \(n=5,s_{0}=10101\) )每一步从动作空间中选取一个动作 \(a\),翻转 \(s_{0}\) 第 \(a\) 个位置的值,如 \(a=1\Rightarrow s_{1}=11101\),直到回合结束或者翻转后的状态与 \(s_{g}\) 相同
    • 奖励函数: \(r_{g}(s,a)=-\left [ s \neq g \right ]\),即达到目标状态则为0,未达到目标状态则为-1。( \(s \neq g \Rightarrow true \doteq 1,s = g \Rightarrow false \doteq 0\) )
    • 注:后续将目标状态 \(s_{g}\) 简化为 \(g\)
  • 数组长度越长,反馈越稀疏,当 \(n>40\) 时,几乎没有除了-1以外的奖励,标准的强化学习算法很难求解该问题。即使使用一些探索技术也不行,因为这个问题完全不是缺乏探索,而是状态太多,探索不完,导致奖励极其稀疏,算法根本不知道需要优化的目标在哪里

解决方法

reward shaping

  • 将reward设计成某些变量的函数,如 \(r_{g}(s,a)=-\left || s-g \right ||^{2}\),将训练的算法逐步引导至奖励函数增大的决策空间
    • 该方案在这种场景中可以使用,但是不通用,无法应用到其他更加复杂的现实问题中

任务分解

  • 将目标分解成多个粒度更小的,更容易解决的任务,使用类似层次强化学习(Hierarchical reinforcement learning)的方法去解决
  • 这个文章中没有提到,一些书籍会提到

HER的做法

  • HER的主要思想就是:

    • 通过修改目标简化问题,从而让奖励变得稠密。具体地,假定序列为 \(s_{0},s_{1},s_{2}, \cdots ,s_{T}\),目标为 \(g\),如果将目标状态 \(g\) 修改为 \(s_{T}\),即 \(g=s_{T}\),那么这样看来智能体就可以获得奖励了
    • 利用这个思想对经验池进行扩充即可,可以将稀疏奖励问题给转化成非稀疏奖励,使得奖励变得稠密
  • HER具体做法:

    • 将经验池中的状态 \(s\) 改为 \(s||g\),也就是tf.concat(s,g)
    • 训练算法的输入也是 \(s||g\),也就是需要在当前状态后边连结上每个episode的目标状态,每个episode的目标状态可能不同
    • HER对经验池进行了扩充,不仅存入实际采样得到的transition/experience, \(\left ( s_{t}||g,a_{t},r_{t},s_{t+1}||g \right )\),也要在回合结束时重新设置目标状态,得到相应的奖励值(在二分奖励问题中,只有在 \(s=g\) 时奖励才需要更改),存入“事后”(当初如果这样就好啦!)的经验 \(\left ( s_{t}||g’,a_{t},r_{t}’,s_{t+1}||g’ \right )\),详见伪代码,这个事后经验究竟存入多少份、多少种,由超参数 \(k\) 控制,下文讲解
    • HER更适合解决多目标问题,多目标的意思为,目标点非固定,每个episode的目标状态可以不相同。详见实验部分
  • HER的几种扩展方式:

    • 未来模式——future:在一个序列 \(s_{0},s_{1},s_{2},\cdots,s_{T}\) 中,如果遍历到状态 \(s_{2}\),则在 \(s_{3},\cdots,s_{T}\) 之间随机抽取 \(k\) 个状态作为目标状态 \(g’\),并依此向经验池中存入 \(\left ( s_{2}||g’,a_{2},r_{2}’,s_{3}||g’ \right )\),特点:一个episode的后续部分
    • 回合模式——episode:在一个序列 \(s_{0},s_{1},s_{2},…,s_{T}\) 中,如果遍历到状态 \(s_{2}\),则在整个序列中随机抽取 \(k\) 个状态作为目标状态 \(g’\),并依此向经验池中存入 \(\left ( s_{2}||g’,a_{2},r_{2}’,s_{3}||g’ \right )\),特点:一个episode
    • 随机模式——random:在一个序列 \(s_{0},s_{1},s_{2},…,s_{T}\) 中,如果遍历到状态 \(s_{2}\),则在多个序列 \(\tau_{0},\tau_{1},\tau_{2},\cdots\) 中随机抽取 \(k\) 个状态作为目标状态 \(g’\),并依此向经验池中存入 \(\left ( s_{2}||g’,a_{2},r_{2}’,s_{3}||g’ \right )\),特点:多个episode
    • 最终模式——final:在一个序列 \(s_{0},s_{1},s_{2},\cdots,s_{T}\) 中,如果遍历到状态 \(s_{2}\),则之间令 \(g’=s_{T}\),并向经验池中存入 \(\left ( s_{2}||g’,a_{2},r_{2}’,s_{3}||g’ \right )\),特点:一个episode的最后一个状态,如果设置k,则存入k个相同的经验
    • 注:上面的 \(s_{T}\) 不一定是当前episode的最终目标值,因为此时我们拟合的本意已经变成了“任意给定一个起始状态 \(s_0\) 和目标状态 \(s_i\),找到一个动作来实现将动作从 \(s_0\) 变化到 \(s_i\) ”
  • 伪代码及其解析

    • \(r(s,a,g)\) 表示奖励不仅仅与当前状态和动作有关,还与最终的目标状态有关
    • 伪代码中没有提到超参数 \(k\),其实在循环条件 \(\textbf{for} \ g’ \in G \ \textbf{do}\) 中循环执行了 \(k\) 次
    • \(||\) 操作为连结操作,简言之,将两个长度为5的向量合并成一个长度为10的向量
    • \(G:=\mathbb{S}(\textbf{current episode})\) 即为上文提到的四种扩展模式:future、episode、random、final
    • 奖励函数 \(r(s,a,g)=-\left [ f_{g}(s)=0 \right ]\) 即为前文提到的 \(r_{g}(s,a)=-\left [ s \neq g \right ]\),即完成为0,未完成为-1,具体奖励函数可以根据我们的使用环境设计
    • \(a_{t} \leftarrow \pi_{b}(s_{t}||g)\) 表示神经网络的输入为当前状态与目标状态的连结
  • HER的优点

    • 可解决稀疏奖励、二分奖励问题
    • 可适用于所有的Off-Policy算法
    • 提升了数据采样效率

如何选择 HER 的模式?

  • 实验结果:
    • 效果:future>final>episode>random>no HER
    • 稳定性:final(好)=no-HER(差)>future>episode>random

超参数的设置

  • \(k\) 值不能太大,太大了会导致数据集中真实样本减少,出现问题

其他理解

  • 问题:HER从 \(s_{2}\) 扩展成 \(s_{2}||g’\) 的过程中,相当于增加了MDP的数量(虽然MDP可能变得更短了),是否会导致MDP数量太多,模型难以收敛呢?

RL——MBPO

本文简单介绍 MBPO(Model-Based Policy Optimization)模型

  • 参考链接:
    • 原始论文:When to Trust Your Model: Model-Based Policy Optimization, UC Berkeley, NeurIPS 2019

MBPO 基本思想

  • 主要用于解决 Online RL 的问题,属于 Model-based 方法

MBPO 方法详情

  • MBPO 训练代码
    • 在收集到的奖励上减去一个误差项
    • 训练时,Policy Optimization使用的是SAC方法:
  • 其中,关键变量定义如下:

    \(\eta[\pi]\) denotes the returns of the policy in the true MDP, whereas \(\hat{\eta}[\pi]\) denotes the returns of the policy under our model. Such a statement guarantees that, as long as we improve by at least C under the model, we can guarantee improvement on the true MDP.

    • \(\eta[\pi]\) 定义为真实MDP的累计折扣收益:
      $$ \eta[\pi] = \mathbb{E}_\pi\Big[ \sum_{t=0}^\infty \gamma^t r(s_t, a_t) \Big]$$
    • \(\hat{\eta}[\pi]\) 定义为模型返回的累计折扣收益
    • \(\eta[\pi]\) 和 \(\hat{\eta}[\pi]\) 的关系:
      $$ \eta[\pi] \gt \hat{\eta}[\pi] - C $$
    • 关于 \(C(\epsilon_m, \epsilon_\pi)\) 的定义:
    • \(\epsilon_m\) : 模型误差
      $$ \epsilon_m = \max_t\mathbb{E}_{s\sim \pi_\text{D,t}} [D_{TV}(p(s’,r|s,a)\Vert p_\theta(s’,r|s,a))] $$
      • \(s\sim \pi_\text{D,t}\) 表示时间步 \(t\) 采样到状态 \(s\)
    • \( \epsilon_\pi\) : 策略偏移
      $$ \max_s D_{TV}(\pi \Vert \pi_\text{D}) \lt \epsilon_\pi $$

附录:动手学强化学习中介绍的 MBPO

  • 训练流程
    • 没有考虑减去误差项

RL——MCTS

  • 参考文献:
    • Survey参考:A Survey of Monte Carlo Tree Search Methods, 2012

整体说明

  • 蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)是一种基于随机模拟的强化学习决策方法 ,尤其在复杂决策问题(如围棋、游戏等)中表现出色。它通过智能地平衡探索(Exploration)和利用(Exploitation) ,逐步构建搜索树并优化策略
  • MCTS决策方法常用于围棋(AlphaGo)、即时战略游戏、扑克等场景中,目前在LLM领域也有所应用
  • 优势 :适用于高维、稀疏奖励问题;无需预先知识,仅依赖模拟;可并行化,扩展性强
  • 局限 :初期模拟可能低效(依赖随机探索);需大量模拟才能收敛

MCTS 的核心思想

  • MCTS通过反复模拟(Simulation)从当前状态出发的可能路径,逐步构建一棵非对称的搜索树
  • MCTS树的节点代表游戏状态 ,边代表动作
  • MCTS的核心优势在于:
    • 无需完整模型 :仅需模拟环境(如游戏规则)即可
    • 适应大规模状态空间 :通过选择性扩展树,避免穷举
    • 异步更新 :模拟结果反向传播,动态优化策略

MCTS 每次迭代的四个阶段

  • MCTS过程概览(图片来源于 A Survey of Monte Carlo Tree Search Methods, 2012)

第一步:选择(Selection)

  • 目标 :从根节点(当前状态)出发,递归选择子节点,直到到达一个可扩展的状态节点(即存在未尝试的动作的状态节点),返回这个被选择的节点
  • 策略 :使用树策略(如UCT算法或PUCT算法)平衡探索与利用
  • UCT(Upper Confidence Bound applied to Trees)算法 :
    $$
    \textit{UCT}(s, a) = Q(s, a) + c \sqrt{\frac{\ln N(s)}{N(s, a)} }
    $$
    • \(Q(s, a)\):动作\(a\)的平均回报
    • \(N(s)\):状态\(s\)的访问次数,\(N(s, a)\):动作\(a\)的访问次数(注:如果分母不会为0,此时所有节点都是完整探索过的,不存在为0的情况)
    • \(c\):探索系数(通常设为\(\sqrt{2}\)),当\(c=\sqrt{2}\)时,UCT的累计遗憾(Regret)有对数上界
    • 探索时选择动作为: \(a^* = \arg\max_a \textit{UCT}(s, a)\)
  • PUCT(Predictor UCT)算法 :
    $$
    \textit{PUCT}(s, a) = Q(s, a) + c_\textit{puct}\cdot P(s,a)\cdot \frac{\sqrt{N(s)}}{1+N(s, a)}
    $$
    • \(P(s,a)\):即 \(\pi(a|s)\),是先验策略网络(Policy Network)给出的先验概率(表示动作 \(a\) 的初始偏好)
    • \(c_\text{puct}\):探索系数(控制先验权重,AlphaZero中常设为1~2)
    • \(1+N(s,a)\):(不用为了避免除0操作而增加1吧,毕竟此时所有节点都是完整探索过的,不存在为0的情况)
    • 探索时选择动作为:探索时选择 \(a^* = \arg\max_a \textit{PUCT}(s, a)\)
    • 基本思想:采样次数 \(N(s, a)\) 少时,按照策略 \(\pi(a|s)\) 为主探索;采样次数 \(N(s, a)\) 多时,按照价值 \(Q(s, a)\) 为主探索
    • PUCT被使用到了AlphaZero和MuZero中
      • 注:MuZero是由DeepMind开发的一种通用强化学习模型,它能够在不知道环境规则的情况下,通过自我学习和规划,掌握多种复杂游戏和任务,MuZero采用模型预测控制(Model-Based RL) ,并结合了MCTS

第二步:扩展(Expansion)

  • 前提条件 :第一步完成后,我们选择到了一个未完全展开的节点(即存在未尝试的动作的节点)时,扩展该节点
  • 节点扩展 :添加一个新子节点(随机执行一个未尝试的动作,将环境反馈的新状态作为新子节点)

第三步:模拟(Simulation)

  • 在一些资料中,这一步也称为评估,相当与对一个动作的价值评估
  • 模拟 :从新节点开始,按照随机策略(或其他基于简单策略)Rollout 模拟至终止状态(如游戏结束),最终获得本次模拟的奖励(如胜利/失败)

第四步:回溯(Backpropagation)

  • 回溯 :将模拟结果(奖励)反向传播到路径上的所有节点
    • 更新访问次数 \(N(s)\) 和 \(N(s, a)\)
    • 更新动作价值 \(Q(s, a)\)(如累加奖励的平均值)

MCTS的终止与决策

  • 终止条件 :达到预设时间、计算资源或迭代次数
  • 最终决策 :选择根节点下访问次数最多或价值最高的动作(如AlphaGo选择访问次数最多的动作)
    • 问题:为什么是访问次数最多而不是价值最高的动作作为决策?

一些理解与讨论

  • 棋局中,对手策略如何模拟?
    • AlphaGo中,使用策略网络 \(\pi(a|s)\) 来模拟对手策略
  • 为什么MCTS第三步中使用随机策略模拟采样?
    • 传统的MCTS确实是按照随机采样的,但从直观上看,使用当前策略来模拟采样决策是否才是符合预期的;
    • AlphaGo的做法:
      • 实际上是使用策略网络来模拟决策的
      • 为了加快速度,AlphaGo还训练了一个较小的策略网络专门用来在MCTS的第三步中模拟决策
      • 为了提升稳定性,AlphaGo的价值评估结合了价值网络的输出和MCTS模拟奖励结果 \(V(s_{t+1}) = \frac{1}{2}(reward + V_\theta(s_{t+1}))\)
    • 在LLM等场景中,随机采样是毫无意义的,也需要基于LLM来采样决策
  • 为什么AlphaGo决策时选择访问最多的动作而不是价值最高的动作?
    • 理解:实际上访问最多的动作往往也是价值最高的动作,即使不是价值最高的,也不会太差,且价值最高的动作可能是因为波动带来的,访问最多的动作更置信
    • 节点被访问的次数越多,说明MCTS对其进行了更充分的探索,其Q值的置信度越高。选择高访问次数的动作,相当于选择被反复验证过的最优策略,避免因偶然性导致的风险

附录:MCTS在围棋中的流程

  • 第一步-选择 :从当前棋盘状态出发,递归选择UCT值最高的落子点
  • 第二步-扩展 :当遇到一个未尝试的合法落子时,扩展新节点
  • 第三步-模拟 :随机落子至终局,判断胜负
  • 第四步-回溯 :若胜利,路径上所有节点的胜利次数+1
  • 决策 :经过数万次迭代后,选择根节点下胜率最高的落子

RL——MOPO

本文简单介绍 MOPO(Model-Based Offline Policy Optimization)模型

  • 参考链接:
    • 原始论文:MOPO: Model-based Offline Policy Optimization, Stanford & UC Berkeley, NeurIPS 2020
    • 论文附录:MOPO-Supplemental
    • 源码地址:github.com/tianheyu927/mopo

MOPO基本思想

  • 主要用于解决Offline RL的问题,属于Model-based方法
  • 使用一个模型预估状态转移和奖励,同时使用训练一个误差评估器,在真实使用奖励时,使用误差评估器对奖励进行修正

MOPO方法详情

  • MOPO训练Framework
    • 基本思路是在原始Reward上给与一定的修正,对方差大的Reward采取更多的惩罚,防止高估问题发生
  • MOPO训练代码(这里是Ensemble Uncertainty形式,即Ensemble Penalty形式,其他还包括No Penalty和True Penalty形式)
    • 在收集到的静态数据集上训练 N 个模型(Probabilistic Dynamics)
    • 每次需要与环境交互时,随机选择一个模型(Dynamics)来交互
    • 修正这个Reward时,使用所有模型的方差的 F 范数中的最大值作为惩罚项,其中矩阵 F 范数的定义为:\(\Vert A \Vert_F = \sqrt{\sum_{i=1}^N\sum_{i=1}^M|a_{ij}|^2}\)
      • 也可以用均值而不是最大值: \(u^{\text{mean}}(s,a) = \frac{1}{N}\sum_{i=1}^N\Vert\Sigma_\phi^i \Vert_F\)
  • 关键代码(https://github.com/tianheyu927/mopo/blob/master/mopo/models/fake_env.py#L80-L102)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    if self.penalty_coeff != 0:
    if not self.penalty_learned_var:
    ensemble_means_obs = ensemble_model_means[:,:,1:]
    mean_obs_means = np.mean(ensemble_means_obs, axis=0) # average predictions over models
    diffs = ensemble_means_obs - mean_obs_means
    normalize_diffs = False
    if normalize_diffs:
    obs_dim = next_obs.shape[1]
    obs_sigma = self.model.scaler.cached_sigma[0,:obs_dim]
    diffs = diffs / obs_sigma
    dists = np.linalg.norm(diffs, axis=2) # distance in obs space # np.linalg.norm 函数默认情况下会计算向量或矩阵的二范数(欧几里得范数),也可通过增加参数来实现计算不同的范数
    penalty = np.max(dists, axis=0) # max distances over models
    else:
    penalty = np.amax(np.linalg.norm(ensemble_model_stds, axis=2), axis=0)

    penalty = np.expand_dims(penalty, 1)
    assert penalty.shape == rewards.shape
    unpenalized_rewards = rewards
    penalized_rewards = rewards - self.penalty_coeff * penalty
    else:
    penalty = None
    unpenalized_rewards = rewards
    penalized_rewards = rewards

RL——Q-learning与DQN收敛性证明


前言

  • 在数学中,函数、泛函、算子都是映射
  • 函数 :是从一个集合的元素映射到另一个集合的元素
  • 泛函 :是从一个函数空间映射到数值空间(如实数或复数集)
  • 算子 :是从一个函数空间映射到另一个函数空间

Q-learning 和 DQN 的收敛性讨论

  • DQN基本原理 :DQN的核心是使用一个深度神经网络来逼近Q-learning的Q函数
  • Q-learning有严格的收敛性证明(贝尔曼最优算子是压缩映射),但DQN没有(DQN虽然也按照贝尔曼最优算子更新,但还增加了一个神经网络近似)
    • 贝尔曼算子和贝尔曼最优算子都是压缩映射;神经网络近似是收敛的,但是贝尔曼最优算子+神经网络近似不一定能保证收敛
  • 本文主要针对Q-learning证明其收敛性,同时附带证明了贝尔曼算子和贝尔曼最优算子都是压缩映射

压缩映射定理(Contraction Mapping Theorem)

  • 压缩映射定理也称为Banach不动点定理

    压缩映射的定义

  • 定义 :设 \((X, d)\) 是一个完备的度量空间(即所有柯西序列都收敛), \(\mathcal{T}: X \to X\) 是一个映射。如果存在一个常数 \(\gamma \in (0, 1)\) ,使得对于所有的 \(x_1, x_2 \in X\) ,都有满足下面的式子,则称 \(\mathcal{T}\) 是一个压缩映射 :
    $$ \color{red}{d}(\mathcal{T}(x_1), \mathcal{T}(x_2)) \leq \color{blue}{\gamma} \color{red}{d}(x_1, x_2) $$
    • 其中 \( d \) 表示度量(metric) ,即度量空间中用于衡量两个点之间距离的函数
  • 直观理解 :
    • 压缩映射会将空间中的点逐渐拉近,使得它们之间的距离不断缩小。由于这种收缩性质,压缩映射在完备度量空间中必然存在一个唯一的不动点
    • \(\mathcal{T}\) 将任意两点之间的距离压缩至少 \(\gamma\) 倍
    • 即构造序列 \({x_n}\) ,其中 \(x_{n + 1} = \mathcal{T}(x_n)\),则随着 \(n \rightarrow \infty\), 序列 \({x_n}\) 会收敛到压缩映射的不动点 \(x^*\)

压缩映射定理(Contraction Mapping Theorem)

  • 不动点(Fixed-Point)定义 :对于一个映射 \(\mathcal{T}: X \to X\) ,如果存在一个点 \(x^* \in X\) ,使得 \(\mathcal{T}(x^*) = x^*\) ,那么 \(x^*\) 就被称为 \(\mathcal{T}\) 的不动点
  • 压缩映射定理(Banach不动点定理) :设 \((X, d)\) 是一个完备的度量空间(即所有柯西序列都收敛),\(\mathcal{T}: X \to X\) 是一个压缩映射。则:
    • \(\mathcal{T}\) 在 \(X\) 中存在唯一的不动点 \(x^*\)(即 \(\mathcal{T}(x^*) = x^*\))
    • 对于任意初始点 \(x_0 \in X\),通过迭代 \(x_{n+1} = \mathcal{T}(x_n)\) 生成的序列 \({x_n}\) 收敛于 \(x^*\)
    • 收敛速度的估计:
      $$
      d(x_n, x^*) \leq \frac{k^n}{1 - k} d(x_0, x_1)
      $$
      • 即,误差以指数速度衰减

压缩映射定理的简单证明

  • 存在性 :从任意 \(x_0\) 出发,构造序列 \(x_{n+1} = \mathcal{T}(x_n)\)。利用压缩性可证明 \({x_n}\) 是柯西序列,由完备性可知其收敛到某点 \(x^*\)。再证明 \(x^*\) 是不动点
  • 唯一性 :假设有两个不动点 \(x^*\) 和 \(y^*\),利用压缩性导出矛盾

贝尔曼算子与压缩映射

  • 贝尔曼方程定义 :在强化学习中,贝尔曼方程用于描述最优值函数(如最优Q函数)的递归关系。对于一个马尔可夫决策过程(MDP),贝尔曼最优性方程可以表示为:
    $$Q^*(s, a)=\mathbb{E}_{s^{\prime}}\left[r(s, a, s^{\prime})+\gamma \max _{a^{\prime}} Q^*(s^{\prime}, a^{\prime})\right]$$
    • \(\gamma\) 是折扣因子, \(Q^*(s, a)\) 是最优Q函数,表示在状态 \(s\) 执行动作 \(a\) 的最优价值
  • 贝尔曼算子与压缩映射 :贝尔曼方程定义了一个从Q函数空间到自身的映射 \(\mathcal{T}\) (函数空间到函数空间的映射也称为算子 ,这里也称为贝尔曼算子),即:
    $$\mathcal{T}Q(s, a)=\mathbb{E}_{s^{\prime}}\left[r(s, a, s^{\prime})+\gamma \max _{a^{\prime}} Q(s^{\prime}, a^{\prime})\right]$$
    • 可以证明,在无穷范数度量下(即度量 \(d\) 为无穷范数(\( \Vert \cdot\Vert_\infty \)))时,有贝尔曼算子 \(\mathcal{T}\) 是一个压缩映射
    • 实际上,在无穷范数度量下,贝尔曼最优算子和贝尔曼算子都是压缩映射 ,详情见附录证明

附录:度量的完整定义

度量的定义

  • 给定一个集合 \( X \),若函数 \( d: X \times X \to \mathbb{R} \) 满足以下性质,则称 \( d \) 为 \( X \) 上的度量:
    • 非负性 :
      $$ d(x, y) \geq 0 \quad \text{且} \quad d(x, y) = 0 \iff x = y. $$
    • 对称性 :
      $$ d(x, y) = d(y, x). $$
    • 三角不等式 :
      $$ d(x, z) \leq d(x, y) + d(y, z). $$
  • 此时,二元组 \( (X, d) \) 称为度量空间
  • 在压缩映射定理中:
    $$ d(\mathcal{T}(x_1), \mathcal{T}(x_2)) \leq \gamma \cdot d(x_1, x_2) \quad (\gamma \in [0, 1)), $$
    • \( d(x_1, x_2) \) 表示两点 \( x_1 \) 和 \( x_2 \) 的原始距离
    • \( d(\mathcal{T}(x_1), \mathcal{T}(x_2)) \) 表示它们经过映射 \(\mathcal{T}\) 后的像之间的距离
    • 不等式表明,\(\mathcal{T}\) 将距离压缩了至少 \( \gamma \) 倍(\( \gamma < 1 \))

附录:贝尔曼算子是压缩映射的证明

  • 证明目标:贝尔曼算子(Bellman Operator)和贝尔曼最优算子(Bellman Optimality Operator)在适当的条件下都是无穷范数(\( \Vert \cdot\Vert_\infty \))下的压缩映射 ,但它们的压缩性质依赖于折扣因子 \( \gamma \in [0, 1) \) 和 MDP 的结构。

贝尔曼算子 \( \mathcal{T}^\pi \)(Policy Evaluation)

  • 对于给定的策略 \( \pi \),贝尔曼算子定义为:
    $$
    (\mathcal{T}^\pi V)(s) = \sum_{a} \pi(a|s) \left( r(s, a) + \gamma \sum_{s’} P(s’|s, a) V(s’) \right)
    $$
  • 对于任意两个值函数 \( V_1, V_2 \),有:
    $$
    \begin{align}
    \Vert \mathcal{T}^\pi V_1 - \mathcal{T}^\pi V_2 \Vert_\infty &= \max_s \left| \sum_{a} \pi(a|s) \gamma \sum_{s’} P(s’|s, a) (V_1(s’) - V_2(s’)) \right| \\
    &\leq \gamma \max_s \sum_{a} \pi(a|s) \sum_{s’} P(s’|s, a) |V_1(s’) - V_2(s’)| \\
    &\leq \gamma \max_s \sum_{a} \pi(a|s) \sum_{s’} P(s’|s, a) \Vert V_1 - V_2 \Vert_\infty \\
    &= \gamma \Vert V_1 - V_2 \Vert_\infty \quad (\text{注: } \sum_{a} \pi(a|s) \sum_{s’} P(s’|s, a) = 1)
    \end{align}
    $$
  • 也就是说,下面的式子成立:
    $$
    \Vert \mathcal{T}^\pi V_1 - \mathcal{T}^\pi V_2 \Vert_\infty \leq \gamma \Vert V_1 - V_2 \Vert_\infty
    $$
  • 至此,我们证得结论:贝尔曼算子 \( \mathcal{T}^\pi \) 是无穷范数下的压缩映射(\( \gamma \)-压缩),压缩因子为 \( \gamma \)

贝尔曼最优算子 \( \mathcal{T}^* \)(Optimal Control)

  • 贝尔曼最优算子定义为:
    $$
    (\mathcal{T}^* V)(s) = \max_{a} \left( r(s, a) + \gamma \sum_{s’} P(s’|s, a) V(s’) \right)
    $$
  • 对于任意两个值函数 \( V_1, V_2 \),设 \( a^*_1 \) 和 \( a^*_2 \) 分别是 \( \mathcal{T}^* V_1 \) 和 \( \mathcal{T}^* V_2 \) 的最优动作:
    $$
    \begin{align}
    \mathcal{T}^* V_1(s) - \mathcal{T}^* V_2(s) &= \left( r(s, a^*_1) + \gamma \sum_{s’} P(s’|s, a^*_1) V_1(s’) \right) - \left( r(s, a^*_2) + \gamma \sum_{s’} P(s’|s, a^*_2) V_2(s’) \right) \\
    &\leq \left( r(s, a^*_1) + \gamma \sum_{s’} P(s’|s, a^*_1) V_1(s’) \right) - \left( r(s, a^*_1) + \gamma \sum_{s’} P(s’|s, a^*_1) V_2(s’) \right) \\
    &= \gamma \sum_{s’} P(s’|s, a^*_1) (V_1(s’) - V_2(s’)) \\
    &\leq \gamma \Vert V_1 - V_2 \Vert_\infty
    \end{align}
    $$
  • 同理可得:
    $$
    \mathcal{T}^* V_2(s) - \mathcal{T}^* V_1(s) \leq \gamma \Vert V_1 - V_2 \Vert_\infty
    $$
  • 进一步将上面两个结论转换为绝对值,也就是说,下面的式子成立::
    $$
    | \mathcal{T}^* V_1(s) - \mathcal{T}^* V_2(s) | \leq \gamma \Vert V_1 - V_2 \Vert_\infty
    $$
  • 对绝对值取最大值,即得到无穷范数:
    $$
    \Vert \mathcal{T}^* V_1 - \mathcal{T}^* V_2 \Vert_\infty \leq \gamma \Vert V_1 - V_2 \Vert_\infty
    $$
  • 至此,我们证得结论:贝尔曼最优算子 \( \mathcal{T}^* \) 是无穷范数下的压缩映射(\( \gamma \)-压缩),压缩因子为 \( \gamma \)

比较两者的不动点

  • 贝尔曼算子 \( \mathcal{T}^\pi \) :用于策略评估(Policy Evaluation) ,计算给定策略 \( \pi \) 的值函数 \( V^\pi \)
    $$ (\mathcal{T}^\pi V)(s) = \mathbb{E}_{a \sim \pi} [ r + \gamma \mathbb{E}_{s’} V(s’) ] $$
    • 收敛到 \( V^\pi \),即 \( \mathcal{T}^\pi V^\pi = V^\pi \),且 \( V^\pi \) 是唯一不动点
  • 贝尔曼最优算子 \( \mathcal{T}^* \) :用于最优控制(Optimal Control) ,计算最优值函数 \( V^* \)
    $$(\mathcal{T}^* V)(s) = \max_a [ r + \gamma \mathbb{E}_{s’} V(s’) ] $$
    • 收敛到 \( V^* \),即 \( \mathcal{T}^* V^* = V^* \),且 \( V^* \) 是唯一不动点

一些补充思考

  • 折扣因子 \( \gamma < 1 \) 是关键,否则压缩性可能不成立(如无折扣问题 \( \gamma = 1 \) 时,可能不收敛)
  • 无穷范数 保证了压缩性,其他范数(如 \( L^2 \))不一定成立
  • 随机策略 vs. 确定性策略 :\( \mathcal{T}^\pi \) 适用于随机策略,而 \( \mathcal{T}^* \) 隐含地使用了确定性策略(取 max)

附录:神经网络近似的本质讨论

  • 神经网络近似本身可以看做是一种算子 \(\mathcal{\Pi}\):
    $$ (\mathcal{\Pi} q)(s,a) = \arg\min_{q’\in\Omega} \frac{1}{2}\Vert q(s,a) - q’(s,a)\Vert^2_2 $$
  • (未经过严格证明)一些讨论中会提到这种算子也是一种压缩映射。(注:即便如此,两个压缩映射(贝尔曼最优算子+神经网络近似)组合以后得映射也无法证明为压缩映射 ,即无法证明DQN的收敛性)

RL——TD误差和优势函数的区别

  • 参考链接:
    • TD误差 vs 优势函数 vs贝尔曼误差

TD 误差

  • 时间差分误差,TD error
  • 定义如下:
    $$
    \delta_{\theta}(s, a, s’) = R(s, a, s’) + \gamma v_{\theta}(s’) - v_{\theta}(s)
    $$
  • \(R(s,a,s’)=r(s,a,s’)\),表示从状态 \(s\) 执行 \(a\) 之后转移到 \(s’\) 获得的立即回报
  • TD error是针对确定的 \(s’\) 来说的

优势函数

  • 优势函数,Advantage Function
    $$
    A_{\theta}(s,a) = \mathbb{E}_{s’\sim P}[\delta_{\theta}(s, a, s’)] = \mathbb{E}_{s’\sim P}[R(s, a, s’) + \gamma v_{\theta}(s’)] - v_{\theta}(s) = Q_{\theta}(s,a) - v_{\theta}(s)
    $$
  • 优势函数是TD误差关于状态 \(s’\) 的期望,即从状态 \(s\) 执行 \(a\) 之后关于状态 \(s’\) 的期望

贝尔曼误差

  • 贝尔曼误差
    $$
    \epsilon_{\theta}(s) = \mathbb{E}_{a\sim \pi} [A_{\theta}(s,a)] = \mathbb{E}_{a\sim \pi,s’\sim P}[\delta_{\theta}(s, a, s’)] = \mathbb{E}_{a \sim \pi, s’\sim P}[R(s, a, s’) + \gamma v_{\theta}(s’)] - v_{\theta}(s)
    $$
  • 贝尔曼误差是优势函数关于动作 \(a\) 的期望

期望贝尔曼误差

  • 期望贝尔曼误差
    $$
    \mathbb{E}_{s\sim \mu} [\epsilon_{\theta}(s)] = \mathbb{E}_{s\sim \mu}[\mathbb{E}_{a \sim \pi, s’\sim P}[R(s, a, s’) + \gamma v_{\theta}(s’)]] - \mathbb{E}_{s\sim \mu}[ v_{\theta}(s)]
    $$
  • 贝尔曼误差是优势函数关于动作 \(a\) 的期望
1…262728…66
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

659 posts
53 tags
GitHub E-Mail
© 2026 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4