跳到内容

3.2 Temporal-Difference、Q-Learning 与探索:一次更新并不代表已经学会

探索机器人每走一步才看见结果,工坊必须决定是等整局结束再总结,还是用下一状态的估计立即更新。

机器人不知道风会把它吹向哪里,只能记录实际转移 $(S_t,A_t,R_{t+1},S_{t+1})$。等整局结束再总结可以学习,但反馈迟;只用下一步估计可以更快更新,却把当前估计误差带进目标。

本课目标

  • 区分 Monte Carlo 与 Temporal-Difference target;
  • 正确处理 Q-learning 的 terminal、合法动作与随机 tie;
  • 理解 on-policy SARSA 与 off-policy Q-learning;
  • 说明 tabular 收敛条件和函数近似风险。

1. Monte Carlo 与 TD(0)

Monte Carlo 等 episode 完成,用实际 return 更新:

$$ V(S_t)\leftarrow V(S_t)+\alpha[G_t-V(S_t)]. $$

它不 bootstrap,但必须等到 return 可知,方差通常较高。

TD(0) 使用一步 target:

$$ V(S_t)\leftarrow V(S_t)+\alpha[ R_{t+1}+\gamma V(S_{t+1})-V(S_t)]. $$

TD 可以在线更新,target 的方差较低但带 bootstrap bias。不存在“TD 总优于 MC”的通用结论。

2. Q-Learning backup

$$ Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha[ R_{t+1}+\gamma\max_aQ(S_{t+1},a)-Q(S_t,A_t)]. $$

行为可以 epsilon-greedy,target 却使用 greedy max,因此 Q-learning 是 off-policy control。

一个更完整的 tabular agent:

python
import numpy as np

class TabularQLearning:
    def __init__(self, n_states, n_actions, alpha, gamma, epsilon, seed=0):
        self.q = np.zeros((n_states, n_actions), dtype=float)
        self.alpha = alpha
        self.gamma = gamma
        self.epsilon = epsilon
        self.rng = np.random.default_rng(seed)

    def act(self, state, legal_actions):
        legal = np.asarray(legal_actions, dtype=int)
        if len(legal) == 0:
            raise ValueError("non-terminal state has no legal actions")
        if self.rng.random() < self.epsilon:
            return int(self.rng.choice(legal))

        values = self.q[state, legal]
        best = legal[np.flatnonzero(values == values.max())]
        return int(self.rng.choice(best))

    def update(self, state, action, reward, next_state, terminal, next_legal):
        bootstrap = 0.0 if terminal else self.q[next_state, next_legal].max()
        target = reward + self.gamma * bootstrap
        self.q[state, action] += self.alpha * (
            target - self.q[state, action]
        )

旧实现无论 next_state 是否 terminal 都 bootstrap,会把终局后的虚构价值加入 target;argmax 还总偏向第一个平局动作。

3. SARSA 学行为策略的价值

SARSA target 使用实际下一动作:

$$ R_{t+1}+\gamma Q(S_{t+1},A_{t+1}). $$

若行为为 epsilon-greedy,它学习的是包含探索风险的策略价值。悬崖行走中,SARSA 可能选择离悬崖更远的路线;Q-learning target 假设以后贪心,可能偏好更短但探索时危险的路线。

“off-policy 更好”不成立。选择取决于要评估/优化的 target policy、数据来源和重要性修正。

4. 探索不是一个固定 epsilon 公式

Epsilon-greedy 简单,却不利用不确定性:所有非贪心动作等概率。可选方法:

  • optimistic initialization;
  • decaying epsilon;
  • UCB/置信上界;
  • Boltzmann/softmax exploration;
  • intrinsic motivation;
  • posterior sampling。

“从 1.0 指数衰减到 0.01”不是通用建议。衰减取决于 horizon、访问频率、非平稳性和安全成本。部署中持续随机探索可能伤人,需要模拟器、约束动作或审批。

5. Tabular Q-Learning 的收敛有条件

经典有限 MDP 中,若:

  • 所有状态动作被无限次访问;
  • 学习率满足相应随机逼近条件;
  • 奖励有界、环境平稳;
  • 折扣/终止使 return 定义良好;

则 tabular Q-learning 可收敛到 $Q^*$(标准条件下)。固定学习率和提前停止通常只得到近似稳定。

看见平均回报上升不证明 Q 表收敛,也不证明部署分布表现。

6. Maximization bias 与 Double Q-Learning

max 会偏好带正噪声的估计,造成过估计。Double Q-learning 用一套估计选择动作、另一套评估,减少该偏差。深度版本对应 Double DQN 思路。

这不是保证低估/无偏;函数近似和数据分布仍影响结果。

7. Eligibility traces

TD($\lambda$) 用 eligibility trace 把当前 TD error 传播给近期状态,连接一步 TD 与 Monte Carlo。$\lambda=0$ 接近 TD(0),$\lambda$ 趋近 1 时更接近长 return(具体等价条件需注意 online/offline 版本)。

n-step returns 同样在 bias、variance 和延迟间折中。

8. 从 Q 表到函数近似

连续/巨大状态不能逐项存表,可用 $Q(s,a;\theta)$。这不是“Q-learning 立刻失效”:可先 tile coding、线性函数或离散化;神经网络只是一个选择。

off-policy + bootstrap + function approximation 被称为 deadly triad,可能不稳定甚至发散。DQN 使用:

  • replay buffer 打破相邻样本相关并复用经验;
  • target network 延缓 target 漂移;
  • gradient clipping、reward scaling 等工程控制。

这些缓解不构成普遍收敛保证。Replay 还会改变数据分布,旧经验在非平稳环境中可能有害。

9. 训练曲线怎样读

分开记录:

  • 训练行为(含探索)回报;
  • 固定评估策略回报;
  • episode 长度、成功率和失败类型;
  • 状态动作覆盖;
  • TD error 与 Q 值范围;
  • 多随机种子分布和置信区间。

只展示最优 seed 或最后 100 局平均,会隐藏不稳定和选择偏差。

常见误区

  • 终局 next Q 也照常加入:真正 terminal 不应 bootstrap。
  • epsilon 越快变小越快收敛:可能永远没探索关键动作。
  • Q-learning 一定比 SARSA 强:两者目标策略不同。
  • 用了 replay 和 target network 就稳定:仍需诊断函数近似与覆盖。

练习

  1. 手算同一轨迹的 MC、TD(0)、SARSA 与 Q-learning target。
  2. 构造 terminal bootstrap bug,观察终局 Q 被高估。
  3. 在悬崖环境比较 SARSA 与 Q-learning 的训练/评估路线。
  4. 用五个随机种子报告回报分布和状态动作覆盖。

小结

TD 方法用当前估计帮助学习未来估计,因此样本效率和稳定性依赖 target、探索和覆盖。Q-learning 的一行公式只有在终局、合法动作和收敛条件被正确实现时才有意义。

下一课直接参数化策略,并讨论高方差、actor-critic、离线数据和安全评估。

Built with VitePress | Software Systems Atlas