Files
RL-learning/q_learning/q-learning.md
T
2026-08-31 18:03:25 +08:00

182 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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}$"和"覆盖是否充分"决定。理解这点后,把格子换成任意可枚举状态、动作换成任意离散集合,同一框架即可迁移。