先看效果:智能体走迷宫

点击「训练」,看智能体从随机乱撞到找到最优路径——全程没有人告诉它路在哪,只靠到达终点时的奖励信号。

0.3
训练轮次
--
奖励
--
到达终点
--

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 值最大),智能体就选它。

怎么填这张表?

1
随机乱走(探索)

刚开始 Q 表全是 0,智能体随机选动作。走进死胡同、撞墙……扣分;碰巧到终点——加分!

2
回头更新分数

每走一步,就按公式更新刚才那步的 Q 值:"你这步拿了多少分 + 下一步最多还能拿多少分"。好路径的分数会慢慢被"传导"回去。

3
越来越多地"抄答案"(利用)

训练越久,Q 表越准,智能体就越倾向于直接查表选最高分的动作,而不是继续乱试。

探索 vs 利用的平衡(ε-贪心):如果一直乱走,永远学不好;如果太早只走"已知最优路",可能错过更好的路。用参数 ε 控制:以 ε 的概率随机探索,以 1-ε 的概率选已知最优动作。训练过程中逐渐降低 ε,从"好奇宝宝"变成"老司机"。

Q-Learning 能做什么?

游戏 AI

Atari 游戏、棋盘游戏的基础算法

机器人导航

学习在未知地图中找路

资源调度

数据中心、交通信号灯优化

推荐系统

把用户交互当奖励信号来优化

一步步构建 Q-Learning

从环境定义到两种 TD 算法,逐步搭建。

第一步 定义环境

悬崖行走环境:状态是网格坐标,动作是上下左右,掉崖得 -100。

第二步 Q 表与 ε-贪婪策略

用二维数组存 Q 值,以概率 ε 探索随机动作,否则选 Q 值最大的动作。

第三步 Q-Learning(离策略)

用下一状态的最优 Q 值更新当前 Q,目标激进——直接朝悬崖边走捷径。

第四步 SARSA(在策略)

用实际执行的下一动作的 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 表:

Q(s, a) ← Q(s, a) + α × [r + γ × maxa' Q(s', a') − Q(s, a)]
1
选择动作

根据当前状态和 ε-贪心策略选择动作

2
执行并观察

执行动作,获得即时奖励 r 和新状态 s'

3
更新 Q 值

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)的关键区别。

总结

Q 表

状态-动作价值函数

TD 更新

时序差分学习规则

off-policy

行为策略与目标策略解耦

局限

状态空间大时需 DQN 替代