RL ML Learning Lab
01 / 07
探索 vs 利用

多臂老虎机Multi-Armed Bandits

在「试新臂」和「榨取已知最优臂」之间权衡 —— ε-greedy、UCB、梯度老虎机,实时调参看学习曲线。

2.5 小时
阅读 + 实操
3 个
交互演示
入门
难度

多臂老虎机 · 交互演示

累计奖励+182
最优臂B
ε0.10
步数
独立运行次数
随机种子
对比配置

为什么学这步?

强化学习的第一个核心矛盾就藏在老虎机里:你不知道每个臂的真实回报,只能在「试新」和「吃老本」之间找平衡。它把后续所有 RL 算法的探索—利用难题压缩到了极简形式。

📌 发生了什么

  • 每个臂有隐藏的真实均值奖励,只能靠采样估计
  • ε-greedy 以概率 ε 随机选臂、否则选当前估计最优
  • UCB 用「不确定性上界」更聪明地引导探索
  • 梯度老虎机直接学每个臂的选择偏好

⚠️ 常见陷阱

  • ε 太小会卡在次优臂(利用过头)
  • ε 太大则永远在随机试,学不到稳定策略
  • 用累积平均而非滑动窗口会抹平近期变化

本章小结

  • 老虎机 = 单状态 MDP,是 RL 的最小实验台
  • ε-greedy 简单有效,UCB 理论更优
  • 权衡探索与利用贯穿全部 RL 算法

📐 估值更新与策略公式

三种老虎机算法的核心更新规则:ε-greedy 用增量均值,UCB 加不确定性上界,梯度老虎机按偏好更新。

ε-greedy 增量更新:新估值 = 旧估值 + 步长 α × (新样本 - 旧估值)。当 α = 1/N(a) 时退化为样本均值;定常 α 则给近期样本更大权重。

UCB(上置信界):在估值基础上加一个随访问次数 N(a) 递减、随时间 t 递增的探索项。没试够的臂 N(a) 小,不确定性项大,从而被优先探索。

梯度老虎机:维护每个臂的偏好分 H(a),按 softmax 转成概率 π(a)。奖励高于基线 R̂ 时增大被选臂偏好、降低其他臂偏好,反之亦然。

🎛 ε 探索率对比

ε 是探索-利用天平的砝码。太小锁死次优臂,太大浪费步数。下表对比三种典型取值在 10 臂老虎机上的表现。

ε 值 表现 结果
ε = 0(贪心) 只拉当前最优臂,无任何探索 易锁死次优臂
ε = 0.1 90% 利用 + 10% 探索,稳步逼近最优 推荐区间
ε = 0.3 探索过多,大量步数浪费在差臂 过度探索

💡 实践中常让 ε 随时间衰减(如 ε = 1/t),前期多探索、后期多利用。

💻 ε-greedy 核心循环

增量更新估值的核心代码(与上方 Live 模式逻辑一致):

const k = 10;          // 臂数
const eps = 0.1;       // 探索率 ε
const alpha = 0.1;     // 步长 α
let Q = new Array(k).fill(0);
let N = new Array(k).fill(0);

for (let t = 0; t < steps; t++) {
  // 1. 选动作:ε 概率随机探索,否则贪心
  let a;
  if (Math.random() < eps) {
    a = Math.floor(Math.random() * k);   // 探索
  } else {
    a = argmax(Q);                        // 利用
  }
  // 2. 拉杆得到奖励 r
  const r = pull(a);
  // 3. 增量更新估值
  N[a]++;
  Q[a] += alpha * (r - Q[a]);
}

📚 参考文献与延伸阅读

  • Sutton & Barto, Reinforcement Learning (2nd ed.), §2 Multi-armed Bandits — ε-greedy、UCB、梯度老虎机的完整论述
  • Auer, Cesa-Bianchi & Fischer (2002), Finite-time Analysis of the Multiarmed Bandit Problem — UCB1 算法与遗憾界证明
  • Wikipedia: Multi-armed bandit — 问题定义与算法综述

📝 课后练习

检验你的理解——答对为止