Q-Learning
用行为数据学习贪心目标策略的动作价值,是经典 off-policy TD 控制。
学习目标
- 定义Q-Learning并复述输入输出。
- 从公式计算一个最小数值例子。
- 说明它与相邻算法的区别、失败模式和适用场景。
为什么重要
Q-Learning位于“状态—行动—反馈—更新”学习链中的关键位置。
掌握它能帮助学习者判断算法使用的数据、策略归属和稳定性边界。
学习前需要掌握
背景与问题
强化学习面对序贯决策:动作会改变之后能看到的状态和奖励,因此样本通常并非独立同分布。
同一算法的效果取决于环境、探索策略、函数近似、随机种子和评测协议,单次曲线不足以下结论。
概念定义
Q-Learning 更新当前 Q(s,a) 向 r+γ max Q(s′,a′) 靠近。
本页使用“问题定义—数学目标—更新过程—代码—失败诊断”的顺序组织,避免只记算法缩写。
直观理解
即使行为在探索,学习目标仍假设下一步采取当前最优动作。
把价值看作“未来累计收益的估计”,把策略看作“在状态下如何选动作的规则”;算法差异主要在估计谁、使用谁生成的数据以及如何更新。
核心原理
max 使目标策略为贪心策略,因此与 epsilon-greedy 行为策略不同。
表格收敛要求充分访问和合适递减学习率等条件。
终止状态的下一价值为 0。
数学表达
Q-Learning 更新
off-policy TD 控制更新。
变量含义
α学习率。γ折扣因子。εepsilon-greedy 探索概率。Q(s,a)从状态 s 先做 a 的长期回报估计。
计算步骤
- 1计算 bootstrap 目标:1+0.9×2=2.8。
- 2目标与当前估计差为 2.8−0.5=2.3。
- 3若学习率 α=0.1,新估计为 0.5+0.1×2.3=0.73。
代码对应位置
示例 1表格型 Q-Learning:确定性 GridWorld:完整展示 epsilon-greedy、TD 目标、Q 值更新和策略提取。
变量解释
| 变量 | 含义 |
|---|---|
α | 学习率。 |
γ | 折扣因子。 |
ε | epsilon-greedy 探索概率。 |
Q(s,a) | 从状态 s 先做 a 的长期回报估计。 |
完整数值示例
Q-Learning的最小计算
已知条件
- 即时奖励为 1
- 下一状态估计为 2
- 折扣因子 γ=0.9
- 当前估计为 0.5
- 1
计算 bootstrap 目标:1+0.9×2=2.8。
- 2
目标与当前估计差为 2.8−0.5=2.3。
- 3
若学习率 α=0.1,新估计为 0.5+0.1×2.3=0.73。
一次更新后估计从 0.5 变为 0.73;是否收敛需要持续采样与满足相应条件。
处理前后对比
- 较大 α 更新快但噪声和震荡更强。
- 较大 γ 更重视远期奖励,但误差传播范围更长。
- 使用真实回报与 bootstrap 目标会带来不同偏差—方差权衡。
计算与实现步骤
- 1
epsilon-greedy 选动作
- 2
执行得到 s′,r
- 3
计算 max 下一 Q
- 4
计算 TD error
- 5
更新 Q(s,a)
- 6
衰减 epsilon
代码实现
示例 1
表格型 Q-Learning:确定性 GridWorld
example_01.py用途:完整展示 epsilon-greedy、TD 目标、Q 值更新和策略提取。
import numpy as np
rng = np.random.default_rng(7)
Q = np.zeros((6, 2)) # 动作 0=左,1=右
alpha, gamma, epsilon = 0.2, 0.95, 0.2
def step(state, action):
next_state = np.clip(state + (-1 if action == 0 else 1), 0, 5)
reward = 1.0 if next_state == 5 else -0.01
done = next_state == 5
return next_state, reward, done
for episode in range(300):
state = 0
for _ in range(30):
if rng.random() < epsilon:
action = rng.integers(2)
else:
action = int(np.argmax(Q[state]))
next_state, reward, done = step(state, action)
bootstrap = 0.0 if done else np.max(Q[next_state])
td_target = reward + gamma * bootstrap
Q[state, action] += alpha * (td_target - Q[state, action])
state = next_state
if done:
break
print('policy:', np.argmax(Q, axis=1))
print('Q[0]:', np.round(Q[0], 3))代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
完整展示 epsilon-greedy、TD 目标、Q 值更新和策略提取。
alpha- 当前学习率,控制每次参数更新的步长。
Step 1 · 1–1 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import numpy as npStep 2 · 3–5 行
epsilon-greedy 生成行为数据,但目标使用下一状态最大 Q,因此是 off-policy。
rng = np.random.default_rng(7)
Q = np.zeros((6, 2)) # 动作 0=左,1=右
alpha, gamma, epsilon = 0.2, 0.95, 0.2Step 3 · 7–11 行
终止状态 bootstrap 设为 0,避免把终点之后的虚构价值加入目标。
def step(state, action):
next_state = np.clip(state + (-1 if action == 0 else 1), 0, 5)
reward = 1.0 if next_state == 5 else -0.01
done = next_state == 5
return next_state, reward, doneStep 4 · 13–26 行
按学习率和梯度更新参数。步长过小会缓慢,过大会越过最低点并震荡或发散。
for episode in range(300):
state = 0
for _ in range(30):
if rng.random() < epsilon:
action = rng.integers(2)
else:
action = int(np.argmax(Q[state]))
next_state, reward, done = step(state, action)
bootstrap = 0.0 if done else np.max(Q[next_state])
td_target = reward + gamma * bootstrap
Q[state, action] += alpha * (td_target - Q[state, action])
state = next_state
if done:
breakStep 5 · 28–29 行
输出中间参数、形状或最终指标,用于核对代码是否符合预期。
print('policy:', np.argmax(Q, axis=1))
print('Q[0]:', np.round(Q[0], 3))预期输出或运行结果
策略在非终止状态主要选择向右;Q[0,右] 高于 Q[0,左]。
常见错误 · 3 条
- 只报告最好的一次随机种子
- 训练回报与评测回报混用
- 终止状态仍错误 bootstrap
实际应用
- 序贯决策
- 控制与资源分配
常见错误
文档来源
强化学习可靠资料扩展资料
外部原始教材或论文- 相关定义、公式与算法章节
扩展内容说明
未找到可直接映射的本地强化学习文档;中文直觉、数值例子、代码和交互演示属于扩展解释,算法定义与公式以所列教材或原论文为依据。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 探索不足
- 目标漂移
- 函数近似不稳定
目标与安全风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能与复现
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
Q-Learning是 on-policy 还是 off-policy?
本页算法/方法按 off-policy 组织。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
资料来源与核对日期
核对日期:2026-08-30。算法定义与公式依据以下外部教材或原论文;中文直觉、教学代码、对照与部署建议属于本站扩展解释。
推荐学习资料
Hugging Face Deep Reinforcement Learning Course
从 Q-Learning、DQN、Policy Gradient 和 Actor-Critic 逐步进入 PPO 与多智能体。
Hugging Face · Hugging Face