第 12 讲:探索 II——贝叶斯方法与汤普森采样

Reinforcement Learning · Lecture 12。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应:Stanford CS234 Lecture 12–13(Bayesian Bandits, Thompson Sampling, Contextual Bandits) 配套代码:code/lecture12/(只需 numpy) 预计阅读时间:3.5 小时


0. 本讲导航

0.1 本讲要回答的问题

如果对未知的世界有一些先验的信念,能不能探索得更好?

第 11 讲的 UCB 属于频率学派:它不对未知的成功率 μa\mu_a 做任何假设,只用”对所有分布都成立”的集中不等式来构造置信区间。这很稳健,但也有代价:

  • 它无法利用先验知识。一个做了十年广告的工程师知道”新广告的点击率通常在 1%~5%“,UCB 却只能从”什么都不知道”开始。
  • 它的置信区间是按最坏情况构造的,往往偏保守。

贝叶斯方法换了一个角度:把未知量本身看作随机变量,用概率分布表示我们对它的信念,看到数据就用贝叶斯公式更新这个信念。在此基础上,有一个异常简单、却异常有效的探索策略——汤普森采样:

从信念中随机抽一个”可能的世界”,然后在这个世界里做最优的选择。

它提出于 1933 年(比 UCB 早了近 70 年),却沉寂了几十年,直到 2010 年前后才被重新发现,如今是工业界最常用的探索算法之一。

0.2 学完本讲,你应该能够

  1. 用贝叶斯公式描述”先验 → 数据 → 后验”,解释 Beta–Bernoulli 共轭及其”虚拟计数”的含义。
  2. 解释先验在数据少时和数据多时的不同作用,以及错误先验的后果。
  3. 描述汤普森采样,解释概率匹配,说明它与贝叶斯贪心、UCB 的区别。
  4. 区分频率学派遗憾与贝叶斯遗憾,了解汤普森采样的理论保证。
  5. 说出汤普森采样在实践中的优势(简单、批量反馈下稳健)与风险(依赖先验)。
  6. 形式化上下文老虎机,推导 LinUCB 的置信上界,描述线性汤普森采样。

0.3 先修知识

知识点用在哪里最低要求
第 11 讲:遗憾、UCB、Lai–Robbins 下界全讲必须
条件概率、贝叶斯公式 P(A∣B)=P(B∣A)P(A)/P(B)P(A \mid B) = P(B \mid A) P(A)/P(B)第 1、2 节必须
概率密度、均值、方差第 2 节必须
线性回归、最小二乘第 6 节知道”用直线拟合数据”即可
矩阵乘法、逆矩阵第 6 节会算 x⊤Axx^\top A x

0.4 本讲地图

第1节 贝叶斯视角:把未知量看作随机变量
   │
第2节 Beta–Bernoulli 共轭:更新只需要加法;先验的作用
   │
第3节 汤普森采样:抽一个可能的世界;概率匹配
   │
第4节 理论:贝叶斯遗憾与频率学派遗憾;贝叶斯最优的探索
   │
第5节 实践:先验的影响、批量反馈、非共轭模型
   │
第6节 上下文老虎机:LinUCB 与线性汤普森采样

1. 贝叶斯视角

1.1 两种看待不确定性的方式

硬币正面朝上的概率 μ\mu 未知。抛了 10 次,7 次正面。

  • 频率学派:μ\mu 是一个固定的、未知的数。我们能说的是:“如果重复这个实验很多次,按这个方法构造的区间,有 95% 的时候会包含真值”(置信区间)。
  • 贝叶斯学派:μ\mu 本身是不确定的,用一个概率分布来描述”我相信 μ\mu 是多少”。我们能说的是:“给定这些数据,μ\mu 在 [0.4, 0.9] 之间的概率是 90%“(可信区间)。

两者在数据很多时通常给出相近的结论,但在数据很少、或者有先验知识时,会有明显的差异。

1.2 贝叶斯公式

p(μ∣D)⏟后验=p(D∣μ)⏞似然  p(μ)⏞先验p(D)∝p(D∣μ) p(μ)\underbrace{p(\mu \mid \mathcal{D})}_{\text{后验}} = \frac{\overbrace{p(\mathcal{D} \mid \mu)}^{\text{似然}}\; \overbrace{p(\mu)}^{\text{先验}}}{p(\mathcal{D})} \propto p(\mathcal{D} \mid \mu)\, p(\mu)
  • 先验 p(μ)p(\mu):看数据之前的信念;
  • 似然 p(D∣μ)p(\mathcal{D} \mid \mu):如果真值是 μ\mu,观察到这些数据的可能性有多大;
  • 后验 p(μ∣D)p(\mu \mid \mathcal{D}):看了数据之后的信念。

“后验 ∝ 似然 × 先验”:那些能很好地解释数据、又符合先验认识的 μ\mu,后验概率高。

1.3 为什么老虎机需要贝叶斯?

老虎机的核心问题是:不确定的时候怎么办。后验分布恰好完整地描述了”我对每个臂有多不确定”——不只是一个区间,而是一整个分布:哪些值更可能,哪些值不太可能。有了它,我们就能问:“这个臂是最好的臂的概率有多大?“——汤普森采样正是围绕这个问题设计的。


2. Beta–Bernoulli 共轭

2.1 Beta 分布

μ∈[0,1]\mu \in [0, 1] 上最常用的分布是 Beta 分布:

Beta(μ;α,β)=μα−1(1−μ)β−1B(α,β),E[μ]=αα+β,Var[μ]=αβ(α+β)2(α+β+1)\mathrm{Beta}(\mu; \alpha, \beta) = \frac{\mu^{\alpha-1}(1-\mu)^{\beta-1}}{B(\alpha, \beta)}, \qquad \mathbb{E}[\mu] = \frac{\alpha}{\alpha+\beta}, \qquad \mathrm{Var}[\mu] = \frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}
  • Beta(1,1)\mathrm{Beta}(1, 1) 是 [0, 1] 上的均匀分布——“什么都不知道”;
  • α\alpha 大、β\beta 小:集中在 1 附近;反之集中在 0 附近;
  • α+β\alpha + \beta 越大,分布越窄(越确定)。

2.2 共轭:更新只需要加法

伯努利奖励:成功概率为 μ\mu,观察到 ss 次成功、ff 次失败,似然为 μs(1−μ)f\mu^s(1-\mu)^f。乘以 Beta 先验:

p(μ∣D)∝μs(1−μ)f⋅μα−1(1−μ)β−1=μα+s−1(1−μ)β+f−1p(\mu \mid \mathcal{D}) \propto \mu^s (1-\mu)^f \cdot \mu^{\alpha-1}(1-\mu)^{\beta-1} = \mu^{\alpha+s-1}(1-\mu)^{\beta+f-1}

这正是 Beta(α+s,β+f)\mathrm{Beta}(\alpha + s, \beta + f)!

先验 Beta(α,β)  +  s 次成功、f 次失败  ⟶  后验 Beta(α+s,  β+f)\boxed{\text{先验 } \mathrm{Beta}(\alpha, \beta) \;+\; s \text{ 次成功、} f \text{ 次失败} \;\longrightarrow\; \text{后验 } \mathrm{Beta}(\alpha + s,\; \beta + f)}

先验和后验属于同一个分布族,这叫共轭先验(conjugate prior)。它的好处是:更新只需要把成功次数加到 α\alpha 上、失败次数加到 β\beta 上,不需要任何积分。

代码 01_beta_bernoulli.py 演示 2 用最笨的方法——在 [0, 1] 的 2001 个网格点上逐点计算”先验 × 似然”再归一化——验证了公式,差异只有 10−1310^{-13} 量级(浮点误差)。而且后验只取决于成功和失败的次数,与顺序无关。

2.3 看后验如何演化

演示 1:真实成功率 μ=0.7\mu = 0.7,均匀先验:

看过的数据后验均值标准差90% 可信区间
n=0n = 0Beta(1, 1)0.5000.289[0.051, 0.950]
n=1n = 1Beta(2, 1)0.6670.236[0.224, 0.974]
n=5n = 5Beta(5, 2)0.7140.160[0.419, 0.937]
n=10n = 10Beta(7, 5)0.5830.137[0.350, 0.800]
n=50n = 50Beta(36, 16)0.6920.063[0.584, 0.793]
n=200n = 200Beta(128, 74)0.6340.034[0.577, 0.688]
  • 标准差大约按 1/n1/\sqrt n 缩小——与第 11 讲霍夫丁区间的宽度一致。两种语言描述的是同一件事。
  • 注意 n=200n = 200 时,90% 可信区间没有包含真值 0.7——这 200 个观察中恰好只有 63% 是成功。这并不矛盾:“90% 可信区间”本来就有约 10% 的时候不包含真值。后验描述的是”根据这些数据应该相信什么”,数据本身不走运时,后验也会跟着偏。

2.4 先验的作用:虚拟计数

后验均值

E[μ∣D]=α+sα+β+n\mathbb{E}[\mu \mid \mathcal{D}] = \frac{\alpha + s}{\alpha + \beta + n}

就像是先验提供了 α\alpha 次虚拟的成功和 β\beta 次虚拟的失败,然后与真实数据合并。先验的”分量”= α+β\alpha + \beta 次观察。

演示 3:一个新广告,真实点击率 3%(前 10 次展示中有 1 次点击,前 100 次中有 2 次):

先验(先验均值)n=0n=0n=10n=10n=100n=100n=1000n=1000n=5000n=5000
均匀 Beta(1,1)(0.500)0.5000.1670.0290.0350.031
了解行情 Beta(2,48)(0.040)0.0400.0500.0270.0340.031
错误但不固执 Beta(1,3)(0.250)0.2500.1430.0290.0350.031
错误且固执 Beta(50,50)(0.500)0.5000.4640.2600.0760.040
不用先验:点击数/展示数—0.1000.0200.0340.031
  • 数据少时,先验很重要:n=10n = 10 时直接用比例估计是 10%(真实值的 3 倍多),“了解行情”的先验给出 5%。
  • 数据终将压倒先验:n=5000n = 5000 时,除了最固执的先验,所有估计都收敛到真实值附近。
  • 固执的错误先验需要几千次数据才能纠正——它相当于”已经看过 100 次、一半被点击”。

2.5 可信区间可信吗?

演示 4:真实点击率从 Beta(2, 48) 中随机抽取(模拟”很多个不同的广告”),每个广告看 50 次展示,重复 2000 次:

用来计算后验的先验90% 区间包含真值的比例区间平均宽度
正确的先验 Beta(2,48)90.4%0.061
均匀先验 Beta(1,1)88.8%0.096
错误且固执 Beta(50,50)0.0%0.127
霍夫丁区间(不用先验)100.0%0.346
  • 先验正确时,贝叶斯推断是校准的:90% 的区间恰好 90% 的时候包含真值。注意这个”90%“是对”从先验中抽出的所有问题”平均而言的。
  • 错误的先验会让你”自信地犯错”:区间被先验牢牢拉在 0.27~0.41 一带,从不包含真值——而你从后验本身完全看不出问题。
  • 霍夫丁区间从不出错,但宽得多——比真实点击率的整个范围还宽。

这就是频率学派与贝叶斯方法的根本取舍:前者不需要先验、有最坏情况保证,但保守;后者能利用先验知识、更高效,但依赖先验的正确性。


3. 汤普森采样

3.1 有了后验,怎么选臂?

每个臂都有一个后验 Beta(αa,βa)\mathrm{Beta}(\alpha_a, \beta_a)。三种自然的想法:

  1. 贝叶斯贪心:选后验均值最高的臂。——丢掉了不确定性,又回到贪心。
  2. 贝叶斯 UCB:选后验某个高分位数(比如 1−1/t1 - 1/t 分位数)最高的臂。——UCB 的贝叶斯版本。
  3. 汤普森采样:从每个臂的后验中随机抽一个样本,选样本最大的臂。

3.2 算法

汤普森采样(Beta–Bernoulli)

对每个臂 aa,初始化 αa=βa=1\alpha_a = \beta_a = 1(或其他先验)。 对 t=1,2,…,Tt = 1, 2, \dots, T:

  1. 对每个臂抽样 θ~a∼Beta(αa,βa)\tilde\theta_a \sim \mathrm{Beta}(\alpha_a, \beta_a)
  2. 拉臂 at=arg⁡max⁡aθ~aa_t = \arg\max_a \tilde\theta_a,观察奖励 rt∈{0,1}r_t \in \{0, 1\}
  3. 更新:αat+=rt\alpha_{a_t} \mathrel{+}= r_t,βat+=1−rt\beta_{a_t} \mathrel{+}= 1 - r_t

就这么简单。更一般的形式适用于任何模型:

从后验中抽一个”可能的世界”(模型参数)θ~∼p(θ∣D)\tilde\theta \sim p(\theta \mid \mathcal{D}),然后执行在这个世界里最优的动作。

这个”后验采样”的思想,第 13 讲会推广到 MDP(PSRL)。

3.3 为什么有效?概率匹配

汤普森采样选臂 aa 的概率是多少?它选 aa 当且仅当 aa 的样本最大。而每个样本都来自后验,所以

P(汤普森采样选 a)=P(θ~a=max⁡bθ~b)=P(臂 a 是最好的臂∣D)P(\text{汤普森采样选 } a) = P\left(\tilde\theta_a = \max_b \tilde\theta_b\right) = P(\text{臂 } a \text{ 是最好的臂} \mid \mathcal{D})

每个臂被选中的概率 = 根据目前的数据,它是最好的臂的后验概率。这叫概率匹配(probability matching)。

代码 02_thompson_sampling.py 演示 1 取了一次实验第 60 步的状态,用数值积分独立计算 P(a 最好)=∫pa(x)∏b≠aFb(x) dxP(a \text{ 最好}) = \int p_a(x) \prod_{b \ne a} F_b(x)\, dx,与汤普森采样抽 20 万次的选择频率对照:

臂拉的次数成功后验后验均值P(最好)P(\text{最好})(数值积分)汤普森采样选它的频率
052Beta(3, 4)0.4290.06390.0632
120Beta(1, 3)0.2500.02370.0242
241Beta(2, 4)0.3330.02790.0268
3169Beta(10, 8)0.5560.10730.1071
43324Beta(25, 10)0.7140.77720.7787

两列几乎完全相同。而在同一个状态下:

  • 贝叶斯贪心选臂 4(后验均值最高),每次都选它;
  • UCB1(c=2c = 2)选臂 1——只拉过 2 次、2 次都失败,但它最不确定,上界最高;
  • 汤普森采样大部分时候选臂 4,偶尔按概率试试其他臂,选臂 1 的概率只有约 2%。

UCB 按”可能有多好”探索;汤普森采样按”有多大可能是最好的”探索。 这是两种不同的”乐观”:UCB 对每个臂都取最乐观的值;汤普森采样只是”随机地乐观”——不确定的臂的样本时高时低,偶尔抽到高值时被探索一下。

3.4 抽样本 = 全部的探索

演示 3 中,贝叶斯贪心与汤普森采样用的是完全相同的后验,唯一的区别是”取均值”还是”抽样本”:

策略默认老虎机 R(105)R(10^5)最差 1% 实验点击率老虎机 R(105)R(10^5)最差 1% 实验
汤普森采样62.9145.765.8140.0
贝叶斯贪心5510.329999.2417.92000.4

贝叶斯贪心的遗憾线性增长,最差的实验卡死在次优臂上。抽样本这一步,就是全部的探索。

3.5 后验如何演化

演示 2 用字符画出了一次实验中每个臂后验的形状。到 t=10000t = 10000 时:最好的臂(被拉了 9334 次)的后验是一个紧贴 0.7 的尖峰;差的臂只被拉了 10~58 次,后验仍然很宽。汤普森采样不在乎把差的臂估计得多准——只要它们的后验”几乎不可能超过最好的臂”就够了。探索是为了决策,不是为了精确估计。这一点与 UCB 完全一致(第 11 讲 5.3 节”上界齐平”)。


4. 理论

4.1 两种遗憾

  • 频率学派遗憾:固定一个老虎机 μ\mu,看算法在它上面的遗憾 Regret(T;μ)\mathrm{Regret}(T; \mu)。第 11 讲用的就是它。
  • 贝叶斯遗憾:老虎机本身是从先验 p(μ)p(\mu) 中随机抽出来的,看平均的遗憾: BayesRegret(T)=Eμ∼p(μ)[Regret(T;μ)]\mathrm{BayesRegret}(T) = \mathbb{E}_{\mu \sim p(\mu)}\left[\mathrm{Regret}(T; \mu)\right]

前者要求”在每一个问题上都好”,后者只要求”在典型的问题上平均地好”。

4.2 汤普森采样的理论保证

  • 频率学派(Agrawal & Goyal, 2012;Kaufmann, Korda & Munos, 2012):对伯努利老虎机,使用均匀先验的汤普森采样满足 lim⁡T→∞Regret(T)ln⁡T=∑a:Δa>0Δakl(μa,μ∗)\lim_{T\to\infty}\frac{\mathrm{Regret}(T)}{\ln T} = \sum_{a:\Delta_a>0}\frac{\Delta_a}{\mathrm{kl}(\mu_a, \mu^*)} 恰好达到 Lai–Robbins 下界——与 KL-UCB 一样渐近最优。这是一个令人惊讶的结果:一个贝叶斯算法,在频率学派的标准下也是最优的。
  • 贝叶斯(Russo & Van Roy, 2014, 2016):对任何先验,BayesRegret(T)=O(KTlog⁡K)\mathrm{BayesRegret}(T) = O(\sqrt{KT\log K})。他们的”信息比率”分析给出了一个优美的解释:汤普森采样每承受一单位的遗憾,就获得足够多的关于”哪个臂最好”的信息。

4.3 实验:频率学派遗憾

演示 3(T=105T = 10^5,重复 100 次):

策略默认老虎机 R(105)R(10^5)R/ln⁡TR/\ln T点击率老虎机 R(105)R(10^5)R/ln⁡TR/\ln T
汤普森采样(均匀先验)62.95.565.85.7
KL-UCB93.48.1109.99.5
UCB1(c=0.5c = 0.5)104.59.1409.635.6
UCB1(c=2c = 2)390.533.9783.068.0
Lai–Robbins 常数 CC9.215.4
  • 汤普森采样的遗憾比渐近最优的 KL-UCB 还小约三分之一到五分之二。两者渐近地同样最优,但在有限的 TT 下,汤普森采样往往表现更好。
  • 它的 R/ln⁡TR/\ln T 低于 CC——和第 11 讲一样,下界是 T→∞T\to\infty 的渐近结论。
  • 而且它的计算量很小:每步只需要抽 KK 个 Beta 样本;KL-UCB 每步都要做二分查找(演示中汤普森采样快了约 8 倍)。

4.4 贝叶斯最优的探索:真正的”最优”是什么?

如果我们真的相信先验,那么”最优”的探索策略应该最小化贝叶斯遗憾(或最大化期望总奖励)。这可以写成一个 MDP:

  • 状态 = 当前的信念(所有臂的 (αa,βa)(\alpha_a, \beta_a));
  • 动作 = 拉哪个臂;
  • 转移 = 按后验预测的概率得到成功或失败,信念相应更新。

这叫信念 MDP(或贝叶斯自适应 MDP)。它的最优策略完美地权衡了探索与利用——探索的价值就是”信息在未来能带来的额外奖励”,被精确地计算在价值函数里。

问题在于:信念状态的数量随时间爆炸,一般无法求解。一个著名的例外是Gittins 指数(1979):对于折扣的无限视界、各臂独立的老虎机,最优策略可以分解为”每个臂单独算一个指数,选指数最大的”。但它不能推广到有限视界、相关的臂或 MDP。

汤普森采样可以看作对贝叶斯最优策略的一个简单、可计算的近似:它不去解信念 MDP,而是”假装”抽到的世界是真的,然后在其中贪心。它不是贝叶斯最优的,但遗憾的阶数是最优的。


5. 实践中的汤普森采样

5.1 先验的影响

演示 4:500 个随机的点击率老虎机(每个 10 个臂,点击率从 Beta(2, 48) 抽取,平均 4%),T=104T = 10^4:

策略R(102)R(10^2)R(103)R(10^3)R(104)R(10^4)最差 1% 实验
TS,正确的先验 Beta(2,48)4.726.065.9188.8
TS,均匀先验 Beta(1,1)4.932.787.5160.3
TS,过于乐观 Beta(20,20)5.147.8235.9316.2
TS,过于悲观 Beta(1,500)4.323.5187.6944.5
KL-UCB(不用先验)4.833.8119.7177.9
UCB1(c=0.5c = 0.5)4.943.0250.6336.2
  1. 正确的先验有帮助:贝叶斯遗憾比均匀先验小 25%。
  2. 均匀先验的汤普森采样依然很强:优于 KL-UCB,远优于 UCB1。“没有先验知识”时,用均匀先验是安全的选择。
  3. 过于乐观的先验(以为点击率在 50% 左右):每个臂都要先”失败”几百次,后验才会降到真实水平——探索过多,遗憾大但稳定。
  4. 过于悲观的先验(以为点击率只有 0.2%):前期看起来最好(很少探索),但探索不足——最差的实验遗憾极大,就像贪心”卡住”。

错误的先验,就是错误的探索强度。这与第 11 讲中 UCB 的 cc 太大或太小的现象完全对应。

5.2 批量反馈

真实系统中,奖励往往不是立刻反馈的:日志每小时汇总一次,模型每天更新一次。演示 5(默认老虎机,T=20000T = 20000,每 BB 步才把奖励告诉算法):

策略B=1B = 1B=10B = 10B=100B = 100B=1000B = 1000
汤普森采样45.846.452.2229.9
KL-UCB72.178.6126.3300.7
UCB1(c=0.5c = 0.5)80.987.5140.9304.0

B=100B = 100 时,UCB 类方法的遗憾明显上升,汤普森采样几乎不受影响。原因:

  • UCB 是确定性的——同一批里看到的数据都一样,它会把整批 100 次全部分给同一个臂;
  • 汤普森采样是随机的——同一批里每次抽样都不同,自然地把机会分散给几个”可能最好”的臂。

Chapelle & Li (2011) 在雅虎的新闻推荐和广告系统中发现了同样的现象,这是汤普森采样在工业界流行的重要原因。

5.3 超越共轭:近似后验

Beta–Bernoulli 之所以方便,是因为后验有公式。对于复杂的模型(比如用神经网络预测点击率),后验没有公式,需要近似:

  • 拉普拉斯近似:在后验的峰值附近用高斯分布近似;
  • 自助法(bootstrap)/ 集成:在数据的不同重采样上训练多个模型,随机选一个作为”后验样本”。第 13 讲会提到的 Bootstrapped DQN 就是这个思路;
  • 变分推断、MCMC:更一般但更昂贵的方法。

汤普森采样的思想——“从后验中抽一个可能的世界,然后在其中最优地行动”——不依赖于具体的近似方法。


6. 上下文老虎机

6.1 问题

在推荐系统中,不同的用户喜欢不同的东西。只找”平均最好的一篇文章”远远不够。

上下文老虎机(contextual bandit):每一步

  1. 观察一个上下文 xtx_t(用户特征:兴趣、历史、时间……);
  2. 选一个臂 ata_t;
  3. 得到奖励 rtr_t,其期望依赖于 (xt,at)(x_t, a_t)。

遗憾相对于”知道真实模型、对每个上下文都选最好的臂”的理想策略来计算。

它在 RL 谱系中的位置:上下文就像”状态”,但动作不影响下一个状态(下一个用户与你给这个用户推荐了什么无关)。所以它介于老虎机(只有一个状态)和完整的 RL(动作影响未来状态)之间。第 9 讲的 RLHF 其实也常被看作上下文老虎机:提示词是上下文,回答是动作,奖励模型给出奖励。

6.2 实验平台

代码 03_contextual_linucb.py 模拟新闻推荐:5 个兴趣话题,每个用户的兴趣 xx 是这 5 个话题上的比例(多数用户集中在一两个话题上);8 篇文章,每篇主要属于一个话题。用户 xx 点击文章 aa 的概率 =θa⊤x= \theta_a^\top x,其中 θa\theta_a 未知。

演示 1:上下文有多重要?(100 个随机环境的平均)

策略平均点击率
随机推荐0.130
永远推荐”平均最好”的那一篇0.158
按用户推荐最合适的文章(理想)0.297

看上下文能把点击率提高到 1.9 倍。任何不看用户的算法,即使完美地找到了”平均最好”的文章,每一步也比理想策略少 0.139 的点击率——相对于理想策略,遗憾是线性的。

6.3 线性模型与岭回归

假设期望奖励是上下文的线性函数:E[r∣x,a]=θa⊤x\mathbb{E}[r \mid x, a] = \theta_a^\top x。对每个臂,用它被选中时的数据做岭回归:

Aa=λI+∑t:at=axtxt⊤,ba=∑t:at=artxt,θ^a=Aa−1baA_a = \lambda I + \sum_{t: a_t = a} x_t x_t^\top, \qquad b_a = \sum_{t: a_t = a} r_t x_t, \qquad \hat\theta_a = A_a^{-1} b_a

线性模型的关键好处是泛化:所有用户共享同一组参数 θa\theta_a,一个体育迷的反馈也能帮助预测其他体育迷(甚至”体育 + 科技”的混合用户)的点击率——即使这个具体的兴趣组合从没出现过。

6.4 LinUCB:线性版的 UCB

置信椭球:可以证明,以高概率,真实的 θa\theta_a 落在以 θ^a\hat\theta_a 为中心的椭球 {θ:∥θ−θ^a∥Aa≤β}\{\theta : \|\theta - \hat\theta_a\|_{A_a} \le \beta\} 内,其中 ∥v∥A=v⊤Av\|v\|_A = \sqrt{v^\top A v}。

乐观的预测:在椭球内,对当前用户 xx 最乐观的预测是

max⁡∥θ−θ^a∥Aa≤βθ⊤x=θ^a⊤x+βx⊤Aa−1x\max_{\|\theta - \hat\theta_a\|_{A_a} \le \beta} \theta^\top x = \hat\theta_a^\top x + \beta\sqrt{x^\top A_a^{-1} x}

(由柯西–施瓦茨不等式:(θ−θ^)⊤x=(θ−θ^)⊤A1/2A−1/2x≤∥θ−θ^∥A⋅∥x∥A−1(\theta - \hat\theta)^\top x = (\theta - \hat\theta)^\top A^{1/2} A^{-1/2} x \le \|\theta - \hat\theta\|_A \cdot \|x\|_{A^{-1}}。)

LinUCB(Li, Chu, Langford & Schapire, 2010):选 at=arg⁡max⁡a[θ^a⊤xt+αxt⊤Aa−1xt]a_t = \arg\max_a \left[\hat\theta_a^\top x_t + \alpha\sqrt{x_t^\top A_a^{-1} x_t}\right]

x⊤Aa−1x\sqrt{x^\top A_a^{-1} x} 的含义:在当前用户的兴趣方向上,文章 aa 有多少数据。AaA_a 累积了 xx⊤x x^\top——在某个方向上观察得越多,AaA_a 在这个方向上越”大”,Aa−1A_a^{-1} 越”小”,不确定性越小。一篇从没推荐给体育迷的文章,对体育迷的不确定性很大,即使它已经被科技迷点击过很多次。

当 xx 是独热向量(每个用户就是一个”类型”)时,x⊤Aa−1x=1/(λ+Na)x^\top A_a^{-1} x = 1/(\lambda + N_a),LinUCB 退化为普通的 UCB。

线性汤普森采样(Agrawal & Goyal, 2013):从近似后验 θ~a∼N(θ^a,v2Aa−1)\tilde\theta_a \sim \mathcal{N}(\hat\theta_a, v^2 A_a^{-1}) 中抽样,选 arg⁡max⁡aθ~a⊤xt\arg\max_a \tilde\theta_a^\top x_t。(实现上的小技巧:θ~a⊤x\tilde\theta_a^\top x 服从 N(θ^a⊤x,v2x⊤Aa−1x)\mathcal{N}(\hat\theta_a^\top x, v^2 x^\top A_a^{-1} x),直接对得分抽样即可,不需要对 θ\theta 做矩阵分解。)

实现上的另一个技巧:每一步都要用 Aa−1A_a^{-1},每次重新求逆太慢。加入一个数据点时,用 Sherman–Morrison 公式在 O(d2)O(d^2) 内更新逆矩阵:

(A+xx⊤)−1=A−1−(A−1x)(A−1x)⊤1+x⊤A−1x(A + xx^\top)^{-1} = A^{-1} - \frac{(A^{-1}x)(A^{-1}x)^\top}{1 + x^\top A^{-1}x}

6.5 实验

演示 2(T=104T = 10^4,100 个随机环境的平均):

算法R(1000)R(1000)R(10000)R(10000)最后 1000 步每步遗憾
UCB1(不看用户)162.51558.10.1529
按用户类型分组的 UCB1110.9466.40.0271
岭回归 + ε-贪心(ε=0.05\varepsilon = 0.05)87.2314.80.0159
岭回归 + 贪心112.11006.50.0978
LinUCB(α=0.5\alpha = 0.5)52.8157.20.0077
线性汤普森采样(v=0.2v = 0.2)56.5170.80.0082
  1. 不看用户的 UCB1:最后每步遗憾停在”上下文的价值”(0.139)附近——线性遗憾。
  2. 按用户类型分组(把用户按”最感兴趣的话题”分成 5 类,每类单独跑 UCB1):好了很多,但把兴趣混合的用户粗暴地归为一类,各类之间也不共享信息。
  3. 线性模型 + 好的探索(LinUCB、线性 TS):遗憾最小。
  4. 线性模型本身不解决探索问题:岭回归 + 贪心的遗憾是 LinUCB 的 6 倍多,最后每步遗憾停在 0.1 左右——卡住了。原因与普通老虎机一样:一开始所有文章的预测都是 0,某篇文章先被点击,它的预测变成正数,之后这类用户就一直被推荐它;其他文章从来没有机会。

探索强度(演示 3):

LinUCB 的 α\alpha00.10.51.02.0
R(10000)R(10000)1114.2458.8157.2157.9279.7
线性 TS 的 vv0.050.20.51.0
R(10000)R(10000)384.3170.8263.6540.0

与第 11 讲 UCB 的 cc 完全一样:太小探索不够(α=0\alpha = 0 就是贪心),太大探索过多。LinUCB 论文中的理论值 α=1+ln⁡(2/δ)/2≈2.4\alpha = 1 + \sqrt{\ln(2/\delta)/2} \approx 2.4(δ=0.05\delta = 0.05)偏保守。

6.6 真实世界

  • 雅虎首页新闻推荐(Li et al., 2010):LinUCB 的原始应用,相比不看上下文的方法点击率提升了 12.5%。
  • 离线评估:上下文老虎机的新策略通常先用历史日志做离策略评估(第 10 讲的重要性采样!),再上线。日志中记录每次推荐的概率,正是为了让这种评估成为可能。
  • 更复杂的模型:用神经网络代替线性模型时,探索需要近似的不确定性估计(集成、最后一层贝叶斯化等)。

7. 本讲总结

7.1 核心概念清单

  1. 贝叶斯视角:把未知量看作随机变量;后验 ∝ 似然 × 先验。
  2. Beta–Bernoulli 共轭:Beta(α,β)+(s,f)→Beta(α+s,β+f)\mathrm{Beta}(\alpha, \beta) + (s, f) \to \mathrm{Beta}(\alpha+s, \beta+f);先验 = α+β\alpha+\beta 次虚拟观察。
  3. 先验的作用:数据少时很重要,数据多时被压倒;正确的先验让推断校准,错误的先验让你”自信地犯错”。
  4. 汤普森采样:从后验抽样,选样本最大的臂;概率匹配:选 aa 的概率 = aa 最好的后验概率。
  5. 抽样本 = 探索:同一个后验,取均值(贝叶斯贪心)会卡住,抽样本则渐近最优。
  6. 理论:频率学派意义下渐近最优(达到 Lai–Robbins 下界);贝叶斯遗憾 O(KTlog⁡K)O(\sqrt{KT\log K})。
  7. 贝叶斯最优:信念 MDP,一般无法求解(Gittins 指数是特例);汤普森采样是它的一个可计算的近似。
  8. 实践:通常优于 UCB;批量反馈下稳健;错误先验 = 错误的探索强度。
  9. 上下文老虎机:动作不影响下一个上下文的”一步 RL”;线性模型让用户之间共享信息。
  10. LinUCB:θ^a⊤x+αx⊤Aa−1x\hat\theta_a^\top x + \alpha\sqrt{x^\top A_a^{-1}x},来自置信椭球;线性汤普森采样:从 N(θ^a,v2Aa−1)\mathcal{N}(\hat\theta_a, v^2 A_a^{-1}) 抽样。

7.2 公式速查表

名称公式
贝叶斯公式p(μ∣D)∝p(D∣μ) p(μ)p(\mu \mid \mathcal{D}) \propto p(\mathcal{D} \mid \mu)\, p(\mu)
Beta 均值、方差αα+β\frac{\alpha}{\alpha+\beta},αβ(α+β)2(α+β+1)\frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}
共轭更新Beta(α,β)→Beta(α+s,β+f)\mathrm{Beta}(\alpha, \beta) \to \mathrm{Beta}(\alpha + s, \beta + f)
后验均值(α+s)/(α+β+n)(\alpha + s)/(\alpha + \beta + n)
汤普森采样θ~a∼p(θa∣D)\tilde\theta_a \sim p(\theta_a \mid \mathcal{D}),at=arg⁡max⁡aθ~aa_t = \arg\max_a \tilde\theta_a
概率匹配P(at=a)=P(a 最优∣D)P(a_t = a) = P(a \text{ 最优} \mid \mathcal{D})
贝叶斯遗憾Eμ∼p(μ)[Regret(T;μ)]\mathbb{E}_{\mu\sim p(\mu)}[\mathrm{Regret}(T;\mu)]
岭回归Aa=λI+∑xx⊤A_a = \lambda I + \sum xx^\top,ba=∑rxb_a = \sum rx,θ^a=Aa−1ba\hat\theta_a = A_a^{-1}b_a
LinUCBθ^a⊤x+αx⊤Aa−1x\hat\theta_a^\top x + \alpha\sqrt{x^\top A_a^{-1}x}
线性 TSθ~a∼N(θ^a,v2Aa−1)\tilde\theta_a \sim \mathcal{N}(\hat\theta_a, v^2A_a^{-1})
Sherman–Morrison(A+xx⊤)−1=A−1−A−1xx⊤A−11+x⊤A−1x(A+xx^\top)^{-1} = A^{-1} - \frac{A^{-1}xx^\top A^{-1}}{1+x^\top A^{-1}x}

7.3 中英术语对照表

中文英文中文英文
先验Prior后验Posterior
似然Likelihood共轭先验Conjugate prior
可信区间Credible interval置信区间Confidence interval
虚拟计数Pseudo-counts校准Calibration
汤普森采样Thompson sampling后验采样Posterior sampling
概率匹配Probability matching贝叶斯遗憾Bayesian regret
信念 MDPBelief MDP贝叶斯自适应 MDPBayes-adaptive MDP
Gittins 指数Gittins index批量反馈Batched / delayed feedback
上下文老虎机Contextual bandit岭回归Ridge regression
置信椭球Confidence ellipsoidLinUCBLinear UCB
线性汤普森采样Linear Thompson sampling自助法Bootstrap

8. 练习题

练习 1(共轭更新):先验 Beta(2, 2),观察到序列 1, 0, 1, 1, 0, 1。后验是什么?后验均值是多少?与不用先验的估计相比如何?

参考答案

4 次成功、2 次失败 → Beta(6, 4),后验均值 0.6。不用先验的估计是 4/6 ≈ 0.667。先验 Beta(2,2) 相当于 2 次成功和 2 次失败的虚拟观察,把估计往 0.5 拉了一点。

练习 2(先验的分量):你认为一个新药的有效率大约是 30%,而且这个判断的”可靠程度”大约相当于看过 20 个病人。应该用什么 Beta 先验?

参考答案

α+β=20\alpha + \beta = 20,α/(α+β)=0.3\alpha/(\alpha+\beta) = 0.3 → Beta(6, 14)。

练习 3(概率匹配):两个臂,后验分别为 Beta(1, 1) 和 Beta(2, 1)。汤普森采样选第二个臂的概率是多少?(提示:P(θ2>θ1)=∫01p2(x)F1(x) dxP(\theta_2 > \theta_1) = \int_0^1 p_2(x) F_1(x)\, dx,其中 F1(x)=xF_1(x) = x,p2(x)=2xp_2(x) = 2x。)

参考答案

∫012x⋅x dx=2/3\int_0^1 2x \cdot x\, dx = 2/3。第二个臂拉过一次且成功了,它”是更好的臂”的后验概率是 2/3,汤普森采样就以 2/3 的概率选它。

练习 4(贝叶斯贪心):解释为什么贝叶斯贪心(选后验均值最高的臂)会有线性遗憾,尽管它用的是正确的后验。

参考答案

后验均值只是一个点估计,丢掉了不确定性。如果最好的臂早期运气不好,它的后验均值低于某个次优臂,贝叶斯贪心就不再拉它;它的后验因此不再更新,均值就一直偏低——与普通贪心卡住的机制完全相同(演示 3 中最差的实验遗憾接近 0.3×1050.3 \times 10^5)。后验”知道”自己不确定,但贪心的决策规则没有利用这个信息。

练习 5(错误的先验):用 5.1 节的结果解释:为什么过于悲观的先验在 T=103T = 10^3 时表现最好,在 T=104T = 10^4 时却很差?这与第 11 讲的哪个现象对应?

参考答案

悲观的先验(以为点击率只有 0.2%)让所有臂的后验样本都很低,一旦某个臂得到几次点击,它的后验就明显高于其他臂,算法很快”锁定”它,几乎不探索——短期内遗憾很小。但如果锁定的不是最好的臂,其他臂的后验在悲观先验的压制下很难抽到高值,纠正得很慢,最差的实验遗憾很大。这对应第 11 讲 UCB 的 cc 太小,以及乐观初始化的伪计数太小的情况:探索不足,平均看起来还行,但有”卡住”的风险。

练习 6(LinUCB 的退化):证明当上下文是独热向量 x=ejx = e_j(每个用户属于且只属于一个类型 jj)、λ=1\lambda = 1 时,LinUCB 等价于对每个用户类型单独运行一个 UCB,其中探索奖励为 α/1+Na,j\alpha/\sqrt{1 + N_{a,j}}。

参考答案

Aa=I+∑ejej⊤A_a = I + \sum e_j e_j^\top 是对角矩阵,第 jj 个对角元是 1+Na,j1 + N_{a,j}(类型 jj 的用户被推荐文章 aa 的次数)。bab_a 的第 jj 个分量是这些推荐中的点击总数 Sa,jS_{a,j}。所以 θ^a⊤ej=Sa,j/(1+Na,j)\hat\theta_a^\top e_j = S_{a,j}/(1+N_{a,j})(带一点正则的经验均值),ej⊤Aa−1ej=1/(1+Na,j)e_j^\top A_a^{-1}e_j = 1/(1+N_{a,j})。LinUCB 的得分就是 Sa,j/(1+Na,j)+α/1+Na,jS_{a,j}/(1+N_{a,j}) + \alpha/\sqrt{1+N_{a,j}}——每个类型一个独立的 UCB。线性模型的优势只在上下文不是独热时才体现:不同类型的用户通过共享的参数互相帮助。

练习 7(动手)★:在 03_contextual_linucb.py 中把用户兴趣的 Dirichlet 参数从 0.3 改成 3(用户兴趣更混合、更多样)。有研究指出,上下文足够多样时,贪心算法也能自然地探索。在这个环境里是这样吗?

参考答案

实测(100 个环境,T=104T = 10^4):

Dirichlet 参数上下文的价值(理想 − 最好的固定文章)贪心 R(104)R(10^4)ε-贪心分组 UCB1LinUCB线性 TS
0.30.297 − 0.158 = 0.1391013.6331.1470.9151.0167.9
30.198 − 0.158 = 0.040581.2236.2450.4166.1177.9

即使用户更多样,贪心仍然卡住:它最后 1000 步的每步遗憾约 0.057,比”不看用户、只推荐平均最好的文章”(每步遗憾 0.040)还差。原因是:上下文的多样性只能帮助已经被推荐过的文章把参数估计得更准;从没被推荐过的文章没有任何数据,它们的预测永远停在 0,多样的上下文也帮不了它们。“贪心也够用”的结论依赖于更强的条件(比如所有臂共享同一个参数向量,或每个臂一开始都有足够的数据),不能随便推广。

练习 8(思考题):第 9 讲的 RLHF 可以看作上下文老虎机(提示词 = 上下文,回答 = 动作)。在这个视角下,“探索”意味着什么?为什么 RLHF 中很少讨论探索?

参考答案

探索意味着生成一些”当前策略认为不太好、但可能更好”的回答,以获得关于奖励的信息。RLHF 中很少讨论探索,一是因为动作空间(所有可能的文本)极其巨大,语言模型的采样本身就带来了大量随机性;二是因为预训练模型提供了一个极强的”先验”,大多数有意义的回答已经在它的支撑集内;三是因为奖励模型在分布外不可信(第 9 讲的过度优化),过度探索反而危险——这时 KL 约束扮演的正是”不要离已知区域太远”的角色。近年来,为了提升推理能力,如何在语言模型中更有效地探索(比如鼓励多样的解题路径)正成为活跃的研究问题(第 16 讲)。


9. 延伸阅读

  • CS234 Spring 2024 Lecture 12–13 录像与课件。
  • Russo, Van Roy, Kazerouni, Osband & Wen (2018),A Tutorial on Thompson Sampling:最好的入门教程,含大量例子。
  • Chapelle & Li (2011),An Empirical Evaluation of Thompson Sampling:让汤普森采样重新流行的论文。
  • Agrawal & Goyal (2012, 2013),Analysis of Thompson Sampling for the Multi-armed Bandit Problem;Thompson Sampling for Contextual Bandits with Linear Payoffs。
  • Kaufmann, Korda & Munos (2012),Thompson Sampling: An Asymptotically Optimal Finite-Time Analysis。
  • Russo & Van Roy (2016),An Information-Theoretic Analysis of Thompson Sampling。
  • Li, Chu, Langford & Schapire (2010),A Contextual-Bandit Approach to Personalized News Article Recommendation(LinUCB)。
  • Lattimore & Szepesvári,Bandit Algorithms,第 19–20 章(线性老虎机)、第 34–36 章(贝叶斯方法与汤普森采样)。

10. 下一讲预告

到目前为止,所有的探索都发生在只有一个状态(或上下文与动作无关)的问题中。在真正的 MDP 中,探索要难得多:

  • 有些状态只有经过一长串特定的动作才能到达,随机探索几乎不可能碰到它们;
  • 探索的价值要考虑未来:去一个没见过的状态,可能打开一整片新的区域。

下一讲将把本讲和上一讲的两种思路推广到 MDP:

  • 乐观:R-max、MBIE-EB——给没见过的状态-动作对一个乐观的奖励,让智能体”有计划地”去探索;
  • 后验采样:PSRL——从 MDP 的后验中抽一个 MDP,按它的最优策略走一个回合;
  • PAC-MDP 框架与样本复杂度;
  • 深度 RL 中的探索:基于计数的奖励、好奇心。

我们会在一个著名的探索难题——RiverSwim——上看到 ε\varepsilon-贪心为什么会彻底失败。

下一讲之前,建议你:跑通 code/lecture12/ 下的 3 个脚本,完成练习 1、3、4、6,并尝试练习 7。

← 返回课程目录