下面解释 **REINFORCE gradient** 是什么、怎么推出来、每一项表示什么，以及它为什么无偏但高方差。

------

## 1. 先给出结论

REINFORCE 的核心梯度公式是：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{\tau\sim \pi_\theta}
\left[
R(\tau)\,\nabla_\theta \log p_\theta(\tau)
\right]
$$
在马尔可夫决策过程中，通常进一步写成：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{\tau\sim \pi_\theta}
\left[
\sum_{t=0}^{T}
\nabla_\theta \log \pi_\theta(a_t\mid s_t)\,G_t
\right]
$$
其中：

- $\theta$：策略参数
- $\pi_\theta(a\mid s)$：随机策略
- $\tau=(s_0,a_0,s_1,a_1,\dots)$：一条轨迹
- $R(\tau)$：整条轨迹总回报
- $G_t=\sum_{k=t}^{T}\gamma^{k-t}r_k$：从时刻 $t$ 开始的回报

REINFORCE 就是用这个梯度来更新策略参数。

------

## 2. 它要优化什么

策略梯度方法要最大化的目标通常写作：
$$
J(\theta)=\mathbb{E}_{\tau\sim \pi_\theta}[R(\tau)]
$$
含义是：

- 当前策略 $\pi_\theta$ 会诱导一个轨迹分布；
- 每条轨迹都有一个回报 $R(\tau)$；
- 目标是让轨迹回报的期望尽可能大。

所以问题变成：

> 如何对策略参数 $\theta$ 求导，得到 $\nabla_\theta J(\theta)$。

------

## 3. 为什么会出现 $\log \pi_\theta$

这是 REINFORCE 最关键的一步。

先写：
$$
J(\theta)=\sum_\tau p_\theta(\tau)R(\tau)
$$
这里 $p_\theta(\tau)$ 是轨迹 $\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 \pi_\theta}
\left[
R(\tau)\,\nabla_\theta \log p_\theta(\tau)
\right]
$$
这就是 **score function estimator** 或 **likelihood ratio trick**。

------

## 4. 为什么轨迹概率可以拆开

轨迹概率是：
$$
p_\theta(\tau)
=
\rho(s_0)\prod_{t=0}^{T}
\pi_\theta(a_t\mid s_t)\,P(s_{t+1}\mid s_t,a_t)
$$
取对数：
$$
\log p_\theta(\tau)
=
\log \rho(s_0)
+
\sum_{t=0}^{T}\log \pi_\theta(a_t\mid s_t)
+
\sum_{t=0}^{T}\log P(s_{t+1}\mid s_t,a_t)
$$
对 $\theta$ 求导时：

- 初始状态分布 $\rho(s_0)$ 不依赖策略参数
- 环境转移概率 $P(s_{t+1}\mid s_t,a_t)$ 也通常不依赖策略参数

因此只有策略项保留下来：
$$
\nabla_\theta \log p_\theta(\tau)
=
\sum_{t=0}^{T}\nabla_\theta \log \pi_\theta(a_t\mid s_t)
$$
于是梯度变成：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}
\left[
R(\tau)\sum_{t=0}^{T}\nabla_\theta \log \pi_\theta(a_t\mid s_t)
\right]
$$

------

## 5. 为什么又会变成 $G_t$

上式里每个时间步都乘的是整条轨迹回报 $R(\tau)$，但实际上在时刻 $t$ 的动作 $a_t$ 不可能影响过去的奖励，只会影响未来。

因此可以把它改写为：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}
\left[
\sum_{t=0}^{T}
\nabla_\theta \log \pi_\theta(a_t\mid s_t)\,G_t
\right]
$$
其中：
$$
G_t=\sum_{k=t}^{T}\gamma^{k-t}r_k
$$
这是从时刻 $t$ 开始的 return。

这个改写的意义是：

- 用与当前动作存在因果关系的未来回报
- 替代包含过去奖励的整条轨迹回报
- 从而减少不必要的噪声

------

## 6. 这个梯度公式直观上表示什么

REINFORCE 的更新形式可以理解为：
$$
\Delta \theta \propto \nabla_\theta \log \pi_\theta(a_t\mid s_t)\,G_t
$$
含义是：

- 若某个动作之后带来了大的正回报 $G_t$，就提高该动作在该状态下的概率；
- 若某个动作之后回报差，就降低该动作概率。

这里：

- $\nabla_\theta \log \pi_\theta(a_t\mid s_t)$ 表示“怎样改参数能提高这个动作概率”
- $G_t$ 表示“这个动作后续结果好不好”

所以 REINFORCE 的机制可以概括为：

> 用采样得到的回报，直接加权对已执行动作概率的梯度。

------

## 7. 单样本 REINFORCE gradient 长什么样

若采样到一条轨迹 $\tau$，那么对应的 Monte Carlo 梯度估计是：
$$
\hat g
=
\sum_{t=0}^{T}
\nabla_\theta \log \pi_\theta(a_t\mid s_t)\,G_t
$$
然后用它更新参数，例如梯度上升：
$$
\theta \leftarrow \theta + \alpha \hat g
$$
其中 $\alpha$ 是学习率。

这就是算法实现时最直接的形式。

------

## 8. 为什么它是无偏的

REINFORCE 的一个关键性质是：
$$
\mathbb{E}[\hat g]=\nabla_\theta J(\theta)
$$
也就是说，用轨迹采样构造出来的梯度估计，期望上等于真实梯度。

原因就在于前面的推导没有作近似，只用了：

- 轨迹期望定义
- 对数导数恒等式
- 概率分解

因此 REINFORCE 是 **无偏梯度估计**。

------

## 9. 为什么它高方差

虽然无偏，但 REINFORCE 的样本梯度通常波动很大。原因有三类。

### 1）$G_t$ 是随机量

同一个状态动作对，在不同轨迹里可能对应很不同的未来回报。

### 2）$G_t$ 包含很多与当前动作弱相关的因素

例如：

- 后续动作随机性
- 环境随机性
- 长期累积误差

所以当前动作的梯度会乘上一个高噪声权重。

### 3）长时序和稀疏奖励会进一步放大问题

若奖励只在很后面出现，或只有成功/失败信号，则大多数时间步都在用高噪声、低信息量的 return 做加权。

这就是 REINFORCE 常被说成：

- 无偏
- 但高方差

------

## 10. baseline 是怎么来的

为了降低方差，常写成：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}
\left[
\sum_t
\nabla_\theta \log \pi_\theta(a_t\mid s_t)\,(G_t-b(s_t))
\right]
$$
其中 $b(s_t)$ 是 baseline。

只要 baseline 不依赖当前动作 $a_t$，这个改动不改变期望，因此仍无偏。

常用选择是：
$$
b(s_t)=V^\pi(s_t)
$$
于是有：
$$
G_t - V^\pi(s_t) \approx A^\pi(s_t,a_t)
$$
这就是 advantage 的来源。

------

## 11. 和 policy gradient theorem 的关系

REINFORCE 可以看作策略梯度定理的最原始 Monte Carlo 实现。

策略梯度定理写成：
$$
\nabla_\theta J(\theta)
=
\mathbb{E}_{s\sim p^\pi,a\sim \pi_\theta}
\left[
\nabla_\theta \log \pi_\theta(a\mid s)\,Q^\pi(s,a)
\right]
$$
而 REINFORCE 用采样回报 $G_t$ 去近似 $Q^\pi(s_t,a_t)$：
$$
Q^\pi(s_t,a_t)\approx G_t
$$
所以 REINFORCE 的本质是：

> 用 Monte Carlo return 作为 $Q^\pi$ 的无偏样本估计，代入策略梯度公式。

------

## 12. 在多智能体里为什么更难

如果在多智能体情形中，智能体 $i$ 使用 REINFORCE，则梯度通常类似：
$$
\hat g_i
=
\sum_t
\nabla_{\theta_i}\log \pi_{\theta_i}(a_i^t\mid o_i^t)\,G_i^t
$$
问题在于 $G_i^t$ 往往依赖所有智能体动作，而不只依赖 $i$ 的动作。
 因此，对智能体 $i$ 来说：

- 自己动作固定时
- 回报仍会因其他智能体行为而剧烈变化

于是方差进一步增大。
 这正是 MADDPG 要通过 centralized critic 解决的问题之一。

------

## 13. 一句话概括 REINFORCE gradient

**REINFORCE gradient** 就是：

> 对采样到的动作对数概率求梯度，并用该动作之后的回报作为权重，从而直接构造对策略目标的无偏梯度估计。

公式最常见的写法是：
$$
\hat g
=
\sum_t
\nabla_\theta \log \pi_\theta(a_t\mid s_t)\,G_t
$$

------

## 14. 最简对照总结

### 目标

$$
J(\theta)=\mathbb{E}_{\tau\sim \pi_\theta}[R(\tau)]
$$

### 梯度

$$
\nabla_\theta J(\theta)
=
\mathbb{E}
\left[
\sum_t \nabla_\theta \log \pi_\theta(a_t\mid s_t)\,G_t
\right]
$$

### 样本估计

$$
\hat g
=
\sum_t \nabla_\theta \log \pi_\theta(a_t\mid s_t)\,G_t
$$

### 特征

- 无偏
- 高方差
- 可用 baseline 降方差