强化学习:如何理解训练信号
paperreading
本文字数:4.1k 字 | 阅读时长 ≈ 15 min

强化学习:如何理解训练信号

paperreading
本文字数:4.1k 字 | 阅读时长 ≈ 15 min

强化学习专项:1. 基本概念 · 2. DQN · 3. Policy Gradient · 4. PPO · 5. 如何理解强化学习(本文)

学习强化学习时,我一直有一个疑问:明明知道网络最后仍然使用 loss.backward() 计算梯度,但 reward、action、TD target 和 advantage 为什么能组成这个 loss?

真正需要理解的不是反向传播,而是在没有人工标签的情况下,算法如何根据环境反馈构造训练信号。

1. Ground Truth 去哪里了?

在监督学习中,数据集直接提供标签 \(y\):

\[ x\xrightarrow{f_\theta}\hat y,\qquad L=\ell(\hat y,y) \]

网络只需要让预测 \(\hat y\) 接近正确答案 \(y\)。强化学习的环境却不会告诉智能体“这一步应该选哪个动作”,只会在动作真正执行后返回:

\[ (s_t,a_t,r_t,s_{t+1},d_t) \]

\(r_t\) 只是对这次交互的反馈,不是正确动作的标签。强化学习算法要做的,就是将这些 transition 转换成 target 或权重,再构造可以反向传播的 loss。

因此,学习一个新算法时,可以先回答五个问题:

  1. 数据是当前策略采集的 rollout,还是 replay buffer 中的历史数据?
  2. 网络输出的是 \(V(s)\)、\(Q(s,a)\),还是动作分布 \(\pi(a\mid s)\)?
  3. target 或权重是根据完整回报、TD target,还是 advantage 构造的?
  4. 这个信号如何进入 loss,最后更新哪个网络?
  5. 新加入的机制解决了上一种方法的什么问题,又带来了什么代价?

下图先给出统一视角:环境只提供交互数据,算法再把它加工成两类训练信号。价值方法构造 return 或 TD target,让 \(V/Q\) 的预测更准确;策略方法构造 return 或 advantage,决定应该提高还是降低实际动作的概率。Actor-Critic 同时使用两条路径,并让价值网络提供 baseline,帮助策略网络更稳定地更新。

2. 价值方法:从完整回报到 DQN

价值方法与普通回归最接近:网络输出一个价值预测,算法再根据交互数据构造 target。Monte Carlo、TD 和 DQN 的主要区别,就是这个 target 怎样得到。

2.1 Monte Carlo:用完整结果监督价值预测

Monte Carlo 方法要解决的问题是:没有真实的 \(V_\pi(s_t)\),怎样知道一个状态最终值多少?最直接的办法是让 episode 完整运行一次,再把实际采样到的折扣回报作为 target:

\[ U_t=\sum_{k=t}^{T-1}\gamma^{k-t}r_k,\qquad L^{\mathrm{MC}}(\phi) =\left(V_\phi(s_t)-U_t\right)^2 \]

这样做不需要估计尚未发生的未来,\(U_t\) 包含了这次运行从 \(t\) 到结束的全部 reward。问题也很明显:必须等 episode 结束才能更新,而且一次轨迹可能受到大量随机因素影响,target 的方差通常较大。

因此,Monte Carlo 解决了“没有价值标签”的问题,但留下了“等待时间长、训练信号波动大”的问题。

2.2 TD:不等 episode 结束也能学习

TD(Temporal Difference,时序差分)方法希望更早更新。它把长期回报拆成“当前 reward + 下一状态的价值”,只观察一步就构造 target:

\[ y_t^V= r_t+\gamma(1-d_t)V_\phi(s_{t+1}) \]

\[ L^{\mathrm{TD}}(\phi) =\left(V_\phi(s_t)-y_t^V\right)^2 \]

这种使用另一个预测值补上未来回报的做法称为 bootstrapping。计算 target 时通常停止梯度,只让当前预测 \(V_\phi(s_t)\) 向它靠近。

TD 不必等到 episode 结束,通常也比完整回报的方差低;代价是 target 依赖 \(V_\phi(s_{t+1})\)。如果价值网络本身不准确,误差也会进入 target,因此 TD 引入了估计偏差和“用自己的预测训练自己”的稳定性问题。

2.3 DQN:让价值方法处理复杂状态

表格型 Q-learning 可以为每个 \((s,a)\) 保存一个 Q 值,但图片或 CartPole 这类连续状态几乎无法完整列举。DQN 使用神经网络近似动作价值,从而把 Q-learning 扩展到更大的状态空间:

\[ \underbrace{Q(s_t,a_t;\theta)}_{\text{在线网络的 prediction}} \longrightarrow \underbrace{ r_t+\gamma(1-d_t) \max_{a'}Q(s_{t+1},a';\theta^-) }_{\text{目标网络构造的 TD target}} \]

DQN 还引入两项稳定训练的机制:replay buffer 随机混合历史 transition,减弱连续数据之间的相关性;目标网络暂时固定 TD target,避免 prediction 和 target 同时快速变化。

这些设计让神经网络能够从历史数据中学习离散动作的 Q 值,并通过 \(\arg\max_a Q(s,a)\) 选择动作。它的主要缺点是:标准 DQN 难以直接处理连续动作,\(\max\) 还可能造成 Q 值高估,训练稳定性也会受到奖励尺度、探索率和目标网络更新频率影响。

3. 策略方法:直接优化动作概率

DQN 先学习每个动作的 Q 值,再选择其中最大的一个。策略方法则直接让网络输出动作分布 \(\pi_\theta(a\mid s)\),适合表示随机策略,也更容易扩展到连续动作。

3.1 REINFORCE:用完整回报评价实际动作

REINFORCE 要解决的问题是:没有正确动作标签,怎样直接训练策略网络?它先使用当前策略采样完整 episode,再用每个动作之后获得的折扣回报 \(U_t\) 调整该动作的概率:

\[ L^{\mathrm{REINFORCE}}(\theta) =-\mathbb{E}_t \left[ U_t\log\pi_\theta(a_t\mid s_t) \right] \]

\(U_t\) 较高时,梯度下降会提高实际动作 \(a_t\) 的概率;使用中心化或标准化回报后,权重小于 0 的动作会被降低概率。这里的 \(a_t\) 必须是与环境交互时真正执行的动作,因为 reward 正是由这次实际发生的 transition 产生的。

REINFORCE 不需要先学习 Q 值,就能直接优化随机策略;动作分布既可以是离散分布,也可以是连续分布。它的缺点来自 \(U_t\):通常要等 episode 结束才能计算,而且完整轨迹中的随机性都会进入回报,导致梯度方差较大。它还是 on-policy 方法,策略更新后需要重新采样,旧数据不能任意反复使用。

4. Actor-Critic:用价值基线降低策略梯度方差

REINFORCE 直接用 \(U_t\) 评价动作,但不同状态本来就有不同的回报水平。例如,从一个接近成功的状态得到 10 分,未必比从一个困难状态得到 5 分更好。Actor-Critic 引入 Critic,专门估计“这个状态通常值多少”,再让 Actor 只关注实际动作比这个基准好多少。

它同时包含两种学习方式:

state
  ├── Actor  →  动作分布 π(a|s)
  └── Critic →  状态价值 V(s)

Critic 做价值回归,例如使用单步 TD target:

\[ y_t^V=r_t+\gamma(1-d_t)V_\phi(s_{t+1}),\qquad L^{\mathrm{value}}=(V_\phi(s_t)-y_t^V)^2 \]

Actor 使用实际结果与状态价值之差构造优势估计:

\[ \hat{A}_t \approx y_t^V-V_\phi(s_t) \]

然后用优势更新 Actor:

\[ L^{\mathrm{actor}}(\theta) =-\mathbb{E}_t \left[ \hat{A}_t\log\pi_\theta(a_t\mid s_t) \right] \]

例如,Critic 原本预测 \(V_\phi(s_t)=5\),交互后计算得到 \(y_t^V=8\),则 \(\hat{A}_t\approx3\)。实际结果比原来的预期好,Actor 就提高动作 \(a_t\) 的概率。

Actor-Critic 让策略不必完全依赖整条轨迹的原始回报,通常能降低梯度方差,也可以使用单步或多步 TD 更早更新。A2C 可以理解为一种同步收集多份 rollout、批量更新 Actor 和 Critic 的实现。

它并没有消除所有问题:优势依赖 Critic,如果价值预测有偏差,Actor 也会收到有偏的训练信号;Actor 和 Critic 同时变化,训练仍可能不稳定;A2C 通常还是 on-policy 方法,历史数据利用率有限。

5. PPO:限制 Actor-Critic 的更新幅度

Actor-Critic 已经能用优势更新策略,但如果学习率较大,或者对同一批数据训练多次,策略可能在一次更新中改变太多。旧 rollout 是由更新前的策略采集的;新策略离旧策略越远,这批数据就越难代表新策略的行为。

PPO 保存采样动作在旧策略下的概率,再与当前策略的概率比较:

\[ \rho_t(\theta) =\frac{ \pi_\theta(a_t\mid s_t) }{ \pi_{\theta_{\mathrm{old}}}(a_t\mid s_t) } \]

然后用 clip 限制策略已经沿正确方向改变很多以后还能获得的收益:

\[ L^{\mathrm{CLIP}}(\theta) =\mathbb{E}_t \left[ \min\left( \rho_t\hat{A}_t, \operatorname{clip}(\rho_t,1-\epsilon,1+\epsilon)\hat{A}_t \right) \right] \]

PPO 通常还使用 GAE 组合多个时间步的 TD 误差,在偏差和方差之间折中。这样既能比 REINFORCE 更稳定地估计优势,又能对当前 rollout 做多轮 mini-batch 更新,同时避免策略轻易发生过大的变化。

PPO 的优点是训练相对稳定、实现复杂度适中,并且能处理离散或连续动作。它仍然是 on-policy 方法,旧 rollout 很快就要丢弃,样本利用率通常低于 DQN、DDPG 和 SAC。clip 只是限制目标函数的激励,并不能保证每次更新都严格落在某个距离范围内,训练结果也会受到裁剪系数、GAE 参数和优化轮数影响。

6. 连续动作与 off-policy Actor-Critic

6.1 DDPG:为连续动作学习确定性 Actor

DQN 依赖 \(\max_a Q(s,a)\)。离散动作可以逐个比较,但连续动作有无限多个候选值,无法直接枚举。DDPG 增加一个确定性 Actor \(\mu_\theta(s)\),直接输出 Critic 认为更好的连续动作:

\[ a_t=\mu_\theta(s_t) \]

Critic 仍然使用 TD target 做 Q 值回归,Actor 则沿着增大 \(Q_\phi(s,\mu_\theta(s))\) 的方向更新。DDPG 同时使用 replay buffer 和目标网络,因此可以重复利用历史 transition,属于 off-policy 方法。

DDPG 解决了“DQN 难以枚举连续动作”和“on-policy 策略梯度数据利用率低”的问题。但确定性策略本身没有随机性,训练时需要额外加入探索噪声;它也容易受到 Q 值高估、Critic 误差和超参数影响,训练通常比较敏感。

6.2 SAC:用随机策略和熵改善探索

SAC 同样面向连续控制,但它不让 Actor 只输出一个确定动作,而是学习随机策略,并将策略熵加入优化目标:

\[ \text{目标} =\text{期望回报} +\alpha\times\text{策略熵} \]

熵鼓励策略在训练过程中保留一定随机性,避免过早集中到单一动作。常见 SAC 还使用两个 Q 网络并取较小值,缓解价值高估。

这些设计通常让 SAC 比 DDPG 探索更充分、训练更稳,同时继续利用 replay buffer 保持较高的数据利用率。代价是需要维护 Actor、多个 Critic 和目标网络,计算量与实现复杂度更高;熵系数和价值估计仍会影响训练效果。

7. 数据从哪里来?

不管使用哪种算法,原始数据都来自智能体与环境的交互。一条 transition 记录了“在什么状态、实际做了什么、结果如何”,算法再将它加工成回报、TD target 或优势估计。

REINFORCE、A2C 和 PPO 通常属于 on-policy;DQN、DDPG 和 SAC 属于 off-policy。Monte Carlo 和 TD 描述的是价值 target 的构造方式,本身不直接决定整个算法一定是 on-policy 还是 off-policy。

数据可以重复使用,不代表它变成了带有正确动作标签的监督数据。目标值仍然需要通过 reward、价值估计和对应算法构造。

8. 把方法的改进关系串起来

这些算法不是彼此无关的公式。它们大多是在保留上一种方法核心思想的同时,修补一个具体问题:

Monte Carlo
    │  完整回报方差大,而且必须等 episode 结束
    ▼
TD / Q-learning
    │  表格无法处理复杂状态
    ▼
DQN

REINFORCE
    │  策略梯度方差大
    ▼
Actor-Critic / A2C
    │  一次更新可能让策略变化过大
    ▼
PPO

DQN 的价值学习 + Actor-Critic
    │  连续动作无法直接枚举
    ▼
DDPG
    │  确定性策略探索不足、训练敏感
    ▼
SAC:随机策略 + 最大熵 + 双 Q 网络

这张关系图不是严格的算法谱系,而是帮助理解设计动机:每次增加网络、target、优势、概率比或熵,通常都在解决上一种训练信号不稳定、不能计算或利用率不足的问题。

9. 各类方法的统一对照

方法 主要解决的问题 为什么这样做 最后解决了什么 仍然存在的缺点
Monte Carlo 价值估计 没有 \(V(s)\) 的真实标签 用完整 episode 的 \(U_t\) 作为 target 不依赖未来价值预测也能学习 \(V(s)\) 必须等 episode 结束,方差较大
TD 价值估计 Monte Carlo 更新太晚、波动较大 用 reward 和下一状态价值 bootstrap 每一步都能更新,通常方差更低 target 依赖自己的预测,会引入偏差和不稳定性
DQN Q-table 无法覆盖复杂或连续状态 用神经网络拟合 Q 值,并加入 replay buffer 与目标网络 能在高维状态中学习离散动作价值,历史数据可重复使用 难以直接处理连续动作,可能高估 Q 值,训练仍较敏感
REINFORCE 没有正确动作标签,无法直接监督策略 用 \(U_t\) 加权实际动作的 log probability 可以直接学习离散或连续的随机策略 要等待完整 episode,梯度方差大,on-policy 数据利用率低
Actor-Critic / A2C REINFORCE 的回报缺少状态基准 Critic 估计 \(V(s)\),Actor 使用 advantage 降低策略梯度方差,可以更早更新;A2C 还能并行采样 Actor 依赖 Critic 的准确性,两个网络共同训练仍可能不稳定
PPO Actor-Critic 更新过大时容易破坏当前策略 使用 GAE 估计优势,用新旧概率比和 clip 限制更新 策略更新通常更稳定,同一批 rollout 可以训练多轮 仍是 on-policy,clip 不是严格约束,依赖多个超参数
DDPG DQN 无法枚举连续动作 Actor 直接输出连续动作,Critic 评价动作,使用 replay buffer 能以 off-policy 方式学习连续控制 需要额外探索噪声,对 Q 值误差和超参数敏感
SAC DDPG 探索不足、训练容易不稳定 学习随机策略,加入熵目标并使用双 Q 网络 探索更充分,通常更稳定,同时保持较高数据利用率 网络更多、计算量更大,熵系数和价值估计仍需调节

10. 阅读新算法时应该先看什么?

遇到新的强化学习算法时,可以沿着下面的顺序阅读:

  1. 它要优化什么? 是状态价值、动作价值,还是策略的期望回报?
  2. 网络输出什么? 是 \(V(s)\)、\(Q(s,a)\)、确定性动作,还是动作分布?
  3. 原始数据从哪里来? 是当前策略的 rollout,还是 replay buffer 中的历史 transition?
  4. 训练信号怎样构造? 是完整回报、TD target、advantage,还是带熵的价值目标?
  5. loss 更新谁? target 是否停止梯度,Actor 和 Critic 分别接收什么信号?
  6. 它改进了什么? 是降低方差、限制更新、处理连续动作,还是提高数据利用率?代价又是什么?

这些方法的反向传播没有本质区别。真正不同的部分发生在 loss.backward() 之前:算法怎样把环境返回的 reward,加工成网络能够学习的 target 或权重。

Sep 06, 2026