refactor(ch06-08): 调整第三篇章节顺序
原:RL(Ch06) → 生成式AI(Ch07) → Agent(Ch08) 新:生成式AI(Ch06) → Agent(Ch07) → RL(Ch08) 感知→创造→行动 的叙事线更贴合设计专业学生。 更新了目录、CLAUDE.md 和所有章节内编号。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,896 @@
|
||||
# 第8章:强化学习——从决策到对齐
|
||||
|
||||
## 篇章导读
|
||||
|
||||
强化学习(Reinforcement Learning, RL)是一种通过与环境交互、从反馈中学习的范式。与监督学习从标注数据中学习不同,强化学习的智能体(Agent)通过不断尝试行动、接收奖励或惩罚信号来优化自身行为策略。
|
||||
|
||||
2016年,AlphaGo击败围棋世界冠军李世石,让强化学习走入公众视野。此后,从蛋白质结构预测(AlphaFold)到大语言模型的人类对齐(RLHF),强化学习已深入AI的各个核心领域,成为现代人工智能不可或缺的基石。
|
||||
|
||||
本章将系统介绍强化学习的基础原理、核心算法、里程碑突破,以及它在大模型对齐和设计领域的应用。我们将看到,强化学习不仅是一种算法工具,更是理解"智能体如何在复杂世界中做出决策"的关键框架。
|
||||
|
||||
---
|
||||
|
||||
## 学习目标
|
||||
|
||||
1. 理解强化学习的基本框架:智能体-环境交互循环
|
||||
2. 掌握从Q-Learning到PPO的核心算法演进
|
||||
3. 了解Alpha系列的技术突破及其意义
|
||||
4. 理解RLHF如何将大语言模型与人类偏好对齐
|
||||
5. 认识具身智能(Embodied AI)与强化学习的关联
|
||||
6. 思考强化学习在设计领域的应用场景
|
||||
|
||||
---
|
||||
|
||||
# 8.1 RL基础
|
||||
|
||||
## 8.1.1 核心框架:智能体与环境的交互
|
||||
|
||||
强化学习的核心是一个**智能体(Agent)与环境(Environment)的交互循环**:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ │
|
||||
│ ┌──────────┐ 动作 (Action) ┌──────────┐ │
|
||||
│ │ │ ──────────────────> │ │ │
|
||||
│ │ 智能体 │ │ 环境 │ │
|
||||
│ │ (Agent) │ <────────────────── │(Environ.)│ │
|
||||
│ │ │ 状态 (State) │ │ │
|
||||
│ │ │ 奖励 (Reward) │ │ │
|
||||
│ └──────────┘ └──────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
在每一个时间步 t,交互过程如下:
|
||||
|
||||
1. 智能体观察环境的**状态(State)** s_t
|
||||
2. 智能体根据策略选择一个**动作(Action)** a_t
|
||||
3. 环境返回**奖励(Reward)** r_t 和新的状态 s_{t+1}
|
||||
4. 智能体根据反馈更新策略,目标是最大化**累积奖励**
|
||||
|
||||
这个过程就像一个学生做练习题:做题(选择动作),对答案(接收反馈),总结经验(更新策略),最终提高成绩(最大化累积奖励)。
|
||||
|
||||
## 8.1.2 马尔可夫决策过程
|
||||
|
||||
强化学习的数学基础是**马尔可夫决策过程(Markov Decision Process, MDP)**。一个MDP由五元组 (S, A, P, R, γ) 定义:
|
||||
|
||||
| 符号 | 含义 | 说明 |
|
||||
|------|------|------|
|
||||
| S | 状态空间(State Space) | 环境所有可能的状态集合 |
|
||||
| A | 动作空间(Action Space) | 智能体可采取的所有动作集合 |
|
||||
| P | 状态转移概率(Transition Probability) | P(s'|s,a),在状态s采取动作a后转移到s'的概率 |
|
||||
| R | 奖励函数(Reward Function) | R(s,a),在状态s采取动作a获得的即时奖励 |
|
||||
| γ | 折扣因子(Discount Factor) | 0 ≤ γ ≤ 1,衡量未来奖励的重要性 |
|
||||
|
||||
**马尔可夫性质(Markov Property)** 是MDP的核心假设:未来只取决于当前状态,与过去无关。这就像下棋时,当前的棋盘状态已经包含了所有必要信息,不需要知道之前的每一步走法。
|
||||
|
||||
## 8.1.3 价值函数
|
||||
|
||||
智能体的目标是最大化累积折扣奖励:
|
||||
|
||||
$$G_t = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + ... = \sum_{k=0}^{\infty} \gamma^k r_{t+k}$$
|
||||
|
||||
为了评估"处于某个状态有多好",我们定义两种价值函数:
|
||||
|
||||
**状态价值函数(State Value Function)V(s)**:在状态s下,遵循策略π所能获得的期望累积奖励。
|
||||
|
||||
$$V^\pi(s) = \mathbb{E}_\pi [G_t | S_t = s]$$
|
||||
|
||||
**动作价值函数(Action Value Function)Q(s,a)**:在状态s下采取动作a,之后遵循策略π所能获得的期望累积奖励。
|
||||
|
||||
$$Q^\pi(s, a) = \mathbb{E}_\pi [G_t | S_t = s, A_t = a]$$
|
||||
|
||||
两者的关系是:V(s) 是对所有可能动作的Q值的加权平均。Q函数更为实用,因为它直接告诉我们在某个状态下"哪个动作最好"。
|
||||
|
||||
## 8.1.4 Q-Learning
|
||||
|
||||
**Q-Learning** 是一种经典的免策略(Off-policy)时序差分算法,它直接学习最优Q函数,而不需要知道环境的具体模型。
|
||||
|
||||
其更新规则为:
|
||||
|
||||
$$Q(s, a) \leftarrow Q(s, a) + \alpha [r + \gamma \max_{a'} Q(s', a') - Q(s, a)]$$
|
||||
|
||||
其中:
|
||||
- α 是学习率(Learning Rate),控制每次更新的步长
|
||||
- r + γ max Q(s', a') 是**目标值**,即当前奖励加上下一状态的最大Q值
|
||||
- Q(s, a) 是**当前估计值**
|
||||
- 方括号内的差值称为**时序差分误差(TD Error)**
|
||||
|
||||
这就像考试估分:你先估计自己能得多少分(当前Q值),对答案后发现实际得分(目标值),然后修正你的估计。
|
||||
|
||||
**探索与利用的平衡(Exploration vs. Exploitation)** 是Q-Learning的关键问题。ε-greedy策略是最简单的解决方案:以概率ε随机选择动作(探索),以概率1-ε选择当前最优动作(利用)。
|
||||
|
||||
## 8.1.5 DQN:深度Q网络
|
||||
|
||||
当状态空间很大时(如像素级游戏画面),用表格存储所有Q值不再可行。2015年,DeepMind提出的**DQN(Deep Q-Network)**用神经网络来近似Q函数,实现了从感知到决策的端到端学习。
|
||||
|
||||
DQN的两个关键创新:
|
||||
|
||||
**经验回放(Experience Replay)**:将智能体的经历 (s, a, r, s') 存储在回放缓冲区中,训练时随机采样小批量数据。这打破了数据之间的时间相关性,提高了训练稳定性。
|
||||
|
||||
**目标网络(Target Network)**:使用一个独立的目标网络来计算目标值,每隔一定步数才更新。这避免了"追逐移动目标"的不稳定性。
|
||||
|
||||
```python
|
||||
# DQN核心思路伪代码
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
import random
|
||||
from collections import deque
|
||||
|
||||
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) # 输出每个动作的Q值
|
||||
|
||||
# 经验回放缓冲区
|
||||
replay_buffer = deque(maxlen=10000)
|
||||
|
||||
# 训练循环(简化版)
|
||||
for episode in range(num_episodes):
|
||||
state = env.reset()
|
||||
for step in range(max_steps):
|
||||
# ε-greedy选择动作
|
||||
if random.random() < epsilon:
|
||||
action = env.action_space.sample() # 探索
|
||||
else:
|
||||
with torch.no_grad():
|
||||
action = q_network(state).argmax() # 利用
|
||||
|
||||
next_state, reward, done, _ = env.step(action)
|
||||
replay_buffer.append((state, action, reward, next_state))
|
||||
|
||||
# 从回放缓冲区采样并训练
|
||||
if len(replay_buffer) >= batch_size:
|
||||
batch = random.sample(replay_buffer, batch_size)
|
||||
# 计算损失并更新网络
|
||||
# loss = MSE(Q(s,a), r + γ * max Q_target(s', a'))
|
||||
...
|
||||
|
||||
if done:
|
||||
break
|
||||
```
|
||||
|
||||
**突破性成果**:DQN在49款Atari游戏上达到了人类水平的性能,仅从游戏画面的像素输入和分数反馈就能学会各种不同的游戏策略。这一成果标志着深度强化学习时代的开启。
|
||||
|
||||
## 8.1.6 代码示例:网格世界中的Q-Learning
|
||||
|
||||
下面是一个简化的Q-Learning完整示例,智能体在4×4网格中学习从起点走到终点:
|
||||
|
||||
```python
|
||||
import numpy as np
|
||||
|
||||
# 定义4×4网格世界
|
||||
# 状态:0-15(网格中的每个格子)
|
||||
# 动作:0=上, 1=右, 2=下, 3=左
|
||||
grid_size = 4
|
||||
n_states = grid_size * grid_size
|
||||
n_actions = 4
|
||||
goal = 15 # 目标状态:右下角
|
||||
|
||||
# 初始化Q表(所有值设为0)
|
||||
Q = np.zeros((n_states, n_actions))
|
||||
|
||||
# 超参数
|
||||
alpha = 0.1 # 学习率
|
||||
gamma = 0.95 # 折扣因子
|
||||
epsilon = 0.1 # 探索率
|
||||
episodes = 500
|
||||
|
||||
# 动作对应的位移
|
||||
action_map = {
|
||||
0: -grid_size, # 上
|
||||
1: 1, # 右
|
||||
2: grid_size, # 下
|
||||
3: -1 # 左
|
||||
}
|
||||
|
||||
def get_next_state(state, action):
|
||||
"""执行动作后的下一个状态"""
|
||||
next_state = state + action_map[action]
|
||||
# 边界检查
|
||||
if next_state < 0 or next_state >= n_states:
|
||||
return state # 撞墙,留在原地
|
||||
# 左右边界检查
|
||||
if action == 1 and state % grid_size == grid_size - 1:
|
||||
return state
|
||||
if action == 3 and state % grid_size == 0:
|
||||
return state
|
||||
return next_state
|
||||
|
||||
# Q-Learning训练
|
||||
for ep in range(episodes):
|
||||
state = 0 # 起点:左上角
|
||||
while state != goal:
|
||||
# ε-greedy选择动作
|
||||
if np.random.random() < epsilon:
|
||||
action = np.random.randint(n_actions)
|
||||
else:
|
||||
action = np.argmax(Q[state])
|
||||
|
||||
next_state = get_next_state(state, action)
|
||||
|
||||
# 奖励设计:到达目标+10,每步-1(鼓励快速到达)
|
||||
reward = 10 if next_state == goal else -1
|
||||
|
||||
# Q-Learning更新
|
||||
Q[state, action] += alpha * (
|
||||
reward + gamma * np.max(Q[next_state]) - Q[state, action]
|
||||
)
|
||||
|
||||
state = next_state
|
||||
|
||||
# 输出学到的策略
|
||||
directions = ['↑', '→', '↓', '←']
|
||||
print("学到的最优策略:")
|
||||
for s in range(n_states):
|
||||
if s == goal:
|
||||
print('🎯', end=' ')
|
||||
else:
|
||||
print(directions[np.argmax(Q[s])], end=' ')
|
||||
if (s + 1) % grid_size == 0:
|
||||
print()
|
||||
# 输出示例:
|
||||
# → → ↓ ↓
|
||||
# ↓ → ↓ ↓
|
||||
# → ↓ ↓ ↓
|
||||
# ↓ → → 🎯
|
||||
```
|
||||
|
||||
> **小贴士**:这个简单示例展示了强化学习的核心思想——智能体不需要任何人告诉它"该怎么走",它只通过不断尝试和接收奖励反馈,就自己发现了最优路径。这正是强化学习区别于监督学习的本质。
|
||||
|
||||
---
|
||||
|
||||
# 8.2 策略优化
|
||||
|
||||
Q-Learning和DQN属于**基于价值(Value-Based)** 的方法:先学习价值函数,再间接推导策略。另一类方法是**基于策略(Policy-Based)** 的方法,直接优化策略本身。
|
||||
|
||||
## 8.2.1 策略梯度(Policy Gradient)
|
||||
|
||||
策略梯度方法直接参数化策略 π_θ(a|s),通过梯度上升最大化期望累积奖励:
|
||||
|
||||
$$\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \right]$$
|
||||
|
||||
直觉理解:如果某条轨迹的总回报G_t很高,就增大产生该轨迹的概率;反之则降低。这就像鼓励好的行为、惩罚坏的行为。
|
||||
|
||||
**REINFORCE算法**是最基本的策略梯度方法:
|
||||
|
||||
```python
|
||||
# REINFORCE算法核心思路
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
import torch.optim as optim
|
||||
|
||||
class PolicyNetwork(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, action_dim),
|
||||
nn.Softmax(dim=-1)
|
||||
)
|
||||
|
||||
def forward(self, x):
|
||||
return self.net(x) # 输出动作概率分布
|
||||
|
||||
policy = PolicyNetwork(state_dim, action_dim)
|
||||
optimizer = optim.Adam(policy.parameters(), lr=0.01)
|
||||
|
||||
for episode in range(num_episodes):
|
||||
log_probs = [] # 存储每步的log概率
|
||||
rewards = [] # 存储每步的奖励
|
||||
|
||||
state = env.reset()
|
||||
while not done:
|
||||
action_probs = policy(state)
|
||||
action = torch.distributions.Categorical(action_probs).sample()
|
||||
log_probs.append(torch.log(action_probs[action]))
|
||||
|
||||
state, reward, done, _ = env.step(action)
|
||||
rewards.append(reward)
|
||||
|
||||
# 计算折扣累积奖励
|
||||
returns = compute_returns(rewards, gamma)
|
||||
|
||||
# 策略梯度更新
|
||||
loss = -sum(lp * G for lp, G in zip(log_probs, returns))
|
||||
optimizer.zero_grad()
|
||||
loss.backward()
|
||||
optimizer.step()
|
||||
```
|
||||
|
||||
REINFORCE的问题在于**方差大**:由于每条轨迹的回报波动很大,梯度估计不稳定,训练效率低。
|
||||
|
||||
## 8.2.2 Actor-Critic方法
|
||||
|
||||
**Actor-Critic** 方法结合了基于价值和基于策略的优势:
|
||||
|
||||
```
|
||||
┌─────────────────────────────────┐
|
||||
│ Actor-Critic 架构 │
|
||||
│ │
|
||||
│ ┌─────────┐ ┌───────────┐ │
|
||||
│ │ Actor │ │ Critic │ │
|
||||
│ │ (策略网络)│ │(价值网络) │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ 输入:状态│ │ 输入:状态│ │
|
||||
│ │ 输出:动作│ │ 输出:V(s)│ │
|
||||
│ └─────────┘ └───────────┘ │
|
||||
│ │
|
||||
│ Actor根据Critic的评估改进策略 │
|
||||
│ Critic学习更准确地评估状态价值 │
|
||||
└─────────────────────────────────┘
|
||||
```
|
||||
|
||||
- **Actor(演员)**:策略网络,负责选择动作
|
||||
- **Critic(评论家)**:价值网络,负责评估当前状态的好坏
|
||||
|
||||
Critic提供一个**基线(Baseline)**,使得梯度估计的方差大大降低。具体来说,使用**优势函数(Advantage Function)**:
|
||||
|
||||
$$A(s, a) = Q(s, a) - V(s)$$
|
||||
|
||||
优势函数衡量的是"采取动作a比平均水平好多少"。如果A > 0,说明这个动作比期望的好,应该增加其概率;反之则降低。
|
||||
|
||||
## 8.2.3 PPO:近端策略优化
|
||||
|
||||
**PPO(Proximal Policy Optimization, 2017)** 是由OpenAI提出的一种策略优化算法,它通过限制策略更新的幅度来保证训练稳定性,成为当前最广泛使用的强化学习算法之一。
|
||||
|
||||
PPO的核心思想:每次更新策略时,新策略与旧策略不能相差太大。这通过**裁剪目标函数(Clipped Objective)** 实现:
|
||||
|
||||
$$L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min \left( r_t(\theta) \hat{A}_t, \; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t \right) \right]$$
|
||||
|
||||
其中 r_t(θ) = π_θ(a_t|s_t) / π_θ_old(a_t|s_t) 是新旧策略的概率比。
|
||||
|
||||
```python
|
||||
# PPO核心思路(简化版)
|
||||
def ppo_update(states, actions, old_log_probs, returns, advantages):
|
||||
for epoch in range(ppo_epochs):
|
||||
# 计算新的log概率
|
||||
new_log_probs = policy.get_log_prob(states, actions)
|
||||
ratio = torch.exp(new_log_probs - old_log_probs)
|
||||
|
||||
# PPO裁剪目标
|
||||
surr1 = ratio * advantages
|
||||
surr2 = torch.clamp(ratio, 1 - clip_epsilon, 1 + clip_epsilon) * advantages
|
||||
actor_loss = -torch.min(surr1, surr2).mean()
|
||||
|
||||
# Critic损失
|
||||
values = critic(states)
|
||||
critic_loss = nn.MSELoss()(values, returns)
|
||||
|
||||
# 总损失
|
||||
loss = actor_loss + 0.5 * critic_loss
|
||||
optimizer.zero_grad()
|
||||
loss.backward()
|
||||
optimizer.step()
|
||||
```
|
||||
|
||||
**为什么PPO成为标准?**
|
||||
|
||||
| 特性 | 说明 |
|
||||
|------|------|
|
||||
| 稳定性 | 裁剪机制防止策略突变,训练过程平稳 |
|
||||
| 简洁性 | 相比TRPO等算法,实现简单,超参数少 |
|
||||
| 性能 | 在多种任务上表现优异 |
|
||||
| 通用性 | 适用于连续和离散动作空间 |
|
||||
| 可扩展性 | 是RLHF训练大语言模型的核心算法 |
|
||||
|
||||
> **关键连接**:PPO正是ChatGPT等大语言模型在RLHF(人类反馈强化学习)阶段使用的核心算法。我们在6.4节将详细讨论这一过程。
|
||||
|
||||
## 8.2.4 A3C / A2C
|
||||
|
||||
**A3C(Asynchronous Advantage Actor-Critic, 2016)** 是DeepMind提出的并行训练框架:
|
||||
|
||||
- 多个Actor-Critic智能体同时在不同的环境副本中运行
|
||||
- 异步更新全局网络参数
|
||||
- 大幅提升训练速度和样本效率
|
||||
|
||||
**A2C(Advantage Actor-Critic)** 是A3C的同步版本,去掉了异步机制,实现更简洁,性能相当:
|
||||
|
||||
```
|
||||
A3C: 多个Worker异步更新 → 参数可能冲突,但整体有效
|
||||
A2C: 多个Worker同步更新 → 等待所有Worker完成,再统一更新
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 8.3 Alpha系列
|
||||
|
||||
从2016年开始,DeepMind的Alpha系列成果不断刷新人们对AI能力的认知。这些突破展示了一个共同的技术范式:**搜索 + 深度学习 + 海量计算**。
|
||||
|
||||
## 8.3.1 AlphaGo(2016)
|
||||
|
||||
2016年3月,AlphaGo以4:1击败围棋世界冠军李世石,这是AI发展史上的里程碑事件。围棋的状态空间约为10^170,远超国际象棋(10^47),被普遍认为在短期内不可能被机器攻克。
|
||||
|
||||
AlphaGo的核心技术组合:
|
||||
|
||||
**策略网络(Policy Network)**:学习"下一步应该下在哪里",输入棋盘状态,输出每个位置落子的概率分布。
|
||||
|
||||
**价值网络(Value Network)**:学习"当前局面谁更可能赢",输入棋盘状态,输出一个-1到1之间的胜率评估。
|
||||
|
||||
**蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)**:在策略网络的指导下进行前瞻搜索,通过模拟大量对局来评估每个候选落子点的价值。
|
||||
|
||||
```
|
||||
AlphaGo的训练流程:
|
||||
|
||||
第一步:监督学习
|
||||
← 人类专家棋谱 → 训练策略网络(预测人类落子)
|
||||
|
||||
第二步:强化学习
|
||||
← 策略网络自我对弈 → 提升策略网络
|
||||
|
||||
第三步:强化学习
|
||||
← 自我对弈数据 → 训练价值网络(评估局面)
|
||||
|
||||
第四步:实战
|
||||
← 策略网络 + 价值网络 + MCTS → 与人类对弈
|
||||
```
|
||||
|
||||
AlphaGo的意义远超围棋本身。它证明了:**在极其复杂的决策空间中,深度学习与搜索的结合可以超越人类数千年的知识积累**。
|
||||
|
||||
## 8.3.2 AlphaZero(2017)
|
||||
|
||||
如果说AlphaGo还需要人类棋谱作为起点,那么**AlphaZero**则完全抛弃了人类知识,仅通过**自我对弈(Self-Play)** 从零开始学习。
|
||||
|
||||
```
|
||||
AlphaGo : 人类棋谱 → 监督学习 → 强化学习 → MCTS
|
||||
AlphaZero : 随机下棋 → 自我对弈 → 不断改进 → MCTS
|
||||
```
|
||||
|
||||
AlphaZero用同一个框架掌握了三种完全不同的棋类:
|
||||
|
||||
| 游戏 | 训练时间 | 成果 |
|
||||
|------|---------|------|
|
||||
| 围棋(Go) | 21天 | 击败此前的AlphaGo版本 |
|
||||
| 国际象棋(Chess) | 4小时 | 击败Stockfish(世界冠军级引擎) |
|
||||
| 将棋(Shogi) | 2小时 | 击败Elmo(日本将棋冠军程序) |
|
||||
|
||||
AlphaZero的启示:**当我们摆脱对人类数据的依赖,让AI完全通过自我探索来学习时,它可能发现人类从未想到过的策略**。在对弈中,AlphaZero经常下出人类专家认为"错误"的棋,最终却证明是更优的选择。
|
||||
|
||||
## 8.3.3 AlphaFold(2020)
|
||||
|
||||
**AlphaFold** 将强化学习的思想拓展到科学发现领域。它解决了困扰生物学界50年的**蛋白质结构预测**问题——根据氨基酸序列预测蛋白质的三维结构。
|
||||
|
||||
```
|
||||
蛋白质折叠问题:
|
||||
|
||||
氨基酸序列(一维)→ ? → 蛋白质结构(三维)
|
||||
|
||||
AlphaFold的思路:
|
||||
- 将结构预测转化为"空间约束满足"问题
|
||||
- 利用注意力机制捕捉氨基酸之间的长程相互作用
|
||||
- 迭代优化,逐步精化结构预测
|
||||
```
|
||||
|
||||
AlphaFold的意义对设计领域尤其深远:
|
||||
|
||||
- **分子/空间推理**:蛋白质折叠本质上是一个三维空间优化问题,与设计中的空间布局、形态优化有深刻的相似性
|
||||
- **从规则到预测**:从传统的物理实验方法转向数据驱动的预测方法,这与设计领域从经验到数据驱动的发展方向一致
|
||||
- **科学发现的范式**:展示了AI如何加速科学发现,为设计领域的创新提供了新思路
|
||||
|
||||
## 8.3.4 Alpha系列的技术范式
|
||||
|
||||
总结Alpha系列的成功模式:
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────┐
|
||||
│ Alpha系列技术范式 │
|
||||
│ │
|
||||
│ ┌─────────┐ ┌──────────┐ ┌───────┐ │
|
||||
│ │ 搜索 │+│ 深度学习 │+│ 大计算 │ │
|
||||
│ │ (Search)│ │(Deep L.) │ │(Scale)│ │
|
||||
│ └─────────┘ └──────────┘ └───────┘ │
|
||||
│ │
|
||||
│ AlphaGo : MCTS + CNN + GPU集群 │
|
||||
│ AlphaZero : MCTS + ResNet + TPU集群 │
|
||||
│ AlphaFold : 优化器 + Transformer + TPU│
|
||||
└──────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
这一范式对设计领域的启示:复杂的设计问题(如城市规划、建筑布局)也可能通过"搜索 + 深度学习 + 计算"的组合来获得突破。
|
||||
|
||||
> **从游戏AI到科学发现**:Alpha系列的演进轨迹——从游戏(封闭规则、明确目标)到蛋白质折叠(开放规则、复杂约束)——暗示了强化学习从"玩具问题"走向"真实世界问题"的趋势。设计领域正是这种真实世界问题的重要阵地。
|
||||
|
||||
---
|
||||
|
||||
# 8.4 人类对齐
|
||||
|
||||
## 8.4.1 为什么需要对齐?
|
||||
|
||||
经过预训练的大语言模型(如第3章所述)虽然拥有强大的文本生成能力,但它本质上是在模仿训练数据中的模式。这导致几个严重问题:
|
||||
|
||||
- **有害内容**:可能生成歧视、暴力、虚假信息等有害内容
|
||||
- **不一致性**:对同一问题可能给出互相矛盾的答案
|
||||
- **不服从指令**:可能忽略用户的明确要求
|
||||
- **价值观偏差**:可能反映训练数据中的偏见
|
||||
|
||||
**对齐(Alignment)** 的目标是让AI模型的行为符合人类的价值观和期望,使其成为安全、有用、诚实的助手。而**RLHF(Reinforcement Learning from Human Feedback)** 是目前最成功的对齐方法。
|
||||
|
||||
> **回顾第3章**:在第3章中我们了解了Transformer架构和语言模型的预训练过程。预训练赋予模型"能力",而RLHF赋予模型"方向"——让能力服务于人类的目标。
|
||||
|
||||
## 8.4.2 RLHF:从人类反馈中学习
|
||||
|
||||
RLHF分为三个阶段:
|
||||
|
||||
**阶段一:监督微调(Supervised Fine-Tuning, SFT)**
|
||||
|
||||
```
|
||||
输入-输出对示例:
|
||||
用户:请解释什么是气候变化
|
||||
助手:气候变化是指全球气温长期上升的现象...
|
||||
|
||||
用户:帮我写一封请假邮件
|
||||
助手:尊敬的领导,您好!因...
|
||||
```
|
||||
|
||||
用高质量的人工编写对话数据对预训练模型进行微调,让模型学会以对话的形式回应指令。
|
||||
|
||||
**阶段二:奖励模型训练(Reward Model Training)**
|
||||
|
||||
```
|
||||
对于同一个问题,模型生成多个回答:
|
||||
问题:推荐一本适合初学者的设计书
|
||||
|
||||
回答A:《设计中的设计》——原研哉 ← 标注者排序:第1
|
||||
回答B:我推荐你看一些设计类的书... ← 标注者排序:第3
|
||||
回答C:原研哉的《设计中的设计》是... ← 标注者排序:第2
|
||||
|
||||
根据人类的排序偏好训练奖励模型:
|
||||
输入:(问题, 回答) → 输出:标量奖励分数
|
||||
```
|
||||
|
||||
奖励模型学习人类的偏好判断:给定一个问题和多个回答,它能预测人类更偏好哪个回答,并给出一个数值分数。
|
||||
|
||||
**阶段三:PPO强化学习优化**
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ RLHF 第三阶段:PPO训练 │
|
||||
│ │
|
||||
│ ┌──────────┐ 生成回答 ┌──────────┐ │
|
||||
│ │ SFT模型 │ ────────> │ 奖励模型 │ → 奖励分 │
|
||||
│ │(待优化) │ │ │ │
|
||||
│ └──────────┘ └──────────┘ │
|
||||
│ ↑ │
|
||||
│ │ 更新策略(PPO) │
|
||||
│ │ 目标:最大化奖励模型给出的分数 │
|
||||
│ ┌──────────┐ │
|
||||
│ │ KL散度约束│ → 防止偏离SFT模型太远 │
|
||||
│ └──────────┘ │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
在这个阶段,SFT模型成为RL的智能体:
|
||||
- **状态**:用户的问题
|
||||
- **动作**:生成的回答
|
||||
- **奖励**:奖励模型给出的分数
|
||||
- **算法**:PPO,保证训练的稳定性
|
||||
|
||||
同时,通过**KL散度惩罚(KL Divergence Penalty)** 约束模型不要偏离原始SFT模型太远,防止"奖励黑客(Reward Hacking)"——模型学会生成奖励模型给高分但实际无意义的内容。
|
||||
|
||||
```python
|
||||
# RLHF第三阶段伪代码
|
||||
for step in range(training_steps):
|
||||
# 1. 用当前策略(SFT模型)生成回答
|
||||
prompt = sample_prompt()
|
||||
response = policy.generate(prompt)
|
||||
|
||||
# 2. 奖励模型打分
|
||||
reward = reward_model(prompt, response)
|
||||
|
||||
# 3. KL散度惩罚(防止偏离太远)
|
||||
kl_penalty = compute_kl_divergence(policy, reference_model)
|
||||
adjusted_reward = reward - kl_coef * kl_penalty
|
||||
|
||||
# 4. PPO更新
|
||||
ppo_update(prompt, response, adjusted_reward)
|
||||
```
|
||||
|
||||
## 8.4.3 RLAIF与Constitutional AI
|
||||
|
||||
RLHF需要大量人工标注,成本高昂。**RLAIF(Reinforcement Learning from AI Feedback)** 用AI替代人类标注者来提供反馈:
|
||||
|
||||
**Constitutional AI(宪法AI)** 由Anthropic提出,其核心思想是让AI通过一组"宪法原则"进行自我纠正:
|
||||
|
||||
```
|
||||
Constitutional AI 流程:
|
||||
|
||||
1. AI生成回答(可能包含有害内容)
|
||||
2. AI根据宪法原则自我批评:
|
||||
"这个回答是否尊重了所有人?"
|
||||
"这个回答是否准确?"
|
||||
3. AI根据批评修改回答
|
||||
4. 用(问题, 修改后回答)对训练偏好模型
|
||||
5. 用RL优化策略
|
||||
|
||||
宪法原则示例:
|
||||
- 选择最无害且最有帮助的回答
|
||||
- 选择最准确和真实的回答
|
||||
- 选择最尊重所有群体的回答
|
||||
```
|
||||
|
||||
这种方法的优势在于:反馈的规模不再受限于人工标注的速度,可以大规模、高效率地进行对齐训练。
|
||||
|
||||
> **思考**:从RLHF到RLAIF,我们看到一个有趣的趋势——AI越来越多地参与自身的训练和改进。这在提高效率的同时也带来了新的安全问题:如何确保AI的自我评估是可靠的?
|
||||
|
||||
---
|
||||
|
||||
# 8.5 具身智能
|
||||
|
||||
## 8.5.1 什么是具身智能?
|
||||
|
||||
**具身智能(Embodied AI)** 是指拥有物理或虚拟"身体"的AI系统,它通过与真实或模拟环境的物理交互来学习和完成任务。
|
||||
|
||||
传统AI(如大语言模型)是一个"缸中之脑"——只有信息处理能力,没有物理交互。具身智能则强调**感知-决策-行动**的闭环:
|
||||
|
||||
```
|
||||
┌───────────────────────────────────────────┐
|
||||
│ 具身智能闭环 │
|
||||
│ │
|
||||
│ 感知 (Perception) → 理解物理世界 │
|
||||
│ ↓ │
|
||||
│ 决策 (Decision) → 规划行动方案 │
|
||||
│ ↓ │
|
||||
│ 行动 (Action) → 执行物理操作 │
|
||||
│ ↓ │
|
||||
│ 反馈 (Feedback) → 观察行动结果 │
|
||||
│ ↓ │
|
||||
│ 感知 (Perception) → 更新世界模型 ... │
|
||||
└───────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
强化学习是训练具身智能的核心方法:智能体通过在环境中不断尝试、接收奖励反馈来学习最优行为策略。
|
||||
|
||||
## 8.5.2 数字孪生
|
||||
|
||||
**数字孪生(Digital Twin)** 是连接物理世界和数字世界的桥梁:
|
||||
|
||||
```
|
||||
物理世界 数字世界
|
||||
┌─────────┐ ┌─────────┐
|
||||
│ 真实建筑 │ ←映射→ │ 数字模型 │
|
||||
│ 真实城市 │ │ 仿真环境 │
|
||||
│ 真实设备 │ │ 虚拟副本 │
|
||||
└─────────┘ └─────────┘
|
||||
│
|
||||
强化学习训练
|
||||
│
|
||||
↓ 控制指令 ↓
|
||||
┌─────────┐
|
||||
│ 物理世界 │
|
||||
│ 执行控制 │
|
||||
└─────────┘
|
||||
```
|
||||
|
||||
数字孪生为强化学习提供了安全、高效的训练环境。设计师可以在虚拟环境中测试各种方案,然后用最优方案指导物理世界的实施。
|
||||
|
||||
## 8.5.3 Gymnasium环境
|
||||
|
||||
**Gymnasium**(原OpenAI Gym)是强化学习的标准环境库,提供了丰富的测试环境:
|
||||
|
||||
```python
|
||||
import gymnasium as gym
|
||||
|
||||
# 创建CartPole环境(经典平衡控制问题)
|
||||
env = gym.make("CartPole-v1")
|
||||
|
||||
# 基本交互循环
|
||||
observation, info = env.reset()
|
||||
for step in range(1000):
|
||||
# 选择动作(这里用随机策略)
|
||||
action = env.action_space.sample()
|
||||
|
||||
# 与环境交互
|
||||
observation, reward, terminated, truncated, info = env.step(action)
|
||||
|
||||
# observation: [小车位置, 小车速度, 杆子角度, 杆子角速度]
|
||||
# action: 0=向左推, 1=向右推
|
||||
# reward: 杆子保持直立的每一步得+1分
|
||||
|
||||
if terminated or truncated:
|
||||
observation, info = env.reset()
|
||||
|
||||
env.close()
|
||||
```
|
||||
|
||||
Gymnasium中与设计相关的环境包括:
|
||||
|
||||
| 环境 | 说明 | 设计关联 |
|
||||
|------|------|---------|
|
||||
| CartPole-v1 | 平衡控制 | 结构稳定性 |
|
||||
| LunarLander-v2 | 月球着陆 | 着陆规划 |
|
||||
| Ant/Humanoid | 机器人运动 | 人体工程学 |
|
||||
| MuJoCo系列 | 物理仿真 | 材料与结构 |
|
||||
|
||||
## 8.5.4 Sim2Real:从仿真到现实
|
||||
|
||||
强化学习在仿真环境中训练智能体,但仿真与真实世界之间存在**Sim2Real差距(Sim2Real Gap)**:
|
||||
|
||||
```
|
||||
仿真环境 (Sim) 真实世界 (Real)
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ 完美的物理模型│ │ 复杂的摩擦力 │
|
||||
│ 确定的传感器 │ │ 噪声和延迟 │
|
||||
│ 可控的环境 │ │ 不可预测的变化 │
|
||||
│ 无限试错 │ │ 安全限制 │
|
||||
└──────────────┘ └──────────────┘
|
||||
↕ Sim2Real Gap ↕
|
||||
```
|
||||
|
||||
缩小Sim2Real差距的主要方法:
|
||||
|
||||
- **域随机化(Domain Randomization)**:在训练时随机改变仿真参数(摩擦力、光照、传感器噪声等),使策略对不同环境条件具有鲁棒性
|
||||
- **系统辨识(System Identification)**:从真实世界数据中学习更准确的仿真参数
|
||||
- **渐进迁移(Progressive Transfer)**:先在仿真中训练,再在真实环境中微调
|
||||
|
||||
## 8.5.5 具身智能的挑战与前景
|
||||
|
||||
当前面临的挑战:
|
||||
|
||||
- **安全约束**:真实世界的错误可能导致物理损坏或人员伤害
|
||||
- **泛化能力**:训练环境中学会的策略能否适应未知的新环境
|
||||
- **样本效率**:机器人交互数据获取成本高,需要更高效的算法
|
||||
- **多模态融合**:整合视觉、触觉、听觉等多种感知信息
|
||||
|
||||
设计领域的应用前景:
|
||||
|
||||
- **建筑施工机器人**:自动砌砖、3D打印建筑、无人驾驶施工车辆
|
||||
- **自主测量无人机**:自动巡检建筑工地、生成地形测绘
|
||||
- **智能材料实验**:机器人自动进行材料性能测试
|
||||
- **交互式设计原型**:具身智能体与设计方案的物理验证
|
||||
|
||||
---
|
||||
|
||||
# 8.6 设计应用
|
||||
|
||||
强化学习为设计领域提供了从"被动工具"到"主动智能体"的范式转变。以下是一些具有代表性的应用场景。
|
||||
|
||||
## 8.6.1 空间布局优化
|
||||
|
||||
将家具/房间布局问题建模为强化学习问题:
|
||||
|
||||
```
|
||||
状态 (State):当前布局方案
|
||||
- 家具的位置、朝向
|
||||
- 空间的几何约束
|
||||
- 功能区域划分
|
||||
|
||||
动作 (Action):调整布局
|
||||
- 移动某件家具
|
||||
- 旋转某件家具
|
||||
- 交换两件家具的位置
|
||||
|
||||
奖励 (Reward):布局质量评估
|
||||
+ 功能合理性(动线通畅度)
|
||||
+ 美学指标(对称性、比例)
|
||||
+ 规范满足(消防通道、日照要求)
|
||||
- 碰撞惩罚
|
||||
- 空间浪费惩罚
|
||||
```
|
||||
|
||||
与传统优化算法相比,强化学习方法的优势在于能够学习到布局的"风格"和"策略",而不仅是找到单一最优解。
|
||||
|
||||
## 8.6.2 路径规划与导航
|
||||
|
||||
强化学习在自主导航中已有广泛应用,同样适用于设计空间中的路径规划:
|
||||
|
||||
- **建筑内部导航**:优化紧急疏散路径
|
||||
- **景观游览路径**:自动生成最优游览路线
|
||||
- **施工物流规划**:建筑材料的自动运输路径
|
||||
- **城市交通信号优化**:根据实时车流动态调整信号灯
|
||||
|
||||
```python
|
||||
# 城市交通信号优化概念示意
|
||||
class TrafficSignalEnv:
|
||||
"""交通信号控制强化学习环境"""
|
||||
|
||||
def __init__(self, intersection):
|
||||
self.intersection = intersection
|
||||
# 状态:各方向车流量、等待时间、当前信号相位
|
||||
# 动作:切换信号相位(哪条路绿灯)
|
||||
# 奖励:-(总等待时间 + 红灯通过惩罚)
|
||||
|
||||
def step(self, action):
|
||||
# 切换信号相位
|
||||
self.intersection.set_phase(action)
|
||||
# 模拟一个时间步的交通流
|
||||
self.simulate_traffic()
|
||||
# 计算奖励
|
||||
reward = -self.get_total_waiting_time()
|
||||
return self.get_state(), reward, False, {}
|
||||
```
|
||||
|
||||
## 8.6.3 自主设计智能体
|
||||
|
||||
将强化学习与生成模型结合,构建能够**自我改进的设计系统**:
|
||||
|
||||
```
|
||||
设计智能体框架:
|
||||
|
||||
设计需求 ──→ 生成模型 ──→ 设计方案
|
||||
↑ │
|
||||
│ ↓
|
||||
策略改进 ←──── 设计评估
|
||||
(奖励信号)
|
||||
│
|
||||
↓
|
||||
迭代优化
|
||||
```
|
||||
|
||||
这种框架下,设计智能体能够:
|
||||
- 根据评估反馈自动调整设计参数
|
||||
- 在大量设计变体中搜索最优方案
|
||||
- 学习人类设计师的偏好和风格
|
||||
|
||||
## 8.6.4 建筑自动化
|
||||
|
||||
强化学习在建筑制造领域的应用:
|
||||
|
||||
| 应用 | 状态 | 动作 | 奖励 |
|
||||
|------|------|------|------|
|
||||
| 砌砖机器人 | 当前砖墙状态 | 砖的放置位置和方式 | 墙体质量、效率 |
|
||||
| 3D打印建筑 | 打印进度状态 | 打印路径、速度 | 结构强度、材料效率 |
|
||||
| 无人施工车 | 工地地图 | 行驶路径、操作 | 任务完成度、安全性 |
|
||||
| 塔吊自动化 | 吊载状态 | 运动轨迹 | 就位精度、时间效率 |
|
||||
|
||||
## 8.6.5 城市系统优化
|
||||
|
||||
强化学习在城市规划和设计中的应用:
|
||||
|
||||
- **交通流量优化**:多智能体强化学习协调全城交通信号
|
||||
- **能源管理**:建筑群能耗的动态优化
|
||||
- **供水系统**:管网压力和流量的智能调度
|
||||
- **垃圾回收路线**:根据实时数据动态规划回收路线
|
||||
|
||||
> **案例**:杭州城市大脑使用强化学习算法优化交通信号控制,在部分路段实现了15%的通行效率提升。这类应用展示了强化学习在城市设计中的巨大潜力。
|
||||
|
||||
---
|
||||
|
||||
## 思考与练习
|
||||
|
||||
1. **概念理解**:试比较监督学习、无监督学习和强化学习三种范式的区别。在什么场景下,强化学习比监督学习更适合?请结合设计领域的例子说明。
|
||||
|
||||
2. **算法思考**:RLHF的三个阶段(SFT → 奖励模型 → PPO优化)为什么缺一不可?如果跳过奖励模型阶段,直接用人工标注的分数进行PPO训练,会遇到什么问题?
|
||||
|
||||
3. **设计应用**:选择一个你熟悉的设计场景(如室内设计、城市规划、产品设计等),将其建模为一个强化学习问题。请定义:状态空间、动作空间、奖励函数,并分析这个建模方式的优缺点。
|
||||
|
||||
---
|
||||
|
||||
## 关键术语
|
||||
|
||||
| 中文术语 | 英文术语 | 缩写 | 简要说明 |
|
||||
|---------|---------|------|---------|
|
||||
| 强化学习 | Reinforcement Learning | RL | 通过与环境交互和反馈来学习决策的方法 |
|
||||
| 智能体 | Agent | — | 能够感知环境并采取行动的实体 |
|
||||
| 马尔可夫决策过程 | Markov Decision Process | MDP | 强化学习的数学框架,由(S,A,P,R,γ)定义 |
|
||||
| 状态 | State | S | 环境在某一时刻的描述 |
|
||||
| 动作 | Action | A | 智能体可采取的行为 |
|
||||
| 奖励 | Reward | R | 环境对智能体行为的反馈信号 |
|
||||
| 折扣因子 | Discount Factor | γ | 衡量未来奖励重要性的参数 |
|
||||
| 价值函数 | Value Function | V(s) | 评估某状态的长期收益期望 |
|
||||
| 动作价值函数 | Action Value Function | Q(s,a) | 评估在某状态下采取某动作的长期收益 |
|
||||
| Q-Learning | Q-Learning | — | 经典的免模型强化学习算法 |
|
||||
| 深度Q网络 | Deep Q-Network | DQN | 用神经网络近似Q函数的算法 |
|
||||
| 策略梯度 | Policy Gradient | PG | 直接优化策略的强化学习方法 |
|
||||
| 近端策略优化 | Proximal Policy Optimization | PPO | 限制策略更新幅度的稳定优化算法 |
|
||||
| 人类反馈强化学习 | Reinforcement Learning from Human Feedback | RLHF | 利用人类偏好反馈训练AI的方法 |
|
||||
| AI反馈强化学习 | Reinforcement Learning from AI Feedback | RLAIF | 利用AI生成的反馈进行训练 |
|
||||
| 宪法AI | Constitutional AI | CAI | 通过原则进行自我纠正的对齐方法 |
|
||||
| 具身智能 | Embodied AI | — | 具有物理/虚拟身体的AI系统 |
|
||||
| 数字孪生 | Digital Twin | — | 物理实体的数字化映射 |
|
||||
| 仿真到现实 | Sim2Real | — | 将仿真中训练的策略迁移到真实世界 |
|
||||
| 蒙特卡洛树搜索 | Monte Carlo Tree Search | MCTS | 通过模拟评估决策树节点的搜索算法 |
|
||||
| 自我对弈 | Self-Play | — | AI通过与自身对弈来提升能力的方法 |
|
||||
| 探索与利用 | Exploration vs. Exploitation | — | 尝试新策略与使用已知最优策略的平衡 |
|
||||
| 经验回放 | Experience Replay | — | 存储和复用历史交互数据的技术 |
|
||||
| 对齐 | Alignment | — | 使AI行为符合人类价值观和期望的过程 |
|
||||
| KL散度 | KL Divergence | KL | 衡量两个概率分布差异的指标 |
|
||||
Reference in New Issue
Block a user