Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

RL——SAC

  • 参考链接:
    • 强化学习之图解SAC算法
    • Soft Actor Critic算法论文公式详解

SAC

  • 原始论文:
    • 论文1(2V+2Q+1策略, 2018,UC Berkeley):Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor
    • 论文2(4Q+1策略,自适应温度系数,2019,UC Berkeley):Soft Actor-Critic Algorithms and Applications

相关推导

  • 目标定义
    $$ J(\phi) = \sum_{t=0}^T \mathbb{E}_{(s_t, a_t) \sim \rho_{\pi_\phi}} [r(s_t, a_t) + \alpha \mathcal{H}(\pi_\phi(\cdot \vert s_t))] $$
    • 这里目标中增加的熵就是Soft名字的来源
  • Q值V值定义
    $$
    \begin{aligned}
    Q(s_t, a_t) &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim p(\cdot|s_t,a_t)} [V(s_{t+1})] \\
    V(s_t) &= \mathbb{E}_{a_t \sim \pi} [Q(s_t, a_t) - \alpha \log \pi(a_t \vert s_t)] \\
    \end{aligned}
    $$

SAC(2V+2Q+1策略)

  • 原始论文:Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor
    • 目标定义见上面部分,由于温度系数 \(\alpha\) 是一个固定的超参数,于是,当我们可以通过将Reward乘以 \(\frac{1}{\alpha}\) 来Rescaling Reward,使得熵的系数为1,所以本论文后面的推导都可以将 \(\alpha=1\) 来推导
  • 网络结构
    • 一个V网络及其对应的一个Target V网络,两个Q网络(Twin Q),一个策略网络
    • 由于存在V网络和Target V网络,不需要Q网络的Target Q网络了
  • 训练流程
    • 原始论文的伪代码中没有强调Twin Q的使用,但源码实现更新V网络时有使用Twin Q的思想,更新V网络时使用的是两个Q网络中各个动作上的较小者,用于防止V的估计过高
    • 引申问题:策略更新时是否需要使用Twin Q中的较小者计算损失函数呢?
      • SAC作者开源的源码中没有使用Twin Q(SAC(V)-原论文开源实现),包括强化学习之图解SAC算法中也没有使用Twin Q,都仅使用了一个Q网络计算策略损失函数,但其他开源实现中许多都取Twin Q的最小值作为损失函数
    • 注:Target V网络为软更新
Soft Policy Evaluation
  • V值更新:
    $$
    \begin{aligned}
    J_V(\psi) &= \mathbb{E}_{s_t \sim \mathcal{D}} [\frac{1}{2} \big(V_\psi(s_t) - \mathbb{E}_{a_t \sim \pi_\phi}[Q_\theta(s_t, a_t) - \log \pi_\phi(a_t \vert s_t)] \big)^2] \\
    \nabla_\psi J_V(\psi) &= \nabla_\psi V_\psi(s_t)\big( V_\psi(s_t) - Q_\theta(s_t, a_t) + \log \pi_\phi (a_t \vert s_t) \big)
    \end{aligned}
    $$
  • Q值更新:
    $$
    \begin{aligned}
    J_Q(\theta) &= \mathbb{E}_{(s_t, a_t) \sim \mathcal{D}} [\frac{1}{2}\big( Q_\theta(s_t, a_t) - (r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim p(\cdot|s_t,a_t)}[V_{\bar{\psi}}(s_{t+1})]) \big)^2] \\
    \nabla_\theta J_Q(\theta) &= \nabla_\theta Q_\theta(s_t, a_t) \big( Q_\theta(s_t, a_t) - r(s_t, a_t) - \gamma V_{\bar{\psi}}(s_{t+1})\big)
    \end{aligned}
    $$
    • 策略评估(Q值和V值的更新过程统称为策略评估过程)的收敛性证明 :
      • 定义回报为 \(r_\pi(s_t, a_t) \triangleq r(s_t, a_t) + \alpha \mathbb{E}_{s_{t+1}\sim p(s_{t+1}|s_t,a_t)}[\mathcal{H}(\pi(\cdot\vert s_{t+1}))]\) (注意:其中 \(p(s_{t+1}|s_t,a_t)\) 在论文中常简写为 \(p\) 或 \(p(\cdot|s_t,a_t)\),在不影响理解的情况下,可以混用)
      • 则有: \(Q(s_t, a_t) = r_\pi(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1}\sim p(s_{t+1}|s_t,a_t), a_{t+1}\sim\pi}[Q(s_{t+1},a_{t+1})]\)
      • 此时有贝尔曼算子(Bellman backup operator) \(\mathcal{T}^\pi\) 为: \(\mathcal{T}^\pi Q(s_t, a_t) \triangleq r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1}\sim p(s_{t+1}|s_t,a_t)}[V(s_{t+1})]\)
        • 其中 \(V(s_{t}) = \mathbb{E}_{a_t \sim \pi}[Q(s_t, a_t) - log\pi(a_t|s_t)]\)
        • 贝尔曼算子 \(\mathcal{T}^\pi\) 是一种操作符,它表示对当前的价值函数集Q利用贝尔曼方程进行更新
      • Lemma 1 (Soft Policy Evaluation) : 按照上式定义的 \(\mathcal{T}^\pi\),当动作维度 \(|\mathcal{A}|<\infty\) 时, \(Q^{k+1} = \mathcal{T}^\pi Q^{k}\) 会收敛到策略 \(\pi\) 对应的soft Q-value
        • 问题这里的动作维度有限,是否说明连续动作是不可以的?证明中哪里用到了动作有限?
          • Lemma 1 (Soft Policy Evaluation)中引用的论文证明需要保证动作空间有限,从而保证熵是有界的,此时可以保证加入熵以后的reward还是可以收敛的

            apply the standard convergence results for policy evaluation (Sutton & Barto, 1998). The assumption |A| < ∞ is required to guarantee that the entropy augmented reward is bounded.

          • 连续动作的熵如果是有界的理论上也可以?
Soft Policy Improvement
  • 策略更新目标推导(新策略本质是在拟合函数Q的玻尔兹曼分布,后续有相关证明这种方式得到的新策略一定优于旧策略):
    $$
    \begin{aligned}
    \pi_\text{new}
    &= \mathop{\arg\min}_{\pi’ \in \Pi} \mathbb{E}_{s_t \sim \mathcal{D}} \Big[ D_\text{KL} \Big( \pi’(\cdot\vert s_t) | \frac{\exp(Q^{\pi_\text{old}}(s_t, \cdot))}{Z^{\pi_\text{old}}(s_t)} \Big) \Big] \\[6pt]
    &= \mathop{\arg\min}_{\pi’ \in \Pi} \mathbb{E}_{s_t \sim \mathcal{D}} \Big[ D_\text{KL} \big( \pi’(\cdot\vert s_t) | \exp(Q^{\pi_\text{old}}(s_t, \cdot) - \log Z^{\pi_\text{old}}(s_t)) \big) \Big] \\[6pt]
    \text{目标函数: } J_\pi(\phi) &= \mathbb{E}_{s_t \sim \mathcal{D}} \Big[ D_\text{KL} \big( \pi_\phi(\cdot\vert s_t) | \exp(Q_\theta(s_t, \cdot) - \log Z_w(s_t)) \big) \Big] \\[6pt]
    &= \mathbb{E}_{s_t \sim \mathcal{D}, a_t\sim\pi_\phi} \Big[ \log \big( \frac{\pi_\phi(a_t \vert s_t)}{\exp(Q_\theta(s_t, a_t) - \log Z_w(s_t))} \big) \Big] \\[6pt]
    &= \mathbb{E}_{s_t \sim \mathcal{D}, a_t\sim\pi_\phi} [ \log \pi_\phi(a_t \vert s_t) - Q_\theta(s_t, a_t) + \log Z_w(s_t) ]
    \end{aligned}
    $$

    • Lemma 2 (Soft Policy Improvement),详细证明见附录:
      • 若新策略 \(\pi_\text{new}\) 定义为 \(
        \pi_\text{new} = \mathop{\arg\min}_{\pi’ \in \Pi} D_\text{KL} \Big( \pi’(\cdot\vert s_t) | \frac{\exp(Q^{\pi_\text{old}}(s_t, \cdot))}{Z^{\pi_\text{old}}(s_t)} \Big)\)
      • 则有 \(Q^{\pi_\text{new}}(s_t, a_t) \ge Q^{\pi_\text{old}}(s_t, a_t), \quad \forall (s_t, a_t) \in \mathcal{S} \times \mathcal{A}\)
  • 由于 \(\log Z_w(s_t)\) 与参数 \(\phi\) 无关,梯度为0,故而可以消掉 \(\log Z_w(s_t)\),最终得到SAC离散策略的的更新目标(实现时,离散版本是可以直接按照动作概率加权求和得到期望的):
    $$
    J_\pi(\phi) = \mathbb{E}_{s_t \sim \mathcal{D}, a_t\sim\pi_\phi} [ \log \pi_\phi(a_t \vert s_t) - Q_\theta(s_t, a_t) ]
    $$

  • SAC连续动作的策略更新目标 ,首先需要采用重参数法建模连续动作 \(a_t = f_\phi(\epsilon_t; s_t)\),然后有:
    $$
    J_\pi(\phi) = \mathbb{E}_{s_t \sim \mathcal{D}, \epsilon_t \sim \mathcal{N}}[\log \pi_\phi(f_\phi(\epsilon_t;s_t)\vert s_t) - Q_\theta(s_t, f_\phi(\epsilon_t; s_t))]
    $$

    • \(f_\phi(\epsilon_t;s_t)\) 是中按照策略 \(\pi_\phi\) 输出的均值方差通过采样(重参数化技术)得到的,可以回传梯度
    • \(\log \pi_\phi(f_\phi(\epsilon_t;s_t)\vert s_t)\) 是概率密度函数 \(\pi_\phi(\cdot|s_t)\) 的对数,也可以回传梯度,注意这里的梯度回传包含了 \(\pi_\phi\) 和 \(f_\phi\) 都需要回传回去,由于只需要定义一个 \(f_\phi\) 后, \(\pi_\phi\) 自然也就被定义出来了,无需重新定义参数,所以 \(\pi_\phi\) 和 \(f_\phi\) 共用了参数
    • 上述损失函数的近似梯度(移除期望)可以是:
      $$ \hat{\nabla}_\phi J_\pi(\phi) = \nabla_\phi \log \pi_\phi(\mathbf{a_t} \vert s_t) + (\nabla_{\mathbf{a_t}} \log \pi_\phi(\mathbf{a_t} \vert s_t) - \nabla_{\mathbf{a_t}} Q(s_t, \mathbf{a_t})) \nabla_\phi f_\phi(\epsilon_t; s_t) $$
      • 论文中伪代码没有显示指定 \(\nabla_{\mathbf{a_t}} Q(s_t, \mathbf{a_t})\) 中的Q是什么值,实际上实现时,使用的是Twin Q的最小值
Soft Policy Iteration
  • Theorem 1 (Soft Policy Iteration). 重复应用上面的Soft Policy Evaluation 和 Soft Policy Improvement,最终策略 \(\pi\) 会收敛到最优策略 \(\pi^*\),使得 \(Q^{\pi^*}(s_t, a_t) \ge Q^{\pi}(s_t, a_t)\) 对所有的 \(\pi \in \Pi\) 和 \((s_t, a_t) \in \mathcal{S} \times \mathcal{A}\) 成立
    • 原始论文中有证明,实际上可以表述为“单调有界,所以收敛:Soft Q单调有界,所以会收敛到一个最优的Soft Q,对应的就是最优策略”

SAC(4Q+1策略)

  • 原始论文:Soft Actor-Critic Algorithms and Applications

    • 本论文是第一篇论文的改进版本,主要改进是允许温度系数 \(\alpha\) 变得可学习
    • 由于 \(\alpha\) 是一个是可学习的变量,所以不再可以像之前的论文一样,通过将Reward乘以 \(\frac{1}{\alpha}\) 来Rescaling Reward,使得熵的系数为1。所以本论文后面的推导都可以将带着 \(\alpha\)
  • 网络结构

    • 两个Q网络(Twin Q)及其分别对应的Target Q网络,一个策略网络
    • 两个Q网络分别迭代,有各自的Target Q网络
  • 训练流程(下图中,离散策略更新使用的损失函数是 \(\color{red}{Q(s_t,a_t)}\) 而不是 \(\color{blue}{Q(s_t,s_t)}\))

    • 注:Target Q网络为软更新
  • Q值更新:
    $$
    \begin{aligned}
    J_Q(\theta) &= \mathbb{E}_{(s_t, a_t) \sim \mathcal{D}} [\frac{1}{2}\big( Q_\theta(s_t, a_t) - (r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim p, a_{t+1} \sim \pi_\phi}(Q_\bar{\theta}(s_{t+1}, a_{t+1}) - \alpha \log \pi_\phi(a_{t+1} \vert s_{t+1}))) \big)^2] \\
    \end{aligned}
    $$

    • 论文中没有明确,但实际实现时, \(Q_\bar{\theta}(s_{t+1}, a_{t+1})\) 使用的是Twin Q中的较小值
  • 策略更新(在前一篇文章的基础上,增加 \(\alpha\) 即可):

    • SAC离散策略的的更新目标 :
      $$
      J_\pi(\phi) = \mathbb{E}_{s_t \sim \mathcal{D}, a_t\sim\pi_\phi} [ \alpha \log \pi_\phi(a_t \vert s_t) - Q_\theta(s_t, a_t) ]
      $$
    • SAC连续动作的策略更新目标 ,首先需要采用重参数法建模连续动作 \(a_t = f_\phi(\epsilon_t; s_t)\),然后有:
      $$
      J_\pi(\phi) = \mathbb{E}_{s_t \sim \mathcal{D}, \epsilon_t \sim \mathcal{N}}[\alpha \log \pi_\phi(f_\phi(\epsilon_t;s_t)\vert s_t) - Q_\theta(s_t, f_\phi(\epsilon_t; s_t))]
      $$
    • \(f_\phi(\epsilon_t;s_t)\) 是中按照策略 \(\pi_\phi\) 输出的均值方差通过采样(重参数化技术)得到的,可以回传梯度
    • \(\log \pi_\phi(f_\phi(\epsilon_t;s_t)\vert s_t)\) 是概率密度函数 \(\pi_\phi(\cdot|s_t)\) 的对数,也可以回传梯度,注意这里的梯度回传包含了 \(\pi_\phi\) 和 \(f_\phi\) 都需要回传回去,由于只需要定义一个 \(f_\phi\) 后, \(\pi_\phi\) 自然也就被定义出来了,无需重新定义参数,所以 \(\pi_\phi\) 和 \(f_\phi\) 共用了参数
    • 上述损失函数的近似梯度(移除期望)可以是:
      $$ \hat{\nabla}_\phi J_\pi(\phi) = \nabla_\phi \alpha \log \pi_\phi(\mathbf{a_t} \vert s_t) + (\nabla_{\mathbf{a_t}} \alpha \log \pi_\phi(\mathbf{a_t} \vert s_t) - \nabla_{\mathbf{a_t}} Q(s_t, \mathbf{a_t})) \nabla_\phi f_\phi(\epsilon_t; s_t) $$
      • 论文中伪代码没有显示指定 \(\nabla_{\mathbf{a_t}} Q(s_t, \mathbf{a_t})\) 中的Q是什么值,实际上实现时,使用的是Twin Q的最小值
  • 温度系数 \(\alpha\) 自动更新:

    • 将强化学习的目标改成:
      $$
      \begin{align}
      \max_{\pi_0, \dots, \pi_T} \mathbb{E}_{\rho_\pi} &\Big[ \sum_{t=0}^T r(s_t, a_t)\Big] \\
      \text{s.t. } \forall t\text{, } &\mathcal{H}(\pi_t) \geq \mathcal{H}_0 \\
      \end{align}
      $$

    • 即:
      $$
      \begin{align}
      \max_{\pi_0, \dots, \pi_T} \mathbb{E}_{\rho_\pi} &\Big[ \sum_{t=0}^T r(s_t, a_t)\Big] \\
      \text{s.t. } \forall t\text{, } \mathbb{E}_{(s_t, a_t) \sim \rho_{\pi_t}}&[-\log(\pi_t(a_t|s_t))] \geq \mathcal{H}_0
      \end{align}
      $$

      • 其中 \(\mathcal{H}_0 \) 是一个期望的最小熵阈值
    • 经过一系列的数学推导,可得 \(\alpha\) 的更新目标为:
      $$J(\alpha) = \mathbb{E}_{a_t \sim \pi_t} [-\alpha \log \pi_t(a_t \mid s_t) - \alpha \mathcal{H}_0]$$

    • 实践:

      • 从实践经验来看,可以设置 \(\mathcal{H}_0 = -dim(\mathcal{A})\),跟动作空间维度相关(注意不是动作的数量,而是动作的维度,单维的离散动作维度应该是1,单维连续动作的维度也应该是1,比如HalfCheetah-v1动作对应六个关节的扭矩控制输入,故而动作维度是6)

        1
        2
        3
        4
        ### 连续动作:
        target_entropy = - env.action_space.shape[0]
        ### 离散动作:
        target_entropy = -1
      • 温度系数自动调整方案不一定优于固定温度系数方案,在不同场景下效果不同,详情见原始论文


SAC连续动作与离散动作的实现有什么区别

建模方式

  • 策略网络 :连续动作需要使用 \(\mu_\phi,\sigma_\phi\) 表示均值和方差,连续分布下,每个动作的概率理论上都是0,但借助概率密度函数的含义,可以通过计算概率密度来使用

  • 采样方式 :采样时需要创建分布来采样,由于需要梯度回传,所以需要使用重参数法

  • log_prob的计算 :借助概率密度函数定义完成log值的抽取

    • 连续策略对应的动作采样和对数概率计算:1)重参数法;2)tanh转换;3)对数概率计算

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      def forward(self, x):
      x = F.relu(self.fc1(x))
      mu = self.fc_mu(x)
      std = F.softplus(self.fc_std(x))
      dist = Normal(mu, std)
      normal_sample = dist.rsample() # rsample()是重参数化采样
      log_prob = dist.log_prob(normal_sample)
      action = torch.tanh(normal_sample)
      # 计算tanh_normal分布的对数概率密度
      log_prob = log_prob - torch.log(1 - torch.tanh(action).pow(2) + 1e-7)
      action = action * self.action_bound
      return action, log_prob
    • 这里关于log_prob = log_prob - torch.log(1 - torch.tanh(action).pow(2) + 1e-7)是一个推导得到的,若 \(y = tanh(x)\),那么有 \(\log p(y) = \log p(x) - \log(1-(tanh(x))^2)\)

    • 使用action = torch.tanh(normal_sample)的原因是想将原来的值放缩到 \([-1,1]\) 之间,防止原始高斯分布采样到非常离谱的动作

  • Critic网络 :连续动作下,需要将动作放到输入侧,输出维度为1;离散动作下,可以像连续时一样处理,也可以不输入动作,同时输出维度为动作维度

计算损失函数

  • 熵+目标的计算(最大化Q值)的计算 :

    • 连续场景下(最大化动作下的Q值,梯度直接包含在重参数法采样的动作中;熵则仅使用对数概率,因为连续分布下,难以积分,虽然状态不同,但多个动作自然一起优化,自然就有期望熵的含义了)

      1
      2
      3
      4
      5
      new_actions, log_prob = self.actor(states) # 重参数法
      entropy = -log_prob
      q1_value = self.critic_1(states, new_actions)
      q2_value = self.critic_2(states, new_actions)
      actor_loss = torch.mean(-self.log_alpha.exp() * entropy - torch.min(q1_value, q2_value))
    • 离散场景下(用策略输出的分布计算Q值期望;熵也是完整的期望版本)

      1
      2
      3
      4
      5
      6
      7
      8
      probs = self.actor(states)
      log_probs = torch.log(probs + 1e-8)
      # 直接根据概率计算熵
      entropy = -torch.sum(probs * log_probs, dim=1, keepdim=True) #
      q1_value = self.critic_1(states)
      q2_value = self.critic_2(states)
      min_qvalue = torch.sum(probs * torch.min(q1_value, q2_value), dim=1, keepdim=True) # 直接根据概率计算期望
      actor_loss = torch.mean(-self.log_alpha.exp() * entropy - min_qvalue)

SAC的连续和离散动作的思考

  • SAC的一个核心创新是使用玻尔兹曼分布去作为策略分布,这使得SAC可以拟合多峰情况,但是对于连续动作的场景中,SAC选择了输出一个高斯分布,也就是让高斯趋近于玻尔兹曼分布。高斯是一个单峰的分布,这意味着连续动作的SAC本质上还是单峰(Unimodal)的算法,而不是soft q-learning的多峰(Multi-modal)
  • 离散情况下,确实可以拟合多峰分布

SAC必须是随机策略吗?

  • 是的,确定性策略熵太小,SAC适用于随机策略
  • 问题一:如果SAC直接像DQN一样按照 \(\mathop{\arg\max}_a Q(s,a)\) 选择动作而不是玻尔兹曼分布会怎样?
    • 回答:确定性动作的熵为0,所以熵不再有用,整个SAC会退化成DQN
  • 问题二:如果DQN像SAC一样做玻尔兹曼分布会怎样?
    • 回答:得到的策略不再是最优的,决策到的不再是Q值最大的动作【TODO】

为什么最大熵能带来收益呢?

  • 所有可能的模型中熵最大的模型是最好的模型 :这意味着在给定的信息下,模型的选择应该尽可能地保持不确定性,即不做不必要的假设
  • 熵与正则化 :机器学习/深度学习模型容易过拟合,主要原因是数据不足,建模太复杂等,增加一些正则可以降低过拟合,最大熵可以理解为一种正则
  • 在普通机器学习中收益来源 :主要是防止过拟合(不做不必要的假设)
  • 在强化学习中收益来源 :一方面是防止过拟合,另一方面是让探索更加充分

SAC vs AC中添加entropy loss?

  • SAC将原始AC的目标修改了,理论上目标就是让熵和reward一起最优,Critic网络和策略网络学习的目标都包含了最大化熵
  • AC 中加入 entropy loss则只是一种正则,在损失函数上对熵进行了一些约束,此时Critic网络学不到熵的信息(此时AC的Actor目标和Critic目标不完全一致)

DSAC(Distributional SAC)

  • 背景:SAC是基于值学习的方法,值学习方法往往存在值过估计问题,即算法倾向于高估某些状态-动作对的价值,从而影响学习性能
  • DSAC通过引入值分布的方法来解决值过估计问题
  • DSAC 还引入了三个重要改进,包括:
    • Expected Value Substituting
    • Variance-Based Critic Gradient Adjusting
    • Twin Value Distribution Learning

附录:新策略一定优于旧策略的证明

  • 证明目标(Lemma 2 (Soft Policy Improvement)):
    • 若新策略 \(\pi_\text{new}\) 定义为:
      $$
      \pi_\text{new} = \mathop{\arg\min}_{\pi’ \in \Pi} D_\text{KL} \Big( \pi’(\cdot\vert s_t) | \frac{\exp(Q^{\pi_\text{old}}(s_t, \cdot))}{Z^{\pi_\text{old}}(s_t)} \Big)
      $$
    • 则有:
      $$
      Q^{\pi_\text{new}}(s_t, a_t) \ge Q^{\pi_\text{old}}(s_t, a_t), \quad \forall (s_t, a_t) \in \mathcal{S} \times \mathcal{A}
      $$
  • 证明:
    • 由之前的定义我们有:
      $$
      \begin{align}
      \pi_\text{new}
      &= \mathop{\arg\min}_{\pi’ \in \Pi} D_\text{KL} \Big( \pi’(\cdot\vert s_t) | \frac{\exp(Q^{\pi_\text{old}}(s_t, \cdot))}{Z^{\pi_\text{old}}(s_t)} \Big) \\[6pt]
      &= \mathop{\arg\min}_{\pi’ \in \Pi} D_\text{KL} \big( \pi’(\cdot\vert s_t) | \exp(Q^{\pi_\text{old}}(s_t, \cdot) - \log Z^{\pi_\text{old}}(s_t)) \big) \\[6pt]
      &= \mathop{\arg\min}_{\pi’ \in \Pi} \mathbb{E}_{a_t\sim\pi’} \Big[ \log \big( \frac{\pi’(a_t \vert s_t)}{\exp(Q^{\pi_\text{old}}(s_t, a_t) - \log Z^{\pi_\text{old}}(s_t))} \big) \Big] \\[6pt]
      &= \mathop{\arg\min}_{\pi’ \in \Pi} \mathbb{E}_{a_t\sim\pi’} [ \log \pi’(a_t \vert s_t) - Q^{\pi_\text{old}}(s_t, a_t) + \log Z^{\pi_\text{old}}(s_t) ]
      \end{align}
      $$
    • 于是有:
      $$
      \mathbb{E}_{a_t\sim\pi_\text{new}} [ \log \pi_\text{new}(a_t \vert s_t) - Q^{\pi_\text{old}}(s_t, a_t) + \log Z^{\pi_\text{old}}(s_t) ] \le \mathbb{E}_{a_t\sim\pi_\text{old}} [ \log \pi_\text{old}(a_t \vert s_t) - Q^{\pi_\text{old}}(s_t, a_t) + \log Z^{\pi_\text{old}}(s_t) ]
      $$
    • 由于 \(\log Z^{\pi_\text{old}}(s_t)\) 与策略无关,仅与状态有关,所以可以消掉,于是有:
      $$
      \begin{align}
      \mathbb{E}_{a_t\sim\pi_\text{new}} [ \log \pi_\text{new}(a_t \vert s_t) - Q^{\pi_\text{old}}(s_t, a_t)] &\le \mathbb{E}_{a_t\sim\pi_\text{old}} [ \log \pi_\text{old}(a_t \vert s_t) - Q^{\pi_\text{old}}(s_t, a_t)] \\
      - \mathbb{E}_{a_t\sim\pi_\text{new}} [ \log \pi_\text{new}(a_t \vert s_t) - Q^{\pi_\text{old}}(s_t, a_t)] &\ge - \mathbb{E}_{a_t\sim\pi_\text{old}} [ \log \pi_\text{old}(a_t \vert s_t) - Q^{\pi_\text{old}}(s_t, a_t)] \\
      \mathbb{E}_{a_t\sim\pi_\text{new}} [Q^{\pi_\text{old}}(s_t, a_t) - \log \pi_\text{new}(a_t \vert s_t)] &\ge \mathbb{E}_{a_t\sim\pi_\text{old}} [Q^{\pi_\text{old}}(s_t, a_t) - \log \pi_\text{old}(a_t \vert s_t) ] \\
      \mathbb{E}_{a_t\sim\pi_\text{new}} [Q^{\pi_\text{old}}(s_t, a_t) - \log \pi_\text{new}(a_t \vert s_t)] &\ge V^{\pi_\text{old}}(s_t)\\
      \end{align}
      $$
    • 于是,将 \(Q^{\pi_\text{old}}(s_t, a_t)\) 展开后,并将上面的式子 \(V^{\pi_\text{old}}(s_t) \le \mathbb{E}_{a_t\sim\pi_\text{new}} [Q^{\pi_\text{old}}(s_t, a_t) - \log \pi_\text{new}(a_t \vert s_t)]\) 不断地带入下面的式子有:
      $$
      \begin{align}
      Q^{\pi_\text{old}}(s_t, a_t) &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim p} [V^{\pi_\text{old}}(s_t)] \\
      &\le r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim p} \big[\mathbb{E}_{a_{t+1}\sim\pi_\text{new}} [Q^{\pi_\text{old}}(s_{t+1}, a_{t+1}) - \log \pi_\text{new}(a_{t+1} \vert s_{t+1})]\big] \\
      &\cdots \\
      &\le Q^{\pi_\text{new}}(s_t, a_t)
      \end{align} \\
      $$
      • 不断带入 \(V^{\pi_\text{old}}(s_t) \le \mathbb{E}_{a_t\sim\pi_\text{new}} [Q^{\pi_\text{old}}(s_t, a_t) - \log \pi_\text{new}(a_t \vert s_t)]\),最后所有的采样策略都会变成新策略,对应的值也就是 \(Q^{\pi_\text{new}}(s_t, a_t)\) 了
    • 证毕.

附录:证明tanh变换后的对数概率密度

  • 为了证明给定的关系式 \(\log p(y) = \log p(x) - \log(1-(\tanh(x))^2)\),我们需要理解这个关系式的背景。这里 \(p(x)\) 和 \(p(y)\) 分别表示随机变量 \(X\) 和 \(Y\) 的概率密度函数(PDF),其中 \(Y = \tanh(X)\)
  • 根据概率论中的变换法则,如果我们有一个随机变量 \(X\) 和一个单调可微的函数 \(g\),那么新的随机变量 \(Y = g(X)\) 的概率密度函数 \(p_Y(y)\) 可以通过原随机变量 \(X\) 的概率密度函数 \(p_X(x)\) 以及变换函数 \(g\) 的导数来计算。具体来说,有:
    $$ p_Y(y) = p_X(x) \left| \frac{dx}{dy} \right| $$
    • 上面的式子可以通过概率论推导得到:
      • 概率累积分布定义: \( F_Y(y) = P(Y \leq y) = P(g(X) \leq y) \)
      • 如果 \(g\) 是单调增加的,则 \(P(g(X) \leq y) = P(X \leq g^{-1}(y))\) ;如果 \(g\) 是单调减少的,则 \(P(g(X) \leq y) = P(X \geq g^{-1}(y))\) 。这里假设 \(g\) 是单调增加的,因此: \( F_Y(y) = P(X \leq g^{-1}(y)) = F_X(g^{-1}(y))\)
      • 所以有:
        $$
        \begin{align}
        p_Y(y) &= \frac{d}{dy} F_Y(y) = \frac{d}{dy} F_X(g^{-1}(y)) \\
        &= f_X(g^{-1}(y)) \cdot \frac{d}{dy} g^{-1}(y) = f_X(x) \cdot \frac{d}{dy} x \\
        &= f_X(x) \cdot \frac{dx}{dy}
        \end{align}
        $$
        • 其中 \(x = g^{-1}(y)\) 是反函数,这里的 \(\frac{dx}{dy}\) 中,实际上 \(x\) 是 \(y\) 的函数,即写成 \(\frac{dx(y)}{dy}\) 更合适
        • 对于不确定 \(g\) 是否单调的情况,需要加绝对值符号
  • 在这个特定的情况下, \(g(x) = \tanh(x)\),所以 \(y = \tanh(x)\) 。为了找到 \(p_Y(y)\),我们需要计算 \(g\) 的导数,即 \(\tanh(x)\) 的导数:
    $$ \frac{d}{dx}\tanh(x) = 1 - \tanh^2(x) $$
  • 因此,我们可以将上述变换法则应用于此情况:
    $$ p_Y(y) = p_X(x) \left| \frac{dx}{dy} \right| $$
  • 因为 \(y = \tanh(x)\),所以 \(x = \tanh^{-1}(y)\),从而:
    $$ \frac{dx}{dy} = \frac{d}{dy}\tanh^{-1}(y) = \frac{1}{1-y^2} $$
    • \(\frac{dx}{dy}\) 表示x对y求导,也是x对y的斜率(所以时除法),所以有 \(\frac{dy}{dx} = 1 - \tanh^2(x) \) 推出 \(\frac{dx}{dy} = \frac{1}{1 - \tanh^2(x)} = \frac{1}{1 - y^2}\)
  • 代入上面的概率密度变换公式中,我们得到:
    $$ p_Y(y) = p_X(x) \left| \frac{1}{1-\tanh^2(x)} \right| $$
  • 由于 \(1 - \tanh^2(x)\) 总是正的(对于所有实数 \(x\) ),我们可以去掉绝对值符号:
    $$ p_Y(y) = \frac{p_X(x)}{1-\tanh^2(x)} $$
  • 取对数两边,得到:
    $$ \log p_Y(y) = \log p_X(x) - \log(1-\tanh^2(x)) $$
  • 这正是我们要证明的等式:
    $$ \log p(y) = \log p(x) - \log(1-(\tanh(x))^2) $$
  • 证毕.

SAC为什么可以是off-policy的?

  • SAC与DQN,DDPG一样,思路是一致的。详情参考:RL——强化学习相关笔记

RL——TRPO-PPO-目标函数基础推导

本文主要介绍TRPO、PPO相关内容

  • 参考链接:
    • TRPO 原始论文:(TRPO)Trust Region Policy Optimization, ICML 2015, UC Berkeley
    • 如何看懂TRPO里所有的数学推导细节? - 小小何先生的回答 - 知乎:知乎
    • 从TRPO到PPO(理论分析与数学证明):博客
    • TRPO公式推导:笔记式推导
    • 信赖域策略优化(Trust Region Policy Optimization, TRPO):PPT式推导
    • RL - Trust Region Policy Optimization (TRPO)
    • Trust Region Policy Optimization (TRPO) 公式推导:包含一些比较细节的推导过程

相关概念理解

基础概念

  • Q值的定义
    $$ Q_\pi(s_t,a_t) = \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}[\sum\limits_{l=0}^\infty\gamma^lr(s_{t+l}, a_{t+l})] $$
    • 说明:以上期望是条件概率下的期望,为了更准确表达,一般来说可以加上” \(\vert_{(s_t,a_t)} \) “
  • V值的定义
    $$ V_\pi(s_t) = \mathbb{E}_{a_t, s_{t+1},\cdots \sim \pi}[\sum \limits_{l=0}^\infty \gamma^lr(s_{t+l}, a_{t+l})] = \mathbb{E}_{a_t\sim \pi(\cdot|s_t)}[Q_\pi(s_t, a_t)] $$
  • 优势函数的定义
    $$ A_\pi(s_t,a_t) = Q_\pi(s_t,a_t) - V_\pi(s_t) $$

强化学习的目标定义

  • 目标定义:
    $$ \eta(\pi) = \mathbb{E}_{s_0, a_0,\ldots \sim \pi}[\sum\limits_{t=0}^{\infty}\gamma^t r(s_t, a_t)] $$
  • 强化学习的目标是找到一个策略 \(\pi\),能最大化以上目标函数

普通策略梯度法的解法

  • 设定策略为 \(\pi_\theta\),则 \(\eta(\pi)\) 可表达为一个关于策略参数 \(\theta\) 的函数 \(\eta(\theta)\),此时可通过梯度上升法(策略梯度法)得到参数更新公式:
    $$ \theta_{new} = \theta_{old} + \alpha\nabla_{\theta}\eta(\theta) $$

普通策略梯度法会遇到的问题

  • 普通策略梯度法可能存在不稳定问题:
    • 如果公式更新的步长选取过小,训练速度慢
    • 如果步长选取过大,那么会导致策略参数更新步子迈得过大,如果更新过渡,可能导致策略变差,从而导致交互样本变差,差的样本进一步导致策略更差,形成恶性循环
  • TRPO/PPO的解法:选择一个合适的更新策略,或是如何选择一个合适的步长,使得更新过后的策略一定比当前策略更好

TRPO/PPO的核心思想

  • TRPO/PPO的核心是使用一个约束优化问题来更新策略,这个约束保证了新策略与旧策略之间的差异不会太大

TRPO/PPO的推导

策略提升的引入

  • 回顾强化学习的目标函数
    $$ \eta(\pi) = \mathbb{E}_{s_0, a_0,\cdots \sim \pi}[\sum\limits_{t=0}^{\infty}\gamma^t r(s_t, a_t)] $$
  • 接下来,在本文中设定 \(\tilde{\pi}\) 是新策略, \(\pi\) 是旧策略 (与TRPO原始推导保持一致,但这与普通直觉不太一致):
    $$
    \color{red}{\tilde{\pi} = \pi_\text{new}; \quad \pi = \pi_\text{old}}
    $$
  • 两个策略之间的关系
    $$ \eta(\tilde{\pi}) = \eta(\pi) + \mathbb{E}_{s_0,a_0,\cdots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty \gamma^t A_{\pi}(s_t,a_t)] $$
    • 证明如下:
      $$
      \begin{aligned}
      \mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty\gamma^t A_\pi(s_t,a_t)] &=\mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty\gamma^t(Q_\pi(s_t,a_t)-V_\pi (s_t))]\\
      &=\mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty\gamma^t(r(s_t, a_t)+\gamma V_\pi (s_{t+1})-V_\pi (s_t))]\\
      &=\mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty\gamma^{t+1} V_\pi (s_{t+1})-\sum\limits_{t=0}^\infty\gamma^{t}V_\pi (s_t) + \sum\limits_{t=0}^\infty\gamma^t r(s_t, a_t)]\\
      &=\mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=1}^\infty\gamma^{t} V_\pi (s_{t})-\sum\limits_{t=0}^\infty\gamma^{t}V_\pi (s_t) + \sum\limits_{t=0}^\infty\gamma^t r(s_t, a_t)]\\
      &=\mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[-V_\pi(s_0) + \sum\limits_{t=0}^\infty\gamma^t r(s_t, a_t)] \quad \quad \text{注:这一步是将}\sum\limits_{t=0}^\infty\gamma^{t}V_\pi (s_t) \text{拆开得到的}\\
      &=-\mathbb{E}_{s_0}[V_\pi(s_0)] + \mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty\gamma^t r(s_t, a_t)]\\
      &=-\eta(\pi) + \eta(\tilde{\pi})
      \end{aligned}
      $$
  • 显然,如果我们能找到一个策略 \(\tilde{\pi}\) 使得 \(\mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty\gamma^t A_\pi(s_t,a_t)] \ge 0\) 成立,即可确保策略性能(目标函数)是单调递增的
    • 但是,直接求解上式是非常困难的,因为策略 \(\tilde{\pi}\) 是未知的,无法用这个策略收集数据,下面我们先对这个形式进行变形,再通过其他方法近似求解

策略提升的变形

  • 变形如下:
    $$
    \begin{aligned}
    \eta({\tilde{\pi}}) - \eta({\pi}) &= \mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty\gamma^t A_\pi(s_t,a_t)] \\
    &= \sum\limits_s\rho_{\tilde{\pi}}(s)\sum\limits_a\tilde{\pi}(a|s)A_\pi(s,a)
    \end{aligned}
    $$
  • 其中有
    $$ \rho_\pi(s) = P(s_0=s) + \gamma P(s_1=s) + \gamma^2 P(s_2=s) + \ldots $$
  • 证明如下:
    $$
    \begin{aligned}
    \eta(\tilde{\pi}) - \eta(\pi) &= \mathbb{E}_{s_0,a_0,\ldots\sim\tilde{\pi}}[\sum\limits_{t=0}^\infty \gamma^t A_{\pi}(s_t,a_t)]\\
    &=\sum\limits_{t=0}^\infty\sum\limits_sP(s_t=s|\tilde{\pi})\sum\limits_a\tilde{\pi}(a|s)\gamma^tA_\pi(s,a)\\
    &=\sum\limits_s\sum\limits_{t=0}^\infty\gamma^tP(s_t=s|\tilde{\pi})\sum\limits_a\tilde{\pi}(a|s)A_\pi(s,a)\\
    &=\sum\limits_s\rho_{\tilde{\pi}}(s)\sum\limits_a\tilde{\pi}(a|s)A_{\pi}(s,a)
    \end{aligned}
    $$
  • 对于 \(\sum\limits_s\rho_{\tilde{\pi}}(s)\sum\limits_a\tilde{\pi}(a|s)A_\pi(s,a)\) 来说,我们仍然难以求解,因为策略 \(\tilde{\pi}\) 是未知的,我们无法用这个策略收集数据,所以我们使用旧的策略 \(\pi\) 来替换新策略 \(\tilde{\pi}\) 收集数据
  • 对于状态部分,当新旧策略特别接近时,他们的状态访问分布会比较接近,我们可以利用MM(Majorization-Minimization)方法构造近似目标函数,可以证明,直接优化目标函数即可优化最优:
    $$
    \begin{aligned}
    \eta(\tilde{\pi}) - \eta(\pi) &= \sum\limits_s\rho_{\tilde{\pi}}(s)\sum\limits_a\tilde{\pi}(a|s)A_{\pi}(s,a) \\
    &\approx \sum\limits_s\rho_{\pi}(s)\sum\limits_a\tilde{\pi}(a|s) A_{\pi}(s,a) - \frac{4\epsilon \gamma}{(1-\gamma)^2} \cdot D_{\text{KL}}^\max\left(\pi(\cdot|s)|| \tilde{\pi}(\cdot|s)\right)
    \end{aligned}
    $$
    • 其中的一些字符含义见下面的描述:在严格证明下,经过一系列推导后,我们可以得到 最终优化问题 是:
      $$ \theta = \mathop{\arg\max}_{\theta}\left[ \sum\limits_s\rho_{\pi_{\theta_{\text{old}}}}(s)\sum\limits_a\pi_\theta(a|s) A_{\pi_{\theta_{\text{old}}}}(s,a) - \frac{4\epsilon \gamma}{(1-\gamma)^2} \cdot D_{\text{KL}}^\max\left(\pi_{\theta_{\text{old}}}(\cdot|s)|| \pi_\theta(\cdot|s)\right)\right] $$
      • 其中:
        $$
        \begin{aligned}
        \epsilon &= \max_{s,a} A_\pi(s,a) \quad \text{— s,a是所有可行状态动作,不属于具体分布}\\
        D_{\text{KL}}^\max(\pi_{\theta_{\text{old}}}(\cdot|s)|| \pi_\theta(\cdot|s)) &= \max_s D_{\text{KL}}(\pi_{\theta_{\text{old}}}(\cdot|s)|| \pi_\theta(\cdot|s)) \quad \text{— s是所有可行状态}
        \end{aligned}
        $$
      • 对应求解伪代码
    • MM方法是一种迭代优化算法,其核心思想是在每一步迭代中构造一个目标函数的下界(或上界),这个下界函数被称为“代理函数”。在每一步迭代中,不是直接优化原始的目标函数,而是优化这个更容易处理的代理函数。通过确保每次迭代都能增加(或减少)目标函数值,最终达到优化目标的目的
    • 可以通过严格的MM方法数学证明,保证这种状态分布的近似替换是正确的,即提升替换后的目标函数可以提升原始目标函数。在一些书籍或者博客中,这里可以严格证明,使用旧策略采样的状态分布后,新的目标函数是旧的目标函数的一个下界,且两者在就策略 \(\pi\) 处的值和梯度均相等(也就是说两者的一阶近似 \(f(x) \approx f(x_0) + f’(x_0)(x-x_0)\) 相同)(详细证明见:从TRPO到PPO(理论分析与数学证明)、如何看懂TRPO里所有的数学推导细节? - 小小何先生的回答 - 知乎、强化学习TRPO模型中,L_pi(.)可逼近rho(.)的证明何解?)。这个证明较为复杂,有时间可以详细看看
    • 以上是最优形式,求解比较困难,所以,可以将上面式子的约束进行放松,用KL散度来保证新旧策略之间的差异不会太大即可,之后的TRPO和PPO都是这样做的,接下来的推导(除了重要性采样以外)则都是最优形式的近似
  • 基于KL散度限制新旧策略的距离后我们得到如下的目标
    $$
    \begin{aligned}
    \eta(\tilde{\pi}) - \eta(\pi) &= \sum\limits_s\rho_{\tilde{\pi}}(s)\sum\limits_a\tilde{\pi}(a|s)A_{\pi}(s,a) \\
    &\approx \sum\limits_s\rho_{\pi}(s)\sum\limits_a\tilde{\pi}(a|s) A_{\pi}(s,a) \\
    \text{s.t.} \quad &\mathbb{E}_{s \sim \rho_{\pi}(s)} \left[D_{\text{KL}}(\pi, \tilde{\pi})\right] \le \delta
    \end{aligned}
    $$
  • 进一步地对于动作部分,可以用重要性采样来恢复动作分布,两步总结如下(以下 \(\approx\) 成立的约束是新旧策略之间的KL散度约束),此外,由于 \(\eta(\tilde{\pi})\) 的最大化本身与 \(\eta(\pi)\) 并不直接相关,所以接下来我们只需要关注他们的差值即可:
    $$
    \begin{aligned}
    \eta(\tilde{\pi}) - \eta(\pi) &= \sum\limits_s\rho_{\tilde{\pi}}(s)\sum\limits_a\tilde{\pi}(a|s)A_{\pi}(s,a) \\
    &\approx \sum\limits_s\rho_{\pi}(s)\sum\limits_a\tilde{\pi}(a|s) A_{\pi}(s,a) \quad \text{— 限定新旧策略KL散度后可以约等于}\\
    &= \sum\limits_s\rho_{\pi}(s)\sum\limits_a q(a|s)\left[\frac{\tilde{\pi}(a|s)}{q(a|s)} A_{\pi}(s,a)\right] \\
    &= \sum\limits_s\rho_{\pi}(s)\sum\limits_a\pi(a|s)\left[\frac{\tilde{\pi}(a|s)}{\pi(a|s)} A_{\pi}(s,a)\right]
    \end{aligned}
    $$
    • 实际上,从重要性采样的视角来看,动作分布可以是基于任意策略 \(q(a|s)\) 采样得到的,只是一般相近策略进行重要性采样样本效率更高,所以一般都使用旧策略 \(\pi(a|s)\) 【PS:重要性采样也需要策略分布相近的,当策略分布之间差距过大时,也不利于重要性采样,可能出现样本采样效率低下或者数据稀疏导致的评估不准确的现象】
  • 由于相对 \(\eta(\tilde{\pi})\) 来说, \(\eta(\pi)\) 是常数,所以有最大化 \(\eta(\tilde{\pi})\),等价于最大化 \(\sum\limits_s\rho_{\pi}(s)\sum\limits_a\pi(a|s)\left[\frac{\tilde{\pi}(a|s)}{\pi(a|s)} A_{\pi}(s,a)\right]\) 即可,考虑到需要保证策略采样到的状态分布不能差距太大,我们的目标可以描述为如下的形式:
    $$
    \begin{aligned}
    \max_{\theta_\text{new}} \quad \sum\limits_s\rho_{\pi_{\theta_\text{old}}}(s)&\sum\limits_a\pi_{\theta_\text{old}}(a|s)\left[\frac{\pi_{\theta_\text{new}}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] \\
    \text{s.t. } \quad \quad &\mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}} \left[D_{\text{KL}}(\pi_{\theta_\text{old}}, \pi_{\theta_\text{new}})\right] \le \delta
    \end{aligned}
    $$
  • 一般也会写成期望的等价形式:
    $$
    \begin{aligned}
    \max_{\theta_\text{new}} \quad &\mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}(s), a \sim \pi_{\theta_\text{old}}(a|s)}\left[\frac{\pi_{\theta_\text{new}}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] \\
    &\text{s.t. } \quad \quad \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}(s)} \left[D_{\text{KL}}(\pi_{\theta_\text{old}}, \pi_{\theta_\text{new}})\right] \le \delta
    \end{aligned}
    $$
  • 或者进一步简写成:
    $$
    \begin{aligned}
    \max_{\theta_\text{new}} \quad &\mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\left[\frac{\pi_{\theta_\text{new}}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] \\
    &\text{s.t. } \quad \quad \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}} \left[D_{\text{KL}}(\pi_{\theta_\text{old}}, \pi_{\theta_\text{new}})\right] \le \delta
    \end{aligned}
    $$
    • 目标是原始目标等价的期望形式
    • 约束则考虑了计算KL散度时在旧策略采样的状态分布上进行验证(个人理解:这里策略之间的KL散度需要指定状态或状态分布才有意义,实际上该状态分布应该是当前策略对应的状态分布,详细展开写应该是 \(\mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}} \left[D_{\text{KL}}(\pi_{\theta_\text{old}}(\cdot|s), \pi_{\theta_\text{new}}(\cdot|s))\right]\),使用状态 \(s \sim \rho_{\pi_{\theta_\text{old}}}\) 或者 \(s \sim \rho_{\pi_{\theta_\text{new}}}\) 都可以,因为两者很接近)
  • 至此,目标函数中采样策略(包括状态和动作)变成了之前的旧策略,总结一下有:
    • 状态分布替换旧策略是基于新旧策略的差异不大来近似得到的,这个改动是MM(Majorization-Minimization)方法的思想,构造一个可以严格通过MM方法证明的近似目标函数 \(\sum\limits_s\rho_{\pi_{\theta_{\text{old}}}}(s)\sum\limits_a\pi_\theta(a|s) A_{\pi_{\theta_{\text{old}}}}(s,a) - \frac{4\epsilon \gamma}{(1-\gamma)^2} \cdot D_{\text{KL}}^\max\left(\pi_{\theta_{\text{old}}}(\cdot|s)|| \pi_\theta(\cdot|s)\right)\),这个目标函数的优化没有信赖域的概念,所以不是Trust Region方法
    • 在构造近似目标函数后,进一步简化目标函数的等价形式为KL散度约束下的更简洁形式,此时算是Trust Region方法
    • 动作分布替换旧策略是基于重要性采样实现的

TRPO简单理解

TRPO名字的由来

  • TRPO(Trust Region Policy Optimization)的名字来源于其核心方法——信任域(Trust Region)优化
  • TRPO同时包含了Trust Region算法和MM(Majorization-Minimization)算法的思想:
    • MM算法:推导过程中,在对策略提升部分进行转换时,使用的是MM算法的思想,构造了一个近似目标函数,同时证明了该近似目标函数与原始目标函数的关系(两者的梯度和值在当前策略处相等,且近似目标函数处处小于等于原始目标函数);
    • Trust Region算法:TRPO方法在每次迭代需要在KL散度约束内做更新优化,并且构造了一个KL散度约束的优化问题来近似求解,属于Trust Region方法的思想;
  • 补充问题:MM算法、Trust Region算法、近端梯度下降算法,这三种方法的区别和关系是什么?
    • MM算法 vs Trust Region算法:
      • 相同点:两者都是迭代优化方法,每次迭代都通过解决一个较简单的优化问题来逼近原始问题的解
      • 异同点:
        • 构造方式: MM算法通过构造一个上界函数来近似目标函数,而Trust Region算法通过在一个信赖域内构造一个近似模型来优化目标函数
        • 信赖域: Trust Region算法明确使用信赖域来限制每次迭代的步长,而MM算法没有这种信赖域的概念
        • 适用范围: MM算法更适合处理凸优化问题,而Trust Region算法在处理非凸优化问题和大规模优化问题时表现更优
    • 近端梯度下降:近端梯度下降方法(Proximal Gradient Descent, PGD)是一种用于优化非光滑(nonsmooth)和复合目标函数的优化算法。它结合了梯度下降法和近端算子(proximal operator),可以有效处理带有非光滑正则化项的优化问题。该方法PPO和TRPO都没有用到

TRPO解法思路

  • 近似求解上述式子,用一阶梯度近似目标,用二阶梯度近似约束,从而得到一个关于参数最优化问题
  • 基于共轭梯度法可以求解该问题

GAE

  • GAE(Generalized Advantage Estimation,广义优势估计)是一种用于估计策略梯度算法中优势函数的方法。它旨在解决标准优势函数估计方法的高方差问题,通过引入一个可调参数来平衡偏差与方差之间的关系
  • 详情可参考RL——强化学习中的方差与偏差

PPO简单理解

PPO名字的由来

  • PPO(Proximal Policy Optimization)名字中的“Proximal”是指“近端”约束,表示确保新策略不会偏离旧策略太远,从而保证策略更新的稳定性和有效性。跟近端梯度下降(Proximal Gradient Descent)方法没有直接关系。“Proximal”是“最接近的”或“邻近的”。在不同的上下文中,“proximal”可以有不同的具体含义,但其核心概念通常与“接近”或“邻近”有关
  • 由于PPO的优化目标推导过程与TRPO相同,都用到了近似目标函数,所以推导过程中也用到了MM的思想和Trust Region的思想,但在解决问题时仅用到了近端(“Proximal”)约束,即每次迭代策略不要更新太多(没有严格遵循Trust Region推导得到的结果),严格来说不属于Trust Region方法

PPO-Penalty

  • 又名PPO-惩罚
    \begin{aligned}
    \max_{\theta}&\ \ \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\left[\frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)}A_{\theta_{\text{old}}}(s,a) - \beta D_{KL}(\pi_{\theta_{\text{old}}}(\cdot|s), \pi_\theta(\cdot|s))\right]
    \end{aligned}

PPO-Clip

  • 又名PPO截断
    \begin{aligned}
    \max_\theta&\ \ \mathbb{E}_{s\sim \rho_{\theta_{\text{old}}},a\sim q(a|s)}\min\left(\frac{\pi_\theta(a|s)}{q(a|s)}A_{\theta_{\text{old}}}(s,a), clip\left(\frac{\pi_\theta(a|s)}{q(a|s)}, 1-\epsilon, 1+\epsilon\right)A_{\theta_{\text{old}}}(a|s)\right)
    \end{aligned}
  • 理论上,以上采样分布可以是任意分布,实际上使用原始策略效果更好(样本利用率也更高)
    \begin{aligned}
    \max_\theta&\ \ \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\min\left(\frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)}A_{\theta_{\text{old}}}(s,a), clip\left(\frac{\pi_\theta(a|s)}{\pi_{\theta_{\text{old}}}(a|s)}, 1-\epsilon, 1+\epsilon\right)A_{\theta_{\text{old}}}(a|s)\right)
    \end{aligned}

附录:TRPO 策略提升的理解

  • 参考链接:【前沿追踪】从两策略到三策略:行为策略和参考策略不一致下的 TRPO 扩展 - 东水长的文章 - 知乎
  • 根据性能差分引理(Performance Difference Lemma)
    • 对任意给定的策略 \(\pi\) 和 \(\mu\),有
      $$ \mathcal{J}(\pi_\theta) - \mathcal{J}(\mu) = \frac{1}{1 - \gamma} \mathbb{E}_{s \sim d_{\pi_\theta}, a \sim \pi_\theta} \left[ A_\mu(s, a) \right] $$
  • 理解:
    • 本来按照 \(\mu\) 来决策的 \(A_\mu(s, a)\) 期望值为 0(证明见下文)
    • 此时将 \(\mu\) 的 的 \(A_\mu(s, a)\) 保留,但将状态和动作分布换成 \(\pi\) ,即表示策略 \(\pi\) 相对策略 \(\mu\) 的策略提升,这个公式的数学证明见前文

证明:同策略的状态和动作分布下,优势函数为 0

  • 核心结论:在策略 \(\pi\) 的状态分布 \(d^\pi(s)\) 和动作分布 \(\pi(a|s)\) 下,优势函数 \(A^\pi(s,a)\) 的期望等于0
    • 即需要证明:在策略 \(\pi\) 的平稳状态分布 \(d^\pi(s)\) 和动作分布 \(\pi(a|s)\) 下,优势函数的期望严格为 0:
      $$
      \mathbb{E}_{s \sim d^\pi(s), a \sim \pi(a|s)} \left[ A^\pi(s,a) \right] = 0
      $$
  • 优势函数定义:优势函数衡量“在状态 \(s\) 下选择动作 \(a\) 相比策略 \(\pi\) 的平均动作价值更优多少”,定义为:
    $$
    A^\pi(s,a) = Q^\pi(s,a) - V^\pi(s)
    $$
    • 其中:
      • \(Q^\pi(s,a)\):策略 \(\pi\) 下“状态 \(s\) 执行动作 \(a\)”的动作价值函数;
      • \(V^\pi(s)\):策略 \(\pi\) 下“状态 \(s\)”的状态价值函数,且满足 \(V^\pi(s) = \mathbb{E}_{a \sim \pi(a|s)} \left[ Q^\pi(s,a) \right]\)(状态价值是动作价值在策略动作分布下的期望)
  • 期望计算(策略 \(\pi\) 下的全局期望):优势函数的期望需考虑状态分布和动作分布的联合期望,即:
    $$
    \mathbb{E}_{s \sim d^\pi(s), a \sim \pi(a|s)} \left[ A^\pi(s,a) \right]
    $$
    • 其中 \(d^\pi(s)\) 是策略 \(\pi\) 诱导的平稳状态分布(长期执行策略 \(\pi\) 后,各状态出现的概率分布)
  • 化简过程:将优势函数定义代入期望公式,利用期望的线性性质拆分:
    $$
    \begin{align}
    \mathbb{E}_{s \sim d^\pi, a \sim \pi(a|s)} \left[ A^\pi(s,a) \right] &= \mathbb{E}_{s \sim d^\pi} \left[ \mathbb{E}_{a \sim \pi(a|s)} \left[ Q^\pi(s,a) - V^\pi(s) \right] \right] \\
    &= \mathbb{E}_{s \sim d^\pi} \left[ \mathbb{E}_{a \sim \pi(a|s)} \left[ Q^\pi(s,a) \right] - \mathbb{E}_{a \sim \pi(a|s)} \left[ V^\pi(s) \right] \right]
    \end{align}
    $$
    • 根据 \(V^\pi(s)\) 的定义
      • 第一项 \(\mathbb{E}_{a \sim \pi(a|s)} \left[ Q^\pi(s,a) \right] = V^\pi(s)\);
      • 第二项中 \(V^\pi(s)\) 与动作 \(a\) 无关,故 \(\mathbb{E}_{a \sim \pi(a|s)} \left[ V^\pi(s) \right] = V^\pi(s)\)
  • 因此:
    $$
    \mathbb{E}_{s \sim d^\pi} \left[ V^\pi(s) - V^\pi(s) \right] = \mathbb{E}_{s \sim d^\pi} \left[ 0 \right] = 0
    $$
特别说明
  • 局部期望(固定状态 \(s\)):\(\mathbb{E}_{a \sim \pi(a|s)} \left[ A^\pi(s,a) \right] = 0\)(对任意状态 \(s\) 成立);
  • 全局期望(考虑状态分布):由于每个状态的局部期望均为 0,全局期望自然为 0
  • 策略 \(\pi\) 需存在平稳状态分布 \(d^\pi(s)\)(如有限MDP、策略 \(\pi\) 是不可约且非周期的);
  • 期望基于策略 \(\pi\) 自身的状态分布和动作分布(若基于其他策略 \(\mu\) 的分布,期望不一定为0)

RL——TRPO

  • 参考链接:
    • TRPO 原始论文:(TRPO)Trust Region Policy Optimization, ICML 2015, UC Berkeley

TRPO

TRPO 目标

  • 目标定义:
    $$
    \begin{aligned}
    \max_{\theta_\text{new}} \quad &\mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\left[\frac{\pi_{\theta_\text{new}}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] \\
    &\text{s.t. } \quad \quad \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}} \left[D_{\text{KL}}(\pi_{\theta_\text{old}}, \pi_{\theta_\text{new}})\right] \le \delta
    \end{aligned}
    $$
  • TRPO 的目标详细推导见RL——TRPO-PPO-目标函数基础推导

TRPO 推导

  • TRPO 的目标仍然很难直接求解,所以TRPO考虑对目标做进一步的近似(近似形式的具体证明见附录)
    $$
    \begin{aligned}
    \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\left[\frac{\pi_{\theta}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] &\approx g^T(\theta-\theta_{old}) \\
    \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}} \left[D_{\text{KL}}(\pi_{\theta_\text{old}}, \pi_{\theta})\right] &\approx \frac{1}{2}(\theta-\theta_{old})^TH(\theta-\theta_{old})
    \end{aligned}
    $$
    • \(g\) 为一阶梯度:
      $$ g = \nabla_{\theta}\mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\left[\frac{\pi_{\theta}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] \vert_{\theta = \theta_{\text{old}}}$$
    • \(H\) 为原始KL散度在 \(\theta = \theta_{\text{old}} \) 处的海森矩阵(Hessian Matrix,又译作黑塞矩阵),(PS:KL散度的海森矩阵就是Fisher矩阵,一般是正定的):
      $$ H = H[\mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}} \left[D_{\text{KL}}(\pi_{\theta_\text{old}}, \pi_{\theta})\right]] $$
      • 其中
        $$ H[f(x,y)] = \begin{bmatrix}
        \frac{\partial^2f}{\partial x^2} & \frac{\partial^2f}{\partial x\partial y} \\
        \frac{\partial^2f}{\partial x \partial y} & \frac{\partial^2f}{\partial y^2}
        \end{bmatrix}
        $$
      • 在当前场景中 \(H_{ij}\) 为
        $$ H_{ij} = \frac{\partial}{\partial \theta_i}\frac{\partial}{\partial \theta_j} \mathbb{E}_{s \sim \rho_{\pi_{\theta_{\text{old}}}}} \left[D_{\text{KL}}(\pi_{\theta_{\text{old}}}, \pi_{\theta})\right] \vert_{\theta = \theta_{\text{old}}} $$
  • 于是得到进一步优化的目标
    $$
    \begin{aligned}
    \theta_{k+1} = \mathop{\arg\max}_\theta &g^T(\theta-\theta_k)\\
    \text{s.t. } \quad \frac{1}{2}(\theta-\theta_k)^T&H(\theta-\theta_k)≤\delta
    \end{aligned}
    $$
  • 可根据拉格朗日乘子法求解以上问题得到如下解(详细推导见附录):
    $$ \theta_{k+1}=\theta_k+\sqrt{\frac{2\delta}{g^TH^{-1}g}}H^{-1}g $$
  • 现实场景中,计算和存储Hessian矩阵的逆矩阵 \(H^{-1}\) 会耗费大量时间,所以TRPO通过共轭梯度法来避免直接求解 \(H^{-1}\),核心思想就是直接计算 \(x = H^{-1}g\) 作为参数的更新方向
  • 设定 \(x = H^{-1}g\),则原始参数更新公式可变为:
    $$ \theta_{k+1}=\theta_k+\sqrt{\frac{2\delta}{x^{T}Hx}}x $$
  • 求解 \(x = H^{-1}g\) 则可转换为求方程 \(Hx = g\) 的解,方程 \(Hx = g\) 的解可通过共轭梯度法(Conjugate Gradient Method,)来求解,方法参见ML——共轭梯度法和最速下降法
    • 其中,共轭梯度法伪代码如下

TRPO更新步长

  • 当前TRPO求解方案采用了泰勒展开的1阶近似和2阶近似,不是精准求解,新参数不一定能满足KL散度约束限制,所以在更新时,我们可以再进行一次步长搜索,使得更新后的新参数满足KL散度限制,且能够提升目标函数
  • 线性搜索的具体规则,在 \((0,1)\) 区间内抽取K个点 \(\{\alpha^i\}_{i=1}^K\)

TRPO训练伪代码

  • TRPO伪代码:

附录:约束问题的泰勒展开近似推导证明

  • 近似结果
    $$
    \begin{aligned}
    \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\left[\frac{\pi_{\theta}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] &\approx g^T(\theta-\theta_{old}) \\
    \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}} \left[D_{\text{KL}}(\pi_{\theta_\text{old}}, \pi_{\theta})\right] &\approx \frac{1}{2}(\theta-\theta_{old})^TH(\theta-\theta_{old})
    \end{aligned}
    $$
  • \(g\) 为一阶梯度:
    $$ g = \nabla_{\theta}\mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\left[\frac{\pi_{\theta}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] \vert_{\theta = \theta_{\text{old}}}$$
  • \(H\) 为原始KL散度在 \(\theta = \theta_{\text{old}} \) 处的海森矩阵:
    $$
    H_{ij} = \frac{\partial}{\partial \theta_i}\frac{\partial}{\partial \theta_j} \mathbb{E}_{s \sim \rho_{\pi_{\theta_{\text{old}}}}} \left[D_{\text{KL}}(\pi_{\theta_{\text{old}}}, \pi_{\theta})\right] \vert_{\theta = \theta_{\text{old}}}
    $$

泰勒展开回顾

  • 泰勒展开是一种在数学分析中用于近似函数的方法,特别是当直接计算函数值较为困难时,基本思想是将一个函数在一个点附近用一个多项式来近似表示
  • 对于一个在点 \(a\) 处具有 \(n+1\) 阶导数的函数 \(f(x)\),其在 \(a\) 点的泰勒展开可以表示为:
    $$ f(x) = f(a) + \frac{f’(a)}{1!}(x-a) + \frac{f’’(a)}{2!}(x-a)^2 + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^n + R_n(x) $$
    • 其中, \(R_n(x)\) 是余项,表示的是泰勒多项式与实际函数之间的误差,常表示为:
      $$ R_n(x) = o((x-a)^n) $$
      • 这里的 \(o\) 表示当 \(x\) 趋向于 \(a\) 时, \(R_n(x)\) 相对于 \((x-a)^n\) 是高阶无穷小

泰勒展开在很多领域都有广泛的应用,例如物理学中的近似计算、工程学中的信号处理等。通过选择合适的 (a) 值和 (n) 阶次,可以得到不同精度的近似结果。特别地,当 (a=0) 时,这种特殊的泰勒展开被称为麦克劳林展开

目标的泰勒一阶近似推导

  • 令 \(f(\theta)\) 为最优化目标,则:
    $$ f(\theta) = \mathbb{E}_{s \sim \rho_{\pi_{\theta_\text{old}}}, a \sim \pi_{\theta_\text{old}}}\left[\frac{\pi_{\theta}(a|s)}{\pi_{\theta_\text{old}}(a|s)} A_{\pi_{\theta_\text{old}}}(s,a)\right] $$
  • 此时对 \(f(\theta)\) 在 \(\theta = \theta_{\text{old}}\) 做泰勒展开有
    $$ f(\theta) = f(\theta_{\text{old}}) + \nabla_\theta f(\theta)\vert_{\theta=\theta_{\text{old}}}(\theta - \theta_{\text{old}}) + o(\theta^2)$$
  • 由于 \(f(\theta_{\text{old}})\) 与 \(\theta\) 无关,所以最大化 \(f(\theta)\) 等价于最大化 \(\nabla_\theta f(\theta)\vert_{\theta=\theta_{\text{old}}}(\theta - \theta_{\text{old}}) = g^T(\theta-\theta_{old})\)

约束的泰勒二阶近似推导

  • 将KL散度在 \(\theta = \theta_{\text{old}}\) 处二阶展开有
    $$
    \begin{align}
    f(\theta) &= D_{\text{KL}}(\pi_{\theta_{\text{old}}}, \pi_\theta) \\
    &= D_{\text{KL}}(\pi_{\theta_{\text{old}}}, \pi_{\theta_{\text{old}}}) + \nabla_\theta D_{\text{KL}}(\pi_{\theta_{\text{old}}}, \pi_\theta) \vert_{\theta=\theta_{\text{old}}} (\theta - \theta_{\text{old}}) + \frac{1}{2}(\theta - \theta_{\text{old}})^TH(\theta - \theta_{\text{old}}) + o(\theta^3)
    \end{align}
    $$
    • 显然,第一项 \( D_{\text{KL}}(\pi_{\theta_{\text{old}}}, \pi_{\theta_{\text{old}}})=0 \)
    • 可以证明,第二项为0,证明如下:
      $$
      \begin{align}
      \nabla_\theta D_{\text{KL}}(\pi_{\theta_{\text{old}}}, \pi_\theta) \vert_{\theta=\theta_{\text{old}}} &= \nabla_\theta \int_a \pi_{\theta_{\text{old}}}(a|s) \log \frac{\pi_{\theta_{\text{old}}}(a|s)}{\pi_{\theta(a|s)}} da\vert_{\theta = \theta_{\text{old}}} \\
      &= \nabla_\theta \int \pi_{\theta_{\text{old}}}(a|s) \Big(\log \pi_{\theta_{\text{old}}}(a|s) - \log\pi_{\theta}(a|s)\Big) da\vert_{\theta = \theta_{\text{old}}} \\
      &= - \int \pi_{\theta_{\text{old}}}(a|s) \nabla_\theta \log \pi_{\theta(a|s)} \vert_{\theta = \theta_{\text{old}}} da \quad \text{积分求导互换} \\
      &= - \int \pi_{\theta_{\text{old}}}(a|s) \frac{\nabla_\theta \pi_{\theta}(a|s)}{\pi_{\theta}(a|s)}\vert_{\theta = \theta_{\text{old}}} da \quad \text{对数概率技巧} \\
      &= - \int \pi_{\theta_{\text{old}}}(a|s) \frac{\nabla_\theta \pi_{\theta}(a|s)\vert_{\theta = \theta_{\text{old}}}}{\pi_{\theta_\text{old}}(a|s)} da \\
      &= - \nabla_\theta \int \pi_{\theta}(a|s) da\vert_{\theta = \theta_{\text{old}}} \quad \text{积分求导再次互换} \\
      &= - \nabla_\theta 1 \\
      &= 0
      \end{align}
      $$
    • 证毕

附录:最优化问题求解的详细推导证明

  • 给定最优化问题
    $$
    \begin{aligned}
    \theta_{k+1} = \mathop{\arg\max}_\theta &g^T(\theta-\theta_k)\\
    \text{s.t. } \quad \frac{1}{2}(\theta-\theta_k)^T&H(\theta-\theta_k)≤\delta
    \end{aligned}
    $$

  • 对于上述问题,Karush-Kuhn-Tucker (KKT) 条件可以表述为以下几点:

    • 原始可行性 :解必须满足原始约束
      $$
      \frac{1}{2}(\theta-\theta_k)^TH(\theta-\theta_k) \leq \delta.
      $$
    • 对偶可行性 :拉格朗日乘子(或对偶变量)必须非负
      $$
      \lambda \geq 0.
      $$
    • 互补松弛性 :拉格朗日乘子与对应的不等式约束之间的乘积必须为零
      $$
      \lambda \left( \frac{1}{2}(\theta-\theta_k)^TH(\theta-\theta_k) - \delta \right) = 0.
      $$
    • 拉格朗日函数的梯度为零 :考虑拉格朗日函数 \(L(\theta, \lambda) = - g^T(\theta-\theta_k) + \lambda \left( \frac{1}{2}(\theta-\theta_k)^TH(\theta-\theta_k) - \delta \right)\),其对 \(\theta\) 的偏导数应等于零
      $$
      \nabla_\theta L = - g + \lambda H (\theta - \theta_k) = 0.
      $$
      • 注意:这里是因为目标是max,需要改成min后才能用 \(+\lambda (\cdot)\) 的操作
  • 这里, \(H\) 是一个对称矩阵(Hessian矩阵是对称的,因为 \(\frac{\partial^2 f}{\partial x \partial y} = \frac{\partial^2 f}{\partial y \partial x}\) ), \(\lambda\) 是与约束相关的拉格朗日乘子, \(\delta\) 是给定的常数

  • 根据KKT条件中的互补松弛性条件,当 \(\lambda > 0\) 时,这意味着约束 \(\frac{1}{2}(\theta-\theta_k)^TH(\theta-\theta_k) \leq \delta\) 是紧的,即:
    $$
    \frac{1}{2}(\theta-\theta_k)^TH(\theta-\theta_k) = \delta.
    $$

    • 注意,这里无法直接求解这个问题,因为这个解问题的解不是唯一的,比如一维情况就是二次方程,解就有正负两个值,实际上,这里的解是一个以 \(\theta_k\) 为球心的球体(椭球体)构成的集合(一共有 \(2^n\) 个解?其中n是变量的维度)
  • 因此,当 \(\lambda > 0\) 时, \(\theta\) 必须位于约束的边界上。为了确定 \(\theta\) 的具体值,我们需要同时考虑其他KKT条件,尤其是拉格朗日函数的梯度为零的条件:
    $$
    - g + \lambda H (\theta - \theta_k) = 0
    $$

  • 从这个方程中,我们可以解出 \(\theta\):
    $$
    \theta - \theta_k = \frac{1}{\lambda} H^{-1} g
    $$

  • 将 \(\theta\) 代入互补松弛条件中可得:
    $$
    \frac{1}{2} \left( \frac{1}{\lambda} H^{-1} g \right)^T H \left( \frac{1}{\lambda} H^{-1} g \right) = \delta
    $$

  • 简化后得到:
    $$
    \begin{align}
    \frac{1}{2} \left( \frac{1}{\lambda^2} g^T H^{-1} H H^{-1} g \right) &= \delta \\
    \frac{1}{2} \left( \frac{1}{\lambda^2} g^T H^{-1} g \right) &= \delta \\
    \frac{1}{2} \frac{g^T H^{-1} g}{\lambda^2} &= \delta \\
    \frac{g^T H^{-1} g}{2\delta} &= \lambda^2 \\
    \end{align}
    $$

  • 最终可求得:
    $$
    \lambda = \sqrt{\frac{g^T H^{-1} g}{2\delta}}.
    $$

  • 现在我们已经得到了 \(\lambda\) 的表达式,可以将其代回 \(\theta\) 的表达式中:
    $$
    \begin{align}
    \theta - \theta_k &= \frac{1}{\sqrt{\frac{g^T H^{-1} g}{2\delta}}} H^{-1} g = \sqrt{\frac{2\delta}{g^T H^{-1} g}} H^{-1} g
    \end{align}
    $$

  • 最终, \(\theta\) 的值为:
    $$
    \theta_{k+1} = \theta_k + \sqrt{\frac{2\delta}{g^T H^{-1} g}} H^{-1} g.
    $$

RL——Trajectory-Transformer

Decision-Transformer,简称DT,使用序列预估的思想去实现决策问题

  • 参考链接:
    • 原始论文:Offline Reinforcement Learning as One Big Sequence Modeling Problem, UC Berkeley, NuerIPS 2021
    • 源码:github.com/JannerM/trajectory-transformer

整体思路

  • 传统强化学习:马尔可夫性,建模每个时间步
  • 论文的核心思路:将离线强化学习问题作为一个通用序列建模问题 ,其目标是生成一系列动作,从而产生一系列高奖励
  • 建模和规划:使用Transformer架构建模轨迹分布,并将束搜索(Beam Search)重新用作规划算法
  • RL问题简化:将RL视为序列建模问题简化了一系列设计决策,使论文能够摒弃离线RL算法中常见的许多组件
  • 是按证明:这种方法可以与现有的 Model-free 算法结合,在稀疏奖励、 long-horizon 任务中产生最先进的规划器

整体讨论

  • 传统强化学习:依赖于将一个 long-horizon 问题分解为更小、更局部的子问题
  • 论文:将强化学习问题视为为一个序列生成问题,其目标是生成一系列动作,当在环境中执行时,会产生一系列高奖励
  • 基于序列模型建模强化学习问题可以等价解决诸多问题:
    • Actor-Critic 算法需要建模两个模型
    • Model-based 算法需要预测 Dynamics 模型
    • 离线RL方法通常需要估计行为策略
  • 论文将该模型称为 Trajectory Transformer,并在离线环境中进行评估,以便能够充分利用大量先验交互数据。与传统的动力学模型相比, Trajectory Transformer 在 long-horizon 预测方面表现出显著更高的可靠性(甚至在马尔可夫环境中也一样)
  • 与离线RL算法相比,论文的方法可视为Model-based RL和策略约束 ,但论文的方法无需显式引入此类约束
  • 与论文的工作同时,Decision Transformer 也提出了一种以序列预测为核心的RL方法,侧重于奖励条件化,而非 Trajectory Transformer 采用的束搜索规划。这两篇文章的研究都进一步支持了高容量序列模型可直接应用于强化学习问题而无需传统RL算法组件的可能性

RL和基于序列建模的控制(Control as Sequence Modeling)

  • 这一节描述序列模型 Trajectory Transformer 的训练过程,并讨论如何将其用于控制
  • 论文的模型实现和搜索策略与自然语言处理中的常见方法几乎相同,论文的重点在关注如何表示轨迹数据(可能包含连续状态和动作)以供离散标记架构处理

Trajectory Transformer

  • 论文方法的核心是将轨迹数据视为非结构化序列 ,由Transformer架构建模,具体来说,轨迹 \(\boldsymbol{\tau}\) 由 \(T\) 个状态、动作和标量奖励组成:
    $$
    \boldsymbol{\tau} = \big(\mathbf{s}_1, \mathbf{a}_1, r_1, \mathbf{s}_2, \mathbf{a}_2, r_2, \ldots, \mathbf{s}_T, \mathbf{a}_T, r_T\big).
    $$
  • 对于连续状态和动作,论文独立离散化每个维度。假设状态为 \(N\) 维,动作为 \(M\) 维,则 \(\boldsymbol{\tau}\) 被转换为长度为 \(T(N+M+1)\) 的序列:
    $$
    \boldsymbol{\tau} = \big(\ldots, s^1_t, s^2_t, \ldots, s^N_t, a^1_t, a^2_t, \ldots, a^M_t, r_t, \ldots\big) \quad t=1,\ldots,T.
    $$
    • 下标 \(t\) 表示时间步,状态和动作的上标表示维度(例如,\(s^i_t\) 是时间步 \(t\) 的状态的第 \(i\) 维)
    • 理解:离散化后并不会做 one-hot 等处理,即每个维度都从连续值变成了离散值,维度没有增加也没有减少
  • 论文中,主要研究了两种简单的离散化方法:
    • 第一种:均匀离散化 :即固定宽度划分,假设每维词汇量为 \(V\),状态维度 \(i\) 的标记覆盖宽度为 \(\frac{(\max \mathbf{s}^i - \min \mathbf{s}^i)}{V}\) 的均匀间隔
    • 第二种:分位数离散化 :按照分位点划分,每个标记覆盖训练数据中每 \(V\) 个数据点中的一个
    • 均匀离散化的优势在于保留了原始连续空间中欧氏距离的信息 ,这可能比分位数离散化更能反映问题的结构,然而,数据中的异常值可能对离散化大小产生过大影响,导致许多标记对应零训练点。分位数离散化则确保所有标记在数据中均有体现。论文将在第4.2节对两者进行实证比较
  • Trajectory Transformer的实现 :论文的模型是一个与 GPT 架构相似的 Transformer Decoder 部分,包含四层和四个自注意力头,记 Trajectory Transformer 的参数为 \(\theta\),条件概率为 \(P_\theta\),训练时最大化的目标函数为:
    $$
    \mathcal{L}(\tau) = \sum_{t=1}^T \left( \sum_{i=1}^N \log P_\theta \big(\mathbf{s}_t^i \mid \mathbf{s}_t^{ < i}, \boldsymbol{\tau}_{ < t}\big) + \sum_{j=1}^M \log P_\theta \big(a_t^j \mid \mathbf{a}_t^{ < j}, \mathbf{s}_t, \boldsymbol{\tau}_{ < t}\big) + \log P_\theta \big(r_t \mid \mathbf{a}_t, \mathbf{s}_t, \boldsymbol{\tau}_{ < t}\big) \right),
    $$
    • 其中,\(\boldsymbol{\tau}_{ < t}\) 表示从时间步 \(0\) 到 \(t-1\) 的轨迹,\(\mathbf{s}_t^{ < i}\) 表示时间步 \(t\) 状态的第 \(0\) 到 \(i-1\) 维,\(\mathbf{a}_t^{ < j}\) 同理。论文使用Adam优化器,学习率为 \(2.5 \times 10^{-4}\) 训练参数 \(\theta\)
    • 训练采用的是自回归(Auto Aggressive)训练目标
    • the standard teacher-forcing procedure 方法
基于束搜索的规划
  • 在训练完成后,如何将 Trajectory Transformer 的序列生成重新用于控制呢?
  • 论文重点关注三种场景:模仿学习、目标条件强化学习和离线强化学习 ,这三种场景所需的修改依次增加,但均基于下面自然语言处理中常用的序列模型解码方法:
    • 其中 \(\log P_\theta(\cdot \mid \mathbf{x})\),既定义单个序列的似然,也定义一组序列的似然:\(\log P_\theta(Y \mid x) = \sum_{\mathbf{y} \in Y} \log P_\theta(\mathbf{y} \mid \mathbf{x})\)
    • 其中 \(()\) 表示空序列
    • 其中 \(\circ\) 表示拼接
    • 每次保留概率最大的 B 个候选序列
    • 最终返回整个序列 \(\mathbf{y}\)
  • 模仿学习 :
    • 当目标是复现训练数据中的轨迹分布时,我们可以直接优化轨迹 \(\boldsymbol{\tau}\) 的概率。这种情况与序列建模的目标完全一致,因此我们可以直接使用算法1 ,只需将条件输入 \(\mathbf{x}\) 设为当前状态 \(\mathbf{s}_t\)(以及可选的先前历史 \(\boldsymbol{\tau}_{ < t}\))
    • 该过程的结果是一个标记化的轨迹 \(\boldsymbol{\tau}\),从当前状态 \(\mathbf{s}_t\) 开始,且在数据分布下具有高概率。如果执行序列中的第一个动作 \(\mathbf{a}_t\) 并重复束搜索,则得到一个滚动时域控制器。这种方法类似于基于 long-horizon 模型的模仿学习变体,其中优化整个轨迹以匹配参考行为,而不仅仅是即时状态条件下的动作。如果论文将预测序列长度设为动作维度,则论文的方法完全对应于最简单的自回归策略行为克隆
  • 目标条件强化学习 :
    • Transformer架构采用“因果”注意力掩码,确保预测仅依赖于序列中先前的标记,在轨迹预测中,这一选择体现的是物理因果性,禁止未来事件影响过去。然而,也可以通过未来状态预估现在,论文不仅可以基于已观测到的先前状态、动作和奖励进行条件采样,还可以基于任何作者希望发生的未来上下文进行条件采样。如果未来上下文是轨迹末尾的状态,论文解码的轨迹概率形式为:
      $$
      P_\theta(s_t^i \mid \mathbf{s}_t^{ < i}, \boldsymbol{\tau}_{ < t}, \mathbf{s}_T).
      $$
    • 为了实现该目标,只需对期望的最终状态 \(\mathbf{s}_T\) 进行条件采样。如果论文始终对序列施加最终目标状态的条件,可以保持左下三角注意力掩码不变,只需将输入轨迹置换为 \(\{\mathbf{s}_T, \mathbf{s}_1, \mathbf{s}_2, \ldots, \mathbf{s}_{T-1}\}\)。通过将目标状态置于序列开头,论文确保所有其他预测均可关注它,而无需修改标准注意力实现
    • ?这种条件化过程类似于先前使用监督学习训练目标条件策略的方法(Ghosh et al., 2021),也与 Model-free RL中的重标记技术相关(Andrychowicz et al., 2017)
  • 离线强化学习 :
    • 实现方式 :算法1描述的束搜索方法在搜索概率最大化的轨迹,将算法1中的对数概率替换为预测的奖励信号(即概率最大转换成奖励信号最大),可以使用相同的 Trajectory Transformer 和搜索策略来优化奖励最大化的行为
    • reward-to-go的引入 :使用束搜索作为奖励最大化方法可能导致短视行为。为解决这一问题,论文在训练轨迹的每个转移中增加reward-to-go :\(R_t = \sum_{t’=t}^T \gamma^{t’-t} r_{t’}\),将其离散添加到即时奖励 \(r_t\) 之后预测
      • 注:这里的 reward-to-go 在很多论文中也会叫做 return-to-go
    • reward-to-go的估计 :
      • 难点说明 :常规离线RL中 reward-to-go 估值 \(R_t\) 是行为策略\(\pi_\theta\)的函数 \(R_t^{\pi_\theta}\),要估计 Trajectory Transformer 策略的价值函数是困难的,而且直接学习行为策略的价值函数确实比学习最优策略的价值函数简单得多(因为可以直接使用蒙特卡罗估计,而无需依赖贝尔曼更新)
      • 论文实现 :在论文中,作者先使用了简单的估计方法(不考虑 Trajectory Transformer 策略),在第4.2节中,作者展示了简单的 reward-to-go 估值足以在许多环境中进行 Trajectory Transformer 规划,但在最具挑战性的设置(如稀疏奖励任务)中,改进的 reward-to-go 价值函数更有用(这里的改进价值函数是指学习 Trajectory Transformer 策略的 reward-to-go 价值函数)
    • 采样过程 :Trajectory Transformer 会做 planning 时会采样多次,比如束搜索的候选序列数为 B,每个样本的序列长度为 n_step 的场景,在每个候选序列的每一步采样时,会采样 \(N+M+1\) 个标记预测一次奖励和 reward-to-go,论文使用似然最大化(跟模仿学习和目标条件强化学习中的步骤一样)束搜索采样完整转移元组 \((\mathbf{s}_t, \mathbf{a}_t, r_t, R_t)\),然后筛选 截止到当前累积奖励+reward-to-go 最高的 B 个候选序列进行下一轮,直到采样 n_step 轮
      • 注:论文仅将累计奖励的估值作为启发式引导束搜索,因此论文的方法不要求估值像完全依赖估值选择动作的方法那样精确
      • 截止到当前累积奖励的理解 :假定做第 \(t’\) 步决策,束搜索的候选序列数为 B,每个样本的序列长度为 n_step=T,则从截止到当前累积奖励为: \(\sum_{t=t’}^{t’+T} r_t\),截止到当前累积奖励+reward-to-go 则为: \((\sum_{t=t’}^{t’+T}r_t) + R_{t’+T}\)。作者开源实现时,还会带上折扣因子(默认0.99),详情见开源项目的./trajectory/search/core.py文件中的 beam_plan 函数,函数详情见论文附录
  • 讨论一:论文中的一个讨论 :Trajectory Transformer 可以看做 Model-based方法? :Trajectory Transformer 通过序列建模的路径实现了一种看似相当简单的 Model-based 规划算法
    • 个人理解:因为序列模型相当于预估了 \(s_t,a_t \rightarrow r_t,s_{t+1}\),可以算是同时预估了预测状态转移概率 \(T_{\psi_T}(s_{t+1}|s_t,a_t)\) 和奖励函数 \(r_{\psi_r}(s_t,a_t)\),可以算是 Model-based方法),即采样候选动作序列,并选择预期奖励最大化的轨迹
  • 讨论二:关于 Trajectory Transformer 可以是否可以避免OOD问题的思考 :文章提到通过联合建模动作与状态并使用相同过程采样,我们可以防止模型访问分布外动作
    • 个人理解:不能做到不会输入未见过的动作吧?因为可能会遇到训练时未见过状态;但是整体来说,可以避免强化学习中的高估问题,因为训练时不会访问未见过的动作

Experiments

  • 论文的实验评估主要关注以下两点:
    • Trajectory Transformer 作为 long-horizon 预测器的准确性 :这里主要与标准动态模型参数化方法相比;
    • 序列建模工具(尤其是束搜索)作为控制算法的实用性 :在离线强化学习、模仿学习和目标达成(goal-reaching)任务中的应用

模型分析

  • 论文首先评估 Trajectory Transformer 作为策略条件预测模型的 long-horizon 预测能力
    • 一般来说:常规情况下,需要策略和单步轨迹(状态转移)预测模型 ,使用策略单步决策+单步状态转移模型进行滚动计算来预估给定策略对应的轨迹
    • Trajectory Transformer 不同于标准的马尔可夫方法,它无需访问策略即可进行预测——策略的输出与策略遇到的状态被联合建模
  • 轨迹预测可视化 :图2展示了论文的模型在训练数据(由已训练的策略收集)上生成的100时间步预测轨迹的可视化结果
    • 常规的 Model-based 方法应用于人形任务 :这些研究通常有意缩短预测时域以防止模型误差累积(Janner et al., 2019; Amos et al., 2021)
    • 论文选择的对照模型是 :PETS(Chua et al., 2018,一种MPC方法)的概率集成实现(PETS参考链接);论文调整了集成内的模型数量、层数和每层大小,但未能生成能准确预测超过几十步的模型
    • 如图所示,Trajectory Transformer 的 long-horizon 预测明显更准确 ,即使在100步预测后,其轨迹在视觉上仍与真实策略在环境中生成的轨迹无法区分。据论文所知,此前尚未有 Model-based RL算法能在类似维度的任务上展示如此精确且 long-horizon 的预测轨迹
    • 注:第三行效果是Feedforward方法是 feedforward Gaussian dynamics model from PETS,前两行分别为原始行为和 Trajectory Transformer 学到的行为
  • 误差累积 :图3定量展示了相同发现,论文评估了模型随预测时域增加的累积误差。标准预测模型通常在单步误差上表现优异,但 long-horizon 准确性较差,因此论文未在测试集上评估单步似然,而是从固定起点采样1000条轨迹,以估计每个模型预测的每时间步状态边缘分布。随后,论文报告参考策略在保留轨迹集上访问的状态在这些预测边缘下的似然。为评估离散化模型的似然,论文将每个区间视为其指定范围内的均匀分布;根据设计,模型在此范围外的概率为零
    • Markovian Transformer 是 Trajectory Transformer 的马尔可夫变体,表示对上下文进行截断的模型(其无法关注超过一个过去时间步):
      • 在完全可观测环境中 ,该模型的表现与 Trajectory Transformer 相似,表明架构差异和自回归状态离散化带来的表达能力提升对 Trajectory Transformer 的 long-horizon 准确性起主要作用(理解:这里说明 TT 的收益来源不是长链路的序列依赖,说明 TT 可以建模MDP环境)
      • 在部分可观测环境(图3右),其中每个状态的每个维度有50%概率被掩码,如预期所示,在这种设置下,long-horizon 条件化对模型准确性影响更大(理解:部分观测时,只看当前状态难以决策,看到更多历史状态会部分补充当前状态的未知维度)
  • 注意力模式 :图4展示了模型预测时的注意力图可视化。论文观察到两种主要注意力模式(问题:这两种模型分别是怎么设置的?是直接修改了上下文窗口吗?):
    • 马尔可夫策略(图中第一个) :状态预测主要关注前一个 Transaction(s,a,r);
    • 关注过去多步的策略(图中第二个) :每个状态预测关注多个先前状态的特定维度
    • 论文提到的一个实验观察:动作预测对先前动作的关注多于对先前状态的关注。这种动作依赖关系与行为克隆的常见表述(动作仅为过去状态的函数)不同,但类似于某些规划算法中用于生成平滑动作序列的动作滤波技术(理解:动作之间有一定的相关性)

强化学习与控制

离线强化学习评估
  • 离线强化学习 :论文在D4RL离线基准测试套件的多个环境中评估 Trajectory Transformer ,包括运动控制和AntMaze领域。该评估是论文的控制设置中最具挑战性的,因为奖励最大化行为通常与无监督建模相关的行为(即模仿行为)在性质上差异最大
  • 表1展示了运动控制环境的结果。论文与其他五种方法进行了比较,涵盖数据驱动控制的其他方法:
    • 行为正则化 Actor-Critic (BRAC, 2019)和保守Q学习(CQL,2020a)代表当前最先进的离线RL方法;
    • Model-based 离线规划(MBOP, 2021)是先前表现最佳的离线轨迹优化技术;
    • Decision Transformer(DT, 2021)是同期开发的序列建模方法,使用回报条件化而非规划;
    • 行为克隆(BC)提供了纯模仿方法的性能基准
    • 个人观察 :看起来TT效果和CQL差不多?
  • Trajectory Transformer 的性能与所有先前方法相当或更优(表1)Trajectory Transformer 的两种离散化变体(均匀和分位数)在除HalfCheetah-Medium-Expert外的所有环境中表现相似。在该环境中,速度的大范围使均匀离散化无法恢复执行专家策略所需的精确动作,因此分位数离散化的回报是均匀离散化的两倍以上
  • 结合Q函数的 Trajectory Transformer :即IQL的Q+Trajectory Transformer
    • 解决了什么问题 :蒙特卡罗估值版本的TT,在稀疏奖励和 long-horizon 任务中效果不佳,信息量不足以引导束搜索规划(Reward-to-go与策略无关导致难以最大化Reward)
    • 如何解决的 :论文提出可以用通过动态规划训练的Q函数替代Transformer的估值(问题这里的估值包括 即时奖励 \(r_t\) 和 reward-to-go \(R_t\)吗?),论文通过在AntMaze导航任务中使用IQL的Q函数来探索这一组合(理解:这里说的动态规划训练就是传统强化学习贝尔曼方程的训练方式,加入动态规划的Q值后,就允许策略从见过的多条路径组合,从而生成未见过的最优路径了)
  • 表2展示了AntMaze的结果:Q引导的 Trajectory Transformer 规划在所有迷宫大小和数据集组合上优于所有先前方法,也包括提供Q函数的IQL方法,这表明将Q函数作为搜索启发式进行规划比策略提取对Q函数误差的敏感性更低
    • 补充结论:由于Q引导规划仍受益于动态规划和规划的时间组合性,它在AntMaze任务中优于回报条件化方法(如Decision Transformer),后者因数据集中缺乏完整示范而表现不佳
    • 强调一下 :TT+Q的效果明显由于其他方法,包括IQL方法
模仿学习与目标达成评估
  • 模仿学习与目标达成 :论文还使用标准的似然最大化束搜索(而非离线RL中使用的回报最大化版本)进行规划。论文发现,在专家策略收集的数据集(即D4RL中的专家数据)上训练模型后,使用束搜索作为滚动时域控制器,在Hopper和Walker2d环境中分别实现了104%和109%的平均归一化回报(与离线RL评估一样,都使用15次运行结果),这说明语言建模中的解码算法可有效重新用于控制(理解:收益来源是专家模仿+束搜索带来的扰动+挑选最大收益轨迹)
基于目标状态条件化的束搜索变体评估
  • 最后,论文评估了基于目标状态条件化的束搜索变体 ,该方法同时对未来期望状态和已观测到的先前状态进行条件化,
    • 论文使用经典四房间环境的连续变体作为测试平台
    • 训练数据由预训练的目标达成(goal-reaching)智能体收集的轨迹组成,起始和目标状态在状态空间中均匀随机采样
    • 图6展示了规划器选择的路径。反因果条件化(基于未来状态)使束搜索可作为目标达成方法,无需任何奖励塑形(或任何形式的奖励),该规划方法完全依赖目标重标记(理解:修改未来目标作为条件从而改变当前动作)
    • 注:附录描述了将该实验扩展到程序化生成地图的延伸工作
  • 注:图5展示了表1中各算法的平均性能,按粗略算法分类着色(图中“ Trajectory Transformer ”指分位数离散化版本TT)

讨论与局限性(原论文内容)

  • 工作总结 :论文提出了一种将强化学习视为序列建模问题的新视角,使论文能够为多种不同问题场景开发统一的算法,将强化学习算法的标准组件(如策略、模型和价值函数)统一在一个序列模型之下。该算法包括训练一个联合建模状态、动作和奖励的序列模型,并使用经过束搜索进行采样
    • 这种方法借鉴了大规模语言建模工具而非传统控制方法,但论文发现它在模仿学习、目标达成和离线强化学习等任务中均表现出色
  • 缺点 :目前基于Transformer的预测相比常用于基于模型控制的单步模型预测速度更慢且资源需求更高
    • 窗口越长越慢 :当上下文窗口过大时,标准Transformer的动作选择可能需要数秒时间,这使其难以用于大多数动态系统的实时控制
    • 束搜索导致速度慢 :虽然束搜索规划器在概念上属于模型预测控制范畴,理论上可应用于任何基于模型强化学习的场景,但实际应用中缓慢的规划速度也使得在线强化学习实验变得笨拙(注:采用计算高效的Transformer架构可能大幅降低运行时间)
    • 离散化带来的精度损失 :论文选择对连续数据进行离散化以适应标准架构,而非修改架构来处理连续输入,尽管这一设计比传统连续动态模型有效得多,但原则上它会对预测精度设置上限
  • 写在最后 :TT+Q可能是最优解(即IQL的Q+Trajectory Transformer)
    • 原文内容 :论文研究了一种可应用于强化学习问题的最小化算法类型。虽然论文研究结果的一个有趣启示是:通过选择合适的模型,强化学习问题可以被重新表述为监督学习任务,但这一思想最实用的实现可能来自于与动态规划技术的结合——正如Q函数引导的 Trajectory Transformer 规划所展现的优异性能所暗示的那样

附录:Trajectory-Transformer planning 函数

  • 以下代码来自开源项目的./trajectory/search/core.py文件中的 beam_plan 函数:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    @torch.no_grad()
    def beam_plan(
    model, value_fn, x,
    n_steps, beam_width, n_expand,
    observation_dim, action_dim,
    discount=0.99, max_context_transitions=None,
    k_obs=None, k_act=None, k_rew=1,
    cdf_obs=None, cdf_act=None, cdf_rew=None,
    verbose=True, previous_actions=None,
    ):
    '''
    x : tensor[ 1 x input_sequence_length ]
    '''

    inp = x.clone()

    # convert max number of transitions to max number of tokens
    transition_dim = observation_dim + action_dim + REWARD_DIM + VALUE_DIM
    max_block = max_context_transitions * transition_dim - 1 if max_context_transitions else None

    ## pass in max numer of tokens to sample function
    sample_kwargs = {
    'max_block': max_block,
    'crop_increment': transition_dim,
    }

    ## repeat input for search
    x = x.repeat(beam_width, 1)

    ## construct reward and discount tensors for estimating values
    rewards = torch.zeros(beam_width, n_steps + 1, device=x.device)
    discounts = discount ** torch.arange(n_steps + 1, device=x.device)

    ## logging
    progress = utils.Progress(n_steps) if verbose else utils.Silent()

    for t in range(n_steps):
    ## repeat everything by `n_expand` before we sample actions
    x = x.repeat(n_expand, 1)
    rewards = rewards.repeat(n_expand, 1)

    ## sample actions
    x, _ = sample_n(model, x, action_dim, topk=k_act, cdf=cdf_act, **sample_kwargs)

    ## sample reward and value estimate
    x, r_probs = sample_n(model, x, REWARD_DIM + VALUE_DIM, topk=k_rew, cdf=cdf_rew, **sample_kwargs)

    ## optionally, use a percentile or mean of the reward and
    ## value distributions instead of sampled tokens
    r_t, V_t = value_fn(r_probs)

    ## update rewards tensor
    rewards[:, t] = r_t
    rewards[:, t+1] = V_t

    ## estimate values using rewards up to `t` and terminal value at `t`
    values = (rewards * discounts).sum(dim=-1)

    ## get `beam_width` best actions
    values, inds = torch.topk(values, beam_width)

    ## index into search candidates to retain `beam_width` highest-reward sequences
    x = x[inds]
    rewards = rewards[inds]

    ## sample next observation (unless we have reached the end of the planning horizon)
    if t < n_steps - 1:
    x, _ = sample_n(model, x, observation_dim, topk=k_obs, cdf=cdf_obs, **sample_kwargs)

    ## logging
    progress.update({
    'x': list(x.shape),
    'vmin': values.min(), 'vmax': values.max(),
    'vtmin': V_t.min(), 'vtmax': V_t.max(),
    'discount': discount
    })

    progress.stamp()

    ## [ batch_size x (n_context + n_steps) x transition_dim ]
    x = x.view(beam_width, -1, transition_dim)

    ## crop out context transitions
    ## [ batch_size x n_steps x transition_dim ]
    x = x[:, -n_steps:]

    ## return best sequence
    argmax = values.argmax()
    best_sequence = x[argmax]

    return best_sequence

RL——策略梯度法推导

策略梯度法(Policy Gradient)推导,以及REINFORCE算法的介绍

  • 参考链接:
    • 策略梯度法总结:策略梯度算法专题 (包含推导和总结)

基础概念

  • 策略 \(\pi(a|s, \theta)\) (也可以表达为 \(\pi_{ \theta}(a|s)\))是一个从状态 \(s\) 到动作 \(a\) 概率的映射,其中 \(\theta\) 表示策略的参数
  • 整个轨迹的累计回报 \(R(\tau)\) 是轨迹 \(\tau\) 对应的回报:
    $$
    R(\tau) = \sum_{k=0}^{\infty} r_{k}
    $$
    • 注意:这里 没有折扣因子 ,称为 无折扣累计奖励
  • 时间t步开始的回报 \(G_t\) 是从时间步 \(t\) 开始到结束的所有奖励的总和,通常定义为 折扣累积奖励 :
    $$
    G_t = \sum_{k=t}^{\infty} \gamma^k r_{k}
    $$
    其中 \(\gamma\) 是折扣因子, \(r_{k}\) 是在时间步 \(k\) 收到的即时奖励
  • 目标 是找到参数 \(\theta\) 使得长期回报的期望值最大,即 \(\max_\theta J(\theta)\),其中 \(J(\theta) = \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau)]\)

推导过程(无折扣且有限时域)

优化目标:

  • 目标函数 \(J(\theta)\) 定义为从初始分布开始,遵循策略 \(\pi_\theta\) 时的平均回报:
    $$
    J(\theta) = \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau)]
    $$
    • 其中 \(\tau = (s_0, a_0, r_1, s_1, a_1, \dots)\) 表示一个轨迹, \(p_\theta(\tau)\) 是在策略 \(\pi_\theta\) 下产生轨迹 \(\tau\) 的概率
    • \(R(\tau) = \sum_{k=0}^{\infty} r_{k}\) 表示 没有折扣 的累计回报

梯度估计:

  • 我们的目标是计算目标函数关于参数 \(\theta\) 的梯度 \(\nabla_\theta J(\theta)\) 。我们有:
    $$
    \nabla_\theta J(\theta) = \nabla_\theta \int R(\tau) p_\theta(\tau) d\tau = \int R(\tau) \nabla_\theta p_\theta(\tau) d\tau
    $$
  • 使用对数概率技巧(log derivative trick, \(\nabla_\theta \log y({\theta}) = \frac{\nabla_\theta y({\theta})}{ y({\theta}) }\) )可以将上式转换为:
    $$
    \nabla_\theta J(\theta) = \int R(\tau) p_\theta(\tau) \frac{\nabla_\theta p_\theta(\tau)}{p_\theta(\tau)} d\tau = \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)]
    $$
  • 如果通过蒙特卡罗采样估计上面的式子,则可以写成:
    $$
    \begin{align}
    \nabla_\theta J(\theta) &= \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)] \\
    &\approx \frac{1}{N} \sum_{n=1}^{N} R(\tau^n) \nabla_\theta \log p_\theta(\tau^n)
    \end{align}
    $$
    • 上式是对原始梯度的无偏估计

轨迹展开:

  • 轨迹展开后,有 \(p_\theta(\tau) = p(s_0) \prod_t \pi_\theta(a_t|s_t) p(s_{t+1}|s_t, a_t)\),其中 \(p(s_0)\) 是初始状态的分布, \(p(s_{t+1}|s_t, a_t)\) 是环境的转移概率
    $$
    \begin{align}
    p_\theta(\tau) &= p_{\pi_\theta}(s_0, a_0, s_1, a_1,\cdots) \\
    &= p(s_0)\pi_\theta(a_0|s_0)p(s_1|s_0,a_0)\cdots \\
    &= p(s_0) \prod_t \pi_\theta(a_t|s_t) p(s_{t+1}|s_t, a_t)
    \end{align}
    $$

  • 由于环境的输出与策略无关,即 \(\nabla_\theta p(s_1|s_0,a_0) = 0\),于是有:
    $$
    \begin{align}
    \nabla_\theta \log p_\theta(\tau) &= \nabla_\theta p(s_0) \prod_t \pi_\theta(a_t|s_t) p(s_{t+1}|s_t, a_t) \\
    &= \nabla_\theta \log p(s_0) + \nabla_\theta \sum_t \log \pi_\theta(a_t|s_t) + \nabla_\theta \sum_t \log p(s_{t+1}|s_t, a_t) \\
    &= \nabla_\theta \sum_t \log \pi_\theta(a_t|s_t) \\
    &= \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t)
    \end{align}
    $$

  • 所以我们可以进一步简化梯度表达式为:
    $$
    \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 R(\tau) \nabla_\theta \log \pi_\theta(a_t|s_t) \right] \\
    &\approx \frac{1}{N} \sum_{n=1}^{N} R(\tau^n) \nabla_\theta \log p_\theta(\tau^n) = \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n) \nabla_\theta \log \pi_\theta(a_t|s_t)
    \end{align}
    $$

    • 此时,上式依然是对原始梯度的无偏估计
    • \(R(\tau^n)\) 表示采样得到的轨迹 \(\tau^n\) 对应的Reward,上述公式假设一共有N个轨迹
    • 对于任意给定的轨迹 \(\tau^n\),其上面的任意样本对 \((s_t,a_t)\),均使用固定的 \(R(\tau^n)\) 对 \(\nabla_\theta \log \pi_\theta(a_t|s_t)\) 进行加权(实际上在使用中,不会直接使用 \(R(\tau^n)\),因为轨迹中过去的Reward与当前动作无关,所以,我们仅考虑后续的轨迹上的收益即可)

其他推导过程(策略梯度定理证明)

  • 本文以上的推导主要都是从轨迹的视角出发的,本质是在推导 无折扣且有限时域 场景下的情况,即在证明下面的式子:
    $$\color{red}{\nabla_\theta \int R(\tau) p_\theta(\tau) d\tau} \propto \color{red}{\mathbb{E}_{\tau \sim p_\theta(\tau)} \left[\sum_t R(\tau) \nabla_\theta \log \pi_\theta(a_t|s_t) \right]}$$
    • 上式反应出来的基本思想: 策略梯度正比于累计无折扣奖励 \(R(\tau)\) ,策略梯度算法倾向于 提高高回报动作概率,降低低回报动作概率
  • 在一些其他文章或书籍中(比如Sutton的RL书籍),证明的是更通用(有折扣且不限制时域 场景)的式子:
    $$
    \begin{aligned}
    \color{red}{\nabla_\theta J(\theta)}
    &= \nabla_\theta \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \pi_\theta(a \vert s) \\
    &\color{red}{\propto \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \nabla_\theta \pi_\theta(a \vert s)}
    \end{aligned}
    $$
    • 上式也称为策略梯度定理
    • 上式的证明本质上与本文的证明等价,因为 \( \color{red}{\sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \nabla_\theta \pi_\theta(a \vert s) = \mathbb{E}_{\tau \sim p_\theta(\tau)} \left[\sum_t R(\tau) \nabla_\theta \log \pi_\theta(a_t|s_t) \right]} \)
  • 核心理解:
    • 策略梯度定理反应出来的基本思想是:策略梯度正比于价值函数 \(Q^\pi(s, a)\) ,策略梯度算法倾向于提高高回报动作概率,降低低回报动作概率

REINFORCE 算法:

  • 考虑到轨迹中过去的 Reward 与当前动作无关,且后续轨迹上的收益与当前动作的关系越来越小,所以我们使用 \(G_t\) 来替换 \(R(\tau)\)
    $$
    R(\tau) = \sum_{k=0}^{\infty} r_{k} \quad \rightarrow \quad G_t = \sum_{k=t}^{\infty} \gamma^k r_{k}
    $$
  • 此时梯度进一步近似为:
    $$
    \begin{align}
    \nabla_\theta J(\theta) &\approx \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n) \nabla_\theta \log \pi_\theta(a_t|s_t) \\
    &\approx \frac{1}{N}\sum_{n=1}^N \sum_{t=1}^{T_n} G_t^n \nabla_\theta \log \pi_\theta(a_t|s_t)
    \end{align}
    $$
  • REINFORCE算法利用上述梯度估计来更新策略参数。具体地,对于轨迹 \(R(\tau^n)\) 上的状态动作样本对 \((s_t,a_t)\),参数更新规则如下:
    $$
    \color{red}{\theta \leftarrow \theta + \alpha \nabla_\theta \log \pi_\theta(a_t|s_t)} \color{blue}{G_t^n}
    $$
    • 其中 \(\alpha\) 是学习率
    • 因为是累加操作,所以可以展开对每一个状态动作样本对 \((s_t,a_t)\) 进行累加
    • \(\frac{1}{N}\) 可以不需要了,有了学习率了,可以调节到学习率中
  • 补充REINFORCE算法伪代码:

减小方差:

  • 为了减少方差,可以在梯度估计中引入一个baseline函数 \(b(s_t)\),它是一个与动作无关的量。更新规则变为:
    $$
    \theta \leftarrow \theta + \alpha \nabla_\theta \log \pi_\theta(a_t|s_t) (G_t - b(s_t))
    $$

    • 常见的选择是使用价值函数 \(V(s_t)\) 作为基线,这有助于稳定学习过程
    • 可以证明,增加 \(b(s_t)\) 后,梯度不会发生改变,上式对梯度的估计依然是无偏的
  • 性质一:减去一个baseline以后,依然是原始梯度的无偏估计 ,证明如下:
    $$
    \begin{align}
    \nabla_\theta J(\theta)
    &= \mathbb{E}_{\tau \sim p_{\theta}(\tau)} (R(\tau) - b) \nabla_\theta \log p_{\theta}(\tau) \\
    &= \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)] - b \mathbb{E}_{\tau \sim p_{\theta}(\tau)} \nabla_\theta \log p_{\theta}(\tau) \\
    &= \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)] - b \sum_\tau p_{\theta}(\tau) \nabla_\theta \log p_{\theta}(\tau) \\
    &= \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)] - b \sum_\tau \nabla_\theta p_{\theta}(\tau) \\
    &= \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)] - b \nabla_\theta \sum_\tau p_{\theta}(\tau) \\
    &= \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)] - b \nabla_\theta 1 \\
    &= \mathbb{E}_{\tau \sim p_\theta(\tau)} [R(\tau) \nabla_\theta \log p_\theta(\tau)] \\
    \end{align}
    $$

    • 第三行到第四行用到了对数概率技巧: \(\nabla_\theta \log y({\theta}) = \frac{\nabla_\theta y({\theta})}{ y({\theta}) }\)
    • 第四行到第五行使用了求梯度和加法交换顺序的法则
  • 性质二:减去一个合适的baseline函数以后,方差会变小 ,证明如下:

    • 方差展开
      $$
      \begin{align}
      &\ Var_{\tau \sim p_{\theta}(\tau)} [(R(\tau) - b) \nabla \log p_{\theta}(\tau)] \\
      &= \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [(R(\tau) - b)^2 \nabla^2 \log p_{\theta}(\tau)] - [\mathbb{E}_{\tau \sim p_{\theta}(\tau)} [(R(\tau) - b) \nabla \log p_{\theta}(\tau)] ]^2 \\
      &= \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [R(\tau)^2 \nabla^2 \log p_{\theta}(\tau)] - [\mathbb{E}_{\tau \sim p_{\theta}(\tau)} [R(\tau) \nabla \log p_{\theta}(\tau)] ]^2 - 2 b \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [R(\tau) \nabla^2 \log p_{\theta}(\tau)] + b^2 \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [ \nabla^2 \log p_{\theta}(\tau)] \\
      &= Var_{\tau \sim p_{\theta}(\tau)} [R(\tau) \nabla \log p_{\theta}(\tau) ] - 2 b \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [R(\tau) \nabla^2 \log p_{\theta}(\tau)] + b^2 \mathbb{E}_{\tau \sim p_{\theta}(\tau)} [ \nabla^2 \log p_{\theta}(\tau)]
      \end{align}
      $$
    • 进一步解的,使得上式取小值的最优 \(b\) 为:
      $$
      b = \frac{\mathbb{E}_{\tau \sim p_{\theta}(\tau)} [R(\tau) \nabla^2 \log p_{\theta}(\tau)] }{\mathbb{E}_{\tau \sim p_{\theta}(\tau)} [ \nabla^2 \log p_{\theta}(\tau)]}
      $$
    • 实际应用中,为了方便计算,通常会使用:
      $$
      \hat{b} = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} R(\tau)
      $$
    • 那为什么 \(\hat{b} = \mathbb{E}_{\tau \sim p_{\theta}(\tau)} R(\tau)\) 是 \(V_{\pi_{\theta}}(s_t)\) 呢?因为两者是等价的,证明如下:
      • 对于非确定性策略来说,在状态 \(s_t\) 下可选的动作服从一个分布 \(\pi_{\theta}(s_t)\),按照 \(\mathbb{E}_{\tau \sim p_{\theta}(\tau)} R(\tau)\) 的逻辑,该值是状态 \(s_t\) 下按照策略 \(\pi_{\theta}(s_t)\) 执行得到 \(R(\tau)\) 期望(注意 \(a_t\) 服从 \(\pi_{\theta}\) 分布,后续的执行动作也服从 \(\pi_{\theta}\) 分布),实际上就是 \(V_{\pi_{\theta}}(s_t)\)

实际使用中的 \(R(\tau)\)

原始形式

  • 原始形式公式:
    $$ R(\tau) = \sum_{k=0}^{\infty} r_{k} $$
  • 上式中实际上是一个固定轨迹的奖励,从第0步开始
  • 可基于蒙特卡罗采样得到

REINFORCE方法

  • 迭代样本 \((s_t,a_t)\) 时,使用以下形式:
    $$ G_t = \sum_{k=t}^{\infty} \gamma^k r_{k} $$
    • 丢弃掉动作之前的奖励,这些奖励与当前动作无关(过去时间片的奖励期望为0,但方差不为0,加入以后只会影响策略的进一步迭代)
    • 未来越远的动作奖励越小,因为这些奖励受当前动作影响的概率越小
  • 使用baseline函数进行改进
    $$\sum_{k=t}^{\infty} \gamma^k r_{k} - b(s_t)$$

用Q值替代

  • 用 \(Q(s,a)\) 值代替 \(R(\tau)\)
  • 理由, \(Q(s,a)\) 值是状态 \(s\) 执行 \(a\) 以后的 \(G_t\) 的期望值:
    $$Q^{\pi_\theta}(s_t,a_t) = \mathbb{E}_{\pi_\theta} [G_t|s_t, a_t]$$
  • 使用Q值来替代可以降低方差

用优势函数替代

  • 用 \(A(s,a) = Q(s,a) - V(s)\) 来替代
    • 可以减去 \(V(s)\) 的理由是之前证明过减去一个baseline函数 \(V(s)\) 可以降低方差,且梯度无偏
  • 实际上使用时可以使用单个V网络+TD-Error实现对优势函数的估计
    $$ A(s,a) = r(s,a) + \gamma V(s’) - V(s) $$
  • 应用场景:
    • 常规的Actor Critic方法
    • PPO方法的优势函数估计(实际的PPO中常常是GAE方式,是优势函数的一种加权)

RL——贝尔曼方程的各种形式


贝尔曼方程(Bellman Equation)

  • 贝尔曼方程描述了当前状态的值函数与后续状态值函数之间的关系
  • 有状态值函数 \(V^\pi(s)\) 和动作值函数 \(Q^\pi(s,a)\)

状态值函数 \(V^\pi(s)\) 的贝尔曼方程

  • 标准形式(常见) :
    $$
    V^\pi(s) = \sum_{a} \pi(a|s) \sum_{s’, r} p(s’, r | s, a) \left[ r + \gamma V^\pi(s’) \right]
    $$
    • \(\pi(a|s)\):策略 \(\pi\) 下在状态 \(s\) 选择动作 \(a\) 的概率
    • \(\gamma\):折扣因子
    • \(p(s’, r | s, a)\):环境动态,表示在状态 \(s\) 执行动作 \(a\) 后转移到状态 \(s’\) 并获得奖励 \(r\) 的概率
    • 假设状态 \(s\) 执行动作 \(a\) 对应的奖励 \(r=r(s,a)\) 是确定值,此时以上贝尔曼方程也常常写作(最常见):
      $$
      V^\pi(s) = \sum_{a} \pi(a|s) \left(r(s,a) + \gamma \sum_{s’} p(s’| s, a) V^\pi(s’) \right)
      $$
  • 期望形式(少见) :
    $$
    \begin{align}
    V^\pi(s) &= \mathbb{E}_\pi \left[ R_t + \gamma V^\pi(S_{t+1}) \mid S_t = s \right] \\
    \end{align}
    $$
    • \(\mathbb{E}_\pi\):基于策略 \(\pi\) 和环境动态的期望
    • \(\mathbb{E}[\cdot \mid S_t = s]\) 表示条件概率
  • 矩阵形式(极少遇到)(适用于有限状态空间):
    $$
    \mathbf{v}_\pi = \mathbf{r}_\pi + \gamma \mathbf{P}_\pi \mathbf{v}_\pi
    $$
    • \(\mathbf{v}_\pi\):状态值函数的向量
    • \(\mathbf{r}_\pi\):即时奖励的向量
    • \(\mathbf{P}_\pi\):状态转移矩阵

动作值函数 \(Q^\pi(s,a)\) 的贝尔曼方程

  • 标准形式 :
    $$
    Q^\pi(s,a) = \sum_{s’, r} p(s’, r | s, a) \left[ r + \gamma \sum_{a’} \pi(a’|s’) Q^\pi(s’, a’) \right]
    $$
    • 假设状态 \(s\) 执行动作 \(a\) 对应的奖励 \(r=r(s,a)\) 是确定值,此时以上贝尔曼方程也常常写作(最常见):
      $$
      Q^\pi(s,a) = r(s,a) + \gamma \sum_{s’} p(s’| s, a) \sum_{a’} \pi(a’|s’) Q^\pi(s’, a’) \\
      $$
  • 期望形式 :
    $$
    Q^\pi(s,a) = \mathbb{E}_\pi \left[ R_t + \gamma Q^\pi(S_{t+1}, A_{t+1}) \mid S_t = s, A_t = a \right]
    $$
    • 假设状态 \(s\) 执行动作 \(a\) 对应的奖励 \(r=r(s,a)\) 是确定值,此时以上贝尔曼方程也常常写作(最常见):
      $$
      \begin{align}
      Q^\pi(s,a) &= r(s,a) + \gamma \mathbb{E}_{s^\prime \sim P(\cdot|s,a)}\mathbb{E}_{a^\prime \sim \pi(\cdot|s^\prime)}[Q^\pi(s^\prime,a^\prime)] \\
      Q^\pi(s,a) &= r(s,a) + \gamma \mathbb{E}_{s^\prime \sim P(\cdot|s,a)}[V^\pi(s^\prime)] \\
      \end{align}
      $$

最优贝尔曼方程(Bellman Optimality Equation)

  • 最优贝尔曼方程描述了最优值函数 \(V^*(s)\) 或 \(Q^*(s,a)\) 的递归关系
  • 相对期望贝尔曼方程,其核心是将策略的期望替换为对动作的最优选择(最大化)

最优状态值函数 \(V^*(s)\) 的方程

  • 标准形式 :
    $$
    V^*(s) = \max_a \sum_{s’, r} p(s’, r | s, a) \left[ r + \gamma V^*(s’) \right]
    $$

    • \(\max_a\):选择使后续值最大的动作
    • 假设状态 \(s\) 执行动作 \(a\) 对应的奖励 \(r=r(s,a)\) 是确定值,此时以上贝尔曼方程也常常写作(最常见):
      $$
      V^*(s) = \max_a \{ r(s,a) + \gamma \sum_{s’} p(s’| s, a)V^*(s’)\}
      $$
  • 期望形式 :
    $$
    V^*(s) = \max_a \mathbb{E} \left[ R_t + \gamma V^*(S_{t+1}) \mid S_t = s, A_t = a \right]
    $$

  • 与动作值函数的关系 :
    $$
    V^*(s) = \max_a Q^*(s, a)
    $$

最优动作值函数 \(Q^*(s,a)\) 的方程

  • 标准形式 :
    $$
    Q^*(s,a) = \sum_{s’, r} p(s’, r | s, a) \left[ r + \gamma \max_{a’} Q^*(s’, a’) \right]
    $$

    • \(\max_{a’}\):在下一状态 \(s’\) 选择最优动作
    • 假设状态 \(s\) 执行动作 \(a\) 对应的奖励 \(r=r(s,a)\) 是确定值,此时以上贝尔曼方程也常常写作(最常见):
      $$
      Q^*(s,a) = r(s,a) + \gamma \sum_{s’} p(s’| s, a) \max_{a’} Q^*(s’, a’)
      $$
  • 期望形式 :
    $$
    Q^*(s,a) = \mathbb{E} \left[ R_t + \gamma \max_{a’} Q^*(S_{t+1}, a’) \mid S_t = s, A_t = a \right]
    $$

    • 假设状态 \(s\) 执行动作 \(a\) 对应的奖励 \(r=r(s,a)\) 是确定值,此时以上贝尔曼方程也常常写作(最常见):
      $$
      \begin{align}
      Q^*(s,a) &= r(s,a) + \gamma \mathbb{E}_{s^\prime \sim P(\cdot|s,a)}[\max_{a^\prime\in \mathcal{A}}Q^*(s^\prime,a^\prime)] \\
      Q^*(s,a) &= r(s,a) + \gamma \mathbb{E}_{s^\prime \sim P(\cdot|s,a)}[V^*(s^\prime)] \\
      \end{align}
      $$
  • 与状态值函数的关系 :
    $$
    Q^*(s,a) = \sum_{s’, r} p(s’, r | s, a) \left[ r + \gamma V^*(s’) \right]
    $$

    • 假设状态 \(s\) 执行动作 \(a\) 对应的奖励 \(r=r(s,a)\) 是确定值,此时以上式子可写作:
      $$
      Q^*(s,a) = r(s,a) + \gamma \sum_{s’} p(s’| s, a) V^*(s’)
      $$

一些变体

  • 确定性策略 :
    • 若策略是确定性的(如 \(\pi(s) = a\)),贝尔曼方程中的 \(\pi(a|s)\) 退化为指示函数
  • 无折扣形式(\(\gamma = 1\)) :
    • 适用于分幕任务(episodic tasks),但需确保收敛性
  • 确定性奖励 :
    • 见前文描述,对应奖励 \(r=r(s,a)\) 是确定值

RL——Soft-Q-Learning

  • 参考文献
    • 原始论文:Reinforcement learning with deep energy-based policies.,2017,ICML,UC Berkeley,作者与SAC作者是同一个
    • Soft Q-learning解读 - 单字卓的文章 - 知乎
    • 读书笔记:Reinforcement Learning with Deep Energy-Based Policies
    • 论文理解【RL经典】—— 【SQL】Reinforcement Learning with Deep Energy-Based Policies:非常详细的证明

回顾常规的强化学习场景

  • 目标定义:
    $$
    \begin{align}
    J(\theta) &= \mathbb{E}_{\tau\sim \pi_\theta}[R(\tau)] \\
    &= \mathbb{E}_{s_0, a_0,\ldots \sim \pi_\theta}\Big[\sum\limits_{t=0}^{\infty}\gamma^t r(s_t, a_t) \Big] \\
    &= \sum_{t=0}^\infty \mathbb{E}_{(s_t,a_t) \sim \rho_{\pi_\theta}} [r(s_t, a_t)]
    \end{align}
    $$
    • 第一行是普通PG方法推导的写法,最贴近本质
    • 第二行是TRPO文章的写法,是第一行的展开形势
    • 第三行这里 \(\sum_{t=0}^T \mathbb{E}_{(s_t,a_t) \sim \rho_{\pi_\theta}} [r(s_t, a_t)]\) 的写法是Soft Q-Learning 论文 和 SAC 论文提出来的,和之前TRPO等文章写法都不同,这里从第二行到第三行的变换可以理解为积分和求和交换顺序的写法,从状态 \(s_0\) 开始, \((s_t,a_t)\) 都是按照策略 \(\pi_\theta\) 执行下去可能遇到的概率分布
  • Q值定义:
    $$
    \begin{align}
    Q^\pi(s_t,a_t) &= \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=0}^\infty\gamma^lr(s_{t+l}, a_{t+l})\Big] \vert_{(s_t,a_t)} \\
    &= r(s_t, a_t) + \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=1}^\infty\gamma^lr(s_{t+l}, a_{t+l})\Big] \vert_{(s_t,a_t)} \\
    &= r(s_t, a_t) + \sum\limits_{l=1}^\infty \mathbb{E}_{(s_{t+l},a_{t+l}) \sim \rho_\pi}[\gamma^lr(s_{t+l}, a_{t+l})] \vert_{(s_t,a_t)}
    \end{align}
    $$
    • “ \(\vert_{(s_t,a_t)}\) “表示条件概率,一般来说,不引起歧义的情况下,也可以省略” \(\vert_{(s_t,a_t)}\) “
  • V值定义:
    $$
    \begin{align}
    V^\pi(s_t) &= \mathbb{E}_{a_t,s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=0}^\infty\gamma^lr(s_{t+l}, a_{t+l})\Big] \vert_{(s_t,a_t)} \\
    &= \mathbb{E}_{a_t \sim \pi}[Q^\pi(s_t, a_t)]
    \end{align}
    $$

Soft Q-Learning

  • 目标定义
    $$ J(\phi) = \sum_{t=0}^T \mathbb{E}_{(s_t, a_t) \sim \rho_{\pi_\phi}} [r(s_t, a_t) + \alpha \mathcal{H}(\pi_\phi(.\vert s_t))] $$
    • 这里目标中增加的熵就是Soft名字的来源,这里相对标准的强化学习,仅增加了 \(\alpha \mathcal{H}(\pi_\phi(.\vert s_t))\) 为额外目标,后续在不引起歧义的情况下,我们也用 \(\alpha \mathcal{H}(\pi_\phi(s_{t}))\) 来表示,且为了方便,后续推导中常常会视为 \(\alpha=1\),这里可以通过奖励和熵同时乘以 \(\frac{1}{\alpha}\) 来变换得到
  • Soft Q值定义
    $$
    \begin{align}
    Q_{\text{soft}}^\pi(s_t, a_t) &= r(s_t, a_t) + \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=1}^\infty\gamma^l(r(s_{t+l}, a_{t+l}) +\alpha\mathcal{H}(\pi(s_{t+l})))\Big] \\
    &= r(s_t, a_t) + \sum\limits_{l=1}^\infty \mathbb{E}_{(s_{t+l},a_{t+l}) \sim \rho_\pi}[\gamma^l(r(s_{t+l}, a_{t+l}) + \alpha\mathcal{H}(\pi(s_{t+l})))]
    \end{align}
    $$
    • 对于 \(Q_{\text{soft}}^\pi(s_t, a_t)\) 来说,已经发生的事件是“ \((s_t,a_t)\) ”,此时 \(a_t\) 是确定的动作,对应的熵 \(\mathcal{H}(\pi(s_{t}))=0\)
  • Soft V值定义,同时推导用Soft Q值表示Soft V值
    $$
    \begin{align}
    V_{\text{soft}}^\pi(s_t) &= \mathbb{E}_{a_t,s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=0}^\infty\gamma^l(r(s_{t+l}, a_{t+l}) + \alpha\mathcal{H}(\pi(s_{t+l})))\Big] \\
    &= \mathbb{E}_{a_t \sim \pi}\Big[r(s_t, a_t) + \alpha\mathcal{H}(\pi(s_{t})) + \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=1}^\infty\gamma^l(r(s_{t+l}, a_{t+l}) +\alpha\mathcal{H}(\pi(s_{t+l})))\Big]\Big] \\
    &= \mathbb{E}_{a_t \sim \pi}\Big[r(s_t, a_t) + \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=1}^\infty\gamma^l(r(s_{t+l}, a_{t+l}) +\alpha\mathcal{H}(\pi(s_{t+l})))\Big] + \alpha\mathcal{H}(\pi(s_{t}))\Big] \\
    &= \mathbb{E}_{a_t \sim \pi}[Q_{\text{soft}}^\pi(s_t, a_t)] + \alpha\mathcal{H}(\pi(s_{t})) \\
    &= \mathbb{E}_{a_t \sim \pi} [Q_{\text{soft}}^\pi(s_t, a_t)] - \alpha \mathbb{E}_{a_t \sim \pi} [\log \pi(a_t \vert s_t)]\\
    &= \mathbb{E}_{a_t \sim \pi} [Q_{\text{soft}}^\pi(s_t, a_t) - \alpha \log \pi(a_t \vert s_t)]
    \end{align}
    $$
  • 推导用Soft V值表示Soft Q值
    $$
    \begin{aligned}
    Q_{\text{soft}}^\pi(s_t, a_t) &= r(s_t, a_t) + \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=1}^\infty\gamma^l(r(s_{t+l}, a_{t+l}) +\alpha\mathcal{H}(\pi(s_{t+l})))\Big] \\
    &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=1}^\infty\gamma^{l-1}(r(s_{t+l}, a_{t+l}) +\alpha\mathcal{H}(\pi(s_{t+l})))\Big] \\
    &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1},a_{t+1},\cdots \sim \pi}\Big[\sum\limits_{l=0}^\infty\gamma^l(r(s_{t+1+l}, a_{t+1+l}) +\alpha\mathcal{H}(\pi(s_{t+1+l})))\Big] \\
    &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim \rho_{\pi}(s)} \Big[\mathbb{E}_{a_{t+1},s_{t+2},a_{t+2},\cdots \sim \pi}\Big[\sum\limits_{l=0}^\infty\gamma^l(r(s_{t+1+l}, a_{t+1+l}) + \alpha\mathcal{H}(\pi(s_{t+1+l})))\Big]\Big] \\
    &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim \rho_{\pi}(s)} [V_{\text{soft}}^\pi(s_{t+1})] \\
    \end{aligned}
    $$

Soft贝尔曼期望方程

  • 通过上面的推导,我们可以得到,Soft贝尔曼期望方程为:
    $$
    \begin{aligned}
    Q_{\text{soft}}^\pi(s_t, a_t) &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim \rho_{\pi}(s)} [V_{\text{soft}}^\pi(s_{t+1})] \\
    Q_{\text{soft}}^\pi(s_t, a_t) &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim \rho_{\pi}(s)} [\mathbb{E}_{a_{t+1} \sim \pi} [Q_{\text{soft}}^\pi(s_{t+1}, a_{t+1}) - \alpha \log \pi(a_{t+1} \vert s_{t+1})]] \\
    Q_{\text{soft}}^\pi(s_t, a_t) &= r(s_t, a_t) + \gamma \mathbb{E}_{s_{t+1} \sim \rho_{\pi}(s), a_{t+1} \sim \pi} [Q_{\text{soft}}^\pi(s_{t+1}, a_{t+1}) - \alpha \log \pi(a_{t+1} \vert s_{t+1})] \\
    V_{\text{soft}}^\pi(s_t) &= \mathbb{E}_{a_t \sim \pi} [Q_{\text{soft}}^\pi(s_t, a_t) - \alpha \log \pi(a_t \vert s_t)] \\
    V_{\text{soft}}^\pi(s_t) &= \mathbb{E}_{a_t \sim \pi}[Q_{\text{soft}}^\pi(s_t, a_t)] + \alpha\mathcal{H}(\pi(s_{t}))
    \end{aligned}
    $$

Soft贝尔曼最优方程

  • 首先证明,在满足如下策略改进的时候(其中 \(\tilde{\pi}\))是新策略, \(\pi\) 是旧策略,
    $$
    \tilde{\pi}(\cdot | s) \propto \exp \left(Q_{\text{soft}}^{\pi}(s, \cdot) \right), \quad \forall s.
    $$
  • 策略的Soft Q值是单调的,即:
    $$
    Q_{\text{soft}}^{\tilde{\pi}}(s, a) \geq Q_{\text{soft}}^{\pi_{\text{old}}}(s, a) ; \forall s, a.
    $$
  • 策略的Soft Q值是单调性的证明如下:
    • 以上式子证明时没有考虑温度系数 \(\alpha\),考虑温度系数 \(\alpha\) 时在所有的熵 \(\mathcal{H}(\pi(\cdot\vert\cdot))\) 时前面都加上 \(\alpha\) 即可
    • 其中使用到以下不等式 :
      $$
      \mathcal{H}(\pi(\cdot\vert s)) + \mathbb{E}_{a\sim \pi}[Q_{\text{soft}}^\pi(s,a)] \le \mathcal{H}(\tilde{\pi}(\cdot\vert s)) + \mathbb{E}_{a\sim \tilde{\pi}}[Q_{\text{soft}}^\pi(s,a)]
      $$
    • 上面的不等式又使用到以下式子(下面的式子如何推出上面的式子待确认TODO):
      $$
      \mathcal{H}(\pi(\cdot\vert s)) + \mathbb{E}_{a\sim \pi}[Q_{\text{soft}}^\pi(s,a)] = - D_{\text{KL}}(\pi(\cdot|s) || \tilde{\pi}(s, \cdot)) + \log \int \exp \left(Q_{\text{soft}}^{\pi}(s, a)\right) da
      $$
      • 以上式子证明过程如下:
        $$
        \begin{align}
        \text{right} &= - \int \pi(\cdot | s) \log \frac{\pi(\cdot | s)}{\tilde{\pi}(\cdot | s)} + \log \int \exp \left(Q_{\text{soft}}^{\pi}(s, a)\right) da \\
        &= - \int \pi(\cdot | s) \log \pi(\cdot | s) + \int \pi(\cdot | s) \log {\tilde{\pi}(\cdot | s)} + \int \pi(\cdot | s) \Big(\log \int \exp \left(Q_{\text{soft}}^{\pi}(s, a)\right) da\Big) \\
        &= - \int \pi(\cdot | s) \log \pi(\cdot | s) + \int \pi(\cdot | s) \log \frac{\exp \left(Q_{\text{soft}}^{\pi}(s, \cdot) \right)}{\int \exp \left(Q_{\text{soft}}^{\pi}(s, a)\right) da} + \int \pi(\cdot | s) \Big(\log \int \exp \left(Q_{\text{soft}}^{\pi}(s, a)\right) da\Big) \\
        &= - \int \pi(\cdot | s) \log \pi(\cdot | s) + \int \pi(\cdot | s) \log \exp \left(Q_{\text{soft}}^{\pi}(s, \cdot) \right) \\
        &= \mathcal{H}(\pi(\cdot\vert s)) + \mathbb{E}_{a\sim \pi}[Q_{\text{soft}}^\pi(s,a)] \\
        &= \text{left}
        \end{align}
        $$
  • 其中,由式子
    $$
    \begin{align}
    \mathcal{H}(\pi(\cdot\vert s)) + \mathbb{E}_{a\sim \pi}[Q_{\text{soft}}^\pi(s,a)] = - D_{\text{KL}}(\pi(\cdot|s) || \tilde{\pi}(s, \cdot)) + \log \int \exp \left(Q_{\text{soft}}^{\pi}(s, a)\right) da \\
    \end{align}
    $$
    • 其中 \(\tilde{\pi}\) 是按照 \(\tilde{\pi}(s) = \frac{\exp \left(Q_{\text{soft}}^{\pi}(s, \cdot) \right)}{\int \exp \left(Q_{\text{soft}}^{\pi}(s, a)\right) da}\) 迭代以后的策略
    • 以上推导没有增加温度系数,默认温度系数为1,实际上,如果增加温度系数,有 \(\tilde{\pi}(s) = \frac{\exp \left(\frac{1}{\alpha}Q_{\text{soft}}^{\pi}(s, \cdot) \right)}{\int \exp \left(\frac{1}{\alpha}Q_{\text{soft}}^{\pi}(s, a)\right) da}\)
    • 问题:如果策略的熵为0或温度系数为0,此时这个最优形式还能降级到 \(\pi^*(s) = \mathop{\arg\max}_a Q(s,a)\) 吗?
      • 当策略的熵为0时,是可以的,此时策略必须是确定性策略,按照上述公式,动作只能取Q值最大的那一个
      • 当温度系数为0时,此时Reward和DQN一致,最优解应该是 \(\pi^*(s) = \mathop{\arg\max}_a Q(s,a)\) 。考虑温度系数的版本 \(\tilde{\pi}(s) = \frac{\exp \left(\frac{1}{\alpha}Q_{\text{soft}}^{\pi}(s, \cdot) \right)}{\int \exp \left(\frac{1}{\alpha}Q_{\text{soft}}^{\pi}(s, a)\right) da}\),当温度系数 \(\alpha\rightarrow 0\) 时,策略近似取Q值最大的动作,等价于DQN
  • 当策略收敛以后,即经过迭代以后 \(\tilde{\pi} = \pi = \pi^*\),此时有 \(D_{\text{KL}}(\pi(\cdot|s) || \tilde{\pi}(s, \cdot)) = 0\) 成立,即
    $$ \mathcal{H}(\pi^*(\cdot\vert s)) + \mathbb{E}_{a\sim \pi^*}[Q_{\text{soft}}^{\pi^*}(s,a)] = \log \int \exp \left(Q_{\text{soft}}^{\pi^*}(s, a)\right) da $$
  • 考虑温度系数后有:
    $$ \alpha\mathcal{H}(\pi^*(\cdot\vert s)) + \mathbb{E}_{a\sim \pi^*}[Q_{\text{soft}}^{\pi^*}(s,a)] = \log \int \exp \left(Q_{\text{soft}}^{\pi^*}(s, a)\right) da $$
  • 两边同时除以 \(\alpha\) 有
    $$ \mathcal{H}(\pi^*(\cdot\vert s)) + \mathbb{E}_{a\sim \pi^*}[\frac{1}{\alpha}Q_{\text{soft}}^{\pi^*}(s,a)] = \log \int \exp \left(\frac{1}{\alpha}Q_{\text{soft}}^{\pi^*}(s, a)\right) da $$
  • 由于
    $$
    V_{\text{soft}}^\pi(s_t) = \mathbb{E}_{a_t \sim \pi}[Q_{\text{soft}}^\pi(s_t, a_t)] + \alpha\mathcal{H}(\pi(s_{t}))
    $$
  • 所以有
    $$
    \frac{1}{\alpha}V_{\text{soft}}^\pi(s_t) = \mathbb{E}_{a_t \sim \pi}[\frac{1}{\alpha} Q_{\text{soft}}^\pi(s_t, a_t)] + \mathcal{H}(\pi(s_{t}))
    $$
  • 最优的策略 \(\pi^*\) 对应的V值 \(V^{\pi^*}(s)\) 为:
    $$ V_{\text{soft}}^{\pi^*}(s_t) = \alpha \log \int \exp \left(\frac{1}{\alpha}Q_{\text{soft}}^{\pi^*}(s, a)\right) da $$

贝尔曼方程总结

贝尔曼方程

$$
\begin{align}
Q^\pi(s_t,a_t) &= r(s_t, a_t) + \gamma \mathbb{E}\_{s_{t+1} \sim p(s_{t+1}|s_t, a_t)}[V^\pi(s_{t+1})] \\\\
V^\pi(s_t) &= \mathbb{E}\_{a_t \sim \pi}[Q^\pi(s_t, a_t)] 
\end{align}
$$

贝尔曼最优方程

$$
\begin{align}
Q^{\pi^\*}(s_t,a_t) &= r(s_t, a_t) + \gamma \mathbb{E}\_{s_{t+1} \sim p(s_{t+1}|s_t, a_t)}[V^{\pi^\*}(s_{t+1})] \\\\
V^{\pi^\*}(s_t) &= \max_{a_t}[Q^{\pi^\*}(s_t, a_t)] 
\end{align}
$$

Soft贝尔曼方程

$$
\begin{aligned}
Q_{\text{soft}}^\pi(s_t, a_t) &= r(s_t, a_t) + \gamma \mathbb{E}\_{s_{t+1} \sim \rho_{\pi}(s)} [V_{\text{soft}}^\pi(s_{t+1})] \\\\
V_{\text{soft}}^\pi(s_t) &= \mathbb{E}\_{a_t \sim \pi} [Q_{\text{soft}}^\pi(s_t, a_t) - \alpha \log \pi(a_t \vert s_t)] \\\\
V_{\text{soft}}^\pi(s_t) &= \mathbb{E}\_{a_t \sim \pi}[Q_{\text{soft}}^\pi(s_t, a_t)] + \alpha\mathcal{H}(\pi(s_{t}))
\end{aligned}
$$

Soft贝尔曼最优方程

$$
\begin{aligned}
Q_{\text{soft}}^{\pi^\*}(s_t, a_t) &= r(s_t, a_t) + \gamma \mathbb{E}\_{s_{t+1} \sim \rho_{\pi}(s)} [V_{\text{soft}}^{\pi^\*}(s_{t+1})] \\\\
V_{\text{soft}}^{\pi^\*}(s_t) &= \alpha \log \int \exp \left(\frac{1}{\alpha}Q_{\text{soft}}^{\pi^\*}(s, a)\right) da
\end{aligned}
$$
  • 待更新

RL——CMDP拉格朗日乘子更新思考

注:这是一个简单的思考随记,不严谨,以后有时间还需完善


整体背景说明

  • 对下面约束优化问题:
    $$
    \begin{align}
    \max_{a_t}\sum_{i=1}^M \sum_{a_t=1}^{N_t} x_{i,a_t} {Value}_{i,a_t} \\
    s.t. \sum_{i=1}^M \sum_{a_t=1}^{N_t} x_{i,a_t} {Cost}_{i,a_t} \leq C_t \\
    \sum_{a_t=1}^{N_t}x_{i,a_t} \leq 1, \ \ \forall i \\
    x_{i,a_t} \in {0, 1}, \ \ \forall i,a_t
    \end{align}
    $$
  • 可以求得其最优动作为(真实场景不一定是下面的形式,可以是任意形式的最优解,不影响 \(\lambda\) 的更新):
    $$x^* = \mathop{\arg\max}_x f(x) - \lambda x$$
    • 注:为了简化,这里将价值改为与算力有关的函数,其中 \(f(\cdot)\) 是非减函数(单调不减函数),对应原始式子中的价值 \(Value\)
    • 这里的 \(x\) 是一个示意,可看做是算力
  • 证明:仅需满足 \(f(\cdot)\) 是非减函数(即价值随算力是单调不减的,不需要满足 RL-MPCA 论文中所说的价值边际收益递减假设),则拉格朗日乘子 \(\lambda\) 的更新公式就可以定义为:
    $$\lambda^{k+1} = \lambda^{k} + \eta(\hat{C} - C)$$
  • 为简化,本文不再赘述论文内容描述,更多相关概念和原始问题定义需要结合论文查看

关于 adaptive-\(\lambda\) 更新方式的另一种证明

  • 说明:自适应 \(\lambda\), 即 adaptive-\(\lambda\),是 RL-MPCA 论文提出的方法,和 RCPO 方法的更新方式本质相同,证明形式不完全一致
  • 论文证明目标 :当 \(f(\cdot)\) 是非减函数时,可使用 \(\lambda^{k+1} = \lambda^{k} + \eta(\hat{C} - C)\) 来更新 \(\lambda\)
  • 最优动作解读:\(x^* = \mathop{\arg\max}_x f(x) - \lambda x\)(其中 \(x\) 是算力, \(f(x)\) 是价值)的场景
  • 仅需证明 :当 \(\lambda\) 提升时,最优解对应的价值和成本都会降低即可
  • 形式化证明目标 :\(\forall \ \lambda_2 \gt \lambda_1\),有 \(x^*(\lambda_2) \le x^*(\lambda_1)\) 且 \(f(x^*(\lambda_2)) \le f(x^*(\lambda_1))\)(其中 \(x^*(\lambda_0)\) 和 \(f(x^*(\lambda_0))\) 分别表示 \(\lambda = \lambda_0\) 时的最优算力 \(x^*\) 和价值 \(f(x^*)\))
    • 证明步骤1 :\(\lambda_2 \gt \lambda_1\) 时, \(x^*(\lambda_2) \le x^*(\lambda_1)\) 成立
      • 设 \(x^*(\lambda_1) = x_1\),则,按照最优性,有任取 \(x_2 \ge x_1\),都满足 \(f(x_1) - \lambda_1 x_1 \ge f(x_2) - \lambda_1 x_2\) 成立
      • 在 \(x_2 \ge x_1\) 下,继续取 \(\lambda_2 \gt \lambda_1\) 时,有 \(f(x_1) - \lambda_2 x_1 \ge f(x_2) - \lambda_2 x_2\) 也成立,证明如下:
        • 由 \(x_2 \ge x_1\) 且 \(\lambda_2 \gt \lambda_1\) 可得 \(- (\lambda_2 - \lambda_1)x_1 \ge - (\lambda_2 - \lambda_1) x_2\),所以所有 \(f(x_1) - (\lambda_2 - \lambda_1) x_1 - \lambda_1 x_1 \ge f(x_2) - (\lambda_2 - \lambda_1) x_2 - \lambda_1 x_2\)
      • \(f(x_1) - \lambda_2 x_1 \ge f(x_2) - \lambda_2 x_2\) 等价于说: \(\lambda_2\) 对应的最优算力不可能比 \(x_1\) 更大 ,于是推出:
        • \(\forall \ \lambda_2 \gt \lambda_1\), \(\lambda_2\) 下的最优解 \(x^*(\lambda_2)\) 不可能大于 \(x^*(\lambda_1)\)
    • 证明步骤2 :由于 \(\lambda_2 \gt \lambda_1\) 时, \(x^*(\lambda_2) \le x^*(\lambda_1)\) 成立,所以,当 \(\lambda\) 减少时(从 \(\lambda_2\) 变成 \(\lambda_1\) )时,有:
      • \(x^*(\lambda_1) \ge x^*(\lambda_2)\),即成本 \(x\) 增加了
      • 此时除非收益也增加,即 \(f(x^*(\lambda_1)) \gt f(x^*(\lambda_2))\),否则最优点不会动(不动时有 \(f(x^*(\lambda_2)) = f(x^*(\lambda_1))\) ),也就是说, \(f(x^*(\lambda_2)) \le f(x^*(\lambda_1))\) 一定成立
  • 根据证明有如下推论:
    • 由于最优算力 \(x^*(\lambda)\) 和和最优收益 \(f(x^*(\lambda))\) 和 \(\lambda\) 均呈现负相关关系(不是严格单调)
      • 当 \(\hat{C} > C\) 时,约束被违反了,需要增大 \(\lambda\) 以增强算力约束,减少算力消耗
      • 当 \(\hat{C} < C\) 时,约束指标还有一定提升空间,需要缩小 \(\lambda\) 以提升收益,直到 \(\lambda=0\) 为止,此时无法继续缩小 \(\lambda\),最优解对应的算力可能仍然是 \(\hat{C} < C\) 的( \(\lambda=0\) 时,原始约束是松约束,相当于没有这个约束)
  • 故而可得 :仅需满足 \(f(\cdot)\) 是非减函数(即价值随算力是单调不减的,不需要满足 RL-MPCA 论文中所说的价值边际收益递减假设)即可使用 \(\lambda^{k+1} = \lambda^{k} + \eta(\hat{C} - C)\) 来更新 \(\lambda\) 以获取最优解
    • 当 算力未用完时 ,减少 \(\lambda\) ,可保证 最优收益增加(单调不减) ,是更优的;
    • 当 算力用超时 ,增加 \(\lambda\) ,可保证 最优点对应的成本降低 ,逐渐降低到满足成本约束,收益会降低,但这是满足算力约束而必要的
    • 注:算力约束是松约束时,\(\lambda = 0\),需要添加 clip 操作防止降低到负数

RL-MPCA 中的一些讨论

  • 论文中对智能算力场景给定两个假设(价值随算力单调递增;边际收益递减)是参考了 DCAF 论文的假设,简化了证明过程。在这两个条件满足时,可以证明最优解一定且仅在 \(\hat{C} = C\) 处,此时可以使用二分查找求解 \(\lambda\) 或Batch Loss来找到最优模型参数(只有这种情况下可以使用这两种方法)
  • 实际上,论文中可以不给定假设,也可以推导得到 \(\lambda^{k+1} = \lambda^{k} + \eta(\hat{C} - C)\) 这样的更新公式,这样定义是方便在 4.1.2 𝜆 Correction in Offline Model Evaluation 中证明可以使用二分查找,有这个假设的情况下,正好使得 \(\lambda^{k+1} = \lambda^{k} + \eta(\hat{C} - C)\) 更容易推导了(论文中使用的是容易推导的形式)
    • 待讨论问题:按照上文的证明,证明二分查找似乎也不需要边际收益递减的假设了吧?

RL——值分布强化学习

本文主要介绍值分布强化学习(Distributional RL)的相关内容

  • 相关论文(这个系列一共三篇主要文章,均来自Google DeepMind,作者是同一拨人):
    • A Distributional Perspective on Reinforcement Learning (C51,2017年6月):C51论文
    • Distributional Reinforcement Learning with Quantile Regression (QR-DQN,2017年10月):QR-DQN论文
    • Implicit Quantile Networks for Distributional Reinforcement Learning (IQN,2018年1月):IQN论文
    • 吐槽:三篇文章用的数据符号比较乱,跟常规强化学习不一样,有些伪代码甚至看不出哪些变量是模型输出的
  • 其他参考链接:
    • 强化学习新思潮1:值分布强化学习(02):C51的详细说明
    • 【方法总结】值分布强化学习(Distributional RL)
    • 【DRL-7】Distributional DQN: Quantile Regression-DQN:QR-DQN论文阅读笔记
    • 值分布强化学习 Distributional Reinforcement Learning

值分布强化学习介绍

  • 值分布强化学习(Distributional RL)算法是指不仅仅估计Q值的均值,还对Q值的分布进行估计的算法
  • 常见算法:包括C51,QR-DQN,IQN等,各种不同值分布强化学习算法的网络结构对比见下图:

从Distributional RL的视角看DQN

  • 从Distributional RL的视角来看,在状态 \(s\) 下执行动作 \(a\) 后,按照策略 \(\pi\) 继续执行的得到的价值为一个随机变量 \(Z^\pi(s,a) = \sum_{t=0}^\infty\gamma^t R(s_t, a_t)\vert_{\forall\ (s_{t},a_t) \ s_{t} \sim P(\cdot|s_{t-1},a_t), a_t \sim \pi(\cdot|s_t),}\),这个随机变量的随机包含以下:
    • 整个决策过程中所有动作决策的随机: \(a \sim \pi(\cdot|s)\)
    • 整个交互过程中状态转移的随机: \(s’ \sim P(\cdot|s,a)\)
    • 注:实际上, \(R(s,a)\) 也可能是随机变量
    • 这些随机导致了真实的状态 \(s\) 下执行动作 \(a\) 后得到的价值是一个随机变量,假设该随机变量服从一个特定的分布 \(P(Z^\pi(s,a)|s,a,\pi)\),即:
      $$ Z^\pi(s,a) \sim P(\cdot|s,a,\pi) $$
  • 而DQN是在拟合随机变量的期望 \(Q^\pi(s,a) = \mathbb{E}_{Z^\pi(s,a) \sim P(\cdot|s,a,\pi)}[Z^\pi(s,a)]\)

C51(Categorical DQN)

  • 这篇文章是值分布强化学习的第一篇,论文中作者不再直接学习Q值期望 \(Q^\pi(s,a)\),而是学习Q价值的分布

  • 论文对分布贝尔曼算子(Distributional Bellman Operator)进行了一些证明:

    • 可以证明,在Wasserstein metric下证明了 Distributional Bellman Operator 是一个 \(\gamma\) -压缩( \(\gamma\) -contraction)算子,从而确保该算子存在不动点
    • 算子的描述可以简单表述为下图:
  • 文章中提出了一种名为Categorical DQN的方法,先确定 \(Q(s,a)\) 的最大最小值,然后将其建模为一个等分为 \(N\) 份的价值区间(PS:在后续实验中,由于分了51份,所以也叫做C51),下面是Categorical DQN的伪代码:

  • 算法解读

    • 说明: \(x_t\) 表示状态,后续我们也用 \(s_t\) 表示
    • 上面的伪代码表示了收集到 \(s_t,a,r,s’\) 后的一次更新过程
    • 基本思路是直接将Q值等分为N份,表示在每个区间下Q值出现的概率
    • 计算下个状态的目标Q值:使用Q值分布计算期望得到Q值 \(Q(s_{t+1}, a):= \sum_i z_i p_i(x_t, a)\),然后决策下个状态下Q值最大的动作 \(a^* = \arg\max_a Q(s_{t+1}, a)\)
    • 更新时,每个区间都需要更新一次:
      • 贝尔曼算子计算目标值: \(\hat{\mathcal{T}}z_j \leftarrow [r_t + y_t z_j]_{V_{MIN}}^{V\ _{MAX}}\)
      • 计算目标值所在区间的下标序号: \(b_j \leftarrow (\hat{\mathcal{T}}z_j - V_{MIN})/\delta z \)
      • 按照序号计算相邻的下标 \(l \leftarrow \lfloor b_j \rfloor, \ u \leftarrow \lceil b_j \rceil\)
      • 将概率分配到Q值相邻的下标上(按照接近程度来分配):
        $$
        \begin{align}
        m_l &\leftarrow m_l + p^{\theta_k}_j(s_{t+1}, a^*)(u-b_j)\\
        m_u &\leftarrow m_u + p^{\theta_k}_j(s_{t+1}, a^*)(b_j-l)
        \end{align}
        $$
    • 损失函数上,使用交叉熵损失函数 \(-\sum_i m_i \log p^\theta_i(s_t, a_t)\) (注:为了方便看懂,我在概率的表达上增加了参数的标识,说明概率来源于参数表达)
    • 补充说明(网络实现中,一个网络输出N个头,然后做softmax得到每个头的概率值):
      $$
      \begin{align}
      Z_\theta(s,a) = z_i \quad \text{w.p.} \ p^\theta_i(x,a) = \frac{e^{\theta_i(s,a)}}{\sum_j e^{\theta_j(s,a)}}
      \end{align}
      $$
      • “w.p.” 是 “with probability” 的缩写
      • 上面的损失函数是一个多分类的交叉熵损失函数,和普通多分类的唯一区别是Ground Truth不是one-hot的,这里的Ground Truth是 \(\{m_i\}_{i=0}^{N-1}\)

QR-DQN

  • Quantile Regression DQN(QR-DQN),建模方式是学习Q值的分位数,提前确定要学习哪些分位点,然后通过分位数回归去学习每个分位点的Q值

    • \(q_j\) 表示:第 \(j\) 个分位点的间隔,可以是固定值,也可以不固定,但是累加和为1

    • \(\theta_j(s,a)\) 表示:分位点 \(\tau_j\) 对应的Q值,下图是一个分位点和累计分布函数的理解图:

    • \(Q(s,a) = \sum_jq_j\theta_j(s,a)\) 是Q值:通过分位数的Q值和对应的分位点区域权重,可以近似计算期望值(理解:不一定是精确的期望,因为通过分位点无法准确计算期望,只是一种近似)

    • 其中损失函数是quantile Huber loss:

    • 损失函数中 \(\mathcal{T}\theta_j\) 就是目标Q值,即损失函数中Ground Truth


IQN

  • 将分位点 \(\tau\) 也作为网络的输入,不再提前假定分位点的值,从而让神经可以拟合整个分布,从而提高对不同分布的表达能力
  • 分位数是均匀分布中随机采样的 \(\tau = U[0,1]\)
  • 价值函数变为 \(Q_\beta(s,a) = \mathbb{E}_{\tau\sim U[0,1]}[Z_{\beta{\tau}}(s,a)]\)
  • 其中 \(\beta(\cdot):[0,1] \rightarrow [0,1]\) 是一个映射函数,可以用于表示不同的风险偏好,借助这个偏好,可以用于实现一些保守策略
    • 如果该函数为凸函数(或者在图像上都在单位映射下方),那么就等于往较差情况加了较大的权重,这就产生了风险规避(risk-averse)型的风险偏好;
    • 如果该函数为凹函数(或者在图像上都在单位映射上方),那么就等于往较好情况加了较大的权重,这就产生了风险偏好(risk-seeking 或 risk-loving)型的风险偏好;
    • 如果该函数就是单位映射,则相当于风险中性(risk-neutral)型的风险偏好

总结

  • 相对普通强化学习拟合一个值期望不同,值分布强化学习拟合一个值分布,所以建模难度会更高些
  • 值分布有很多用途,比如在风险敏感(Risk-Sensitive)的应用场景中,可以使用分布来帮助决策选择风险低的动作(比如Optimized Cost per Mille in Feeds Advertising中使用借助IQN来选择低风险的出价动作)

RL——强化学习开源项目记录


本文主要介绍强化学习中的优质开源项目,包括OpenAI的baselines和SpinningUp,以及Google的Dopamine等

  • 参考链接:
    • 机器学习:Github上排名前19个强化学习 (RL)项目【附带源代码网址】
    • 强化学习(reinforcement learning)有什么好的开源项目、网站、文章推荐一下? - 互联网科技小于哥的回答 - 知乎

整体说明

  • 比较重点的项目是 OpenAI Spinning Up、OpenAI Baselines、Stable-Baselines3 和 AI4Finance-Foundation/ElegantRL 等
  • 初学者或研究者:
    • OpenAI Spinning Up(专为初学者打造, 同时支持 TensorFlow 1.x 和 PyTorch)
    • Baselines(Tensorflow 1.x)
    • Stable-Baselines3(SB3)(PyTorch【特别推荐这个,代码简单易懂】)
  • 金融领域:ElegantRL (也支持分布式训练)
  • 大规模工业化:Ray RLlib 和 Stable-Baselines3(SB3)

OpenAI Spinning Up

  • Spinning Up 是 OpenAI 推出的一个 RL 入门项目,为初学者打造;提供从基础到高级的 RL 教程,包含多个基线算法的实现,如 PPO、TRPO、DDPG 等,支持 OpenAI Gym 环境
  • Spinning Up 强调教育性,文档详细且易于理解,适用于学术研究中的基线算法对比

OpenAI Baselines

  • OpenAI Baselines 是 OpenAI 推出的 RL 库,提供多种经典 RL 算法的实现,包括 DQN、A2C、PPO、TRPO 等,支持 OpenAI Gym 环境
  • Baselines 适用于研究中的算法复现和性能对比(以 PPO 方法为例,Baselines给出了 atari,mujoco 环境的差异化示例,还提供 CNN 或 MLP的策略实现),是开发自定义 RL 算法的基线参考,但仅仅支持 Tensorflow 1.x,且不再有人维护
  • GitHub 仓库 : https://github.com/openai/baselines

Stable Baselines3(SB3)

  • Stable Baselines3(SB3)是一个基于 PyTroch 的开源 RL 库,是 Stable Baselines 的下一代版本,继承了前者的优势并进行了多项优化,目前广泛应用于学术研究、游戏 AI、机器人控制等领域
  • 社区相对前两个来说更加活跃,有人维护,偶尔会有更新
项目名称 核心功能 核心框架 特点 主要场景 维护状态 GitHub 仓库 官方文档
OpenAI Spinning Up RL 算法教学实现(PPO、TRPO、DDPG 等) TensorFlow 1.x/PyTorch 教育性强,文档详细 学术研究、RL 入门学习 维护中(20年后几乎不再更新) https://github.com/openai/spinningup https://spinningup.openai.com/
Stable-Baselines3 主流 RL 算法(PPO、A2C、DQN 等) PyTorch 稳定高效,文档完善 工程落地、需要稳定性的项目 活跃维护 https://github.com/DLR-RM/stable-baselines3 https://stable-baselines3.readthedocs.io/
OpenAI Baselines 经典 RL 算法(DQN、A2C、PPO 等) TensorFlow 1.x 代码清晰,支持 MPI 并行 算法复现、自定义算法开发 停止维护 https://github.com/openai/baselines -
Google Dopamine 深度强化学习算法(DQN、C51、Rainbow) TensorFlow 简洁快速,适合小规模实验 算法原型验证、教学 维护中 https://github.com/google/dopamine -
ElegantRL 连续控制算法(DDPG、TD3、SAC) PyTorch 金融场景优化,支持分布式训练 金融量化交易、大规模实验 维护中 https://github.com/AI4Finance-Foundation/ElegantRL https://elegantrl.readthedocs.io/
Ray RLlib 分布式与多智能体算法(PPO、IMPALA) PyTorch/TensorFlow 高性能,支持大规模并行(Ray框架)与 MARL 工业级应用、自动驾驶、机器人 活跃维护 https://github.com/ray-project/ray https://docs.ray.io/en/latest/rllib/index.html
1…171819…61
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

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