强化学习速记:公式、直觉与最小实现
用公式和代码把 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 伪代码)
Pythonimport torch
def compute_returns(rewards, gamma=0.99):
returns = []
g = 0.0
for r in reversed(rewards):
g = r + gamma * g
returns.append(g)
return list(reversed(returns))
def policy_gradient_step(log_probs, advantages, optimizer):
# maximize E[log pi * A] -> minimize negative
loss = -(torch.stack(log_probs) * torch.tensor(advantages)).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
6. 一份实践清单
- 奖励缩放与标准化
- 优势归一化避免训练发散
- 先验证小环境(CartPole)再上复杂任务
强化学习不是靠堆模型,而是靠稳定的训练流程与正确的信号设计。