182 lines
8.9 KiB
Markdown
182 lines
8.9 KiB
Markdown
# Q-Learning 走迷宫:简明原理与推导
|
||
|
||
> 对应代码 `q_learning.py`(numpy 实现,可选 matplotlib 绘图)。本文不含代码,只保留核心公式与结论。行内公式用 `$...$`、独立公式用 `$$...$$`,Gitea 网页端可直接渲染;建议搭配支持数学渲染的本地查看器(VSCode 预览、Typora、Obsidian)使用。
|
||
|
||
---
|
||
|
||
## 一、问题:迷宫 = 马尔可夫决策过程(MDP)
|
||
|
||
五元组 $(S,A,P,R,\gamma)$,本例取值:
|
||
|
||
| 元素 | 含义 | 取值 |
|
||
|------|------|------|
|
||
| 状态 S | 智能体所在格子坐标 (r, c) | n×n 网格 |
|
||
| 动作 A | 上 / 下 / 左 / 右 | 共 4 个 |
|
||
| 转移 P | 在 s 执行 a 后到达 s' 的概率 | 确定性(见下文)|
|
||
| 奖励 R | 即时奖励 | +100(到终点)/ −10(撞墙)/ −1(每步)|
|
||
| 折扣 γ | 未来奖励的打折系数 | 0.9 |
|
||
|
||
转移是确定性的:结果由 (s, a) 唯一决定,因此转移概率为退化分布
|
||
|
||
$$P(s'\mid s,a)=\delta_{s',f(s,a)}$$
|
||
|
||
其中 $f(s,a)$ 表示"执行 a 后的实际落点"——撞墙或越界时原地不动,即 $f(s,a)=s$。
|
||
|
||
回报(Return)为折扣累积奖励,$\gamma<1$ 保证收敛:
|
||
|
||
$$G_t=\sum_{k=0}^{\infty}\gamma^{k}R_{t+k+1}$$
|
||
|
||
其绝对值的上界为 $|G_t|\le 100/(1-\gamma)$,即收敛有界。目标是最大化起点期望回报:$\pi^{*}=\arg\max_{\pi}\mathbb{E}_{\pi}[G_0]$。
|
||
|
||
---
|
||
|
||
## 二、价值函数与贝尔曼方程
|
||
|
||
定义(对策略 $\pi$):
|
||
|
||
$$V^{\pi}(s)=\mathbb{E}_{\pi}[G_t\mid S_t=s]$$
|
||
|
||
$$Q^{\pi}(s,a)=\mathbb{E}_{\pi}[G_t\mid S_t=s,A_t=a]$$
|
||
|
||
**贝尔曼期望方程**:由 $G_t=R_{t+1}+\gamma G_{t+1}$ 与全期望公式(塔性质)可得
|
||
|
||
$$Q^{\pi}(s,a)=r(s,a)+\gamma\sum_{s'}P(s'\mid s,a)\,V^{\pi}(s')$$
|
||
|
||
$$V^{\pi}(s)=\sum_{a}\pi(a\mid s)\,Q^{\pi}(s,a)$$
|
||
|
||
即"状态价值 = 期望即时奖励 + γ × 期望下一状态价值"。
|
||
|
||
> 用途说明:期望方程**不进** Q-Learning 更新公式(更新用的是下面的 max 版)。它用于:① 作为最优方程的内层成分;② 解任意固定策略的价值——第五节的 $V(d)$ 解析值、热力图数值都由此算出;③ 理解 SARSA 与策略评估。只关心 Q-Learning 更新本身可先跳过。
|
||
|
||
**贝尔曼最优方程**(Q-Learning 直接逼近的):
|
||
|
||
$$Q^{*}(s,a)=r(s,a)+\gamma\max_{a'}Q^{*}(s',a')$$
|
||
|
||
(确定性环境下求和 $\sum_{s'}P(s'\mid s,a)\,V(s')$ 退化为直接代入 $s'$。)
|
||
|
||
**存在唯一解**:定义算子 $(T^{*}Q)(s,a)=r(s,a)+\gamma\max_{a'}Q(s',a')$。因 max 算子非膨胀,$T^{*}$ 是 $\gamma$-压缩映射;由 Banach 不动点定理,$Q^{*}=T^{*}Q^{*}$ 有唯一不动点,且迭代以 $\gamma^{k}$ 速率收敛(值迭代的依据)。
|
||
|
||
---
|
||
|
||
## 三、Q-Learning 算法
|
||
|
||
用单次观测近似期望:
|
||
|
||
$$Y=r+\gamma\max_{a'}Q(s',a')\approx(T^{*}Q)(s,a)$$
|
||
|
||
更新公式($\delta_t$ 为 TD 误差):
|
||
|
||
$$Q(s,a)\leftarrow Q(s,a)+\alpha[r+\gamma\max_{a'}Q(s',a')-Q(s,a)]$$
|
||
|
||
其中 $\alpha=0.1$,$\delta_t=r+\gamma\max_{a'}Q(s',a')-Q(s,a)$。
|
||
|
||
关键结论:
|
||
|
||
- **收敛**:需每个 $(s,a)$ 被访问无穷多次,且学习率满足 $\sum\alpha=\infty$、$\sum\alpha^{2}<\infty$(Watkins 1992,以概率 1 收敛)。本实现取常数 $\alpha$,确定性环境下无采样噪声,固定 $(s,a)$ 可解析解:
|
||
|
||
$$Q_k=(1-\alpha)^{k}Q_0+[1-(1-\alpha)^{k}]Y$$
|
||
|
||
误差以 $(1-\alpha)^{k}$ 几何衰减($\alpha=0.1$ 时约 22 次访问缩小一个数量级);真正的瓶颈是价值逐层传播(层数 = 最短路长 $D$),故迷宫越大越需更多训练。
|
||
- **Off-policy**:未来项用 $\max_{a'}Q(s',\cdot)$,与行为策略(含探索)无关,因此收敛到 $Q^{*}$。
|
||
- **vs SARSA**:SARSA 的未来项用实际执行的 $a'$,逼近 $\mathbb{E}_{a'\sim\pi_\varepsilon}[\cdot]$ 而非 max,收敛到 ε-greedy 策略自身的价值;在带陷阱环境里 SARSA 学出保守绕行,Q-Learning 学理论最优。
|
||
- **终止状态**:$done$ 时目标值不含 bootstrap 项,仅为 $r$。
|
||
|
||
---
|
||
|
||
## 四、探索:为什么必须乱走
|
||
|
||
收敛要求每个 $(s,a)$ 被访问无穷多次;纯贪心会永久错过未试探的动作,故需探索。
|
||
|
||
**ε-greedy**:以概率 $\varepsilon$ 均匀随机选一个动作;以概率 $1-\varepsilon$ 选贪心动作 $a=\arg\max_{a'}Q(s,a')$。
|
||
|
||
**指数衰减**:
|
||
|
||
$$\varepsilon_{k}=\max(\varepsilon_{\min},\varepsilon_0\lambda^{k})$$
|
||
|
||
取 $\varepsilon_0=1.0$,$\lambda=0.99$,$\varepsilon_{\min}=0.05$。到达下限所需局数:
|
||
|
||
$$k^{*}=\frac{\ln(\varepsilon_{\min}/\varepsilon_0)}{\ln\lambda}=\frac{\ln 0.05}{\ln 0.99}\approx 298$$
|
||
|
||
即前约 300 局以探索为主,之后以利用为主;保留 5% 下限防止估值固化。
|
||
|
||
---
|
||
|
||
## 五、奖励设计的数学
|
||
|
||
**定理(每步 $-1$ 诱导最短路)**:沿长度 $d$ 的无撞墙路径走到终点(前 $d-1$ 步各 $-1$,末步 $+100$),其价值为
|
||
|
||
$$V(d)=\gamma^{d-1}(100+\frac{1}{1-\gamma})-\frac{1}{1-\gamma}$$
|
||
|
||
因 $\gamma^{d-1}$ 随 $d$ 严格递减且括弧内恒正,对任意 $\gamma\in(0,1)$ 有 $d_1<d_2\Rightarrow V(d_1)>V(d_2)$。**结论:最优策略必然是最短路径**。若每步奖励改为 $0$,$V(d)$ 与 $d$ 无关,智能体将随意游荡。
|
||
|
||
数值(9×9 迷宫,起点到终点 $D=16$,$\gamma=0.9$):
|
||
|
||
| 距终点 $d$ | $V(d)$ | 约值 |
|
||
|---|---|---|
|
||
| 1 | $100$ | 100.0 |
|
||
| 2 | $90-1$ | 89.0 |
|
||
| 8 | $100\times 0.9^{7}-(1-0.9^{7})/0.1$ | 41.8 |
|
||
| 16(起点)| $100\times 0.9^{15}-(1-0.9^{15})/0.1$ | 12.7 |
|
||
|
||
价值沿路径单调递减、从 $G$ 向 $S$ 回传——热力图快照记录的就是这个分布逐层填入的过程。
|
||
|
||
**γ 过小的信号淹没**:传播关键项是 $\gamma^{D}\times 100$。以 15×15($D=28$)为例:
|
||
|
||
| $\gamma$ | 起点价值 $100\gamma^{27}-(1-\gamma^{27})/(1-\gamma)$ | 观察 |
|
||
|---|---|---|
|
||
| 0.5 | $\approx -2.0$ | 信号被路费扣光,学不动 |
|
||
| 0.9 | $\approx -3.6$ | 收敛慢 |
|
||
| 0.99 | $\approx 52.6$ | 信号充足 |
|
||
|
||
排序定理仍成立,但 $|\Delta V|\sim\gamma^{D}(100+\frac{1}{1-\gamma})$ 过小时与噪声同量级,学习极慢。**路径越长,γ 越应接近 1**。
|
||
|
||
**撞墙惩罚**:撞墙动作的最优价值满足 $Q^{*}(s,\text{wall})=\gamma V^{*}(s)-10$,只要 $V^{*}(s)>-100$ 就恒小于 $V^{*}(s)$。它压负样本、加速排除错误动作,**不改变**最优策略集合。
|
||
|
||
---
|
||
|
||
## 六、迷宫生成与拓扑
|
||
|
||
- **递归回溯 = DFS 生成树**:房间数 $N=((n+1)/2)^{2}$,通路数 $N-1$。树的性质 ⟹ 任意两房间**唯一路径**(完美迷宫),这是"分支不复杂"的数学根源。
|
||
- **为何奇数尺寸**:房间在偶坐标、隔墙在奇坐标;若 $n$ 为偶数,终点 $(n-1,n-1)$ 落在隔墙上,迷宫无解。
|
||
- **braid 成环**:迷宫内"两侧都是路的墙"共 $(n^{2}-1)/2$ 堵(9×9 为 40,树用 24,剩 16 可拆)。braid 概率 $p$ 即拆墙概率,等价于给生成树**加弦**;环路数(圈秩)等于 $|E|-|V|+1$。$p=0.3$ 时 9×9 约引入 $0.3\times 16\approx 5$ 个独立环,同一对起终点出现多条路径,Q 表需真正比较选择。
|
||
|
||
---
|
||
|
||
## 七、运行与观察
|
||
|
||
运行参数:`--rows/--cols`(默认 9,须为奇数)、`--seed`、`--episodes`(默认 500)、`--braid`(默认 0)、`--plot`。输出:迷宫、策略箭头、贪心路径、成功率统计;加 `--plot` 生成两张图。
|
||
|
||
| 图 | 数学对象 | 判读 |
|
||
|---|---|---|
|
||
| 逐局回报 | $G_0$ 的单次实现(含探索噪声)| 总体上升、波动收窄 |
|
||
| 滑动成功率 | 到达概率的频率估计(大数定律)| 趋近 1 |
|
||
| 单局步数 | 回合步数 vs BFS 最短步 $D$ | 降到红线即学会最短路 |
|
||
| V(s) 快照 | $V(d)$ 分布逐层填入 | 价值从 $G$ 向 $S$ 回传 |
|
||
|
||
常见问题:
|
||
|
||
| 现象 | 原因 | 调整 |
|
||
|---|---|---|
|
||
| 学不到终点 | 信号 $\gamma^{D}R_g$ 被路费淹没 | 增大 γ 或终点奖励 |
|
||
| 不收敛 | 传播层数 $D$ 大、覆盖不足 | 增大 `--episodes` |
|
||
| 后期退化 | ε 衰减过快破坏覆盖 | 衰减系数调大(0.995)|
|
||
| 路径非最短路 | 每步奖励被改为 0 | 保持 $-1$ |
|
||
| 结果不可复现 | ε-greedy 随机采样 | 固定 `--seed` |
|
||
|
||
---
|
||
|
||
## 八、进阶实验
|
||
|
||
1. **γ 扫描**:$\gamma=0.1/0.5/0.9/0.99$,对照第五节解析值验证"远见"。
|
||
2. **ε 扫描**:不同 $\lambda$ 观察覆盖与利用的权衡。
|
||
3. **braid 扫描**:$p=0/0.15/0.3/0.5$,用圈秩预估环路数,验证步数仍收敛到红线 $D$。
|
||
4. **加陷阱**:某些格设为吸收态(踩中 $-50$ 并终止),观察策略绕行;对比 SARSA 的保守路线。
|
||
5. **随机风**:$P(s'\mid s,a)$ 变为非退化,$\mathbb{E}[\max Q]\ne\max\mathbb{E}[Q]$,随机性真正登场。
|
||
6. **迁移 FrozenLake**:套用标准接口,体会表格法边界(状态太多时转 DQN)。
|
||
|
||
---
|
||
|
||
## 九、小结
|
||
|
||
主线一句话:**$Q^{*}$ 是贝尔曼最优算子 $T^{*}$ 的唯一不动点,Q-Learning 用单步样本 $(s,a,r,s')$ 逼近它**;收敛快慢由"信号传播层数 $\gamma^{D}$"和"覆盖是否充分"决定。理解这点后,把格子换成任意可枚举状态、动作换成任意离散集合,同一框架即可迁移。
|