

在**经典策略梯度理论**中，目标是**最大化期望回报**，所以从数学目标的角度看，策略参数更新是 **梯度上升（gradient ascent）**，不是梯度下降。

经典目标是：
$$
J(\theta)=\mathbb{E}_{\tau\sim\pi_\theta}[R(\tau)]  
$$
其中 ($J(\theta)$) 是策略 ($\pi_\theta$) 的期望累计回报。策略梯度方法直接更新参数化策略，更新方向是期望奖励关于策略参数的梯度。Sutton 等人的经典 policy gradient 论文也表述为：策略由参数化函数表示，并按照 expected reward 对策略参数的梯度进行更新。([NeurIPS Papers](https://papers.neurips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf?utm_source=chatgpt.com "Policy Gradient Methods for Reinforcement Learning with ..."))

因此更新公式是：
$$
\theta_{k+1}
=
\theta_k  
+  
\alpha \nabla_\theta J(\theta_k)  
$$
这里是 **加号**，因为要让 ($J(\theta)$) 增大。OpenAI Spinning Up 对 vanilla policy gradient 的公式也是：
$$
\theta_{k+1}=\theta_k+\alpha\nabla_\theta J(\pi_{\theta_k})  
$$
并明确称其为对 policy performance 做 stochastic gradient ascent。([Spinning Up](https://spinningup.openai.com/en/latest/algorithms/vpg.html?utm_source=chatgpt.com "Vanilla Policy Gradient — Spinning Up documentation"))

---

但是在代码实现中，经常看到的是 **梯度下降**。这不是理论目标变了，而是因为深度学习框架通常默认最小化 loss。于是把最大化目标改写成最小化它的负数：
$$
\max_\theta J(\theta)  
$$
等价于：
$$
\min_\theta -J(\theta)  
$$
所以如果定义 policy loss 为：
$$
\mathcal{L}_{\text{policy}}(\theta)
=
-J(\theta)  
$$
那么代码中执行的是：
$$
\theta_{k+1}
=
 \theta_k
+
\alpha \nabla_\theta \mathcal{L}_{\text{policy}}(\theta_k)  

$$
代入：
$$
\mathcal{L}_{\text{policy}}=-J  
$$
则：(对原目标函数的取负然后进行梯度下降)
$$
\theta_{k+1}
=
 \theta_k
-
\alpha \nabla_\theta (-J(\theta_k))
=
\theta_k  
+  
\alpha \nabla_\theta J(\theta_k)  
$$
所以两者完全等价。

---

在策略梯度的采样估计形式中，常见更新为：
$$
\hat{g}
=
\frac{1}{N}  
\sum_t  
\nabla_\theta\log\pi_\theta(a_t|s_t)\hat{A}_t  
$$
理论更新是：
$$
\theta  
\leftarrow  
\theta+\alpha\hat{g}  
$$
如果写成 loss，则常定义：
$$
\mathcal{L}_{\text{actor}}
=
\frac{1}{N}  
\sum_t  
\log\pi_\theta(a_t|s_t)\hat{A}_t  
$$
然后用梯度下降最小化：

$$
\theta  
\leftarrow  
\theta-\alpha\nabla_\theta \mathcal{L}_{\text{actor}}  
$$

这等价于对期望回报做梯度上升。

---

因此最准确的说法是：

**理论上：策略梯度是对期望回报 ($J(\theta)$) 做梯度上升。**  
**实现上：通常把目标取负写成 loss，然后用梯度下降最小化 loss。**

也就是说：
$$
\text{maximize reward by gradient ascent}  
$$
和：
$$
\text{minimize negative reward objective by gradient descent}  
$$
是同一件事的两种写法。

---


在策略梯度（Policy Gradient）理论中，代理目标（Surrogate Objective）**是从理论上的局部微积分推导，走向工程上能实现**单调策略迭代（Monotonic Policy Iteration）的绝对核心数学桥梁。

若没有代理目标的引入，策略梯度算法只能在极其微小的步长下蹒跚前行，极易遭遇性能断崖（Performance Collapse）。


### 1. 理论瓶颈：策略梯度定理与真实目标

强化学习的**真实优化目标**是最大化策略 $\pi$ 下的期望累积折现回报 $J(\pi)$：
$$J(\pi) = \mathbb{E}_{\tau \sim \pi} \left[ \sum_{t=0}^{\infty} \gamma^t r_t \right]$$
根据著名的策略梯度定理（Policy Gradient Theorem），目标函数对参数 $\theta$ 的一阶导数为：
$$\nabla_\theta J(\pi_\theta) = \mathbb{E}_{s \sim \rho^{\pi_\theta}, a \sim \pi_\theta} \left[ \nabla_\theta \log \pi_\theta(a|s) A^{\pi_\theta}(s, a) \right]$$
式中，$\rho^{\pi_\theta}$ 为当前策略诱导的平稳状态访问分布（State Visitation Frequencies），$A^{\pi_\theta}(s, a)$ 为优势函数。

**致命缺陷**：==此梯度仅在当前参数点 $\theta$ 处极其局部地有效。当利用此梯度执行更新（$\theta_{new} = \theta_{old} + \alpha \nabla_\theta J$）后，策略发生改变。而策略的改变不仅会改变动作概率 $\pi(a|s)$，更会**彻底改变环境的状态访问分布 $\rho^\pi$**。==**这种底层测度（Measure）的突变，导致普通的梯度上升步长哪怕稍微过大，更新后的策略表现便会面临毁灭性崩塌。**

---

### 2. 破局起点：性能差异引理 (Performance Difference Lemma)

为解决上述分布偏移问题，Kakade 与 Langford (Approximately Optimal Approximate Reinforcement Learning) 提出了著名的性能差异引理，建立了任意新策略 $\pi$ 与旧策略 $\pi_{old}$ 之间真实回报的精确等式：
$$J(\pi) = J(\pi_{old}) + \mathbb{E}_{s \sim \rho^{\pi}, a \sim \pi} \left[ A^{\pi_{old}}(s, a) \right]$$
此等式意义非凡：==它指出新策略的性能，等于旧策略的性能，加上新策略在**旧策略的优势函数**下产生的**期望增益**。

==然而，该公式在工程上**完全无法计算**。因为期望外部的状态分布 $\rho^{\pi}$ 依赖于新策略，而在新策略部署到环境并收集海量数据之前，无从得知 $\rho^{\pi}$ 的真实面貌。

---

### 3. 核心数学构造：局部代理目标 (Local Surrogate Objective)

**==为将不可计算的恒等式转化为可计算的优化目标**，引入一个核心的**局部近似假设**：**假设新旧策略差异极小，使得状态分布不发生剧变。**

在此假设下，强行将性能差异引理中无法求知的 $\rho^{\pi}$ 替换为当前已知的 $\rho^{\pi_{old}}$，由此构造出**局部代理目标 $L_{\pi_{old}}(\pi)$**：

$$L_{\pi_{old}}(\pi) = J(\pi_{old}) + \mathbb{E}_{s \sim \rho^{\pi_{old}}, a \sim \pi} \left[ A^{\pi_{old}}(s, a) \right]$$

利用**重要性采样（Importance Sampling）**，可将对动作 $a \sim \pi$ 的期望，转换为在旧策略收集到的历史数据上进行评估。定义概率比值 $r(\theta) = \frac{\pi(a|s)}{\pi_{old}(a|s)}$，代理目标化简为纯粹的**数据驱动**形式：
$$L_{\pi_{old}}(\pi) = J(\pi_{old}) + \mathbb{E}_{s, a \sim \pi_{old}} \left[ \frac{\pi(a|s)}{\pi_{old}(a|s)} A^{\pi_{old}}(s, a) \right]$$
**严谨的分析学性质保证：**

1. **零阶一致性**：当 $\pi = \pi_{old}$ 时，$L_{\pi_{old}}(\pi_{old}) = J(\pi_{old})$。
    
2. **一阶一致性**：当 $\pi = \pi_{old}$ 时，代理目标的梯度与真实目标的梯度完全相等，即 $\nabla_\theta L_{\pi_{old}}(\pi_\theta) |_{\theta_{old}} = \nabla_\theta J(\pi_\theta) |_{\theta_{old}}$。
    

**这意味着，最大化代理目标 $L$，在初始阶段等价于最大化真实目标 $J$。**

---

### 4. 从下界保障到 PPO 的截断代理目标

**仅仅拥有局部近似依然不够安全。Schulman 等人（TRPO 论文）通过引入策略间的总变差散度（后放宽为 KL 散度）**，将上述近似关系升格为严格的**下界不等式（Lower Bound）**：
$$J(\pi) \ge L_{\pi_{old}}(\pi) - C \cdot D_{KL}^{\max}(\pi_{old}, \pi)$$
**此不等式构成了置信域策略优化（TRPO）的基石：只要使得右侧的代理目标下界单调递增，真实目标 $J(\pi)$ 必然单调递增。**

但 TRPO 求解具有 KL 散度约束的共轭梯度方程计算代价过于昂贵。随后诞生的 **PPO (Proximal Policy Optimization)** 提出了**工程上**更极致的代理目标变体——**截断代理目标（Clipped Surrogate Objective）**：
$$L^{CLIP}(\theta) = \mathbb{E}_{t} \left[ \min \left( r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t \right) \right]$$
**截断操作的数学深意：**

该操作直接作用于重要性权重 $r_t(\theta)$。**当更新使得新策略严重偏离旧策略（即 $r_t$ 越过 $1+\epsilon$ 或 $1-\epsilon$ 的边界）时，目标函数的梯度被强行截断为 0。**

**这本质上构建了一个更加保守的代理下界，强制优化器在一个天然的“置信域（Trust Region）”内对代理目标进行搜索，彻底摆脱了复杂的二阶矩阵运算，同时保留了单调提升的理论保障。**

**综上所述**，策略梯度中的代理目标，是一场通过局部一阶近似与分布替代机制，将不可计算的马尔可夫决策过程性能跃迁，转化为可通过已知静态数据集安全求解的凸优化数学艺术。


---


下面把 **经典策略梯度理论** 和 **surrogate objective（替代目标函数）** 放在同一个理论链条里严谨说明。核心结论先给出：

**经典 policy gradient 的根本对象是真实期望回报 ($J(\theta)$) 及其梯度 ($\nabla_\theta J(\theta)$)。surrogate objective 不是原始真实目标，而是在当前策略附近构造的局部代理目标；它的关键性质是：在旧策略点处，它的一阶梯度与真实策略梯度一致或近似一致。**


# 1. 强化学习中的真实目标

设环境为 MDP，策略为参数化策略：
$$
\pi_\theta(a|s)  
$$
其中 ($\theta$) 是策略参数。在深度强化学习中，($\pi_\theta$) 通常是神经网络，($\theta$) 是网络权重。

**轨迹记为：**
$$
\tau=(s_0,a_0,s_1,a_1,\ldots)  
$$
折扣累计回报为：
$$
R(\tau)
=
\sum_{t=0}^{\infty}\gamma^t r(s_t,a_t)  
$$
其中：
$$
0<\gamma<1  
$$
经典策略优化目标是最大化真实期望回报：
$$
J(\theta)
=
\mathbb{E}_{\tau\sim p_\theta(\tau)}  
[  
R(\tau)  
]  
$$
这里的轨迹分布 ($p_\theta(\tau)$) 由策略 ($\pi_\theta$)、环境转移概率和初始状态分布共同决定。Sutton 等人的策略梯度理论正是研究如何在函数逼近条件下直接对参数化策略进行梯度优化。([NeurIPS Papers](https://papers.neurips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf?utm_source=chatgpt.com "Policy Gradient Methods for Reinforcement Learning with ..."))

---
# 2. 轨迹概率与 log-derivative trick

轨迹概率可以写成：
$$
p_\theta(\tau)
=
\rho_0(s_0)  
\prod_{t=0}^{T-1}  
\pi_\theta(a_t|s_t)  
P(s_{t+1}|s_t,a_t)  
$$
其中：

- $\rho_0(s_0)$：初始状态分布；
    
- $P(s_{t+1}|s_t,a_t)$：环境转移；
    
- $\pi_\theta(a_t|s_t)$：策略给出的动作概率。
    
由于环境转移通常不依赖 ($\theta$)，所以对 ($\theta$) 求导时，只有策略项贡献梯度。

目标函数为：

$$
J(\theta)
=
\sum_\tau p_\theta(\tau)R(\tau)  
$$
求导：
$$
\nabla_\theta J(\theta)
=
\sum_\tau \nabla_\theta p_\theta(\tau)R(\tau)  
$$
**利用恒等式：**
$$
\nabla_\theta p_\theta(\tau)
=
p_\theta(\tau)\nabla_\theta \log p_\theta(\tau)  
$$
得到：
$$
\nabla_\theta J(\theta)
=
\sum_\tau  
p_\theta(\tau)  
\nabla_\theta \log p_\theta(\tau)  
R(\tau)  
$$
即：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{\tau\sim p_\theta}  
[  
\nabla_\theta \log p_\theta(\tau)R(\tau)  
]  
$$
又因为：
$$
\log p_\theta(\tau)
=
\log \rho_0(s_0)  
+  
\sum_t \log \pi_\theta(a_t|s_t)  
+  
\sum_t \log P(s_{t+1}|s_t,a_t)  
$$
环境项不依赖 ($\theta$)，所以：
$$
\nabla_\theta \log p_\theta(\tau)
=
\sum_t  
\nabla_\theta \log \pi_\theta(a_t|s_t)  
$$
因此：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{\tau\sim p_\theta}  
\left[  
\sum_t  
\nabla_\theta \log \pi_\theta(a_t|s_t)  
R(\tau)  
\right]  
$$
这就是 REINFORCE 类型策略梯度的基本形式。

---

# 3. 从整条轨迹回报到 reward-to-go

上式中，**每个动作 ($a_t$) 都乘以整条轨迹回报 ($R(\tau)$)。但 ($a_t$) 不能影响过去的奖励，只能影响从 ($t$) 之后的未来奖励。** 因此可以使用从 ($t$) 开始的 reward-to-go：
$$
R_t
=
\sum_{k=t}^{\infty}  
\gamma^{k-t}r(s_k,a_k)  
$$
于是策略梯度可以写成：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
\left[  
\sum_t  
\nabla_\theta \log \pi_\theta(a_t|s_t)  
R_t  
\right]  
$$
进一步，引入动作价值函数：
$$
Q^{\pi_\theta}(s_t,a_t)
=
\mathbb{E}_{\pi_\theta}  
[  
R_t|s_t,a_t  
]  
$$
可得：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{s_t,a_t\sim\pi_\theta}  
\left[  
\nabla_\theta \log \pi_\theta(a_t|s_t)  
Q^{\pi_\theta}(s_t,a_t)  
\right]  
$$
**这就是经典 policy gradient theorem 的核心表达**。Sutton 等人的原始策略梯度论文正是给出并分析了这种直接对参数化策略求梯度的理论框架。([NeurIPS Papers](https://papers.neurips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf?utm_source=chatgpt.com "Policy Gradient Methods for Reinforcement Learning with ..."))

---
# 4. baseline 与 advantage：为什么可以减去 ($V^\pi(s)$)

策略梯度估计方差通常很大，因此经典理论中引入 baseline。对任意只依赖状态、不依赖动作的函数 ($b(s)$)，有：
$$
\mathbb{E}_{a\sim\pi_\theta(\cdot|s)}  
[  
\nabla_\theta \log \pi_\theta(a|s)b(s)  
]  
=0  
$$
证明如下：
$$
\mathbb{E}_{a\sim\pi_\theta}  
[  
\nabla_\theta \log \pi_\theta(a|s)b(s)  
]
=
b(s)  
\sum_a  
\pi_\theta(a|s)  
\nabla_\theta \log \pi_\theta(a|s)  
$$
利用：
$$
\nabla_\theta \log \pi_\theta(a|s)
=
\frac{\nabla_\theta \pi_\theta(a|s)}  
{\pi_\theta(a|s)}  
$$
得到：
$$
b(s)  
\sum_a  
\nabla_\theta \pi_\theta(a|s)  
$$
而：
$$
\sum_a \pi_\theta(a|s)=1  
$$
所以：
$$
\sum_a\nabla_\theta\pi_\theta(a|s)

\nabla_\theta 1
=
0  
$$
因此：
$$
\mathbb{E}_{a\sim\pi_\theta}  
[  
\nabla_\theta \log \pi_\theta(a|s)b(s)  
]  
=0  
$$
这说明，减去 (b(s)) 不改变策略梯度期望，只改变方差。

最常用的 baseline 是状态价值函数：
$$
V^{\pi_\theta}(s)
=
\mathbb{E}_{\pi_\theta}  
[  
R_t|s_t=s  
]  
$$
于是定义 advantage：
$$
A^{\pi_\theta}(s,a)
=
 Q^{\pi_\theta}(s,a)
-
V^{\pi_\theta}(s)  
$$
策略梯度变为：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{s,a\sim\pi_\theta}  
[  
\nabla_\theta \log \pi_\theta(a|s)  
A^{\pi_\theta}(s,a)  
]  
$$
这就是 actor-critic、TRPO、PPO 等方法中最常用的策略梯度形式。GAE 论文也明确指出，策略梯度方法的一个核心问题是样本需求大和稳定改进困难，因此使用 value function 估计 advantage 可以降低方差，但会引入偏差—方差权衡。([arXiv](https://arxiv.org/abs/1506.02438?utm_source=chatgpt.com "High-Dimensional Continuous Control Using Generalized Advantage Estimation"))

---

# 5. 到这里为止：经典 policy gradient 的目标仍然是 ($J(\theta)$)

到目前为止，理论对象都是：
$$
J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}  
[  
R(\tau)  
]  
$$
以及其梯度：
$$
\nabla_\theta J(\theta)  
$$
也就是说，**经典策略梯度理论本身并不是先定义 surrogate objective，再优化 surrogate objective**。

更准确地说，经典策略梯度理论提供的是：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
[  
\nabla_\theta \log \pi_\theta(a|s)A^\pi(s,a)  
]  

$$
==这个公式告诉算法：如何用采样数据估计真实回报目标的梯度。

但是现代深度策略梯度算法，尤其是 TRPO 和 PPO，并不直接把真实回报 ($J(\theta)$) 当作每一步优化的可计算目标，而是构造一个局部 surrogate objective。

---

# 6. 为什么需要 surrogate objective？

真实目标：
$$
J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}  
[  
R(\tau)  
]  
$$
**有一个根本困难：一旦 ($\theta$) 改变，轨迹分布也改变。**

也就是说：
$$
\theta_{\text{old}}  
\rightarrow  
\theta  
$$
不仅改变动作概率：
$$
\pi_{\theta}(a|s)  
$$
还改变状态访问分布：
$$
d^{\pi_\theta}(s)  
$$
**==因此，如果想直接评价新策略 ($\pi_\theta$) 的真实回报，理论上需要重新用 ($\pi_\theta$) 采样大量轨迹。**
**surrogate objective 的目的就是：**
> **用旧策略 ($\pi_{\text{old}}$) 采集的数据，构造一个局部代理目标，近似新策略相对于旧策略的改进方向。**
---

# 7. 从 performance difference lemma 到 surrogate objective

更严谨地说，surrogate objective 可以从策略改进关系导出。

**对两个策略 $(\pi$) 和 ($\pi'$)，有一个重要关系：新策略相对于旧策略的性能差异可以用旧策略的 advantage 表示。** 直观形式为：
$$
J(\pi')-J(\pi)
=
\frac{1}{1-\gamma}  
\mathbb{E}_{s\sim d^{\pi'},a\sim\pi'}  
[  
A^\pi(s,a)  
]  
$$
其中：
- ($d^{\pi'}(s)$)：新策略 ($\pi'$) 诱导的折扣状态访问分布；
    
- ($A^\pi(s,a)$)：旧策略 ($\pi$) 下的 advantage。
    
这个式子说明：**若新策略在其实际访问的状态上，倾向于选择旧策略认为 advantage 为正的动作，则新策略性能提高。**
==但问题是：
$$
d^{\pi'}(s)  
$$
未知，因为这需要新策略真正与环境交互才能得到。

**于是 surrogate objective 做一个局部近似：用旧策略状态分布 ($d^\pi(s)$) 替代新策略状态分布 ($d^{\pi'}(s)$)。**

于是得到：
$$
L_\pi(\pi')
=
J(\pi)  
+  
\frac{1}{1-\gamma}  
\mathbb{E}_{s\sim d^\pi,a\sim\pi'}  
[  
A^\pi(s,a)  
]  
$$
**这里 ($J(\pi)$) 是常数，最大化时可忽略；($\frac{1}{1-\gamma}$) 也是正比例常数，也可忽略。因此核心 surrogate objective 是**：
$$
L_\pi(\pi')
=
\mathbb{E}_{s\sim d^\pi,a\sim\pi'}  
[  
A^\pi(s,a)  
]  
$$
TRPO 正是基于这种策略改进思想构造 surrogate objective，并用 KL 约束限制新旧策略距离。TRPO 论文说明，其实际算法是对理论上有单调改进保证的策略更新过程进行若干近似后得到的。([arXiv](https://arxiv.org/abs/1502.05477?utm_source=chatgpt.com "Trust Region Policy Optimization"))

---

# 8. 用重要性比率写成可采样形式

旧策略 ($\pi$) 采样的数据满足：
$$
s\sim d^\pi,  
\quad  
a\sim \pi(\cdot|s)  

$$
但 surrogate objective 里有：
$$
a\sim \pi'(\cdot|s)  
$$
为了用旧策略动作样本估计新策略目标，引入**重要性比率**：
$$
\rho(s,a)
=
\frac{\pi'(a|s)}  
{\pi(a|s)}  
$$
于是：
$$
\mathbb{E}_{a\sim\pi'}  
[  
A^\pi(s,a)  
]
=
\mathbb{E}_{a\sim\pi}  
\left[  
\frac{\pi'(a|s)}  
{\pi(a|s)}  
A^\pi(s,a)  
\right]  
$$
因此 surrogate objective 可写为：
$$
L_\pi(\pi')
=
\mathbb{E}_{s\sim d^\pi,a\sim\pi}  
\left[  
\frac{\pi'(a|s)}  
{\pi(a|s)}  
A^\pi(s,a)  
\right]  
$$
将新策略写成参数化形式 ($\pi_\theta$)，旧策略写成 ($\pi_{\theta_{\text{old}}}$)，得到现代策略梯度方法中常见的形式：
$$
L_{\theta_{\text{old}}}(\theta)
=
\mathbb{E}_{t}  
\left[  
\frac{  
\pi_\theta(a_t|s_t)  
}{  
\pi_{\theta_{\text{old}}}(a_t|s_t)  
}  
\hat{A}_t  
\right]  

$$
记：
$$
\rho_t(\theta)
=
\frac{  
\pi_\theta(a_t|s_t)  
}{  
\pi_{\theta_{\text{old}}}(a_t|s_t)  
}  
$$
则：
$$
L_{\theta_{\text{old}}}(\theta)
=
\mathbb{E}_{t}  
[  
\rho_t(\theta)\hat{A}_t  
]  

$$
这就是最基本的 surrogate objective。

---

# 9. surrogate objective 的直观含义

**单个样本贡献为：**
$$
\rho_t(\theta)\hat{A}_t  
$$
若：
$$
\hat{A}_t>0  
$$
说明动作 ($a_t$) 在状态 ($s_t$) 下优于旧策略平均水平。此时若新策略提高该动作概率：
$$
\pi_\theta(a_t|s_t)
>
\pi_{\theta_{\text{old}}}(a_t|s_t)  
$$
则：
$$
\rho_t(\theta)>1  
$$
该样本对 surrogate objective 的贡献增大。

所以：
$$
\hat{A}_t>0  
\Rightarrow  
\text{提高该动作概率}  
$$
若：
$$
\hat{A}_t<0  
$$
说明该动作低于平均水平。此时若新策略降低该动作概率：
$$
\pi_\theta(a_t|s_t)  
<  
\pi_{\theta_{\text{old}}}(a_t|s_t)  
$$
则：
$$
\rho_t(\theta)<1  
$$
因为 ($\hat{A}_t<0$)，乘积变得没那么负，目标增大。

所以：
$$
\hat{A}_t<0  
\Rightarrow  
\text{降低该动作概率}  
$$
因此 surrogate objective 的含义是：
$$
\text{提高旧数据中 advantage 为正的动作概率，降低 advantage 为负的动作概率}  
$$
---

# 10. surrogate objective 为什么和 policy gradient 有关？

关键性质是：在旧策略点处(参数)，surrogate objective 的梯度等于或近似等于真实策略梯度。
设：
$$
\theta=\theta_{\text{old}}  
$$
则：
$$
\rho_t(\theta_{\text{old}})
=
1  
$$
对 surrogate objective 求梯度：
$$
\nabla_\theta L_{\theta_{\text{old}}}(\theta)
=
\nabla_\theta  
\mathbb{E}_{t}  
[  
\rho_t(\theta)\hat{A}_t  
]  
$$
因为数据来自旧策略，**采样分布对 ($\theta$) 固定**，所以：
$$
\nabla_\theta L_{\theta_{\text{old}}}(\theta)
=
\mathbb{E}_{t}  
[  
\nabla_\theta \rho_t(\theta)\hat{A}_t  
]  
$$
而：
$$
\nabla_\theta \rho_t(\theta)
=
\frac{  
\nabla_\theta \pi_\theta(a_t|s_t)  
}{  
\pi_{\theta_{\text{old}}}(a_t|s_t)  
}  
$$

在 ($\theta=\theta_{\text{old}}$) 处：
$$
\nabla_\theta \rho_t(\theta_{\text{old}})
=
 \frac{  
\nabla_\theta \pi_\theta(a_t|s_t)  
}{  
\pi_\theta(a_t|s_t)  
}
\nabla_\theta\log\pi_\theta(a_t|s_t)  
$$
因此：


$$
\nabla_\theta L_{\theta_{\text{old}}}(\theta)  
\bigg|_{\theta=\theta_{\text{old}}}
=
\mathbb{E}_{t}  
[  
\nabla_\theta\log\pi_\theta(a_t|s_t)\hat{A}_t  
]  
$$
这正是 advantage 形式的 policy gradient estimator。

所以 surrogate objective 的理论地位是：
$$
\boxed{  
L_{\theta_{\text{old}}}(\theta)  
\text{ 不是 } J(\theta)，  
\text{但在 } \theta_{\text{old}}  
\text{ 附近，它的一阶梯度与 } J(\theta)  
\text{ 的策略梯度一致。}  
}  
$$
换句话说，它是 **first-order surrogate**。

---

# 11. 为什么 surrogate objective 只是局部有效？

==因为上面的推导有一个关键近似：
$$
d^{\pi'}(s)  
\approx  
d^\pi(s)  
$$
也就是说，新策略和旧策略访问的状态分布必须接近。

如果新策略与旧策略差异很大，那么新策略会访问不同状态：
$$
d^{\pi_\theta}(s)  
\neq  
d^{\pi_{\theta_{\text{old}}}}(s)  
$$
但 surrogate objective 仍然只在旧策略采集的数据上计算：
$$
s\sim d^{\pi_{\theta_{\text{old}}}}  
$$
这时 surrogate objective 可能错误评估新策略。

因此，一般不能推出：
$$
L_{\theta_{\text{old}}}(\theta_2)

L_{\theta_{\text{old}}}(\theta_1)  
\Rightarrow  
J(\theta_2)

J(\theta_1)  
$$
只能说，在旧策略附近、小步更新条件下，surrogate objective 的一阶方向有理论依据。

---

# 12. ==TRPO：用 KL trust region 保护 surrogate objective

TRPO 的基本思想是：
$$
\max_\theta  
\mathbb{E}_t  
[  
\rho_t(\theta)\hat{A}_t  
]  
$$
但同时加约束：
$$
\mathbb{E}_t  
[  
D_{\mathrm{KL}}  
(  
\pi_{\theta_{\text{old}}}(\cdot|s_t)  
|  
\pi_\theta(\cdot|s_t)  
)  
]  
\leq \delta  
$$
即：
$$
\text{最大化 surrogate objective}  
$$
但：
$$
\text{新旧策略不能相差太远}  
$$
KL 约束的作用是让更新保持在 trust region 中，使得局部近似仍然可信。TRPO 论文指出，它通过 KL 约束来鲁棒地允许较大更新，同时避免局部近似完全失效。([Proceedings of Machine Learning Research](https://proceedings.mlr.press/v37/schulman15.pdf?utm_source=chatgpt.com "Trust Region Policy Optimization"))

所以 TRPO 的理论结构是：
$$
\text{surrogate objective}  
+  
\text{trust region}  
\Rightarrow  
\text{近似策略改进}  
$$
---

# 13. PPO：用 clipped surrogate objective 近似 trust region

TRPO 需要处理 KL 约束和近似二阶信息，计算较复杂。PPO 则把“不要让新旧策略差太远”的思想直接写入目标函数。

PPO 的 clipped surrogate objective 是：
$$
L^{\text{CLIP}}(\theta)
=
\mathbb{E}_t  
\left[  
\min  
\left(  
\rho_t(\theta)\hat{A}_t,  
\operatorname{clip}  
(  
\rho_t(\theta),1-\epsilon,1+\epsilon  
)  
\hat{A}_t  
\right)  
\right]  
$$
其中：
$$
\rho_t(\theta)
=
\frac{  
\pi_\theta(a_t|s_t)  
}{  
\pi_{\theta_{\text{old}}}(a_t|s_t)  
}  
$$

PPO 论文明确提出，PPO 交替进行环境采样和 surrogate objective 的随机梯度上升，并提出新的目标函数，使得同一批数据可以进行多个 epoch 的 minibatch 更新；相较于 TRPO，PPO 更简单、更通用，并且经验上样本复杂度更好。([arXiv](https://arxiv.org/abs/1707.06347?utm_source=chatgpt.com "Proximal Policy Optimization Algorithms"))

---

# 14. PPO clipping 的两种情况

## 情况一：($\hat{A}_t>0$)

动作是好的。目标希望提高该动作概率，即提高：
$$
\rho_t(\theta)  
$$
但若：
$$
\rho_t(\theta)>1+\epsilon  
$$
继续提高该动作概率不会带来更多收益，因为 clip 后固定为：
$$
1+\epsilon  
$$
所以 PPO 限制“过度提高好动作概率”。

---

## 情况二：($\hat{A}_t<0$)

动作是差的。目标希望降低该动作概率，即降低：
$$
\rho_t(\theta)  
$$
但若：
$$
\rho_t(\theta)<1-\epsilon  
$$
继续降低该动作概率不会带来更多收益。

所以 PPO 限制“过度降低坏动作概率”。

因此，PPO clipped surrogate objective 的机制是：
$$
\text{允许朝 advantage 指示的方向更新，但限制概率比率偏离 1 太远}  
$$
---

# 15. surrogate objective 与代码中的 policy loss

实际实现中，PPO 常写成最小化 loss：
$$
\mathcal{L}_{\text{policy}}
=
L^{\text{CLIP}}(\theta)  
$$
因为深度学习框架通常默认做梯度下降，而 RL 目标通常是最大化。所以最大化：
$$
L^{\text{CLIP}}(\theta)  
$$
等价于最小化：
$$
-L^{\text{CLIP}}(\theta)  
$$
因此在代码中看到的 “policy loss” 往往是 surrogate objective 的负数。

这点容易造成概念混淆：
$$
\text{数学论文：maximize surrogate objective}  
$$
$$
\text{代码实现：minimize negative surrogate loss}  
$$
二者本质相同。

---

# 16. surrogate objective 与 value function 的关系

surrogate objective 中使用的 ($\hat{A}_t$) 通常由 value function 估计得到。例如：
$$
\hat{A}_t  
\approx  
Q^\pi(s_t,a_t)-V^\pi(s_t)  
$$
实际中常用 GAE：
$$
\hat{A}^{\text{GAE}}_t  
$$
**GAE 用一系列 TD residual 的指数加权和来估计 advantage，用 ($\lambda$) 控制偏差—方差权衡。GAE 论文指出，其目的就是通过 value function 降低 policy gradient estimate 的方差，但会产生一定 bias**。([arXiv](https://arxiv.org/abs/1506.02438?utm_source=chatgpt.com "High-Dimensional Continuous Control Using Generalized Advantage Estimation"))

所以 surrogate objective 的质量依赖于：

1. ($\hat{A}_t$) 是否可靠；
    
2. value function 是否准确；
    
3. 样本是否足够；
    
4. 新旧策略距离是否较小。
    

若 advantage 估计错误，surrogate objective 也会给出错误更新方向。

---
# 17. normalized advantage 的影响

**很多实现会对 advantage 做归一化**：
$$
\hat{A}_t  
\leftarrow  
\frac{  
\hat{A}_t-\mu(\hat{A})  
}{  
\sigma(\hat{A})  
}  
$$
这可以改善数值尺度，使优化更稳定。

**但严格地说，归一化后的 surrogate objective 已经不是完全原始的理论形式。它通常保留“相对好坏”的方向信息，但改变了尺度和中心化方式。**

因此，实际 PPO/TRPO 中优化的 surrogate objective 往往包含工程处理：

- advantage 估计；
    
- advantage normalization；
    
- clipping；
    
- KL penalty 或 KL early stopping；
    
- entropy bonus；
    
- value loss；
    
- minibatch 多轮更新。
    

这些都会使实际优化目标和理论形式存在差异。

---

# 18. surrogate objective 的核心局限

surrogate objective 的局限可以概括为四点。

## 第一，状态分布错配

真实目标依赖新策略状态分布：
$$
d^{\pi_\theta}(s)  
$$
surrogate objective 使用旧策略状态分布：
$$
d^{\pi_{\text{old}}}(s)  
$$
因此它只是局部近似。

---

## 第二，advantage 估计误差

理论中需要：
$$
A^{\pi_{\text{old}}}(s,a)  
$$
实际中用：

$$
\hat{A}_t  
$$
若 ($\hat{A}_t$) 有偏或高方差，surrogate objective 会失真。

---

## 第三，有限样本误差

期望：
$$
\mathbb{E}_t[  
\rho_t(\theta)\hat{A}_t  
]  
$$
实际用有限 batch 的经验均值估计：
$$
\frac{1}{N}  
\sum_{t=1}^{N}  
\rho_t(\theta)\hat{A}_t  
$$
样本不足时，该经验目标可能与真实期望差异很大。

---

## 第四，远离旧策略后局部近似失效

即使 advantage 准确、样本充足，如果更新太大，surrogate objective 也可能不再代表真实回报。

这正是 TRPO/PPO 需要 trust region 或 clipping 的原因。

---

# 19. 与《A Closer Look at Deep Policy Gradients》的关系

现代深度策略梯度算法的行为是否符合其理论动机？

该论文发现，深度策略梯度算法经常偏离理论预期：gradient estimates 与 true gradient 相关性较差，learned value estimators 不能很好拟合 true value function，surrogate objective 不匹配 true reward landscape。([OpenReview](https://openreview.net/pdf?id=ryxdEkHtPS&utm_source=chatgpt.com "A CLOSER LOOK AT DEEP POLICY GRADIENTS"))

这说明：
$$
\text{surrogate objective 有明确理论动机}  
$$
但在深度 RL 实际训练中：
$$
\text{surrogate objective 不一定可靠反映真实奖励景观}  
$$
Figure 11/12 也补充说明了 value network 对 GAE 目标和真实 returns 的拟合存在差异；Figure 19/20 则显示 Humanoid-v2 上低样本 reward landscape 非常噪声化。

---

# 20. 最终总结

可以把经典策略梯度理论与 surrogate objective 的关系压缩成下面这条链：
$$
J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}[R(\tau)]  
$$
是真实目标。

策略梯度定理给出：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
[  
\nabla_\theta\log\pi_\theta(a|s)A^\pi(s,a)  
]  

$$
这是经典 policy gradient 的核心。

为了用旧策略数据近似新策略改进，构造：
$$
L_{\theta_{\text{old}}}(\theta)
=
\mathbb{E}_t  
\left[  
\frac{  
\pi_\theta(a_t|s_t)  
}{  
\pi_{\theta_{\text{old}}}(a_t|s_t)  
}  
\hat{A}_t  
\right]  
$$
这是 surrogate objective。

它满足局部一阶性质：
$$
\nabla_\theta L_{\theta_{\text{old}}}(\theta)  
\bigg|_{\theta=\theta_{\text{old}}}  
\approx  
\nabla_\theta J(\theta_{\text{old}})  
$$
但一般不满足全局等价：
$$
L_{\theta_{\text{old}}}(\theta)\uparrow  
\not\Rightarrow  
J(\theta)\uparrow  
$$
因此：

**经典策略梯度理论优化的根本目标是真实期望回报 ($J(\theta)$)；surrogate objective 是围绕旧策略构造的局部一阶代理目标，用于在旧数据上近似执行策略改进。TRPO 用 KL trust region 限制其适用范围，PPO 用 clipped surrogate objective 近似实现类似限制。**

---


严格回答：**经典策略梯度理论中通常不把 surrogate objective 作为核心优化对象；核心对象是真实期望回报 ($J(\theta)$) 及其梯度 ($\nabla_\theta J(\theta)$)。**

但在 **TRPO、PPO 等现代策略梯度方法** 中，会显式构造并优化 surrogate objective。它来自经典策略梯度的一阶局部近似思想，因此和经典理论密切相关，但不是经典 policy gradient theorem 的原始目标。



# 1. 经典策略梯度理论的核心目标

经典策略梯度方法直接参数化策略：
$$
\pi_\theta(a|s)  
$$
并最大化真实期望回报：
$$
J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}  
[  
R(\tau)  
]  
$$
策略梯度定理给出：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{s,a\sim\pi_\theta}  
[  
\nabla_\theta \log \pi_\theta(a|s)  
Q^{\pi_\theta}(s,a)  
]  
$$
若使用 baseline，则可写成 advantage 形式：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{s,a\sim\pi_\theta}  
[  
\nabla_\theta \log \pi_\theta(a|s)  
A^{\pi_\theta}(s,a)  
]  
$$
Sutton 等人的经典 policy gradient 论文强调的是：显式表示参数化策略，并根据期望奖励关于策略参数的梯度来更新策略；该论文还说明该梯度可以写成适合从经验中估计的形式，并可借助 action-value 或 advantage function。([NeurIPS Papers](https://papers.neurips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf?utm_source=chatgpt.com "Policy Gradient Methods for Reinforcement Learning with ..."))

所以在经典理论中，基本更新是：
$$
\theta_{k+1}
=
\theta_k  
+  
\alpha \widehat{\nabla_\theta J(\theta_k)}  
$$
这里直接估计的是 ($J(\theta)$) 的梯度，而不是先构造一个独立的 surrogate objective 再优化它。

---

# 2. 那经典理论中有没有 surrogate objective？

要分两种含义。

## 狭义回答：没有

如果“经典策略梯度理论”指 REINFORCE、policy gradient theorem、actor-critic 的基本理论，那么核心公式是：
$$
\nabla_\theta J(\theta)  
$$
而不是：
$$
\max_\theta L_{\theta_{\text{old}}}(\theta)  
$$
也就是说，经典理论不需要显式构造 TRPO/PPO 那种：
$$
L_{\theta_{\text{old}}}(\theta)
=
\mathbb{E}_{t}  
\left[  
\frac{\pi_\theta(a_t|s_t)}  
{\pi_{\theta_{\text{old}}}(a_t|s_t)}  
\hat{A}_t  
\right]  
$$
作为独立优化目标。

---

## 广义回答：有局部代理思想，但不是现代意义上的 surrogate objective

经典策略梯度可以被理解为对真实目标 ($J(\theta)$) 做一阶局部近似：
$$
J(\theta+\Delta\theta)  
\approx  
J(\theta)  
+  
\nabla_\theta J(\theta)^\top \Delta\theta  
$$
梯度上升就是沿这个一阶近似增加最快的方向走。

从这个角度说，经典策略梯度隐含使用了“一阶局部近似”。但这还不是 TRPO/PPO 中显式定义的 surrogate objective。

因此更精确的说法是：
$$
\text{经典策略梯度使用真实目标的梯度}  
$$
而：
$$
\text{TRPO/PPO 构造并优化显式 surrogate objective}  
$$
---

# 3. surrogate objective 是从哪里来的？

surrogate objective 主要出现在 trust region / proximal policy optimization 这条理论线中。
它的基本形式是：
$$
L_{\pi_{\text{old}}}(\pi_\theta)
=
\mathbb{E}_{s,a\sim\pi_{\text{old}}}  
\left[  
\frac{\pi_\theta(a|s)}  
{\pi_{\text{old}}(a|s)}  
A^{\pi_{\text{old}}}(s,a)  
\right]  
$$
其中：
$$
\frac{\pi_\theta(a|s)}  
{\pi_{\text{old}}(a|s)}  
$$
是新旧策略动作概率比率。

这个目标的含义是：用旧策略采到的数据，估计如果新策略提高或降低某些动作概率，会带来怎样的局部改进。

如果：
$$
A^{\pi_{\text{old}}}(s,a)>0  
$$
则提高该动作概率会增加 surrogate objective。

如果：
$$
A^{\pi_{\text{old}}}(s,a)<0  
$$
则降低该动作概率会增加 surrogate objective。

TRPO 论文明确使用这种 surrogate objective，并进一步用 KL trust region 约束新旧策略距离，以提高策略更新的可靠性。([Proceedings of Machine Learning Research](https://proceedings.mlr.press/v37/schulman15.pdf?utm_source=chatgpt.com "Trust Region Policy Optimization"))

---

# 4. surrogate objective 和经典 policy gradient 的连接

surrogate objective 的关键性质是：在旧策略点处，它的一阶梯度与经典策略梯度一致。
设：
$$
\theta=\theta_{\text{old}}  
$$
则：
$$
\rho_t(\theta)
=
 \frac{\pi_\theta(a_t|s_t)}  
{\pi_{\theta_{\text{old}}}(a_t|s_t)}
=
1  
$$
对 surrogate objective 求梯度：
$$
\nabla_\theta L_{\theta_{\text{old}}}(\theta)
=
\nabla_\theta  
\mathbb{E}_t[  
\rho_t(\theta)\hat{A}_t  
]  
$$
由于样本来自旧策略，采样分布对 ($\theta$) 固定，因此：
$$
\nabla_\theta L_{\theta_{\text{old}}}(\theta)
=
\mathbb{E}_t[  
\nabla_\theta \rho_t(\theta)\hat{A}_t  
]  
$$
而：
$$
\nabla_\theta \rho_t(\theta)
=
\frac{  
\nabla_\theta \pi_\theta(a_t|s_t)  
}{  
\pi_{\theta_{\text{old}}}(a_t|s_t)  
}  
$$
在 ($\theta=\theta_{\text{old}}$) 时：
$$
\nabla_\theta \rho_t(\theta_{\text{old}})
=
\nabla_\theta \log \pi_\theta(a_t|s_t)  
$$
所以：
$$
\nabla_\theta L_{\theta_{\text{old}}}(\theta)  
\bigg|_{\theta=\theta_{\text{old}}}
=
\mathbb{E}_t[  
\nabla_\theta \log \pi_\theta(a_t|s_t)\hat{A}_t  
]  
$$
这正是经典 advantage policy gradient 形式。
因此：
$$
\boxed{  
\text{surrogate objective 不是经典目标本身，但在当前策略点处给出经典 policy gradient 的一阶方向。}  
}  
$$
---

# 5. TRPO/PPO 为什么显式优化 surrogate objective？

因为直接优化真实回报：
$$
J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}[R(\tau)]  
$$
需要新策略不断重新采样，而且估计方差很大。surrogate objective 可以用旧策略数据估计：
$$
(s_t,a_t)\sim\pi_{\text{old}}  
$$
这带来两个好处：

1. **样本复用**：用已有 rollout 数据优化新策略；
    
2. **局部稳定性**：在旧策略附近，surrogate objective 的梯度与 policy gradient 对齐。
    

PPO 论文明确说，PPO 交替进行环境采样和使用随机梯度上升优化 surrogate objective；其新目标函数允许对同一批样本做多个 epoch 的 minibatch 更新。([arXiv](https://arxiv.org/pdf/1707.06347?utm_source=chatgpt.com "Proximal Policy Optimization Algorithms"))

---
# 6. 但 surrogate objective 不是全局真实目标

surrogate objective 只在旧策略附近可靠。原因是它通常使用旧策略状态分布：
$$
d^{\pi_{\text{old}}}(s)  
$$
而真实新策略回报依赖新策略状态分布：
$$
d^{\pi_\theta}(s)  
$$
当新策略离旧策略较远时：
$$
d^{\pi_\theta}(s)  
\neq  
d^{\pi_{\text{old}}}(s)  
$$
于是可能出现：
$$
L_{\theta_{\text{old}}}(\theta)\uparrow  
$$
但：
$$
J(\theta)\downarrow  
$$
这就是为什么 TRPO 要加 KL trust region，PPO 要加 clipping。

TRPO 使用 KL 约束限制新旧策略距离；PPO 则用 clipped surrogate objective 限制概率比率过度偏离 1。PPO 论文也说明它继承了 TRPO 的一些优点，但实现更简单、更通用。([Proceedings of Machine Learning Research](https://proceedings.mlr.press/v37/schulman15.pdf?utm_source=chatgpt.com "Trust Region Policy Optimization"))

---

# 7. 最准确的回答

所以，对“经典策略梯度理论中是否应用了 surrogate objective”这个问题，最准确的回答是：

**经典 policy gradient theorem 本身不以 surrogate objective 为核心；它直接给出真实期望回报 ($J(\theta)$) 的梯度估计公式。**

但是：

**TRPO、PPO 等现代策略梯度算法在经典策略梯度理论的基础上，引入了 surrogate objective，用旧策略数据构造局部代理目标，并通过 KL 约束或 clipping 限制其适用范围。**

可以概括为：
$$
\text{经典 PG：直接估计 } \nabla_\theta J(\theta)  
$$
$$
\text{TRPO/PPO：构造 } L_{\theta_{\text{old}}}(\theta)  
\text{，并优化它}  
$$
$$
\text{二者关系：}  
\nabla_\theta L_{\theta_{\text{old}}}(\theta_{\text{old}})  
\approx  
\nabla_\theta J(\theta_{\text{old}})  
$$
一句话：

**经典策略梯度理论没有必然显式应用 surrogate objective；surrogate objective 是现代 trust-region / proximal policy gradient 方法为了稳定和复用样本而引入的局部一阶代理目标。** 

---


下面从定义、推导、直觉、估计形式、baseline / advantage、算法结构、与 surrogate objective 的关系几个层次解释 **策略梯度（policy gradient）**。

# 1. 策略梯度要解决什么问题？

强化学习的目标是学习一个策略：
$$
\pi_\theta(a|s)  
$$
其中：

- ($s$)：状态；
    
- ($a$)：动作；
    
- ($\pi_\theta(a|s)$)：在状态 ($s$) 下选择动作 ($a$) 的概率；
    
- ($\theta$)：策略参数，深度 RL 中通常是神经网络参数。
    
策略的目标是最大化期望累计回报：
$$
J(\theta)
=
\mathbb{E}_{\tau\sim \pi_\theta}  
[  
R(\tau)  
]  
$$
其中轨迹为：
$$
\tau=(s_0,a_0,s_1,a_1,\ldots)  
$$
累计回报为：
$$
R(\tau)
=
\sum_{t=0}^{\infty}\gamma^t r_t  
$$
策略梯度的核心问题是：
$$
\text{如何计算或估计 } \nabla_\theta J(\theta)  
$$
也就是：策略参数 ($\theta$) 往哪个方向变化，能够提高期望回报。Sutton 等人的经典策略梯度论文强调：策略可以被显式参数化，并按照期望奖励关于策略参数的梯度进行更新；该梯度可以写成适合从经验中估计的形式。([NeurIPS Papers](https://papers.neurips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf?utm_source=chatgpt.com "Policy Gradient Methods for Reinforcement Learning with ..."))

---

# 2. 策略梯度的基本更新形式

策略梯度方法使用梯度上升：
$$
\theta_{k+1}
=
\theta_k  
+  
\alpha \widehat{\nabla_\theta J(\theta_k)}  
$$
其中：
- ($\alpha$)：学习率；
- ($\widehat{\nabla_\theta J(\theta_k)}$)：用采样轨迹估计出来的策略梯度。
因为目标是最大化回报，所以是 **gradient ascent**，即梯度上升。OpenAI Spinning Up 对 vanilla policy gradient 的描述也是：通过对 policy performance 进行随机梯度上升来更新策略参数。([Spinning Up](https://spinningup.openai.com/en/latest/algorithms/vpg.html?utm_source=chatgpt.com "Vanilla Policy Gradient — Spinning Up documentation"))

---

# 3. 轨迹概率如何依赖策略参数？

设环境初始状态分布为 ($\rho_0(s_0)$)，环境转移为：
$$
P(s_{t+1}|s_t,a_t)  
$$
则一条轨迹的概率为：
$$
p_\theta(\tau)
=
\rho_0(s_0)  
\prod_{t=0}^{T-1}  
\pi_\theta(a_t|s_t)  
P(s_{t+1}|s_t,a_t)  
$$
这里要注意：
$$
p_\theta(\tau)  
$$
依赖 ($\theta$)，但依赖路径只通过策略项：
$$
\pi_\theta(a_t|s_t)  
$$
环境转移 ($P(s_{t+1}|s_t,a_t)$) 通常不依赖策略参数 ($\theta$)。因此，改变 ($\theta$) 的本质是改变每个状态下动作选择概率，从而改变轨迹分布。

---
# 4. 策略梯度推导：log-derivative trick

真实目标为：
$$
J(\theta)
=
 \mathbb{E}_{\tau\sim p_\theta(\tau)}  
[  
R(\tau)  
]

\sum_\tau p_\theta(\tau)R(\tau)  
$$
对参数求导：
$$
\nabla_\theta J(\theta)
=
\sum_\tau  
\nabla_\theta p_\theta(\tau)R(\tau)  
$$
使用恒等式：
$$
\nabla_\theta p_\theta(\tau)
=
p_\theta(\tau)\nabla_\theta\log p_\theta(\tau)  
$$
得到：
$$
\nabla_\theta J(\theta)
=
\sum_\tau  
p_\theta(\tau)  
\nabla_\theta\log p_\theta(\tau)  
R(\tau)  
$$
也就是：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{\tau\sim p_\theta}  
[  
\nabla_\theta\log p_\theta(\tau)R(\tau)  
]  
$$
再展开：
$$
\log p_\theta(\tau)
=
\log \rho_0(s_0)  
+  
\sum_t  
\log \pi_\theta(a_t|s_t)  
+  
\sum_t  
\log P(s_{t+1}|s_t,a_t)  
$$
对 ($\theta$) 求导时，初始分布和环境转移项不依赖 (\theta)，因此：
$$
\nabla_\theta\log p_\theta(\tau)
=
\sum_t  
\nabla_\theta\log \pi_\theta(a_t|s_t)  
$$
所以得到最基本的 REINFORCE 形式：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}  
\left[  
\sum_t  
\nabla_\theta\log\pi_\theta(a_t|s_t)  
R(\tau)  
\right]  
$$
这个推导使用的就是 **likelihood ratio trick / score function estimator**。

---
# 5. 策略梯度的直觉

基本形式为：
$$
\nabla_\theta\log\pi_\theta(a_t|s_t)R(\tau)  
$$
其中：
$$
\nabla_\theta\log\pi_\theta(a_t|s_t)  
$$
表示：怎样改变参数 ($\theta$)，可以提高当前动作 ($a_t$) 在状态 ($s_t$) 下的概率。
若轨迹回报 ($R(\tau)$) 高，则更新方向会提高该轨迹中动作的概率。
若轨迹回报 ($R(\tau)$) 低，则更新方向对这些动作的提升较弱，若经过 baseline 处理甚至会降低这些动作概率。
因此策略梯度的直觉是：
$$
\text{提高带来高回报的动作概率}  
$$
$$
\text{降低带来低回报的动作概率}  
$$
OpenAI Spinning Up 对 policy gradient 的直观描述也是：提高导致高回报动作的概率，降低导致低回报动作的概率。([drdh.gitbook.io](https://drdh.gitbook.io/rl/resources/spinning-up-by-openai?utm_source=chatgpt.com "Spinning Up by OpenAI - Introduction | RL - GitBook"))

---

# 6. 为什么不用整条轨迹回报，而用 reward-to-go？

上面的形式中，每个时间步动作都乘以整条轨迹回报：
$$
R(\tau)  
$$
但动作 ($a_t$) 不可能影响 ($t$) 之前的奖励，只能影响 ($t$) 之后的奖励。

因此可以使用 reward-to-go：
$$
R_t
=
\sum_{k=t}^{\infty}  
\gamma^{k-t}r_k  
$$
于是：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
\left[  
\sum_t  
\nabla_\theta\log\pi_\theta(a_t|s_t)R_t  
\right]  
$$
这种形式减少了不相关的过去奖励带来的噪声，通常方差更低。

---
# 7. 动作价值函数 ($Q^\pi(s,a)$)

定义动作价值函数：
$$
Q^\pi(s,a)
=
\mathbb{E}_\pi  
[  
R_t|s_t=s,a_t=a  
]  
$$
表示：

> 在状态 ($s$) 下先执行动作 ($a$)，之后继续按照策略 ($\pi$) 行动，预期能获得多少未来累计回报。

于是策略梯度可以写成：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{s,a\sim\pi_\theta}  
[  
\nabla_\theta\log\pi_\theta(a|s)  
Q^{\pi_\theta}(s,a)  
]  
$$
这就是策略梯度定理的核心形式。

---

# 8. baseline：为什么可以减去一个状态函数？

策略梯度估计方差通常很大。为降低方差，可减去一个只依赖状态、不依赖动作的 baseline：
$$
b(s)  
$$
得到：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{s,a\sim\pi_\theta}  
[  
\nabla_\theta\log\pi_\theta(a|s)  
(Q^{\pi_\theta}(s,a)-b(s))  
]  
$$
这个变换不会改变梯度期望。原因是：
$$
\mathbb{E}_{a\sim\pi_\theta(\cdot|s)}  
[  
\nabla_\theta\log\pi_\theta(a|s)b(s)  
]  
=0  
$$
证明如下：
$$
\mathbb{E}_{a\sim\pi_\theta}  
[  
\nabla_\theta\log\pi_\theta(a|s)b(s)  
]
=
b(s)  
\sum_a  
\pi_\theta(a|s)  
\nabla_\theta\log\pi_\theta(a|s)  

$$
又因为： 
$$
\nabla_\theta\log\pi_\theta(a|s)
=
\frac{  
\nabla_\theta\pi_\theta(a|s)  
}{  
\pi_\theta(a|s)  
}  
$$
所以：
$$
 b(s)  
\sum_a  
\nabla_\theta\pi_\theta(a|s)


=
 b(s)  
\nabla_\theta  
\sum_a  
\pi_\theta(a|s)

=
b(s)\nabla_\theta 1
=
0  
$$
所以 baseline 不改变期望，只降低方差。

---
# 9. 价值函数 ($V^\pi(s)$) 与优势函数 ($A^\pi(s,a)$)

最常见的 baseline 是状态价值函数：
$$
V^\pi(s)
=
\mathbb{E}_\pi  
[  
R_t|s_t=s  
]  
$$
表示：

> 从状态 (s) 出发，按照策略 ($\pi$) 行动，预期能获得多少未来累计回报。

定义优势函数：
$$
A^\pi(s,a)
=
Q^\pi(s,a)-V^\pi(s)  
$$
优势函数表示：

> 动作 ($a$) 在状态 ($s$) 下，比当前策略的平均动作好多少。

因此：
- 若 ($A^\pi(s,a)>0$)，该动作优于平均水平，应提高概率；
    
- 若 ($A^\pi(s,a)<0$)，该动作劣于平均水平，应降低概率。
    
使用 advantage 后，策略梯度为：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{s,a\sim\pi_\theta}  
[  
\nabla_\theta\log\pi_\theta(a|s)  
A^{\pi_\theta}(s,a)  
]  
$$
GAE 论文指出，policy gradient 方法直接优化累计奖励，适合神经网络等非线性函数逼近，但面临样本需求大和稳定改进困难；使用 value function 可以大幅降低策略梯度估计方差，但会带来一定偏差。([arXiv](https://arxiv.org/abs/1506.02438?utm_source=chatgpt.com "High-Dimensional Continuous Control Using Generalized Advantage Estimation"))

---

# 10. 策略梯度估计量

实际不能直接计算期望，只能用采样估计。若采样一批轨迹，得到 (N) 个状态—动作样本，则经验估计为：
$$
\hat{g}
=
\frac{1}{N}  
\sum_{t=1}^{N}  
\nabla_\theta\log\pi_\theta(a_t|s_t)  
\hat{A}_t  
$$
其中 ($\hat{A}_t$) 是 advantage 的估计。
然后执行：
$$
\theta  
\leftarrow  
\theta  
+  
\alpha \hat{g}  
$$
这就是最基本的 stochastic policy gradient 更新。

---

# 11. 为什么策略梯度方差高？

策略梯度估计高方差来自多个机制。

第一，轨迹采样随机。即使策略相同，不同 rollout 的回报也可能差异很大。

第二，环境可能随机。相同动作不一定导致相同结果。

第三，回报是长期累计量。单个动作对最终回报的贡献难以分离。

第四，动作影响未来状态分布。某个动作可能经过很多步后才体现影响。

第五，($\hat{A}_t$)、($\hat{Q}_t$)、($\hat{V}_t$) 本身也是估计量。

因此，策略梯度往往比监督学习中的梯度估计更嘈杂。你之前读的 _A Closer Look at Deep Policy Gradients_ 正是指出：在深度策略梯度算法中，实际梯度估计与“真实”梯度相关性可能很差；value estimator 也不一定拟合真实价值函数。该论文发表于 ICLR 2020。([NeurIPS Papers](https://papers.neurips.cc/paper/1713-policy-gradient-methods-for-reinforcement-learning-with-function-approximation.pdf?utm_source=chatgpt.com "Policy Gradient Methods for Reinforcement Learning with ...")) 你上传的附录材料中也显示，value network 在 GAE 目标上表现好，并不等价于在 heldout returns 上准确拟合真实价值函数。

---

# 12. REINFORCE、Actor-Critic 与策略梯度的关系

## REINFORCE

REINFORCE 是最直接的 Monte Carlo 策略梯度方法：
$$
\hat{g}
=
\sum_t  
\nabla_\theta\log\pi_\theta(a_t|s_t)  
R_t  
$$
它通常无偏，但方差很高。
## Actor-Critic

Actor-Critic 引入价值函数估计器：
$$
V_\phi(s)  
$$
用它构造 advantage：
$$
\hat{A}_t
=
\hat{Q}_t
-
V_\phi(s_t)  
$$
其中：

- actor：策略网络 ($\pi_\theta$)；
    
- critic：价值网络 ($V_\phi$) 或 ($Q_\phi$)。
    
actor 根据：
$$
\nabla_\theta\log\pi_\theta(a_t|s_t)\hat{A}_t  
$$
更新策略；critic 通过回归 return 或 TD target 学习价值函数。

Actor-Critic 的核心思想是用 critic 降低 actor 更新的方差，但 critic 不准确会引入偏差或不稳定性。

---

# 13. on-policy 与 off-policy 视角

经典策略梯度通常是 on-policy：
$$
(s_t,a_t)\sim\pi_\theta  
$$
也就是说，用当前策略采样的数据估计当前策略的梯度。

如果使用旧策略或其他行为策略采样的数据，则需要重要性采样修正：
$$
\frac{  
\pi_\theta(a_t|s_t)  
}{  
\pi_{\text{old}}(a_t|s_t)  
}  
$$
这就引出 TRPO/PPO 中的 surrogate objective：
$$
L(\theta)
=
\mathbb{E}_t  
\left[  
\frac{  
\pi_\theta(a_t|s_t)  
}{  
\pi_{\text{old}}(a_t|s_t)  
}  
\hat{A}_t  
\right]  
$$
因此，surrogate objective 可以看作是在旧策略数据上实现局部 policy gradient 更新的代理目标。

---

# 14. 策略梯度与 surrogate objective 的关系

经典策略梯度直接关心：
$$
\nabla_\theta J(\theta)  
$$
而 TRPO/PPO 构造 surrogate objective：
$$
L_{\theta_{\text{old}}}(\theta)
=
\mathbb{E}_{t}  
[  
r_t(\theta)\hat{A}_t  
]  
$$
其中：
$$
r_t(\theta)
=
\frac{  
\pi_\theta(a_t|s_t)  
}{  
\pi_{\theta_{\text{old}}}(a_t|s_t)  
} 
$$
关键性质是，在旧策略点处：
$$
\nabla_\theta L_{\theta_{\text{old}}}(\theta)  
\bigg|_{\theta=\theta_{\text{old}}}  
\approx  
\nabla_\theta J(\theta_{\text{old}})  
$$

所以 surrogate objective 不是原始真实目标，而是当前策略附近的一阶代理目标。

---

# 15. 策略梯度的优点

第一，能直接优化随机策略：
$$
\pi_\theta(a|s)  
$$
第二，适合连续动作空间。对于高斯策略：
$$
\pi_\theta(a|s)
=
\mathcal{N}(\mu_\theta(s),\Sigma_\theta(s))  
$$
可以直接对均值和方差参数求梯度。

第三，能学习随机最优策略。在部分可观测或多智能体场景中，随机策略可能很重要。

第四，可以与神经网络自然结合。

---

# 16. 策略梯度的缺点

第一，样本效率低。大量 rollout 才能得到稳定梯度估计。

第二，方差高。回报和 advantage 的采样噪声会放大梯度不稳定性。

第三，对学习率、batch size、advantage normalization、value function 质量敏感。

第四，真实奖励景观和 surrogate objective 可能不一致。你前面读的论文指出，surrogate objective 不一定匹配真实奖励景观，尤其在训练后期可能出现 surrogate 上升但真实奖励下降的情况。

第五，critic 的误差会影响 actor。value function 不准确时，advantage 估计会有偏差。

---

# 17. 最核心公式总结

策略梯度从真实目标开始：
$$
J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}  
[  
R(\tau)  
]  
$$
基本策略梯度：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
[  
\nabla_\theta\log\pi_\theta(a|s)  
Q^\pi(s,a)  
]  
$$
加入 baseline：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
[  
\nabla_\theta\log\pi_\theta(a|s)  
(Q^\pi(s,a)-b(s))  
]  

$$
取 ($b(s)=V^\pi(s)$)，得到 advantage 形式：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
[  
\nabla_\theta\log\pi_\theta(a|s)  
A^\pi(s,a)  
]  
$$
经验估计：
$$
\hat{g}
=
\frac{1}{N}  
\sum_t  
\nabla_\theta\log\pi_\theta(a_t|s_t)  
\hat{A}_t  
$$
参数更新：
$$
\theta  
\leftarrow  
\theta  
+  
\alpha \hat{g}  
$$
---
# 18. 一句话总结

**策略梯度就是直接计算或估计期望回报 ($J(\theta)$) 关于策略参数 ($\theta$) 的梯度，然后通过提高高优势动作概率、降低低优势动作概率来改进策略。**

它的理论核心是：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
[  
\nabla_\theta\log\pi_\theta(a|s)  
A^\pi(s,a)  
]  
$$
它的实践困难是：这个期望只能通过有限轨迹采样估计，因此方差高、样本效率低，并且强烈依赖 value function、advantage estimation 和优化机制。

---

**reward-to-go** 可以译为 **从当前时刻开始的剩余回报**、**未来累计回报**，或更直观地说：**某一步之后还能拿到的奖励总和**。

在策略梯度中，它解决的核心问题是：

$$
\text{动作 } a_t \text{ 只能影响未来奖励，不能影响过去奖励}  
$$

所以在更新动作 ($a_t$) 的概率时，不应该用整条轨迹的总回报，而应该只用从 ($t$) 时刻开始往后的回报。

# 1. 定义

给定一条轨迹：
$$
\tau=(s_0,a_0,r_0,s_1,a_1,r_1,\ldots,s_T,a_T,r_T)  
$$
从时刻 ($t$) 开始的 reward-to-go 定义为：
$$
\hat{R}_t
=
\sum_{t'=t}^{T}  
r_{t'}  
$$
如果使用折扣因子 ($\gamma$)，则为：
$$
\hat{R}_t
=
\sum_{t'=t}^{T}  
\gamma^{t'-t}r_{t'}  
$$
也可写成：
$$
\hat{R}_t
=
r_t+\gamma r_{t+1}+\gamma^2r_{t+2}+\cdots  
$$
OpenAI Spinning Up 对 reward-to-go 的定义是：**从轨迹中某一点之后的奖励和，并说明 reward-to-go policy gradient 只根据动作发生之后得到的奖励来强化该动作。**([Spinning Up](https://spinningup.openai.com/en/latest/spinningup/rl_intro3.html?utm_source=chatgpt.com "Part 3: Intro to Policy Optimization - Spinning Up in Deep RL!"))

---

# 2. 和整条轨迹回报的区别

整条轨迹回报是：
$$
R(\tau)
=
\sum_{t=0}^{T}r_t  
$$
或折扣形式：
$$
R(\tau)
=
\sum_{t=0}^{T}\gamma^t r_t  
$$
它对轨迹中每一个动作都使用同一个总回报。

例如一条轨迹奖励为：
$$
[r_0,r_1,r_2,r_3]=[1,2,3,4]  
$$
不折扣时，整条轨迹回报为：
$$
R(\tau)=1+2+3+4=10  
$$
**如果用整条轨迹回报更新**，那么每个动作 ($a_0,a_1,a_2,a_3$) 都会乘以 10。

但 reward-to-go 是：
$$
\hat{R}_0=1+2+3+4=10  
$$
$$
\hat{R}_1=2+3+4=9  
$$
$$
\hat{R}_2=3+4=7  
$$
$$
\hat{R}_3=4  
$$
也就是说，越靠后的动作，只使用它之后还能获得的奖励。

---

# 3. 为什么不能让 ($a_t$) 负责过去奖励？

策略梯度的基本形式可以写成：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}  
\left[  
\sum_{t=0}^{T}  
\nabla_\theta\log\pi_\theta(a_t|s_t)  
R(\tau)  
\right]  
$$
这个式子使用整条轨迹回报 ($R(\tau)$)。

但是动作 ($a_t$) 发生在时刻 ($t$)，它不可能影响过去的奖励：
$$
r_0,r_1,\ldots,r_{t-1}  
$$
因此，过去奖励对 ($a_t$) 来说只是噪声。把过去奖励也乘到：
$$
\nabla_\theta\log\pi_\theta(a_t|s_t)  
$$
上，会增加梯度估计方差，但不会提供关于 ($a_t$) 好坏的有效信息。所以可以把 ($R(\tau)$) 替换成从当前时刻开始的未来回报：
$$
\hat{R}_t
=
\sum_{t'=t}^{T}  
\gamma^{t'-t}r_{t'}  
$$
得到 reward-to-go policy gradient：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{\tau\sim\pi_\theta}  
\left[  
\sum_{t=0}^{T}  
\nabla_\theta\log\pi_\theta(a_t|s_t)  
\hat{R}_t  
\right]  
$$
OpenAI Spinning Up 的证明说明，对于 ($t'<t$) 的奖励，也就是动作发生之前的奖励，其对该动作的策略梯度项贡献为零；去掉这些过去奖励后，就得到 reward-to-go 形式的 policy gradient。([Spinning Up](https://spinningup.openai.com/en/latest/spinningup/extra_pg_proof1.html?utm_source=chatgpt.com "Extra Material — Spinning Up documentation - OpenAI"))

---

# 4. reward-to-go 为什么不改变期望梯度？

关键原因是：过去奖励与当前动作的 score function 项在期望下相乘为零。

对某个过去奖励 ($r_{t'}$)，若：
$$
t'<t  
$$
则 ($r_{t'}$) 在动作 ($a_t$) 之前已经决定，不能被 ($a_t$) 影响。因此在期望中：
$$
\mathbb{E}  
[  
\nabla_\theta\log\pi_\theta(a_t|s_t)r_{t'}  
]
=
0  
$$
直观解释是：
$$
r_{t'} \text{ 对 } a_t \text{ 没有因果依赖}  
$$
所以它不能提供关于 ($a_t$) 应该增加还是减少概率的信息。
因此，从整条回报中删去过去奖励，不改变策略梯度的期望，只降低方差。

---

# 5. reward-to-go 与 ($Q^\pi(s,a)$) 的关系
动作价值函数定义为：
$$
Q^\pi(s_t,a_t)
=
\mathbb{E}_\pi  
[  
\hat{R}_t|s_t,a_t  
]  
$$
也就是说，($Q^\pi(s_t,a_t)$) 是 reward-to-go 的条件期望。
reward-to-go 是单条采样轨迹上的实际未来回报：
$$
\hat{R}_t
=
r_t+\gamma r_{t+1}+\gamma^2r_{t+2}+\cdots  
$$
而 ($Q^\pi(s_t,a_t)$) 是在状态 ($s_t$)、动作 ($a_t$) 给定后，对所有可能未来轨迹取期望：
$$
Q^\pi(s_t,a_t)
=
\mathbb{E}[\hat{R}_t|s_t,a_t]  
$$
所以二者关系是：
$$
\text{reward-to-go 是 } Q^\pi(s,a) \text{ 的 Monte Carlo 样本估计}  
$$
这也解释了为什么策略梯度可以写成：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}  
[  
\nabla_\theta\log\pi_\theta(a_t|s_t)Q^\pi(s_t,a_t)  
]  
$$
也可以在采样中用 ($\hat{R}_t$) 替代 ($Q^\pi(s_t,a_t)$)。

---

# 6. reward-to-go 与 advantage 的关系

reward-to-go 仍然可能方差很大。进一步可以减去 baseline，通常是价值函数：
$$
V^\pi(s_t)
=
\mathbb{E}_\pi[\hat{R}_t|s_t]  
$$
得到 advantage：
$$
A^\pi(s_t,a_t)
=
Q^\pi(s_t,a_t)-V^\pi(s_t)  
$$
在采样中可以用：
$$
\hat{A}_t
=
\hat{R}_t
-
V_\phi(s_t)  
$$
这里：

- ($\hat{R}_t$)：实际采样到的 reward-to-go；
    
- ($V_\phi(s_t)$)：critic 对该状态平均未来回报的估计；
    
- ($\hat{A}_t$)：该动作相对状态平均水平的好坏。
    

因此，关系链是：
$$
\text{整条轨迹回报}  
\rightarrow  
\text{reward-to-go}  
\rightarrow  
\text{advantage}  
$$
每一步都在减少不相关噪声：
$$
R(\tau)  
\quad \to \quad  
\hat{R}_t  
\quad \to \quad  
\hat{R}_t - V(s_t)  
$$
---

# 7. 一个具体例子

假设一条轨迹长度为 4，奖励为：
$$
[r_0,r_1,r_2,r_3]=[0,0,10,0]  
$$
不折扣时：
$$
R(\tau)=10  
$$
如果不用 reward-to-go，所有动作都乘以 10：
$$
a_0,a_1,a_2,a_3  
$$
都被强化。

但如果用 reward-to-go：
$$
\hat{R}_0=10  
$$
$$
\hat{R}_1=10  
$$
$$
\hat{R}_2=10  
$$
$$
\hat{R}_3=0  
$$
这说明 ($a_3$) 不应该因为之前 ($r_2=10$) 而被强化，因为 ($a_3$) 发生在奖励 ($r_2$) 之后，不能对 ($r_2$) 负责。
再加一个例子：
$$
[r_0,r_1,r_2,r_3]=[5,0,0,0]  
$$
整条轨迹回报为：
$$
R(\tau)=5  
$$
如果不用 reward-to-go，后面的 ($a_1,a_2,a_3$) 也会被乘以 5。

但事实上，奖励 ($r_0=5$) 发生在它们之前，它们不可能导致这个奖励。reward-to-go 为：
$$
\hat{R}_0=5  
$$
$$
\hat{R}_1=0  
$$
$$
\hat{R}_2=0  
$$
$$
\hat{R}_3=0  
$$
这就避免了错误地强化后续动作。

---

# 8. 折扣 reward-to-go 的例子

设：
$$
[r_0,r_1,r_2]=[1,2,3]  
$$
折扣因子：
$$
\gamma=0.9  
$$
则：
$$
\hat{R}_0
=
 1+0.9\cdot2+0.9^2\cdot3
=
 1+1.8+2.43
=
5.23  
$$
$$
\hat{R}_1
=
2+0.9\cdot3
=
4.7  
$$
$$
\hat{R}_2
=
3  
$$
越晚的奖励折扣越大，表示更早获得奖励更有价值。

---

# 9. 在代码中怎么计算 reward-to-go？

给定一段 rewards：

```python
rews = [r0, r1, r2, ..., rT]
```

不折扣 reward-to-go 可以从后往前累加：

```python
rtg[T] = rews[T]
rtg[t] = rews[t] + rtg[t+1]
```

折扣版本为：

```python
rtg[T] = rews[T]
rtg[t] = rews[t] + gamma * rtg[t+1]
```

数学上就是：
$$
\hat{R}_t
=
r_t+\gamma\hat{R}_{t+1}  
$$
这是 reward-to-go 的递推形式。

---

# 10. reward-to-go 的本质作用

reward-to-go 的本质不是改变强化学习目标，而是改进梯度估计。

原始形式：
$$
\sum_t  
\nabla_\theta\log\pi_\theta(a_t|s_t)  
R(\tau)  
$$
reward-to-go 形式：
$$
\sum_t  
\nabla_\theta\log\pi_\theta(a_t|s_t)  

\hat{R}_t  
$$
二者在期望上都指向真实策略梯度，但 reward-to-go 去掉了动作 (a_t) 之前的奖励噪声，因此方差更低。

这可以概括为：
$$
\text{只让动作对它之后的结果负责}  
$$
而不是：
$$
\text{让动作对整条轨迹所有奖励负责}  
$$
---

# 11. 与论文中 ($R_t$) 的关系

在你前面读的附录 A.1 中，($R_t$) 定义为：
$$
R_t(\tau)
=
\sum_{t'=t}^{\infty}  
\gamma^{t'-t}r_{t'}  

$$
这正是折扣 reward-to-go。然后动作价值函数定义为：
$$
Q^\pi(s_t,a_t)
=
\mathbb{E}_\pi[R_t|s_t,a_t]  
$$
所以，论文里的 (R_t) 就是当前时刻开始的 discounted reward-to-go。

---

# 12. 简要总结

**reward-to-go 是从当前动作之后开始计算的未来累计回报。**

定义为：
$$
\hat{R}_t
=
\sum_{t'=t}^{T}  
\gamma^{t'-t}r_{t'}  
$$
它在策略梯度中的作用是：
$$
\text{只用动作 } a_t \text{ 之后的奖励来评价 } a_t  
$$
而不是用整条轨迹总回报。这样不会改变策略梯度的期望，但能降低方差。

核心区别是：
$$
R(\tau)
=
\sum_{t=0}^{T}\gamma^t r_t  
$$
是整条轨迹回报；
$$
\hat{R}_t
=
\sum_{t'=t}^{T}  
\gamma^{t'-t}r_{t'}  
$$
是从时刻 ($t$) 开始的未来回报。

一句话概括：

**reward-to-go = 当前动作之后还能得到的折扣累计奖励；它让策略梯度只根据未来结果来强化当前动作，从而减少无关过去奖励带来的噪声。**