强化学习(RL)是机器学习的一个独立分支,专注于智能体如何在环境中通过试错学习最优策略。与监督学习依赖标准答案不同,RL仅通过奖励信号指导学习。RL的核心概念包括智能体、环境、状态、动作和奖励。智能体通过与环境交互,观察状态,执行动作并接收奖励,从而优化策略以最大化长期累计奖励。RL与监督学习的核心区别在于反馈来源、数据特性和探索需求。RL的研究方向主要分为基于价值和基于策略两类,前者关注状态或动作的价值估计,后者直接学习策略函数,Actor-Critic方法则结合了两者优势。RL在游戏AI、机器人控制、推荐系统和大规模模型训练中已有成功应用。然而,RL面临奖励稀疏、探索与利用平衡、样本效率低和训练不稳定等挑战。通过学习RL,读者能够理解智能体与环境交互的基本原理,掌握RL的基本算法和应用场景,并能够评估RL在特定问题中的适用性。
强化学习是什么
强化学习(RL)是机器学习的第三大类——和监督学习、无监督学习并列。它研究的是智能体如何在环境中通过试错学会最优策略。
三大范式对比
| 范式 | 数据 | 目标 | 典型算法 |
|---|---|---|---|
| 监督学习 | (输入, 标签) 对 | 学输入到标签的映射 | 神经网络、SVM |
| 无监督学习 | 只有输入 | 发现数据结构 | K-Means、PCA |
| 强化学习 | (状态, 动作, 奖励) 序列 | 最大化长期奖励 | Q-Learning、DQN、PPO |
核心直觉:训练小狗
你想训练小狗学会"坐下"。
监督学习式:你演示 1000 次"坐下",狗模仿。这需要大量演示数据。
强化学习式:狗自己乱试——它做了某个动作,如果接近"坐下"就给零食(奖励),否则不奖励。几次下来,狗自己发现"坐下"能拿最多零食。
强化学习就是这个思想:不告诉它正确答案,只给奖励信号,让它自己探索。
5 个核心元素
任何 RL 问题都可以抽象成 5 个元素:
1. 智能体(Agent)
学习者 + 决策者。它观察环境,选择动作,根据反馈改进策略。
- 例:AlphaGo 的"棋手"、机器人、推荐系统的"决策器"
2. 环境(Environment)
智能体之外的一切。它接收动作,返回新状态和奖励。
- 例:棋盘、物理世界、用户群体
3. 状态(State, s)
对环境的完整描述(马尔可夫性:给定当前状态,未来与过去无关)。
- 例:围棋棋盘、机器人关节角度、用户历史行为
4. 动作(Action, a)
智能体可以做的操作。
- 例:落子位置、关节力矩、推荐什么商品
5. 奖励(Reward, r)
环境对智能体动作的即时反馈。RL 的目标是最大化长期累计奖励。
- 例:+1 赢棋, -1 输棋, 0 中间步骤
一个具体例子:CartPole
平衡车(经典入门环境):
- 状态:小车位置、速度、杆子角度、角速度(4 维向量)
- 动作:向左推(0) / 向右推(1)
- 奖励:每保持平衡 1 步 +1
- 终止:杆倒了 / 小车跑出界
目标:让杆子尽量久不倒。
与监督学习的核心区别
# 监督学习
for x, y in dataset:
loss = model(x) - y # 跟"标准答案"比
loss.backward()
# 强化学习
for episode in env:
state = env.reset()
while not done:
action = policy(state) # 自己选动作
next_state, reward, done = env.step(action) # 看反馈
policy.update(state, action, reward) # 学:这个动作好不好
关键差异:
| 维度 | 监督学习 | 强化学习 |
|---|---|---|
| 反馈来源 | 有标准答案 | 只有奖励信号(可能很稀疏) |
| 数据 | iid 样本 | 时间相关的轨迹 |
| 探索 | 不需要 | 必须探索未知动作 |
| 评估 | loss 下降 = 学到 | 累计奖励上升 = 学到 |
两大研究方向
基于价值(Value-based)
学每个状态/动作的"价值"——从这里出发未来能拿多少奖励。
- 价值最大的动作就是最优动作
- 代表:Q-Learning、DQN
基于策略(Policy-based)
直接学策略本身(从状态到动作的映射),不经过价值中转。
- 适合连续动作(机器人关节)
- 代表:REINFORCE、PPO
Actor-Critic:两者结合
- Actor(策略网络):选动作
- Critic(价值网络):评价这个动作好不好
- 代表:A2C、A3C、PPO
经典应用
强化学习的挑战
RL 很难,比监督学习难得多。几个核心挑战:
- 奖励稀疏:很多场景里 99% 的动作奖励都是 0,只有少数关键动作有奖励(比如下棋几百步才分胜负)
- 探索 vs 利用:该选已知最好的动作(exploit),还是试试没选过的动作(explore)?
- 样本效率低:需要大量试错,真实环境跑不动(撞墙、烧钱)
- 训练不稳定:同一个种子,两次训练结果可能差很多
一个最简单的 RL 例子:多臂老虎机
我们用最简单的"老虎机"问题来感受 RL:
import numpy as np
# 3 台老虎机, 每台有未知的胜率
true_probs = [0.3, 0.5, 0.7] # 实际只有我们知道
# 维护对每台胜率的估计
estimates = [0.5, 0.5, 0.5]
counts = [0, 0, 0]
def pull(i):
"""拉第 i 台老虎机, 返回 1(赢) 或 0(输)"""
return 1 if np.random.random() < true_probs[i] else 0
# ε-贪心策略
for step in range(1000):
epsilon = 0.1
if np.random.random() < epsilon:
# 探索: 随机选
i = np.random.randint(3)
else:
# 利用: 选当前估计最优
i = np.argmax(estimates)
reward = pull(i)
counts[i] += 1
# 增量更新估计
estimates[i] += (reward - estimates[i]) / counts[i]
print(f"最终估计: {estimates}")
print(f"真实胜率: {true_probs}")
关键点:
- 探索(选 0.1 概率的随机)让算法发现最优
- 利用(选 0.9 概率的当前最优)让算法收敛到最优
- 怎么平衡这两个,是 RL 的核心问题
小结
- RL = 智能体 + 环境 + 状态 + 动作 + 奖励
- 没有标准答案,只有奖励信号
- 必须探索才能发现好策略
- 两大方向:Value-based 和 Policy-based
- 难度比监督学习高,但能解决监督学习搞不定的问题
练习思考
- 监督学习能解决 RL 问题吗?比如自动驾驶——为什么不直接收集"正确动作"的数据集?
- 现实里哪些问题适合用 RL?哪些不适合?
- 跑一下上面那个多臂老虎机代码,试试不同的 epsilon 值,观察收敛速度和最终胜率。
章末小测验
检验你对《强化学习是什么》的掌握程度。
以下关于强化学习与监督学习的区别,正确的是哪些?
以下哪些元素是强化学习问题中必不可少的组成部分?
以下关于强化学习核心概念的描述,正确的是哪些?
以下哪些是强化学习的两大研究方向?
以下关于强化学习挑战的描述,正确的是哪些?