Kirito's Blog · 文章

强化学习速记:公式、直觉与最小实现

2026-02-06 · 1 分钟 ·标签:强化学习深度学习机器学习

用公式和代码把 RL 的核心环节串起来:价值函数、策略梯度与优势估计。

强化学习的核心目标是最大化长期回报。下面用一篇“公式 + 最小代码”把关键概念串起来。

策略学习示意图
策略网络训练流程示意:观测 -> 策略 -> 动作 -> 奖励

1. 基本定义

折扣回报:

$$ G_t = \sum_{k=0}^{\infty} \gamma^k r_{t+k} $$

状态价值函数:

$$ V^{\pi}(s) = \mathbb{E}_{\pi}[G_t \mid s_t=s] $$

动作价值函数:

$$ Q^{\pi}(s,a) = \mathbb{E}_{\pi}[G_t \mid s_t=s, a_t=a] $$

2. Bellman 方程

Bellman 期望方程:

$$ V^{\pi}(s) = \sum_a \pi(a\mid s) \sum_{s'} P(s'\mid s,a) [r + \gamma V^{\pi}(s')] $$

最优 Bellman 方程:

$$ V^*(s) = \max_a \sum_{s'} P(s'\mid s,a) [r + \gamma V^*(s')] $$

3. TD 误差与更新

TD 误差:

$$ \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) $$

一阶更新:

$$ V(s_t) \leftarrow V(s_t) + \alpha \delta_t $$

4. 策略梯度与优势函数

策略梯度目标:

$$ J(\theta) = \mathbb{E}_{\pi_\theta}[G_t] $$

梯度形式:

$$ \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta}[\nabla_\theta \log \pi_\theta(a_t\mid s_t) A_t] $$

优势估计:

$$ A_t = Q(s_t,a_t) - V(s_t) $$

用 GAE 表达:

$$ \hat{A}_t = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l} $$

5. 最小实现(PyTorch 伪代码)

Python
1import torch2 3def compute_returns(rewards, gamma=0.99):4 returns = []5 g = 0.06 for r in reversed(rewards):7 g = r + gamma * g8 returns.append(g)9 return list(reversed(returns))10 11def policy_gradient_step(log_probs, advantages, optimizer):12 # maximize E[log pi * A] -> minimize negative13 loss = -(torch.stack(log_probs) * torch.tensor(advantages)).mean()14 optimizer.zero_grad()15 loss.backward()16 optimizer.step()

6. 一份实践清单

  1. 奖励缩放与标准化
  2. 优势归一化避免训练发散
  3. 先验证小环境(CartPole)再上复杂任务
提示

建议先把 reward、advantage 的统计日志打出来,再开始调参。

注意

如果策略熵快速塌缩,通常意味着探索不足或学习率偏高。

指标 目标区间 说明
Policy Loss 稳定下降 波动过大时先减小学习率
Value Loss 不爆炸 长时间偏高说明值函数拟合不足
Entropy 缓慢下降 下降太快会导致探索不足

强化学习不是靠堆模型,而是靠稳定的训练流程与正确的信号设计。

参考资料 博客园