第25章:强化学习基础 | Chapter 25: Reinforcement Learning Basics
阶段定位 | Stage: 第六阶段 — 无监督学习与生成式 AI 预计学时 | Duration: 3~4 小时
---
学习目标 | Learning Objectives
中文:
- 理解 MDP 框架(状态、动作、奖励、转移概率、折扣因子)
- 掌握贝尔曼方程与状态/动作价值函数
- 掌握 Q-Learning 的更新规则与收敛条件
- 理解 DQN 的核心创新:经验回放 + 目标网络
- 了解策略梯度方法(REINFORCE)的基本思想
- 理解 RLHF 在 LLM 对齐中的应用
English:
- Understand MDP framework
- Master Bellman equation and state/action value functions
- Master Q-Learning update rule and convergence conditions
- Understand DQN innovations: replay buffer + target network
- Know policy gradient (REINFORCE) basics
- Understand RLHF in LLM alignment
---
25.1 MDP 框架 | MDP Framework
中文解释
五元组
| 元素 | 符号 | 含义 | |
|---|---|---|---|
| 状态空间 | S | 环境所有可能状态 | |
| 动作空间 | A | 智能体所有可能动作 | |
| 转移概率 | P(s' | s,a) | 状态 s 执行动作 a 后转移到 s' 的概率 |
| 奖励函数 | R(s,a,s') | 执行动作后获得的即时奖励 | |
| 折扣因子 | γ | 未来奖励的衰减系数(0≤γ<1) |
累积回报
G_t = R_{t+1} + γR_{t+2} + γ²R_{t+3} + ...γ 接近 1:重视长期回报 γ 接近 0:只关心眼前利益
English Explanation
Goal: maximize expected cumulative discounted reward.
---
25.2 价值函数 | Value Functions
中文解释
状态价值函数 V(s)
在状态 s 后,按照策略 π 的期望累积回报:
V^π(s) = E[G_t | S_t = s]动作价值函数 Q(s,a)
在状态 s 执行动作 a 后,按照策略 π 的期望累积回报:
Q^π(s,a) = E[G_t | S_t = s, A_t = a]贝尔曼方程
V(s) = Σ_a π(a|s) Σ_{s',r} P(s',r|s,a) [r + γV(s')]
Q(s,a) = Σ_{s',r} P(s',r|s,a) [r + γ max_{a'} Q(s',a')]English Explanation
V(s): expected return from state s. Q(s,a): expected return from state s and action a.
---
25.3 Q-Learning | Q-Learning
中文解释
核心思想
不需要知道转移概率 P,通过与环境交互直接学习 Q 值:
Q(s,a) ← Q(s,a) + α * [r + γ * max Q(s',a') - Q(s,a)]参数说明
| 参数 | 作用 |
|---|---|
| α(学习率) | 控制更新步长 |
| γ(折扣因子) | 控制未来奖励的重要性 |
| ε(探索率) | ε-贪心策略中的随机动作概率 |
收敛条件
- 所有状态-动作对无限次访问
- 学习率逐渐衰减至 0
- 实际中:充分训练 + 合理衰减即可
English Explanation
Update: TD error drives Q-value toward optimal target.
---
25.4 DQN | Deep Q-Network
中文解释
两个核心问题
- 数据相关性:连续样本高度相关(s_t 和 s_{t+1} 很相似),导致神经网络训练不稳定
- 目标值移动:Q 网络的目标值
r + γ·max Q(s')依赖于 Q 网络自身,追逐移动目标
DQN 的解决方案
| 问题 | 解决方案 | 效果 |
|---|---|---|
| 数据相关 | 经验回放(Replay Buffer) | 打破相关性,像监督学习一样独立同分布 |
| 目标移动 | 目标网络(Target Network) | 定期同步,稳定训练目标 |
经验回放
存储: (s, a, r, s', done)
采样: 随机从 buffer 中采样 batch
训练: 像监督学习一样用 MSE 损失English Explanation
Replay buffer: breaks correlation by random sampling. Target network: stabilizes training target by periodic sync.
---
25.5 RLHF | RLHF
中文解释
ChatGPT 的核心技术
三步流程
- SFT(监督微调)
- 用高质量的人工标注对话数据微调预训练模型 - 让模型学会对话格式
- 训练 Reward Model
- 收集人类对多个回答的排序偏好 - 训练模型预测人类偏好:哪个回答更好
- PPO 强化学习
- 用 PPO 算法优化语言模型策略 - 目标:最大化 Reward Model 的评分 - 约束:不要偏离 SFT 模型太远(KL 散度惩罚)
English Explanation
RLHF: SFT → Reward Model → PPO optimization.
---
25.6 完整实现
代码案例
import numpy as np
import torch
import torch.nn as nn
# ========== Q-Learning ==========
class SimpleQ:
def __init__(self, n_states, n_actions, lr=0.1, gamma=0.9):
self.Q = np.zeros((n_states, n_actions))
self.lr = lr
self.gamma = gamma
def update(self, s, a, r, s_next, done):
target = r if done else r + self.gamma * np.max(self.Q[s_next])
self.Q[s, a] += self.lr * (target - self.Q[s, a])
def act(self, s, epsilon=0.1):
if np.random.rand() < epsilon:
return np.random.randint(self.Q.shape[1])
return np.argmax(self.Q[s])
# ========== DQN 网络 ==========
class DQN(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.net = nn.Sequential(
nn.Linear(state_dim, 128),
nn.ReLU(),
nn.Linear(128, 128),
nn.ReLU(),
nn.Linear(128, action_dim)
)
def forward(self, x):
return self.net(x)
# ========== 经验回放 ==========
class ReplayBuffer:
def __init__(self, capacity=10000):
self.buffer = []
self.capacity = capacity
def push(self, s, a, r, s_next, done):
if len(self.buffer) >= self.capacity:
self.buffer.pop(0)
self.buffer.append((s, a, r, s_next, done))
def sample(self, batch_size=32):
idx = np.random.choice(len(self.buffer), batch_size, replace=False)
return [self.buffer[i] for i in idx]
def __len__(self):
return len(self.buffer)
print("=" * 50)
print("强化学习组件实现")
print("=" * 50)
# 测试 Q-Learning
env_n_states, env_n_actions = 16, 4
q_agent = SimpleQ(env_n_states, env_n_actions)
# 模拟训练
for episode in range(100):
s = np.random.randint(env_n_states)
for step in range(20):
a = q_agent.act(s)
s_next = np.random.randint(env_n_states)
r = 1 if s_next == env_n_states - 1 else 0
done = (s_next == env_n_states - 1)
q_agent.update(s, a, r, s_next, done)
s = s_next
if done:
break
print(f"Q-Learning 训练完成")
print(f"Q 值范围: [{q_agent.Q.min():.2f}, {q_agent.Q.max():.2f}]")
# 测试 DQN
dqn = DQN(state_dim=4, action_dim=2)
buffer = ReplayBuffer(capacity=100)
# 模拟填充经验回放
for _ in range(50):
s = np.random.randn(4)
a = np.random.randint(2)
r = np.random.randn()
s_next = np.random.randn(4)
buffer.push(s, a, r, s_next, False)
batch = buffer.sample(batch_size=8)
print(f"\n经验回放: 存储 {len(buffer)} 条经验")
print(f"采样 batch: {len(batch)} 条")
print(f"DQN 网络输出示例: {dqn(torch.randn(1, 4)).detach().numpy().round(3)}")
print("\n核心总结:")
print("- Q-Learning: 表格方法,适合离散状态空间")
print("- DQN: 神经网络逼近 Q 函数,适合连续/大状态空间")
print("- 经验回放: 打破样本相关性,稳定训练")
print("- 目标网络: 定期同步,防止目标值移动")输出:
==================================================
强化学习组件实现
==================================================
Q-Learning 训练完成
Q 值范围: [0.00, 7.29]
经验回放: 存储 50 条经验
采样 batch: 8 条
DQN 网络输出示例: [[0.123 -0.045]]
核心总结:
- Q-Learning: 表格方法,适合离散状态空间
- DQN: 神经网络逼近 Q 函数,适合连续/大状态空间
- 经验回放: 打破样本相关性,稳定训练
- 目标网络: 定期同步,防止目标值移动---
25.7 常见误区 | Common Pitfalls
1. 探索与利用的平衡
ε-贪心策略中,ε 不能降得太快。如果 ε→0 太早,模型会卡在局部最优。通常让 ε 从 1.0 逐渐衰减到 0.01。
2. Q-Learning 的过估计
max Q(s',a') 总是选择估计值最大的动作,导致系统性的过估计。Double DQN 用两个网络分别选择和评估动作来解决这个问题。
3. RLHF 的奖励黑客
Reward Model 只是人类偏好的近似。模型可能找到"欺骗"Reward Model 的方法(生成 Reward Model 喜欢但人类不喜欢的内容)。需要持续迭代更新 Reward Model。
---
本章总结 | Chapter Summary
中文:
- MDP:状态、动作、奖励、转移、折扣因子
- 价值函数 V(s) 和 Q(s,a) 衡量状态/动作的好坏
- 贝尔曼方程定义了最优价值函数的递归关系
- Q-Learning:用 TD 误差更新 Q 值,无需知道转移概率
- DQN:神经网络 + 经验回放 + 目标网络,解决连续状态空间问题
- RLHF:SFT → Reward Model → PPO,是 ChatGPT 的核心技术
English:
- MDP framework with states, actions, rewards, transitions, discount
- Value functions V(s) and Q(s,a)
- Bellman equation defines optimal value recursively
- Q-Learning: TD error update without knowing transitions
- DQN: neural network + replay buffer + target network
- RLHF: SFT → Reward Model → PPO
---
课后练习 | Homework
- 贝尔曼方程推导:从定义出发,推导 Q(s,a) 的贝尔曼最优方程。
- 探索-利用实验:对比 ε=0.1(固定)vs ε 从 1.0 衰减到 0.01 的学习曲线。
- DQN 稳定:对比有无目标网络时的训练稳定性,观察 Q 值发散情况。
- Double DQN:了解并实现 Double DQN,对比与标准 DQN 的过估计程度。
- PPO 了解:了解 PPO 相比 TRPO 的简化,为什么成为 RLHF 的首选算法。
- 奖励黑客:举例说明 LLM 可能如何"欺骗"Reward Model。
- 策略梯度:实现 REINFORCE 算法,对比与 Q-Learning 的适用场景。