对应:Stanford CS234 Lecture 11–12(Fast Learning / Exploration: Bandits) 配套代码:
code/lecture11/(只需 numpy) 预计阅读时间:3.5 小时
0. 本讲导航
0.1 本讲要回答的问题
怎样衡量一个学习算法”学得快不快”?怎样在探索与利用之间做出有理论保证的平衡?
从第 1 讲开始,我们就一直在用 -贪心做探索:以一个小概率随机选动作,其余时候选”目前看起来最好”的。它简单、好用,但我们从没问过:
- 它探索得够不够?会不会永远错过最好的动作?
- 它探索得太多了吗?已经很确定哪个动作最好了,为什么还要随机试?
- 有没有更聪明的探索方式?“聪明”又该怎样衡量?
这一讲从强化学习中最简单的问题——多臂老虎机——出发回答这些问题。它只有一个状态,没有”延迟后果”,却完整地保留了探索与利用的矛盾。在这个干净的设定里,我们能精确地定义”学得快”,证明哪些算法是好的,甚至证明”任何算法都不可能做得更好”的极限。
0.2 学完本讲,你应该能够
- 形式化多臂老虎机问题,定义遗憾,写出遗憾分解公式 。
- 解释贪心和 -贪心为什么是线性遗憾。
- 陈述霍夫丁不等式,由它构造置信区间。
- 描述 UCB1 算法,理解”面对不确定性时保持乐观”的原则,写出其对数遗憾界并了解证明思路。
- 陈述 Lai–Robbins 下界,解释 KL 散度在其中的作用,知道 KL-UCB 为什么渐近最优。
- 区分与问题有关和与问题无关的遗憾界。
- 理解 A/B 测试(先探索后承诺)与老虎机算法的区别。
0.3 先修知识
| 知识点 | 用在哪里 | 最低要求 |
|---|---|---|
| 第 1 讲:探索与利用、-贪心 | 第 1、3 节 | 必须 |
| 期望、方差、独立同分布 | 全讲 | 必须 |
| 大数定律(样本均值趋于真实均值) | 第 4 节 | 知道结论即可 |
| KL 散度 | 第 6 节 | 第 7 讲已介绍 |
| 对数的增长速度: 远慢于 远慢于 | 全讲 | 必须 |
0.4 本讲地图
第1节 多臂老虎机:问题与应用
│
第2节 遗憾:怎样衡量"学得快"
│
第3节 贪心与 ε-贪心:线性遗憾
│
第4节 霍夫丁不等式:量化"我有多不确定"
│
第5节 UCB1:面对不确定性时保持乐观;对数遗憾
│
第6节 下界:任何算法都做不到更好——Lai–Robbins 与 KL-UCB
│
第7节 问题难度与遗憾;A/B 测试
│
第8节 从老虎机到强化学习
1. 多臂老虎机
1.1 问题
赌场里有 台老虎机(“单臂强盗”,one-armed bandit),第 台的中奖概率是 ,但你不知道这些概率。你一共可以拉 次,每次选一台拉一下,中奖得 1,不中得 0。怎样拉才能让总奖励尽可能多?
形式化地:
- 个臂(动作);
- 每个臂有一个未知的奖励分布,均值为 ;
- 每一步 :选一个臂 ,观察奖励 臂 的分布;
- 目标:最大化 。
记最好的臂的均值为 ,臂 的差距(gap) 为 。
和 MDP 的关系:老虎机就是只有一个状态的 MDP。选择动作不会改变状态,所以没有”延迟后果”——今天的选择只影响今天的奖励,以及你学到了什么。这让我们能把”探索”这件事单独拿出来研究。
1.2 为什么这个问题重要?
老虎机的名字听起来像赌博,但它的应用远比赌场广泛:
- 临床试验:历史上第一篇老虎机论文(Thompson, 1933)研究的就是:两种疗法,效果未知,怎样分配病人,才能既尽快弄清哪种更好,又让尽量多的病人得到更好的治疗?
- 在线广告与推荐:展示哪个广告、推荐哪篇文章?点击率未知,只能边展示边学。
- 网站设计与 A/B 测试:哪个版本的页面转化率更高?
- 教育:给学生推荐哪道练习题、哪种讲解方式?(CS234 主讲人 Brunskill 研究组的方向之一)
- 超参数搜索、蒙特卡洛树搜索:第 14 讲的 AlphaGo 在搜索树的每个节点上都在解一个老虎机问题。
这些问题的共同点:每一次尝试都有真实的代价(病人、用户、收入),所以不仅要学会,还要在学的过程中少犯错。
1.3 本讲的实验平台
代码 bandits.py 中的默认老虎机有 5 个臂,成功率(智能体不知道)为:
| 臂 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 0.2 | 0.4 | 0.5 | 0.6 | 0.7 | |
| 0.5 | 0.3 | 0.2 | 0.1 | 0 |
另外还有一个”困难的”版本(臂 3 的成功率改为 0.67,与最好的臂只差 0.03)和一个”点击率”版本(4 个臂,成功率 2%~5%)。
为了得到可靠的平均,每个实验都独立重复几百次。bandits.py 把几百次实验”叠”在一起用 numpy 并行模拟——这是本讲代码的一个工程技巧,README 中有说明。
2. 遗憾:怎样衡量”学得快”
2.1 为什么不直接比较总奖励?
总奖励的大小取决于问题本身:成功率都很高的老虎机,随便拉总奖励也很高。我们需要一个与”最好可能”比较的指标。
2.2 遗憾的定义
遗憾(regret):如果一开始就知道哪个臂最好、一直拉它,期望能得到 ;实际期望得到 。两者之差:
遗憾分解:设 为前 步中臂 被拉的次数,则
每拉一次差距为 的臂,就”亏” 。要让遗憾小,就要少拉差的臂——但不拉又没法知道它们差。这就是探索与利用的矛盾在公式中的体现。
(代码中记录的是 ,即用期望奖励而不是实际拿到的 0/1 来算,叫伪遗憾。它的期望就是遗憾,但曲线更平滑。)
2.3 “学得快”意味着什么?
遗憾最多是 (一直拉最差的臂)。关键在于遗憾随 增长的速度:
| 增长速度 | 含义 |
|---|---|
| 线性 | 每一步平均亏的钱不随时间减少——永远没学会 |
| 次线性 ,如 、 | 平均每步遗憾 ——最终学会了 |
| 对数 | 学得极快:步数增加 10 倍,遗憾只增加一个常数 |
有多慢?,:步数从一千增加到一百万,遗憾只翻一倍。
这就是本讲衡量”学得快”的标准。它和第 3 讲的”样本效率”一脉相承,但更严格:不仅要最终学会,还要学的过程中犯的错尽量少。
3. 贪心与 -贪心:线性遗憾
3.1 贪心:永远可能卡住
贪心:每个臂先拉一次,之后总拉经验均值 最高的臂。
代码 01_greedy_epsilon.py 演示 1:,重复 1000 次,实验结束时”被拉得最多的臂”的分布:
| 臂 | 0 (0.2) | 1 (0.4) | 2 (0.5) | 3 (0.6) | 4 (0.7) |
|---|---|---|---|---|---|
| 实验比例 | 1.3% | 5.1% | 7.5% | 26.7% | 59.4% |
四成的实验卡在了次优的臂上。一个典型的例子:前 20 步拉的臂是 4 1 3 2 0 1 3 3 3 3 …,最终各臂被拉的次数是 [1, 2, 1, 995, 1]——最好的臂 4 只在第一步被拉了一次。
为什么? 臂 4 第一次拉得到 0,经验均值为 0;臂 3 第一次得到 1。之后贪心一直拉臂 3,它的经验均值收敛到 0.6 > 0,永远高于臂 4 的 0。臂 4 得不到数据,它被低估的状态就永远得不到纠正。
线性遗憾的证明:上面这种事情发生的概率 (不随 变化),一旦发生,之后每一步至少亏 。所以 ,是线性的。
3.2 -贪心:永不停止的探索
-贪心:以概率 随机选一个臂,否则选经验均值最高的臂。
它解决了”卡住”的问题(每个臂都会被不断地试),但带来新的问题:即使已经非常确定哪个臂最好,每一步仍以 的概率随机拉。随机拉时,每个臂被选中的概率都是 ,所以
其中 是平均差距(默认老虎机为 0.22)。线性遗憾。
演示 2 的实验(重复 200 次):
| 策略 | 后 9 万步每步遗憾 | ||||||
|---|---|---|---|---|---|---|---|
| 贪心 | 8.6 | 69.8 | 677.3 | 6752.3 | 10.0 | 0.0675 | — |
| 9.2 | 63.1 | 238.8 | 502.5 | 2.1 | 0.0029 | 0.0022 | |
| 9.7 | 46.4 | 178.3 | 1184.3 | 6.6 | 0.0112 | 0.0110 | |
| 10.2 | 48.3 | 262.7 | 2241.9 | 8.5 | 0.0220 | 0.0220 | |
| 10.6 | 61.4 | 458.4 | 4415.6 | 9.6 | 0.0440 | 0.0440 |
读这张表:
- 贪心和 的 -贪心, 增加 10 倍,遗憾增加 6.6~10 倍——线性。
- 后期的每步遗憾与 几乎完全吻合——理论分析非常准确。
- 只增长了 2.1 倍,看起来不像线性。原因是它探索得太少,前 1 万步里还有不少实验没找到最好的臂,这一阶段的遗憾占了大头。但它后期的每步遗憾(0.0029)已接近 ,只要 再长,也会线性增长——只是进入线性阶段更晚。看遗憾曲线时,要注意”还没到渐近阶段”的情况。
- 最佳的 取决于 :、 时 最好, 时 最好。 越长,长期的探索代价越重要,就越应该少探索。可我们往往不知道 。
3.3 能不能让探索逐渐减少?
递减 -贪心(Auer et al., 2002):。探索概率按 递减,总探索次数 ——只按对数增长!理论保证要求 (最小差距)。
乐观初始化:假装每个臂在开始前已被拉了若干次(“伪计数”)、每次都得到最高奖励 1。所有臂一开始都”看起来很好”,贪心地拉一个,发现不如预期,估计值下降,就换别的臂——乐观驱动了探索。
演示 3 的结果(,重复 200 次;“认错”= 结束时被拉得最多的臂不是最好的臂):
| 策略 | 容易的老虎机 | 认错比例 | 困难的老虎机 | 认错比例 |
|---|---|---|---|---|
| 568.1 | 0.0% | 848.5 | 17.5% | |
| 递减 : | 691.6 | 0.0% | 734.4 | 2.5% |
| 递减 : | 156.8 | 0.5% | 648.5 | 17.5% |
| 递减 : | 2575.6 | 0.0% | 2418.0 | 0.0% |
| 乐观初始化:伪计数 1 | 3211.9 | 28.0% | 1650.6 | 40.5% |
| 乐观初始化:伪计数 10 | 117.8 | 1.0% | 558.4 | 18.0% |
问题暴露了:
- “安全”的参数(满足理论条件 ,尤其 )探索得太多,遗憾很大。
- “大胆”的参数(,伪计数 10)在容易的老虎机上表现极好;换到困难的老虎机上,将近五分之一的实验认错了最好的臂——这些实验的遗憾会线性增长。
这些方法的参数隐含了对问题难度的假设(差距有多大),而差距恰恰是我们不知道的。我们想要的是:不需要知道差距,能自动适应问题难度的方法。
4. 霍夫丁不等式:量化”我有多不确定”
4.1 动机
贪心的问题在于:它把经验均值 当成了真值。拉了 1 次得到 0,和拉了 1000 次平均 0.3,贪心一视同仁。可前者的不确定性要大得多!
更聪明的做法:同时考虑估计值和它的不确定性。这需要回答:“拉了 次,经验均值与真实均值相差多少?”
4.2 霍夫丁不等式
定理(Hoeffding, 1963):设 是独立同分布的随机变量,取值在 ,均值为 ,。则对任意 :
直觉:偏差超过 的概率随 指数下降。它不需要知道分布的具体形状,只要求取值有界——所以对任何 上的奖励都成立。
代码 02_hoeffding_ucb.py 演示 1 用模拟验证(部分结果):
| 真实 | 模拟的 | 霍夫丁上界 | ||
|---|---|---|---|---|
| 0.5 | 100 | 0.1 | 0.0574 | 0.271 |
| 0.5 | 1000 | 0.05 | 0.00176 | 0.0135 |
| 0.1 | 100 | 0.1 | 0.00202 | 0.271 |
不等式总是成立,但偏保守——尤其当 接近 0 或 1 时(伯努利分布的方差 较小,而霍夫丁按最坏的方差 1/4 来算)。记住这一点,第 6 节会用到。
4.3 反过来用:置信区间
令 ,解出 。于是:
以至少 的概率,。
这就是置信上界。它的宽度 :95% 置信区间(双侧)的半宽在 时分别为 0.429、0.136、0.043、0.014。数据增加 100 倍,不确定性只缩小 10 倍。
5. UCB1:面对不确定性时保持乐观
5.1 原则
面对不确定性时保持乐观(Optimism in the Face of Uncertainty, OFU):对每个臂,假设它和”在数据允许的范围内最好的可能”一样好,然后选最好的。
为什么这是个好主意?拉了”上界最高”的臂之后,只有两种可能:
- 它的上界高是因为均值确实高 → 我们拉到了一个好臂(利用),很好;
- 它的上界高是因为不确定性大 → 拉完之后多了一个数据,不确定性变小,上界下降(探索),我们学到了东西。
两种情况都不亏。这就是乐观原则的精髓:它把”探索”和”利用”统一到一个指标里,不需要人为地决定”什么时候探索”。
对比贪心:贪心是”面对不确定性时保持中立”——把估计当真。一旦低估了好臂,就再也不去验证。乐观则保证:被低估的臂迟早会因为”不确定”而被再试一次。
5.2 算法
UCB1(Auer, Cesa-Bianchi & Fischer, 2002):每个臂先拉一次,之后每一步选
原论文取 。
置信宽度为什么是 ? 对照 4.3 节,这相当于取 :随着时间推移,要求的置信度越来越高。 时,上界在每一步失效的概率不超过 。
的作用:一个长期不被拉的臂, 不变,而 缓慢增长,它的上界会慢慢升高,最终超过其他臂而被再试一次。永远不会”永久放弃”任何一个臂——这正是贪心所缺少的。但因为 增长极慢,差的臂被重试的频率也极低。
5.3 看 UCB1 如何工作
演示 2:一次实验中各臂的状态():
:
| 臂 | 探索奖励 | 上界 | ||
|---|---|---|---|---|
| 0 | 9 | 0.222 | 1.012 | 1.234 |
| 1 | 9 | 0.222 | 1.012 | 1.234 |
| 2 | 17 | 0.529 | 0.736 | 1.265 |
| 3 | 24 | 0.625 | 0.619 | 1.244 |
| 4 | 41 | 0.805 | 0.474 | 1.279 |
:
| 臂 | 探索奖励 | 上界 | ||
|---|---|---|---|---|
| 0 | 66 | 0.212 | 0.528 | 0.740 |
| 1 | 195 | 0.436 | 0.307 | 0.743 |
| 2 | 189 | 0.429 | 0.312 | 0.741 |
| 3 | 893 | 0.600 | 0.144 | 0.744 |
| 4 | 8657 | 0.698 | 0.046 | 0.744 |
最引人注目的现象:所有臂的上界几乎”齐平”。UCB1 让每个次优臂恰好被拉到”它的上界降到 附近”为止。差距越小的臂,要把上界降到 以下需要越窄的置信区间,也就越多的样本:大约需要 ,即
每个次优臂被拉的次数按 增长,与 成反比。代入遗憾分解:
对数遗憾!
5.4 遗憾界(定理与证明思路)
定理(Auer et al., 2002):UCB1()对任何奖励在 内的老虎机满足
证明思路(理解结构即可):设次优臂 已经被拉了至少 次,它在第 步又被选中,说明 。这只可能因为以下三件事之一:
- 最优臂被低估:,即最优臂的上界失效了。由霍夫丁不等式,概率 。
- 臂 被高估:。同样,概率 。
- 置信区间还太宽:,即 。但我们假设了 ,所以这不可能。
所以,拉满 次之后,臂 再被选中只能是因为”小概率事件”1 或 2 发生了。把这些小概率对所有可能的 和拉的次数求和( 收敛,这是 的来源),得到上面的界。
关键思想:好事(置信区间成立)以高概率发生;在好事发生时,次优臂只会被拉 次;坏事的概率小到对总次数的贡献只是一个常数。 这个”好事件 + 坏事件”的论证模式在整个探索理论中反复出现(第 13 讲的 MBIE-EB 也一样)。
5.5 实验
与上一节的方法对比(演示 3,,重复 200 次):
| 策略 | 容易: | 认错 | 困难: | 认错 | ||
|---|---|---|---|---|---|---|
| 568.1 | 2.25 | 0.0% | 848.5 | 5.07 | 17.5% | |
| 递减 : | 156.8 | 1.66 | 0.5% | 648.5 | 4.69 | 17.5% |
| 乐观初始化:伪计数 10 | 117.8 | 4.24 | 1.0% | 558.4 | 7.72 | 18.0% |
| UCB1() | 380.9 | 1.73 | 0.0% | 521.6 | 2.48 | 0.0% |
| UCB1() | 100.0 | 1.45 | 0.0% | 182.8 | 2.07 | 0.0% |
- UCB1 在两个老虎机上都没有认错过最好的臂,遗憾增长缓慢(10 倍的步数,1.5~2.5 倍的遗憾)。增长比仍大于 ,是因为有限的 下还有低阶项,比如差距小的臂在 时还没被充分探索。
- UCB1 用同一组参数适应了两个难度不同的问题。这就是它相对于递减 、乐观初始化的根本优势。
- 理论值 偏保守; 在两个问题上都好得多。
每个次优臂被拉了多少次(演示 4,默认老虎机,):
| 臂 | UCB1 () | UCB1 () | 定理上界 | Lai–Robbins 下界 | 遗憾贡献 () | |
|---|---|---|---|---|---|---|
| 0 | 0.5 | 87 | 22 | 373 | 22 | 43.3 |
| 1 | 0.3 | 236 | 62 | 1028 | 60 | 70.7 |
| 2 | 0.2 | 490 | 130 | 2307 | 132 | 98.0 |
| 3 | 0.1 | 1683 | 471 | 9215 | 510 | 168.3 |
- 次数与 大致成正比:要区分两个很接近的臂,需要很多样本。
- 实际次数远低于定理上界——证明中的放缩很宽松(常数 8 来自最坏情况的分析)。
- 差距最小的臂贡献的遗憾最多()。有点反直觉:最差的臂很快就被识破了,真正”费钱”的是那些与最好的臂难以区分的臂。
- 的次数与 Lai–Robbins 下界(第 6 节)几乎相同——下一节解释为什么这在这个老虎机上是巧合。
5.6 探索强度 的取舍
演示 5(,重复 200 次):
| 容易:平均遗憾 | 最差 1% 实验 | 认错 | 困难:平均遗憾 | 最差 1% 实验 | 认错 | |
|---|---|---|---|---|---|---|
| 0.05 | 860.9 | 10014.4 | 7.0% | 520.4 | 3069.8 | 14.0% |
| 0.1 | 109.1 | 2716.9 | 1.0% | 238.0 | 3018.1 | 5.5% |
| 0.25 | 52.9 | 105.6 | 0.0% | 88.3 | 175.2 | 0.0% |
| 0.5 | 105.1 | 162.2 | 0.0% | 176.9 | 313.7 | 0.0% |
| 1 | 200.3 | 270.3 | 0.0% | 308.0 | 440.6 | 0.0% |
| 2 | 384.5 | 517.3 | 0.0% | 528.6 | 696.4 | 0.0% |
| 4 | 715.8 | 904.0 | 0.0% | 881.1 | 1063.9 | 0.0% |
- 太大:探索过多,遗憾偏大,但非常稳定——最差的实验也不比平均差多少。
- 太小:上界太窄,最好的臂早期运气不好时,它的上界可能长时间低于某个次优臂的上界——又退化成了”贪心卡住”。平均遗憾也许还行,但最差 1% 的实验遗憾极大。
- 对应霍夫丁不等式本身给出的宽度 ,即”以 的概率成立”的上界; 对应 ,是为了让证明简洁而取的保守值。
- 在这两个问题上最好——它在拿最坏情况冒险,而这两个问题恰好没让它付出代价。
理论保证与实际表现之间的取舍,是探索算法设计中永恒的主题:理论常数通常偏保守;调得更激进能提高平均表现,但会增加”偶尔很差”的风险。在高风险应用(比如医疗)中,稳定性往往比平均表现更重要。
6. 下界:任何算法都做不到更好
6.1 问题
UCB1 的遗憾是 。能不能做到比 更慢的增长?常数能不能更小?
6.2 Lai–Robbins 下界
定理(Lai & Robbins, 1985):对任何一致的算法(在所有伯努利老虎机上,遗憾都是 ,对任意 ),对每个次优臂 :
因此
其中 是两个伯努利分布之间的 KL 散度。
对数增长是不可避免的,而且常数有一个精确的下限。
6.3 直觉:为什么至少要 次?
设想另一个”平行世界”:其他都一样,只是臂 的成功率被悄悄调高到略高于 ——在那个世界里,臂 是最好的臂。
- 一个一致的算法,在那个世界里必须几乎一直拉臂 (否则遗憾是线性的);
- 在我们的世界里,它必须很少拉臂 。
所以算法必须能够区分这两个世界。而区分它们的唯一信息来源,是拉臂 得到的奖励。每拉一次,平均获得 那么多”区分两个世界的信息”。要把”误判世界”的概率降到 量级(否则误判的代价 会让遗憾变大),需要的信息总量约为 。于是:
KL 散度就是”区分两个分布的难度”的度量: 越小,两个臂越像,需要的样本越多。
6.4 UCB1 离下界有多远?
由 Pinsker 不等式,,所以下界要求的次数 。UCB(常数 )的次数大约是 。
- 时,UCB 的次数 ,恰好是 Pinsker 意义下的”下界的上界”。当 时,两者几乎相等——这发生在成功率接近 0.5 时(伯努利分布的方差接近最大值 1/4)。这就是 5.5 节表格中 与下界吻合的原因:默认老虎机的成功率都在 0.2~0.7 之间。
- 当成功率接近 0 或 1 时,(分布的方差小,更容易区分),霍夫丁上界会非常松,UCB1 会做大量不必要的探索。
6.5 KL-UCB:渐近最优
KL-UCB(Garivier & Cappé, 2011)直接用 KL 散度构造上界:
“在 之上,找一个最大的 ,使得’真实值为 ‘这件事与已有的 个观察仍然不矛盾”。 随 单调增加,所以可以用二分法求解。
可以证明 KL-UCB 的遗憾满足 ——恰好达到 Lai–Robbins 下界,渐近最优。
代码 03_regret_bounds.py 演示 1(重复 100 次):
默认老虎机():
| 策略 | at | |||
|---|---|---|---|---|
| UCB1 () | 78.8 | 227.3 | 390.5 | 33.9 |
| UCB1 () | 36.4 | 69.4 | 104.5 | 9.1 |
| UCB1 () | 23.1 | 37.0 | 52.2 | 4.5 |
| KL-UCB | 31.4 | 63.1 | 93.4 | 8.1 |
点击率老虎机(成功率 2%~5%,):
| 策略 | at | |||
|---|---|---|---|---|
| UCB1 () | 14.1 | 122.5 | 783.0 | 68.0 |
| UCB1 () | 13.0 | 96.9 | 409.6 | 35.6 |
| UCB1 () | 12.0 | 80.8 | 263.2 | 22.9 |
| KL-UCB | 10.8 | 50.1 | 109.9 | 9.5 |
- 点击率老虎机上,KL-UCB 的遗憾只有 UCB1 的 1/4~1/7。这类”成功率很低”的问题在实际中非常常见(广告点击率、转化率),是 KL-UCB 最有价值的场景。
- KL-UCB 的 从下方逐渐接近 ( 时 8.1 与 9.5, 为 9.2 与 15.4),与”渐近最优”一致。UCB1 在点击率老虎机上的 还在快速增长,离它的对数阶段还远。
- UCB1()在默认老虎机上的遗憾低于 ! 这并不违反下界:
- 下界是 时的极限,有限的 下可以低于它;
- 更重要的是,下界只约束一致的算法——在所有老虎机上都表现合理。 的 UCB 在某些老虎机上会付出很大代价(5.6 节中”最差 1% 的实验”已经显示了苗头)。它在这里的低遗憾,是用在其他问题上的风险”换”来的。
下界的真正含义:要想在所有问题上都表现合理,在每个具体问题上就必须付出至少 的遗憾。这是”不能对问题做任何假设”的代价。
7. 问题难度与遗憾
7.1 遗憾随差距先升后降
在 时趋于无穷,但遗憾不可能超过 (一直拉错也只亏这么多)。真实的遗憾大约是
演示 2:两臂老虎机(成功率 ),,重复 200 次:
| 0.005 | 0.01 | 0.02 | 0.03 | 0.05 | 0.1 | 0.2 | 0.4 | |
|---|---|---|---|---|---|---|---|---|
| UCB1 () | 21.4 | 34.7 | 47.4 | 46.3 | 43.4 | 30.8 | 18.1 | 9.8 |
| KL-UCB | 21.1 | 36.3 | 48.4 | 50.2 | 43.7 | 30.7 | 17.9 | 10.0 |
| 随机拉 | 25 | 50 | 100 | 150 | 250 | 500 | 1000 | 2000 |
| 渐近下界 | 921 | 460 | 230 | 154 | 92 | 46 | 23 | 11 |
- 大:容易区分,遗憾小。
- 小:难以区分,但拉错也亏得少,遗憾同样小。此时”渐近下界” 远大于实际遗憾—— 不够大,渐近结论还没”生效”。这再次提醒我们:渐近结论要谨慎使用。
- 最”坏”的是中间的 (这里约 0.02~0.05,理论上约 )。
7.2 与问题无关的遗憾界
把最坏的 代入:对任何老虎机,UCB 的遗憾都不超过
(推导:把臂分成 和 两组,前者遗憾最多 ,后者最多 ;取 平衡两项。)
另一方面,可以证明任何算法在最坏的老虎机上都至少有 的遗憾(极小极大下界)。UCB1 只差一个 因子(MOSS 等改进算法可以去掉它)。
所以遗憾界有两种说法:
| 与问题有关(gap-dependent) | 与问题无关(gap-independent / minimax) | |
|---|---|---|
| 形式 | ||
| 回答的问题 | 在这个老虎机上表现如何? | 在最坏的老虎机上表现如何? |
| 下界 | Lai–Robbins: |
7.3 先探索后承诺:A/B 测试
实践中最常见的做法是 A/B 测试,也就是先探索后承诺(Explore-Then-Commit, ETC):先把每个版本各试 次,然后选表现最好的,全量上线,不再改变。
演示 3(两臂,,重复 300 次):
| 策略 | 最坏情况 | ||||
|---|---|---|---|---|---|
| ETC, | 76.8 | 160.4 | 244.4 | 183.3 | 244.4 |
| ETC, | 80.2 | 147.7 | 166.7 | 62.8 | 166.7 |
| ETC, | 70.6 | 109.5 | 72.1 | 20.0 | 109.5 |
| ETC, | 62.2 | 61.2 | 36.0 | 40.0 | 62.2 |
| ETC, | 47.2 | 49.0 | 50.0 | 100.0 | 100.0 |
| ETC, | 46.1 | 54.0 | 100.0 | 200.0 | 200.0 |
| UCB1 () | 47.1 | 42.8 | 30.2 | 18.9 | 47.1 |
| 每个 下最好的 ETC | 46.1 | 49.0 | 36.0 | 20.0 | — |
- 最佳的 随 变化很大: 小要多探索, 大要少探索。 太小 → 有相当概率选错,此后每一步都亏 ,而且再也纠正不过来; 太大 → 在差的版本上浪费太多。
- 即使”作弊”——知道 、为每个 挑出最好的 ——ETC 也只是与 UCB1 打平或更差。这与理论一致:调到最优的 ETC 的遗憾仍比 UCB 大一个常数倍。原因是 ETC 的探索量是事先定死的,UCB 则根据数据随时调整:差距明显时早早停止探索,差距不明显时继续收集证据。
- 任何固定的 ,最坏情况都明显比 UCB1 差。
那为什么 A/B 测试仍然被广泛使用? 它简单、容易解释,方便做严格的统计检验(“B 版本显著更好,p < 0.05”),而且实验结束后决策就固定了,便于工程实施。如果目标是”弄清楚哪个版本更好”(纯探索/最优臂识别),A/B 测试很合理;如果目标是”实验期间的总收益”(遗憾最小化),老虎机算法通常更好。两个目标不同,最优的算法也不同。
💡 写代码时的一个坑:如果 ETC 在探索结束后每一步都重新选”经验均值最高的臂”,那么承诺的臂的均值会继续更新,选错了还能被纠正——这就变成了”强制探索 + 贪心”,不再是 ETC。本讲代码的第一版就犯了这个错误,导致 ETC 看起来比 UCB 还好。正确的实现只在探索刚结束时做一次决定(见
bandits.py中explore_then_commit的注释)。当实验结果”好得出乎意料”时,先检查代码。
8. 从老虎机到强化学习
8.1 乐观原则贯穿全课
| 讲次 | 乐观原则的体现 |
|---|---|
| 第 4 讲 | 乐观初始化 Q 值(本讲 3.3 节看到了它的局限) |
| 第 11 讲 | UCB:给每个动作加一个随不确定性减小的”探索奖励” |
| 第 13 讲 | MDP 中的乐观:R-max、MBIE-EB(给每个状态-动作对加探索奖励) |
| 第 14 讲 | UCT:把 UCB 用在搜索树的每个节点上(AlphaGo 的核心) |
| 深度 RL | 基于计数的探索奖励、好奇心驱动的探索 |
8.2 乐观与悲观
第 10 讲的离线 RL 用的是悲观:置信下界。本讲的在线学习用的是乐观:置信上界。同一个置信区间,两种用法:
- 能收集新数据时,高估一个动作的代价是”试一次,发现不好”——有限且可纠正。乐观让我们去验证那些”可能很好”的动作。
- 不能收集新数据时,高估的代价是”部署一个坏策略”——无法纠正。悲观让我们只信任有数据支持的动作。
8.3 从老虎机到 MDP,难在哪里?
老虎机中,选择只影响当前奖励和我们学到的信息。在 MDP 中:
- 选择会改变状态,有些状态只有经过一长串特定动作才能到达——探索需要有计划;
- 奖励可能延迟很久才出现;
- 需要学的不只是 个数,而是整个转移与奖励模型。
第 13 讲将讨论这些问题。在那之前,下一讲介绍另一种完全不同的探索思路:贝叶斯方法与汤普森采样。
9. 本讲总结
9.1 核心概念清单
- 多臂老虎机:只有一个状态的 RL,完整保留了探索与利用的矛盾。
- 遗憾:;看它随 的增长速度。
- 贪心:可能永远卡在次优臂上,线性遗憾。
- -贪心:永不停止的探索,线性遗憾,后期每步遗憾 ;最佳 依赖 。
- 递减 、乐观初始化:参数隐含对问题难度的假设,猜错就可能认错最好的臂。
- 霍夫丁不等式:;置信宽度 。
- UCB1:;面对不确定性时保持乐观;遗憾 ;不需要知道差距。
- Lai–Robbins 下界:;KL 散度衡量区分两个臂的难度。
- KL-UCB:用 KL 散度构造上界,渐近最优;成功率接近 0 或 1 时远胜 UCB1。
- 两种遗憾界:与问题有关 ;与问题无关 ,下界 。
- ETC / A/B 测试:探索量事先定死,即使调到最优也不如 UCB;但它适合”纯探索”的目标。
9.2 公式速查表
| 名称 | 公式 |
|---|---|
| 差距 | |
| 遗憾分解 | |
| -贪心的遗憾下界 | |
| 霍夫丁不等式 | |
| 置信上界 | ,概率 |
| UCB1 | |
| UCB1 遗憾界 | |
| 伯努利 KL | |
| Lai–Robbins | |
| KL-UCB | |
| 与问题无关的界 | ;下界 |
| Pinsker 不等式 |
9.3 中英术语对照表
| 中文 | 英文 | 中文 | 英文 |
|---|---|---|---|
| 多臂老虎机 | Multi-armed bandit | 臂 | Arm |
| 遗憾 | Regret | 伪遗憾 | Pseudo-regret |
| 差距 | Gap / suboptimality gap | 线性遗憾 | Linear regret |
| 次线性遗憾 | Sublinear regret | 对数遗憾 | Logarithmic regret |
| 贪心 | Greedy | 乐观初始化 | Optimistic initialization |
| 递减 ε-贪心 | Decaying ε-greedy | 霍夫丁不等式 | Hoeffding’s inequality |
| 置信上界 | Upper confidence bound (UCB) | 面对不确定性时保持乐观 | Optimism in the face of uncertainty |
| 探索奖励 | Exploration bonus | 一致的算法 | Consistent algorithm |
| 渐近最优 | Asymptotically optimal | 与问题有关的界 | Problem-/gap-dependent bound |
| 与问题无关的界 | Problem-independent / minimax bound | 先探索后承诺 | Explore-then-commit (ETC) |
| 纯探索 | Pure exploration | 最优臂识别 | Best-arm identification |
10. 练习题
练习 1(遗憾分解):三臂老虎机,。某算法在 步中平均拉臂 2 共 50 次、拉臂 3 共 10 次。它的遗憾是多少?
参考答案
。遗憾 。注意:拉差距小的臂 50 次与拉差距大的臂 10 次,贡献的遗憾差不多。
练习 2(贪心的失败概率):两臂伯努利老虎机,。贪心先各拉一次。计算”最好的臂第一次得到 0、另一个臂第一次得到 1”的概率。这种情况发生后,贪心还会再拉臂 1 吗?
参考答案
。发生后,臂 1 的经验均值为 0,臂 2 为 1。之后贪心一直拉臂 2,它的经验均值收敛到 0.5 但永远大于 0(只要有一次成功,均值就是正的),所以臂 1 永远不会再被拉。遗憾 ,线性。
练习 3(ε-贪心):在默认老虎机上(), 的 -贪心在 时的遗憾大约是多少?UCB1()呢?(后者可以用 和对数增长粗略估计。)
参考答案
-贪心:(加上前期的少量额外遗憾)。UCB1:对数增长,(实际会略多,因为有低阶项,但量级在一两百)。相差约 100 倍,而且 越大差距越大。
练习 4(霍夫丁不等式):要以 99% 的把握保证一个臂的经验均值与真实均值相差不超过 0.05,需要拉多少次?
参考答案
双侧:, → 次。
练习 5(UCB 的直觉):在 5.3 节 的表格中,臂 1 和臂 2 被拉的次数差不多(195 与 189),尽管臂 2 的真实成功率更高(0.5 vs 0.4)。为什么?
参考答案
在这次实验中,臂 2 的经验均值被低估了(0.429,真实值 0.5),而臂 1 被稍微高估(0.436,真实值 0.4)。UCB 只根据经验均值和次数做决定,它”看到”的两个臂差不多,所以拉的次数也差不多。随着 继续增长,两者的估计都会收敛,被拉的次数也会逐渐与 成比例。这也说明:单次实验中的具体数字有随机性,结论要看多次实验的平均。
练习 6(下界):两臂老虎机 和 ,差距都是 0.1。分别计算 Lai–Robbins 常数 。哪个更难?为什么?
参考答案
,。 ,。 第一个更难。成功率接近 0.5 时方差最大,同样的差距更难区分;成功率低时方差小,差距 0.1 相对更”明显”。而霍夫丁不等式对两者一视同仁(都按 算),所以 UCB1 在第二个问题上会过度探索。
练习 7(与问题无关的界):用 7.2 节的方法推导:若每个次优臂被拉的次数不超过 ,则遗憾不超过 。
参考答案
对任意 :差距 的臂,总遗憾 ;差距 的臂,每个贡献 ,总共不超过 。所以 。取 使两项相等,得 。
练习 8(动手)★:在 ucb1 中把 np.log(t) 换成常数 np.log(L)(置信宽度不再随时间增长),取 ,在困难的老虎机上运行 。分别试 ,重复 1000 次。平均遗憾、最大遗憾和”认错”的比例如何变化?为什么 必须随时间增长?
参考答案
实测结果(1000 次重复):
| 置信宽度中的对数项 | 平均遗憾 | 最差 1% 实验 | 最大遗憾 | 认错比例 |
|---|---|---|---|---|
| (标准 UCB) | 173.8 | 310.5 | 363 | 0.0% |
| (常数) | 112.0 | 229.7 | 430 | 0.0% |
| (常数) | 98.0 | 268.2 | 3043 | 0.7% |
| (常数) | 139.7 | 3015.8 | 3052 | 2.9% |
出人意料的是:在这个规模上,常数 的平均表现反而更好(置信区间更窄,探索更少),1000 次实验中也没有一次卡住。但常数越小,卡住的实验越多;卡住的实验遗憾约 3000 ≈ ,是线性的。
原因:宽度不随时间增长时,一个被低估的好臂一旦上界低于次优臂的均值,就再也不会被重试,卡住的概率是一个固定的正数。 时这个概率很小,1000 次实验里看不到,但只要 足够长,期望遗憾终究是线性的。 的缓慢增长让”上界失效”的概率随时间趋于 0,保证每个臂都会被无限次重试(尽管频率越来越低)。这是可证明的保证与有限次实验中的表现之间的又一个例子:小概率的灾难在几百次实验里可能根本看不到。
练习 9(思考题):一家公司想用老虎机算法替代 A/B 测试来选择网页设计。列出至少两个 A/B 测试更合适的理由,和两个老虎机算法更合适的理由。
参考答案
A/B 测试更合适:(1) 目标是得出可靠的科学结论(比如”新设计提高了转化率”),需要严格的统计检验和对照组,而老虎机算法的数据分配是自适应的,会让标准的统计检验失效;(2) 决策需要一次性做出、之后长期固定(比如改版需要大量工程投入);(3) 奖励有延迟(比如 30 天留存率),自适应分配难以实施。 老虎机更合适:(1) 实验期间的收益很重要(比如促销期只有几天,每个用户都是真金白银);(2) 选项很多(几十个标题),A/B 测试给每个选项平均分配流量太浪费;(3) 环境在变化,需要持续地学习和调整。
11. 延伸阅读
- CS234 Spring 2024 Lecture 11–12 录像与课件。
- Lattimore & Szepesvári (2020),Bandit Algorithms:老虎机理论最全面的教材,作者网站可免费下载。第 6–10 章对应本讲。
- Auer, Cesa-Bianchi & Fischer (2002),Finite-time Analysis of the Multiarmed Bandit Problem:UCB1 与递减 -贪心的原始论文。
- Lai & Robbins (1985),Asymptotically Efficient Adaptive Allocation Rules:遗憾下界。
- Garivier & Cappé (2011),The KL-UCB Algorithm for Bounded Stochastic Bandits and Beyond。
- Sutton & Barto,第 2 章:多臂老虎机(更偏直觉,含乐观初始化、梯度老虎机等)。
- Slivkins (2019),Introduction to Multi-Armed Bandits:另一本简明的免费教材。
12. 下一讲预告
UCB 是一种频率学派的方法:它不对未知的 做任何假设,只用”最坏情况”的集中不等式来构造置信区间。
如果我们对 有一些先验知识呢?比如,“新广告的点击率通常在 1%~5% 之间”。下一讲介绍贝叶斯的思路:
- 用概率分布表示对每个臂的”信念”,每观察一次奖励就用贝叶斯公式更新它(Beta–Bernoulli 共轭先验);
- 汤普森采样:从信念中随机抽一个”可能的世界”,然后在那个世界里做最优的选择。它出奇地简单,却和 KL-UCB 一样渐近最优,在实践中常常更好;
- 贝叶斯遗憾:在”问题本身是随机抽出来的”时,平均表现如何;
- 上下文老虎机:每个用户不一样时,怎样利用用户的特征(LinUCB)。
下一讲之前,建议你:跑通 code/lecture11/ 下的 3 个脚本,完成练习 1、2、4、6,并尝试练习 8。