SilverIce Toolbox
Back to course

Stage 6 / Chapter 25

第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

中文解释

两个核心问题

  1. 数据相关性:连续样本高度相关(s_t 和 s_{t+1} 很相似),导致神经网络训练不稳定
  2. 目标值移动: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 的核心技术

三步流程

  1. SFT(监督微调)

- 用高质量的人工标注对话数据微调预训练模型 - 让模型学会对话格式

  1. 训练 Reward Model

- 收集人类对多个回答的排序偏好 - 训练模型预测人类偏好:哪个回答更好

  1. PPO 强化学习

- 用 PPO 算法优化语言模型策略 - 目标:最大化 Reward Model 的评分 - 约束:不要偏离 SFT 模型太远(KL 散度惩罚)

English Explanation

RLHF: SFT → Reward Model → PPO optimization.

---

25.6 完整实现

代码案例

python
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

  1. 贝尔曼方程推导:从定义出发,推导 Q(s,a) 的贝尔曼最优方程。
  1. 探索-利用实验:对比 ε=0.1(固定)vs ε 从 1.0 衰减到 0.01 的学习曲线。
  1. DQN 稳定:对比有无目标网络时的训练稳定性,观察 Q 值发散情况。
  1. Double DQN:了解并实现 Double DQN,对比与标准 DQN 的过估计程度。
  1. PPO 了解:了解 PPO 相比 TRPO 的简化,为什么成为 RLHF 的首选算法。
  1. 奖励黑客:举例说明 LLM 可能如何"欺骗"Reward Model。
  1. 策略梯度:实现 REINFORCE 算法,对比与 Q-Learning 的适用场景。