第16章:强化学习 — 西瓜书学习笔记
本文是周志华《机器学习》(西瓜书)第16章 强化学习(Reinforcement Learning)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。
①. 任务与框架:MDP
马尔可夫决策过程:状态、动作、奖励、转移
🐕 生活类比:训狗学把戏
你不直接告诉狗狗”坐下”的精确肌肉指令,你只在它做对时给一根骨头(奖励),做错时不给。狗狗试了无数次后才隐约明白”哪种行为更容易拿到骨头”。它不知道全局最优策略是什么,只能在试错中逐渐逼近。
🎮 MDP 四要素
| 要素 | 符号 | 含义 |
|---|---|---|
| 状态空间 | 所有可能的环境状态 | |
| 动作空间 | 智能体可执行的动作 | |
| 状态转移概率 | 在状态 执行 后转移到 的概率 | |
| 奖励函数 | 或 | 即时获得的标量奖励 |
| 策略 | 给定状态 ,选择动作 的概率 |
📐 核心概念:值函数与 Bellman 方程
强化学习的核心是学习值函数——它告诉我们当前状态(或状态-动作对)长期来看有多”好”:
📐 状态值函数 V(s)
📐 动作值函数 Q(s,a)
🔑 Bellman 方程 — 强化学习”第一定律”
是**折扣因子**: 只看眼前(贪婪), 看重长远。直觉:当前状态的价值 = 立即能拿到的期望奖励 + 折扣后的未来期望价值。递归!
②. K-摇臂赌博机
探索与利用的经典权衡
🎰 经典困境:老字号 vs. 新口味
你常去的面馆有 10 种面。你知道牛肉面不错(利用),但要不要试试从来没点过的炸酱面(探索)?万一它才是隐藏王者呢?如果永远只吃牛肉面,你永远不会发现更好吃的——**探索(Exploration)与利用(Exploitation)**是强化学习中永恒的 trade-off。
🎯 ε-贪心策略
最简单也最经典的探索-利用策略:
以概率 ,选择当前估计价值最高的动作:
通常从较大值开始(多探索),随时间衰减(更放心地利用)。🎲 探索(Exploration)
以概率 ,随机选择一个动作:
Softmax 策略
不再硬性划分探索/利用,而是按”价值越高越容易被选”的玻尔兹曼分布采样:
📐 Softmax / Boltzmann 探索
(温度)控制探索程度: 大 → 接近均匀(多探索), 小 → 接近贪心(多利用)。
③. 有模型学习(Model-Based)
已知 P 和 R,直接用动态规划求解最优策略
📐 策略迭代(Policy Iteration)
交替进行策略评估和策略改进:
Algorithm: 策略迭代
初始化: 任意策略 π₀
重复:
// 1. 策略评估:固定 π,收敛求 V^π
重复: V(s) ← Σₐ π(a|s) Σ_s’ P(s’|s,a)[R + γ V(s’)]
// 2. 策略改进:对 V 贪心得到新策略
π’(s) ← argmaxₐ Σ_s’ P(s’|s,a)[R + γ V(s’)]
直到 π’ = π (策略不再变化)
值迭代(Value Iteration)
更简洁:策略评估与改进合二为一——每一步直接用 Bellman 最优方程更新 V:
📐 Bellman 最优方程
策略迭代
交替执行评估和改进,评估阶段可收敛。收敛速度**快(轮次少)**但每轮评估代价高。
每步更新一次 V 就贪心一次。收敛速度**慢(轮次多)**但每步计算简单。
④. 免模型学习(Model-Free)
不知道 P 和 R?那就用试错数据来估计!
📊 有模型 vs. 免模型
有模型像棋盘游戏——你知道所有规则(转移函数),只需要”算”出最优下法。免模型像第一次玩一个没有规则书的游戏——你得亲自玩很多遍,从经验中估计什么动作在什么情况下比较值。
🎯 蒙特卡洛(Monte Carlo, MC)
等完整轨迹(episode)结束后,用实际回报来更新每个状态的值估计:
📐 MC 更新
其中 是完整轨迹的实际回报, 是学习率。
⚡ 时序差分学习(TD Learning)— 强化学习最核心的方法
不等 episode 结束!每步都更新,用当前估计值去估计下一个估计值(bootstrap):
📐 TD 更新(TD(0))
核心是 TD 误差 :衡量”实际比预期好多少/差多少”。
MC vs. TD 的直观对比
等到故事结局才知道过程好不好。无偏但方差大。
TD(时序差分)
每走一步就更新一次预测。有偏(用估计更新估计)但方差小,且不需要完整轨迹。
🆚 两大免模型控制算法:SARSA vs. Q-Learning
控制问题:不只是评估 V,还要学出最优 Q 函数来指导动作选择。
SARSA(同策略 / On-Policy)
用实际执行的下一个动作 a’ 来更新。更新目标与行为策略一致。
核心:你想学什么,就得先做一遍
用最优下一步动作的 Q 值来更新。学习目标与行为策略分离。
核心:边做边看”最优情况会怎样”
⚠️ SARSA 更安全,Q-Learning 更激进
SARSA 在探索过程中考虑到了 ε-探索带来的风险,所以会学到更保守的最优策略;Q-Learning 则直接逼近数学上真正的最优 Q,不考虑探索过程中的危险。在悬崖行走(Cliff Walking)问题中,SARSA 会绕远路保安全,Q-Learning 则贴着悬崖走最短路径——但偶尔会掉下去。
⑤. 值函数近似
状态太多表格装不下?用函数来拟合!
📈 从查表到学习函数
当状态空间是连续或极大时,表格形式的 Q 表不再可行。用参数化函数 或 来近似:
目标就是最小化 TD 误差的平方:
📐 值函数近似的损失函数
其中 是目标网络(Target Network)参数——定期从 复制,保持训练稳定性(DQN 的关键技巧之一)。
💡 DQN 的三大稳定化技巧
- 经验回放(Experience Replay):存储历史经验 (),随机采样小批量训练,打破数据相关性。
- 目标网络(Target Network):用旧参数计算 TD 目标,避免”自己追自己尾巴”的发散问题。
- 奖励裁剪(Reward Clipping):将奖励缩放到 ,使梯度稳定。
⑥. 策略梯度与 Actor-Critic
直接优化策略,无需通过 Q 函数间接决策
🎯 策略梯度(Policy Gradient)
值函数方法从”估价值”到”选动作”是间接的;策略梯度方法直接参数化并优化策略 :
📐 策略梯度定理
直觉:如果一个动作的 Q 值高(好动作),就往这个动作的方向调整;如果低(差动作),就减少它的概率。 的梯度是对数概率的梯度方向。
🎭 Actor-Critic:融合两派之力
Actor-Critic 把 Actor(策略网络,负责选动作)和 Critic(值函数网络,负责评估好坏)合二为一。Critic 计算 TD 误差来”批评”Actor 的动作好坏,Actor 据此调整策略。
Actor 更新
策略梯度方向 × TD误差(Critic给的信号):
标准 TD 学习:
⑦. 算法全景对比总结
从简单赌博机到深度强化学习的进化路线
| 类别 | 代表算法 | 需要模型? | 需要完整轨迹? | 更新方式 | 适用场景 |
|---|---|---|---|---|---|
| 策略迭代 | Policy Iteration | ✅ 需要 | — | Bellman 方程迭代 | 小规模已知环境 |
| 值迭代 | Value Iteration | ✅ 需要 | — | Bellman 最优方程 | 小规模已知环境 |
| 蒙特卡洛 | MC Control | ❌ 不要 | ✅ 需要完整轨迹 | 轨迹结束一次性更新 | 有明确结束状态的任务 |
| SARSA | On-Policy TD | ❌ 不要 | ❌ 不需要 | 每一步更新(用实际动作) | 安全第一的场景 |
| Q-Learning | Off-Policy TD | ❌ 不要 | ❌ 不需要 | 每一步更新(用最优动作) | 追求最优策略 |
| DQN | 深度 Q 网络 | ❌ 不要 | ❌ 不需要 | 小批量梯度下降 | 高维状态(图像输入) |
| 策略梯度 | REINFORCE / PPO | ❌ 不要 | ✅ 需要轨迹片段 | 策略梯度上升 | 连续动作空间 |
| Actor-Critic | A2C / A3C / SAC | ❌ 不要 | ❌ 不需要 | TD误差驱动 | 连续动作、高维状态 |
🍉 强化学习算法演进路线图
🧠 本章一句话总结
强化学习的核心是 Bellman 方程和 TD 学习。从已知环境的 DP(值迭代/策略迭代)到未知环境的免模型方法(MC→TD→Q-Learning→DQN→策略梯度→Actor-Critic),演进主线始终是:如何用越来越少的先验知识(无模型)、越来越高效的方式(bootstrap)、处理越来越大的问题(函数近似)。