Q-Learning
让智能体在迷宫里自己摸索——不靠规则,不靠标注,只靠奖励与惩罚,最终学会最优路径
✦ 先看效果:智能体走迷宫
点击「训练」,看智能体从随机乱撞到找到最优路径——全程没有人告诉它路在哪,只靠到达终点时的奖励信号。
Q 值热力图
训练后每个格子的最高 Q 值(颜色越暖代表越值得去):
01 核心原理(大白话版)
你第一次去一个陌生城市,手机没有导航。你只能靠"试错":走这条路——堵车,记住了;走那条路——到得很快,记住了。多跑几次之后,你自然就知道哪条路最顺。
Q-Learning 做的就是同一件事。它给智能体一个环境(比如迷宫),让它反复试探,每次做了好决定就给奖励,做了差决定就扣分。时间长了,智能体就积累出一张"经验表",查这张表就能知道"我现在在这个位置,往哪走最划算"。
经验表长什么样?
这张表叫 Q 表(Q-Table)。每一行是一个"处境"(状态),每一列是一个"选择"(动作),格子里的数字就是"做这个选择,长期来看能拿多少分"。
| 位置 | 向左 | 向右 ✓ | 向上 | 向下 |
|---|---|---|---|---|
| (0,0) 起点 | -0.1 | 2.4 | -0.1 | 0.6 |
| (1,0) | 0.3 | 3.8 | -0.1 | 1.2 |
表中绿色是当前状态下的最优动作(Q 值最大),智能体就选它。
怎么填这张表?
刚开始 Q 表全是 0,智能体随机选动作。走进死胡同、撞墙……扣分;碰巧到终点——加分!
每走一步,就按公式更新刚才那步的 Q 值:"你这步拿了多少分 + 下一步最多还能拿多少分"。好路径的分数会慢慢被"传导"回去。
训练越久,Q 表越准,智能体就越倾向于直接查表选最高分的动作,而不是继续乱试。
探索 vs 利用的平衡(ε-贪心):如果一直乱走,永远学不好;如果太早只走"已知最优路",可能错过更好的路。用参数 ε 控制:以 ε 的概率随机探索,以 1-ε 的概率选已知最优动作。训练过程中逐渐降低 ε,从"好奇宝宝"变成"老司机"。
Q-Learning 能做什么?
Atari 游戏、棋盘游戏的基础算法
学习在未知地图中找路
数据中心、交通信号灯优化
把用户交互当奖励信号来优化
一步步构建 Q-Learning
从环境定义到两种 TD 算法,逐步搭建。
悬崖行走环境:状态是网格坐标,动作是上下左右,掉崖得 -100。
用二维数组存 Q 值,以概率 ε 探索随机动作,否则选 Q 值最大的动作。
用下一状态的最优 Q 值更新当前 Q,目标激进——直接朝悬崖边走捷径。
用实际执行的下一动作的 Q 值更新,更保守——绕开悬崖走安全路径。
02 代码
03 学术性讲解
Q-Learning 是一种强化学习算法,智能体通过与环境交互来学习最优策略。核心思想是学习一个 Q 表,记录在每个状态下采取每个动作的预期累积奖励。
Q 表是什么?
Q 表是一个表格,行表示状态,列表示动作,表格中的值 Q(s, a) 表示在状态 s 下采取动作 a 的预期累积奖励。
| 状态 | 向左 | 向右 | 向上 | 向下 |
|---|---|---|---|---|
| (0,0) | 0 | 0 | 0 | 0 |
| (0,1) | 0 | 0 | 0 | 0 |
Q-Learning 算法
智能体通过以下公式更新 Q 表:
根据当前状态和 ε-贪心策略选择动作
执行动作,获得即时奖励 r 和新状态 s'
TD 误差 δ = r + γ·max Q(s',a') − Q(s,a),用 α·δ 更新 Q 值
ε-贪心策略
平衡探索与利用:
- 以概率 ε 随机选择动作(探索 exploration)
- 以概率 1-ε 选择当前已知的最佳动作(利用 exploitation)
随着学习进行,通常会逐渐降低 ε 值(ε-decay),使智能体从探索为主过渡到利用为主。
超参数含义
学习率 α
控制每次更新的步幅。α=1 时完全用新估计覆盖旧值;α→0 时几乎不更新。通常取 0.1~0.5。
折扣因子 γ
衡量未来奖励的重要性。γ=0 只看即时奖励;γ→1 则重视长远回报。通常取 0.9~0.99。
收敛性保证
在以下条件下,Q-Learning 可以证明收敛到最优 Q* 函数:
- 每个状态-动作对被无限次访问(探索充分)
- 学习率满足 Robbins-Monro 条件:∑α = ∞,∑α² < ∞
- 奖励有界
Q-Learning 属于 off-policy 算法:更新时用的是 max Q(s',a')(贪心策略),而行为策略是 ε-贪心,两者可以不同。这与 SARSA(on-policy)的关键区别。
总结
状态-动作价值函数
时序差分学习规则
行为策略与目标策略解耦
状态空间大时需 DQN 替代