共计 2029 个字符,预计需要花费 6 分钟才能阅读完成。
强化学习与监督学习的本质区别
在开始构建强化学习系统之前,我们需要先理解它与传统监督学习的核心差异。下表总结了二者的关键区别:

| 特性 | 监督学习 | 强化学习 |
|---|---|---|
| 数据形式 | 静态的输入 - 输出对 | 动态的交互序列 |
| 反馈类型 | 明确的正确标签 | 延迟的奖励信号 |
| 目标 | 最小化预测误差 | 最大化长期累积奖励 |
| 数据依赖性 | 需要大量标注数据 | 通过试错自主学习 |
| 时序关系 | 样本间独立 | 样本间存在时序关联 |
Agent-Environment 交互机制
强化学习的核心是 Agent 与 Environment 的持续交互过程:
- 状态 (State): Environment 的当前情况,如游戏画面、机器人传感器数据
- 动作 (Action): Agent 根据状态做出的决策
- 奖励 (Reward): Environment 对 Agent 动作的即时反馈
- 新状态 (Next State): 动作执行后的环境变化
graph LR
A[Agent] -->|Action| B(Environment)
B -->|Reward, State| A
Q-learning 算法原理
Q-learning 是一种经典的 value-based 强化学习算法,其核心是学习一个动作价值函数 Q(s,a),表示在状态 s 下采取动作 a 的预期长期回报。更新公式为:
$$Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha[r_{t+1} + \gamma \max_{a}Q(s_{t+1},a) – Q(s_t,a_t)]$$
其中:
– $\alpha$ 是学习率 (0-1)
– $\gamma$ 是折扣因子 (0-1)
– $r_{t+1}$ 是即时奖励
Python 实现示例
下面我们使用 OpenAI Gym 的 FrozenLake 环境演示 Q -learning 实现:
import numpy as np
import gym
# 初始化环境
env = gym.make('FrozenLake-v1', is_slippery=True)
num_states = env.observation_space.n
num_actions = env.action_space.n
# 初始化 Q 表
Q = np.zeros((num_states, num_actions))
# 超参数设置
alpha = 0.1 # 学习率
gamma = 0.99 # 折扣因子
epsilon = 0.1 # 探索概率
# 训练循环
for episode in range(5000):
state = env.reset()
done = False
while not done:
# ε-greedy 策略选择动作
if np.random.random() < epsilon:
action = env.action_space.sample() # 随机探索
else:
action = np.argmax(Q[state]) # 利用已有知识
# 执行动作
next_state, reward, done, _ = env.step(action)
# Q 表更新
best_next_action = np.argmax(Q[next_state])
td_target = reward + gamma * Q[next_state][best_next_action]
td_error = td_target - Q[state][action]
Q[state][action] += alpha * td_error
state = next_state
实践建议
超参数调优
- 学习率 (α): 通常从 0.1 开始尝试,过高会导致震荡,过低学习缓慢
- 折扣因子 (γ): 接近 1 时更重视长期回报,接近 0 时更关注即时奖励
- 探索率 (ε): 初期可设 0.2-0.5,后期逐渐衰减
Reward 不收敛排查
- 检查奖励函数设计是否合理
- 确认环境是否有随机性干扰
- 尝试减小学习率
- 检查状态表示是否包含足够信息
可视化训练过程
使用 TensorBoard 记录关键指标:
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
for episode in range(1000):
# ... 训练代码...
writer.add_scalar('Reward/episode_reward', episode_reward, episode)
writer.add_scalar('Params/epsilon', epsilon, episode)
writer.close()
性能评估
评估指标
- Episode Reward: 单次运行的总奖励
- Convergence Speed: 达到稳定表现所需的训练轮次
- Success Rate: 任务完成比例
探索策略对比
| 策略 | 优点 | 缺点 |
|---|---|---|
| ε-greedy | 实现简单,调节方便 | 探索缺乏方向性 |
| Boltzmann | 根据 Q 值概率分布探索 | 计算开销稍大 |
进阶思考
- 如何修改算法实现更高效的探索策略?
- 当状态空间很大时,Q 表会面临什么问题?如何解决?
- 尝试将离散动作空间扩展到连续空间需要哪些改变?
通过这篇指南,你应该已经掌握了强化学习的基础实现方法。接下来可以尝试在不同环境中应用这些知识,逐步深入理解强化学习的强大能力。
正文完
发表至: 人工智能
近一天内
