设想一个场景:你出差到一个陌生城市,饥肠辘辘地站在美食街口,面前有十家餐厅。你只有七天的出差时间,每晚都要解决晚饭。你是每天去第一天吃过觉得不错的店,确保不踩雷?还是前三天把十家店全试一遍,找到真正的宝藏?这就是经典的“探索与利用困境”。探索是去没试过的店冒险,利用是去已验证的店安稳吃。 强化学习中的智能体也面临着同样的两难。它需要与未知环境互动以获得长期最大累积奖励。像你选择餐厅一样,选得太保守,可能永远发现不了隐藏的神店;选得太激进,可能天天踩雷饿肚子。UCB(Upper Confidence Bound)与 Thompson 采样就是两种帮你做出聪明选择的策略——一个像“带着期望值还考虑风险”的理性吃货,一个像“脑子里有张概率地图”的贝叶斯派美食家。 学完本章,你将理解探索利用困境的本质、UCB 置信区间的上界逻辑和 Thompson 采样的后验分布机制,并能将其实际应用于推荐系统、广告投放和游戏 AI 等业务中。
探索策略是强化学习中驱动智能体在“未知”与“最优”之间摆渡的核心引擎。掌握 UCB 与 Thompson 采样,你就能设计出在商业化产品中平衡新鲜感与用户满意度的智能决策系统——这是推荐、广告、风控领域 AI 工程师的核心竞争力之一。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
UCB——置信上界选择 经验均值:利用已知 探索项:不确定性 UCB = x̄ + c√(ln(t)/n) 选上界最高的臂
探索利用困境
我带着你站回美食街的十字路口。左边招牌写着“老张牛肉面”,你昨晚刚吃过,味道扎实,不惊艳但不会错;右边一条巷子黑漆漆的,据说藏着本地人最爱的深夜烧烤。你真该放弃已经很满意的牛肉面,去赌一把烧烤吗?这个问题在学术界有个响亮的名字——探索与利用困境。
在强化学习中,智能体的“餐厅”是一组可选择的动作,每个动作的奖励分布是未知的。它要最大化长期累积奖励,而不是只赢下眼前这一局。探索(Exploration)意味着选择那些历史反馈不多、但可能更好的动作;利用(Exploitation)则是选择当前已知最优的动作。只探索不利用,会让智能体徒劳地反复尝试垃圾选项;只利用不探索,会让它在变化的环境中逐渐落伍。
如何量化“输了多少”?学术上有个工具叫后悔度(Regret)。假设你已经知道全局最优动作的期望奖励是 $\mu^*$,而你实际每次选择动作 $i$ 得到的期望奖励是 $\mu_i$。到时间 $T$ 为止的累积后悔度为:
一个好的探索策略会让后悔度随 $T$ 增长得尽量慢(比如对数增长),而不是线性增长。回到美食街:如果你每天都换一家店试,吃了七天踩了五天雷,你的“后悔度”就很高。聪明的策略应该让你头几天多探索,后几天锁定神店。这就是为什么 UCB 和 Thompson 采样存在——它们是帮你把“后悔度曲线”压低的两套选餐心法。
- 最优期望累积$T\mu^*$ 表示:如果每一轮都选全局最优的那个动作,$T$ 轮下来的总期望收益。
- 实际期望累积$\sum_{t=1}^{T} \mu_{a_t}$ 表示:每一轮实际所选动作 $a_t$ 的期望奖励累加起来。
- 相减求后悔两者之差 $R_T$ 就是由于“选了次优动作”而损失的期望收益。
UCB置信上界
你站在老张牛肉面馆前,一个更细的心思冒出来:我虽然只吃过这家一次,但万一它其实超好吃呢?我只是这次运气差罢了。UCB 策略的精神正是:对样本少的店给予“乐观假设”的加分。它不满足于只看平均分,还要看“可能的上限”。
在算法层面,UCB1 为每个动作 $i$ 维护两个量:平均奖励 $\hat{\mu}_i$ 和被选次数 $n_i$。它用如下公式计算“乐观得分”:
其中 $t$ 是当前总步数。公式右边那一项就是“探索红利”:一个动作被选得越少($n_i$ 小),它的红利就越大,相当于系统给未知的店打了一剂“乐观强心针”。
你会注意到,$\ln t$ 增长很慢,所以探索红利会随着总时间增加而自然衰退。这正是 UCB 的优雅之处:前期把各家店都照顾到(高奖励高频奖励),后期逐渐收敛到明确最棒的那家。它不需要任何人工设定的“探索概率”,一切由公式自己控制。
- 经验均值$\hat{\mu}_i$ 是动作 $i$ 到目前为止的平均奖励。相当于餐厅目前展现在你面前的平均分。
- 探索半径$\sqrt{\frac{2\ln t}{n_i}}$ 是对“不确定性”的量化。$n_i$ 越小、$t$ 越大,这个半径越大,代表这家店“了解得越少,潜力越值得乐观”。
- 上界合计$U_i$ 是“平均分 + 探索红利”。UCB 每轮选择 $U_i$ 最大的动作。
Thompson采样
另一位美食家朋友给了你完全不同的建议——不要看“平均分加红利”,你应该在心里给每家店画一张“概率分布图”,然后每次从分布中随机抽一个数,挑选抽出的数最大的店去试。这位朋友就是 Thompson 采样。
Thompson 采样采用贝叶斯思维:对于每个动作 $i$,我们对其真实奖励概率 $p_i$ 持有一个先验信念。假设奖励服从伯努利分布(成功/失败),我们就可以用 Beta 分布作为信念的概率密度表示。设 $S_i$ 为成功次数,$F_i$ 为失败次数,则后验分布为:
每次决策时,Thompson 采样对每个 $i$ 从其 Beta 分布中采样一个 $\tilde{p}_i$,然后挑选 $\tilde{p}_i$ 最大的动作执行。
Thompson 采样的探索是“内生”的:对于一个样本少的动作,Beta 分布很扁,抽到各种值的概率都很大,因此有时会随机地抽到高分从而被选中;随着样本增多,分布变尖,采样逐渐集中在真实均值附近,探索自然减少。它不需要显式的探索项,一切由抽样的随机性自动完成。就像那位美食家朋友,他脑中每家的“美味概率地图”越精准,越敢于锁定目标,但仍然保留一点“换口味”的随机冲动。
- Beta 分布参数$\text{Beta}(\alpha, \beta)$ 里的 $\alpha$ 和 $\beta$ 分别代表“成功次数+1”和“失败次数+1”。
- 后验更新每观测到一次成功,$S_i$ 加 1;失败则 $F_i$ 加 1。这就是贝叶斯更新——用新证据修正旧信念。
- 从分布采样$\tilde{p}_i \sim \text{Beta}(S_i + 1, F_i + 1)$,每个动作抽一个随机值,取最大者。
策略对比分析
两位美食家,一位靠“公式给分”,一位靠“随机抽样”,谁更聪明?这取决于你如何定义聪明。
UCB 是确定性策略:给定同样的历史数据,计算出的上界是固定的,因此选择也是固定的。它的行为可预测、调试方便,适合对可解释性要求较高的场景。而 Thompson 采样是随机策略:每次从分布中抽取的结果不同,选择也有随机性,更接近人类决策中的“概率性直觉”,适合需要多样化探索的场景。
从数学性质上看,两者在“后悔度”上都有渐近最优保证。UCB1 的后悔度上界是 $O(\sqrt{KT\ln T})$,Thompson 采样同样能达到理论最优的对数后悔,且在许多实际模拟中收敛更快、波动更小:
用美食街的话说:UCB 像一个拿了评测机构的打分表下馆子的人,严谨、不会出错,但也可能错过“评分表外”的神店;Thompson 像一个信任自己味觉直觉的人,有时会冒险走进巷子深处。数据足够多时,两人的最终选择会高度重合;但在有限轮数内,Thompson 往往能在“踩雷”和“发现宝藏”之间找到更平滑的节奏。
- UCB 后悔上界$K$ 是动作数,$T$ 是总轮数,UCB 的后悔随 $T$ 增长受根号与对数共同约束。
- Thompson 后悔上界Thompson 采样的后悔只随 $T$ 对数增长,且对动作数 $K$ 线性依赖,理论更紧。
内在动机探索
如果美食街没有点评 App、没有朋友推荐,你还能依靠什么来引导探索?答案是:好奇心本身。这正是“内在动机”(Intrinsic Motivation)探索的思想源头。
在强化学习中,很多任务奖励稀疏——比如机器人开门,只有开门成功才给 1 分,中间几十步全是 0。此时外部奖励信号太弱,智能体学不到东西。内在动机探索的思路是:给智能体一个额外的内部奖励,奖励它做出“能带来新信息”的行为。最经典的做法是用“预测误差”作为内在奖励:
把这份内在奖励加到外部奖励上,智能体就会被“好奇心”驱动,主动探索那些它还没理解的环境区域。这正是 DeepMind 在 AI 玩《蒙特祖玛的复仇》等稀疏奖励游戏中取得突破的核心技巧之一。回到美食街:如果外部奖励是“吃饱的满足感”,那内在动机就像你内心的好奇——“这条巷子里到底有什么?”这股好奇心会推着你离开舒适区,走向更深处的未知。
- 状态特征$\phi(s_{t+1})$ 是真实下一状态的特征向量,比如画面中的像素统计、物体位置等抽象表示。
- 预测值$\hat{\phi}(s_{t+1}\mid s_t, a_t)$ 是智能体根据当前状态和执行的动作“猜出来的”下一状态特征。
- 误差平方对两者的差取平方,作为内部奖励:误差越大,说明这个“探索行动”带来的信息量越大,奖励越高。
业务落地实践
美食街的智慧最终要开成连锁店。探索策略在真实业务中最有代表性的落地场景是三处:推荐系统、广告投放和临床试验。
推荐系统冷启动是 UCB 与 Thompson 最典型的战场。新上架的商品没有点击数据,系统面临“要不要推荐它”的两难。用 Thompson 采样:对每个新品初始化一个 Beta 分布,用点击与展示来更新参数,推荐时采样选择。这样新品会在少量曝光中快速收敛出真实点击率,老品也不会被挤出首页。Netflix、YouTube 的早期排序层都使用过类似机制。
广告投放方面,互联网广告平台要在多个广告创意的“点击潜力”未知时做预算分配。传统 A/B 固定分流浪费流量,而 UCB 的“乐观上界”可以让低曝光创意快速获得试探,后续预算自动流向高潜力创意。实际业务中把单次曝光看作一次拉杆,把点击看作奖励即可,算法不必修改任何逻辑。
临床试验的自适应分组设计则更有社会价值。将病人随机分配到不同的候选药物组,以“治愈”为奖励,Thompson 采样可以动态调整每组入组比例,让更多病人被分到更有希望的药物组,同时不放弃对未知药物的探索。这在药物研发中既节约样本又更人道。
这些场景本质共享同一个骨架:有限预算(展示次数/投放花费/病患名额)、不确定的收益(点击/转化/治愈)、需要长期最大化的总收益。UCB 与 Thompson 的区别在业务上只需考虑——你的系统是否能接受随机性,以及你是否需要可解释的决策理由。
---
AI 应用场景
场景一:电商新品冷启动推荐
阶段:候选集排序 → 探索策略 → 端上展示
解决的问题:新品没有用户行为数据,按历史 CTR 排序会被永远埋没在长尾。传统方法随机批量曝光新品,浪费大量流量且用户体验差。AI 方法用 Thompson 采样为每个新品维护 Beta 分布,在推荐结果中穿插少量“探索位”,既保证老品稳定 CTR,又让新品在最少曝光下快速学习。
具体案例:某跨境电商平台在新品上架高峰期,用 Thompson 采样替代原来的“新品 7 天加权”策略,将新品 14 日累计曝光点击率提升 22%,同时全站 CTR 不降反升 1.3%。因为系统只对“数据不足的新品”启用探索,老品完全走利用路径。
场景二:广告投放预算分配
阶段:创意筛选 → 预算分配 → 效果回传
解决的问题:广告平台每天有大量新创意素材上传,无法预知哪个素材跑量效果好。传统人工赛马需要大量测试预算。AI 方法用 UCB 对每个创意计算“平均点击率 + 探索红利”,让没曝光过的素材获得小流量试探,积累数据后自动进入稳定扩量或淘汰通道。
具体案例:某信息流广告平台引入 UCB1 对 3000 个新创意进行 48 小时的自动赛马,将素材筛选时间从 5 天缩短到 2 天,测试成本降低 60%,投放整体 ROI 提升 18%。
场景三:智能推荐中的用户探索意图识别
阶段:用户画像 → 意图建模 → 动作选择
解决的问题:用户的兴趣会漂移,长期只推荐“最相关”内容会让用户陷入信息茧房。AI 方法把“探索”本身建模为用户的内在动机,用预测误差检测用户对内容的新鲜感需求,当推荐内容的点击预测与实际行为差异变大时,自动提高探索力度。
具体案例:某音乐 App 在“每日推荐”中引入基于探索策略的“惊喜度系数”,当用户对老歌单的播放完成率下降时,系统自动上调新曲库的抽样概率,次周用户平均使用时长提升 7.2 分钟/天。
Python 演示
import randomimport math class UCB1: def __init__(self, n_arms): self.n_arms = n_arms self.counts = [0] * n_arms self.values = [0.0] * n_arms def select(self, t): for arm in range(self.n_arms): if self.counts[arm] == 0: return arm ucb_values = [] for arm in range(self.n_arms): bonus = math.sqrt(2 * math.log(t) / self.counts[arm]) ucb_values.append(self.values[arm] + bonus) return max(range(self.n_arms), key=lambda i: ucb_values[i]) def update(self, arm, reward): self.counts[arm] += 1 n = self.counts[arm] self.values[arm] = (self.values[arm] * (n - 1) + reward) / n class ThompsonSampling: def __init__(self, n_arms): self.n_arms = n_arms self.successes = [1] * n_arms self.failures = [1] * n_arms def select(self, t): samples = [] for arm in range(self.n_arms): alpha = self.successes[arm] beta = self.failures[arm] samples.append(random.betavariate(alpha, beta)) return max(range(self.n_arms), key=lambda i: samples[i]) def update(self, arm, reward): if reward == 1: self.successes[arm] += 1 else: self.failures[arm] += 1 def simulate(bandit, probs, rounds=1000): total_reward = 0 for t in range(1, rounds + 1): arm = bandit.select(t) reward = 1 if random.random() < probs[arm] else 0 bandit.update(arm, reward) total_reward += reward return total_reward, bandit.counts if __name__ == "__main__": probs = [0.3, 0.5, 0.8, 0.4, 0.65] ucb = UCB1(len(probs)) thompson = ThompsonSampling(len(probs)) ucb_reward, ucb_counts = simulate(ucb, probs) thompson_reward, thompson_counts = simulate(thompson, probs) print("true probs:", probs) print("UCB reward:", ucb_reward, "counts:", ucb_counts) print("Thompson reward:", thompson_reward, "counts:", thompson_counts)
self.values[arm] = (self.values[arm] * (n - 1) + reward) / n增量式更新平均奖励,不需要保存历史全部奖励,节省内存。bonus = math.sqrt(2 * math.log(t) / self.counts[arm])这就是 UCB 的探索红利:选得越少、时间越长,附加分越大。max(range(self.n_arms), key=lambda i: ucb_values[i])找到上界最大的臂,作为本轮选择。random.betavariate(alpha, beta)从 Beta 分布中采样,这是 Thompson 采样“随机探索”的机制核心。if reward == 1: self.successes[arm] += 1 else: self.failures[arm] += 1贝叶斯更新,用新观测修正后验分布。for t in range(1, rounds + 1): arm = bandit.select(t)模拟主循环,每轮选臂、拿反馈、更新参数。
常见误区
误区探索策略就是要多尝试未知选项,那干脆每一轮都随机选一个动作好了,反正都是探索。
正解随机乱试是“均匀探索”,它不给任何“潜力”信息做加权。UCB 与 Thompson 的关键在于“聪明地探索”——用高置信上界或后验分布来聚焦那些“有机会成为最优”的动作。就像你会在“可能有神店”的巷口多转几圈,而不会全市每条街无差别逛街。均匀随机策略的后悔度线性增长,而聪明的探索策略可以做到对数增长,两者差距巨大。
为何常见:初学者容易把“探索”理解成“随机性”本身。实际上,UCB 几乎没有内置随机数,它的探索完全来自公式中的不确定性项。随机只是实现手段之一,不是探索的定义。
误区UCB 是理论界的老牌明星,Thompson 只是一个贝叶斯技巧,所以 UCB 总是更优。
正解两者在渐近意义上都是最优的,但在有限时间(也就是实际业务环境)内,Thompson 采样通常表现得更好。因为它把整个概率分布纳入决策,而不只是取一个上界值。具体选择要看场景:需要可解释、确定性决策用 UCB;需要更平滑的探索曲线、能接受随机性的用 Thompson。就像选餐厅,严谨的评分表与直觉型美食家各有所长。
为何常见:教材中 UCB1 出现更早、推导更完整,容易给人“正统”感。而 Thompson 采样的理论证明相对复杂,导致它被低估。
误区模型训练好了上线就不需要探索了,直接用贪心策略选最优动作就行。
正解现实业务环境是非平稳的:用户兴趣会变化,商品的吸引力会衰减,新内容会持续出现。如果模型上线后完全不做探索,系统会陷入“信息茧房”和“马太效应”——热门更热、冷门永远冷。因此成熟的推荐/广告系统会在线上保留一部分探索流量。比如淘宝的“潜力新品”坑位,本质就是一种业务化的探索策略。
为何常见:很多入门者是在“固定数据集”上学习的,没有接触过在线学习的反馈循环。他们误以为训练完结就等于智能体定型,忽略了在线探索是持续运转的引擎。
误区Thompson 采样就是用 Beta 分布,换一个分布就不行。
正解Beta 分布只是因为它是伯努利奖励的共轭先验,计算方便,所以最常见。理论上 Thompson 采样对任何参数分布都成立——高斯奖励就用高斯分布,Dirichlet 分布可以处理多分类。甚至可以用非参数方法。选 Beta 是因为“数学上顺手”,不是因为它有什么魔力。就像记录餐厅口碑,有人用五颗星,有人用百分制,本质都是拍脑袋——但这不影响决策框架本身。
为何常见:教材中几乎都用 Beta 分布举例,初学容易把“例子”当“定义”。
误区探索策略只是多臂老虎机的小玩具,和深度强化学习没什么关系。
正解恰恰相反,探索策略是深度强化学习的核心拼图。DQN 中的 $\epsilon$-greedy 是最粗糙的探索,而后续的 Bootstrapped DQN、NoisyNet 都在做“更聪明的探索”。UCB 的思路启发了探索奖励的设计,Thompson 采样的思想则被用于贝叶斯神经网络中量化不确定性来驱动探索。可以说,没有探索策略,深度强化学习在稀疏奖励面前寸步难行。
为何常见:因为入门教材通常把 MAB 和深度学习分成两个独立章节,读者看不出它们的联系。实际上 MAB 是理解深度强化学习探索问题的最小模型。
面试题
Q1. 多臂老虎机问题中,“利用”的含义是什么?
- A.随机选择任意一个动作
- B.选择当前已知奖励期望最高的动作← 正确答案
- C.选择被选次数最少的动作
- D.对所有动作保持均等的选择概率
答案:B。利用(Exploitation)指基于已有知识选择当前最优动作,即平均奖励最高的选项。A 是随机探索,C 是对较少动作的补偿,D 是完全均匀策略,均不符合“利用”定义。
Q2. UCB1 公式中探索红利项的作用是什么?
- A.让所有动作被选次数完全相同
- B.消除历史数据的随机噪声
- C.给样本少的动作增加被选机会← 正确答案
- D.提升所有动作的平均奖励估计
答案:C。探索红利 $\sqrt{2\ln t / n_i}$ 与选择次数 $n_i$ 成反比,被选次数越少红利越大,从而让冷门动作也能获得尝试机会。它不改变平均奖励估计,也不会强制均等选择。
Q3. Thompson 采样中 Beta 分布的两个参数通常代表什么?
- A.均值与方差
- B.成功次数与失败次数← 正确答案
- C.探索率与折扣因子
- D.动作数量与状态数量
答案:B。Beta 分布用于伯努利奖励建模时,参数 $\alpha$ 和 $\beta$ 分别对应成功次数 +1 与失败次数 +1。每次观测到奖励后再更新这两个参数,实现了贝叶斯后验的迭代修正。
Q4. 关于 UCB 与 Thompson 采样的区别,下列说法正确的是?
- A.UCB 是随机策略,Thompson 是确定性策略
- B.两者都需要人工设置探索概率
- C.UCB 通过置信上界计算选择,Thompson 通过后验分布采样选择← 正确答案
- D.Thompson 采样只能用于多臂老虎机问题
答案:C。UCB 确定性地上界选优,Thompson 采样的本质是从后验分布中随机采样,前者确定性更强。两者都不需要人工设置探索概率,而是由公式自动权衡。Thompson 可扩展到贝叶斯神经网络等复杂场景。
Q5. 在多臂老虎机中,后悔度 Regret 递减的目标是什么?
- A.让每个动作的被选次数完全相同
- B.让累积收益尽可能接近最优策略的收益← 正确答案
- C.让模型训练时间尽量缩短
- D.让所有动作的平均奖励估计归零
答案:B。后悔度定义为最优期望收益与实际期望收益的差。降低后悔度意味着让实际累积收益尽量贴近“全知全能”的最优策略,这是探索策略设计的基本准则。
Q6. UCB1 算法每轮选择动作时需要考虑哪些因素?
- A.动作的历史平均奖励← 正确答案
- B.当前总步数的对数← 正确答案
- C.动作历史平均奖励的方差
- D.动作历史被选择的次数← 正确答案
答案:ABD。UCB1 的上界公式为 $\hat{\mu}_i + \sqrt{2\ln t / n_i}$,需要平均奖励(A)、总步数的对数(B)以及该动作被选次数(D)。方差项不直接进入 UCB1 公式,虽然 UCB 的其他变体会考虑它。
Q7. Thompson 采样的核心思想可以概括为?
- A.对所有动作做均匀随机采样
- B.从每个动作的后验分布中采样,选最大采样值的动作← 正确答案
- C.计算每个动作的置信区间上界,选上界最大者
- D.选择历史累计奖励最大的动作
答案:B。Thompson 采样的核心是对每个动作的奖励分布做后验推断,然后从这些后验分布中采样出具体数值,选择数值最大的动作。C 是 UCB 的描述,A 与 D 都不是贝叶斯方法。
Q8. 关于内在动机探索,下列哪些说法正确?
- A.用预测误差作为内部奖励← 正确答案
- B.适用于稀疏奖励环境← 正确答案
- C.目的是减少探索次数
- D.可以引导智能体主动学习未知状态← 正确答案
答案:ABD。内在动机的核心是给“能带来新信息”的行为附加内部奖励,通常用预测误差度量(A),它特别适合外部奖励稀疏的场景(B),并引导智能体主动探索未知(D)。它的目的不是减少探索,而是让探索更有效率,因此 C 不准确。
Q9. 在有限轮次下,Thompson 采样通常优于 UCB1 的主要原因是?
- A.它不需要维护任何历史统计量
- B.它利用整个后验分布的信息,而 UCB 只用上界值← 正确答案
- C.它的计算复杂度显著较低
- D.它完全避免随机性
答案:B。Thompson 采样在每次决策时从完整的后验分布中采样,包含了对不确定性的精细刻画;UCB 则只用上界一个标量代表“乐观程度”。在有限轮次下,前者往往更鲁棒。但两者计算复杂度接近,且 Thompson 具有内在随机性。
Q10. 商业推荐系统中应用探索策略时,需要关注哪些问题?
- A.用户的长期兴趣漂移← 正确答案
- B.新品冷启动的数据不足← 正确答案
- C.探索频次过高损害用户体验← 正确答案
- D.所有用户都需要完全相同的探索策略
答案:ABC。兴趣漂移需要在线探索来跟进;新品冷启动是探索的主要动机;探索过多会影响体验,需要通过频率控制或个性化参数平衡。D 错误,不同用户对新奇度的容忍度不同,成熟的系统会做个性化探索强度调节。