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
import 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. 一份实践清单

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

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