本文是周志华《机器学习》(西瓜书)第16章 强化学习(Reinforcement Learning)的学习笔记,涵盖本章所有核心知识点,配有通俗类比与公式推导。

①. 任务与框架:MDP

马尔可夫决策过程:状态、动作、奖励、转移

🐕 生活类比:训狗学把戏

你不直接告诉狗狗”坐下”的精确肌肉指令,你只在它做对时给一根骨头(奖励),做错时不给。狗狗试了无数次后才隐约明白”哪种行为更容易拿到骨头”。它不知道全局最优策略是什么,只能在试错中逐渐逼近。

🎮 MDP 四要素

智能体 (Agent) 策略 π 环境 (Environment) 动态 P,R 动作 a_t 新状态 s_{t+1} + 奖励 r_t
要素 符号 含义
状态空间 S\mathcal{S} 所有可能的环境状态
动作空间 A\mathcal{A} 智能体可执行的动作
状态转移概率 P(ss,a)P(s'|s,a) 在状态 ss 执行 aa 后转移到 ss' 的概率
奖励函数 R(s,a)R(s,a)R(s,a,s)R(s,a,s') 即时获得的标量奖励
策略 π(as)\pi(a|s) 给定状态 ss,选择动作 aa 的概率

📐 核心概念:值函数与 Bellman 方程

强化学习的核心是学习值函数——它告诉我们当前状态(或状态-动作对)长期来看有多”好”:

📐 状态值函数 V(s)

Vπ(s)=Eπ[k=0γkrt+k  |  st=s] V^\pi(s) = \mathbb{E}_\pi\left[\sum_{k=0}^{\infty} \gamma^k r_{t+k} \;\middle|\; s_t = s\right]

📐 动作值函数 Q(s,a)

Qπ(s,a)=Eπ[k=0γkrt+k  |  st=s,at=a] Q^\pi(s,a) = \mathbb{E}_\pi\left[\sum_{k=0}^{\infty} \gamma^k r_{t+k} \;\middle|\; s_t = s, a_t = a\right]

🔑 Bellman 方程 — 强化学习”第一定律”

Vπ(s)=aπ(as)sP(ss,a)[R(s,a,s)+γVπ(s)] V^\pi(s) = \sum_{a}\pi(a|s)\sum_{s'}P(s'|s,a)\big[R(s,a,s') + \gamma V^\pi(s')\big]

直觉:当前状态的价值 = 立即能拿到的期望奖励 + 折扣后的未来期望价值。递归!

γ[0,1]\gamma \in [0,1] 是**折扣因子**:γ=0\gamma=0 只看眼前(贪婪),γ1\gamma \to 1 看重长远。

②. K-摇臂赌博机

探索与利用的经典权衡

🎰 经典困境:老字号 vs. 新口味

你常去的面馆有 10 种面。你知道牛肉面不错(利用),但要不要试试从来没点过的炸酱面(探索)?万一它才是隐藏王者呢?如果永远只吃牛肉面,你永远不会发现更好吃的——**探索(Exploration)与利用(Exploitation)**是强化学习中永恒的 trade-off。

🎯 ε-贪心策略

最简单也最经典的探索-利用策略:

以概率 1ε1-\varepsilon,选择当前估计价值最高的动作:

a=argmaxaQ(a)a = \arg\max_a Q(a)

🎲 探索(Exploration)

以概率 ε\varepsilon,随机选择一个动作:

aUniform(A)a \sim \text{Uniform}(\mathcal{A})
ε\varepsilon 通常从较大值开始(多探索),随时间衰减(更放心地利用)。

Softmax 策略

不再硬性划分探索/利用,而是按”价值越高越容易被选”的玻尔兹曼分布采样:

📐 Softmax / Boltzmann 探索

P(a)=exp(Q(a)/τ)bexp(Q(b)/τ) P(a) = \frac{\exp(Q(a)/\tau)}{\sum_{b} \exp(Q(b)/\tau)}
τ\tau(温度)控制探索程度:τ\tau 大 → 接近均匀(多探索),τ\tau 小 → 接近贪心(多利用)。

③. 有模型学习(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(s)=maxasP(ss,a)[R(s,a,s)+γV(s)] V^*(s) = \max_a \sum_{s'} P(s'|s,a)\big[R(s,a,s') + \gamma V^*(s')\big]

策略迭代

交替执行评估和改进,评估阶段可收敛。收敛速度**快(轮次少)**但每轮评估代价高。

每步更新一次 V 就贪心一次。收敛速度**慢(轮次多)**但每步计算简单。

④. 免模型学习(Model-Free)

不知道 P 和 R?那就用试错数据来估计!

📊 有模型 vs. 免模型

有模型像棋盘游戏——你知道所有规则(转移函数),只需要”算”出最优下法。免模型像第一次玩一个没有规则书的游戏——你得亲自玩很多遍,从经验中估计什么动作在什么情况下比较值。

🎯 蒙特卡洛(Monte Carlo, MC)

完整轨迹(episode)结束后,用实际回报来更新每个状态的值估计:

📐 MC 更新

V(st)V(st)+α(GtV(st)) V(s_t) \leftarrow V(s_t) + \alpha \big(G_t - V(s_t)\big)

其中 Gt=rt+γrt+1+γ2rt+2+G_t = r_t + \gamma r_{t+1} + \gamma^2 r_{t+2} + \cdots 是完整轨迹的实际回报,α\alpha 是学习率。

⚡ 时序差分学习(TD Learning)— 强化学习最核心的方法

不等 episode 结束!每步都更新,用当前估计值去估计下一个估计值(bootstrap):

📐 TD 更新(TD(0))

V(st)V(st)+α(rt+γV(st+1)TD目标V(st)当前估计) V(s_t) \leftarrow V(s_t) + \alpha \big(\underbrace{r_t + \gamma V(s_{t+1})}_{\text{TD目标} } - \underbrace{V(s_t)}_{\text{当前估计} }\big)

核心是 TD 误差 δt=rt+γV(st+1)V(st)\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t):衡量”实际比预期好多少/差多少”。

MC vs. TD 的直观对比

等到故事结局才知道过程好不好。无偏但方差大。

TD(时序差分)

每走一步就更新一次预测。有偏(用估计更新估计)但方差小,且不需要完整轨迹。

🆚 两大免模型控制算法:SARSA vs. Q-Learning

控制问题:不只是评估 V,还要学出最优 Q 函数来指导动作选择。

SARSA(同策略 / On-Policy)

Q(s,a)Q(s,a)+α[r+γQ(s,a)Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha [r + \gamma Q(s',a') - Q(s,a)]

实际执行的下一个动作 a’ 来更新。更新目标与行为策略一致。

核心:你想学什么,就得先做一遍

Q(s,a)Q(s,a)+α[r+γmaxaQ(s,a)Q(s,a)]Q(s,a) \leftarrow Q(s,a) + \alpha [r + \gamma \boldsymbol{\max_{a'} } Q(s',a') - Q(s,a)]

最优下一步动作的 Q 值来更新。学习目标与行为策略分离。

核心:边做边看”最优情况会怎样”

⚠️ SARSA 更安全,Q-Learning 更激进

SARSA 在探索过程中考虑到了 ε-探索带来的风险,所以会学到更保守的最优策略;Q-Learning 则直接逼近数学上真正的最优 Q,不考虑探索过程中的危险。在悬崖行走(Cliff Walking)问题中,SARSA 会绕远路保安全,Q-Learning 则贴着悬崖走最短路径——但偶尔会掉下去。

⑤. 值函数近似

状态太多表格装不下?用函数来拟合!

📈 从查表到学习函数

当状态空间是连续或极大时,表格形式的 Q 表不再可行。用参数化函数 Q(s,a;θ)Q(s,a;\boldsymbol{\theta})V(s;θ)V(s;\boldsymbol{\theta}) 来近似:

目标就是最小化 TD 误差的平方

📐 值函数近似的损失函数

L(θ)=E[(r+γmaxaQ(s,a;θ)Q(s,a;θ))2] \mathcal{L}(\boldsymbol{\theta}) = \mathbb{E}\left[ \left(r + \gamma \max_{a'} Q(s',a';\boldsymbol{\theta}^-) - Q(s,a;\boldsymbol{\theta}) \right)^2 \right]

其中 θ\boldsymbol{\theta}^-目标网络(Target Network)参数——定期从 θ\boldsymbol{\theta} 复制,保持训练稳定性(DQN 的关键技巧之一)。

💡 DQN 的三大稳定化技巧

  1. 经验回放(Experience Replay):存储历史经验 (s,a,r,ss,a,r,s'),随机采样小批量训练,打破数据相关性。
  2. 目标网络(Target Network):用旧参数计算 TD 目标,避免”自己追自己尾巴”的发散问题。
  3. 奖励裁剪(Reward Clipping):将奖励缩放到 [1,1][-1,1],使梯度稳定。

⑥. 策略梯度与 Actor-Critic

直接优化策略,无需通过 Q 函数间接决策

🎯 策略梯度(Policy Gradient)

值函数方法从”估价值”到”选动作”是间接的;策略梯度方法直接参数化并优化策略 π(as;θ)\pi(a|s;\boldsymbol{\theta})

📐 策略梯度定理

θJ(θ)=Eπθ[θlnπ(as;θ)Qπ(s,a)] \nabla_{\boldsymbol{\theta} } J(\boldsymbol{\theta}) = \mathbb{E}_{\pi_{\boldsymbol{\theta} } } \left[ \nabla_{\boldsymbol{\theta} } \ln \pi(a|s;\boldsymbol{\theta}) \cdot Q^{\pi}(s,a) \right]

直觉:如果一个动作的 Q 值高(好动作),就往这个动作的方向调整;如果低(差动作),就减少它的概率。lnπ(as)\ln\pi(a|s) 的梯度是对数概率的梯度方向

🎭 Actor-Critic:融合两派之力

Actor(策略网络) π(a|s;θ) 决策:选动作 环境 s, r → s' Critic(值函数网络) V(s;w) 或 Q(s,a;w) 评估:这事多值?

Actor-Critic 把 Actor(策略网络,负责选动作)和 Critic(值函数网络,负责评估好坏)合二为一。Critic 计算 TD 误差来”批评”Actor 的动作好坏,Actor 据此调整策略。

Actor 更新

策略梯度方向 × TD误差(Critic给的信号):

Δθlnπ(as)δTD\Delta\boldsymbol{\theta} \propto \nabla\ln\pi(a|s) \cdot \delta_{\text{TD} }

标准 TD 学习:

ΔwδTDV(s;w)\Delta\boldsymbol{w} \propto \delta_{\text{TD} } \cdot \nabla V(s;\boldsymbol{w})

⑦. 算法全景对比总结

从简单赌博机到深度强化学习的进化路线

类别 代表算法 需要模型? 需要完整轨迹? 更新方式 适用场景
策略迭代 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误差驱动 连续动作、高维状态

🍉 强化学习算法演进路线图

K-摇臂赌博机 单步探索/利用 有模型学习 MDP 已知 P,R 免模型学习 MC / TD / Q-Learning 值函数近似 DQN 策略梯度 AC / PPO 单步决策 ← → 多步序贯决策 ← → 大规模连续决策

🧠 本章一句话总结

强化学习的核心是 Bellman 方程TD 学习。从已知环境的 DP(值迭代/策略迭代)到未知环境的免模型方法(MC→TD→Q-Learning→DQN→策略梯度→Actor-Critic),演进主线始终是:如何用越来越少的先验知识(无模型)、越来越高效的方式(bootstrap)、处理越来越大的问题(函数近似)。