🏠 总目录📚 本教程 07 · 探索与利用
📑 本页目录(点开跳转)

07 · 探索与利用

28 分钟 | ⭐ 推荐系统那一章的理论底座


🎯 一句话

试新的可能更好,但也可能更差;用熟的稳,但可能永远错过更好的。 这一章讲怎么在两者之间做到数学上最优

A试过 10 次均值 7.07.98B试过 1 次均值 6.09.10C试过 4 次均值 5.46.95D试过 6 次均值 6.67.85UCB:选「均值 + 不确定性奖金」最大的,不是选均值最大的灰色 = 当前估计 橙色 = 不确定性奖金(试得越少越高)⭐ B 的均值最低,却因为只试过 1 次、不确定性最大而被选中「不确定」本身就是去试它的理由 —— 万一它其实是最好的呢
灰色是当前估计,橙色是不确定性奖金(试得越少越高)。⭐ B 的均值最低,却因为只试过 1 次、不确定性最大而被选中 —— 「不确定」本身就是去试它的理由

🎰 一、把问题剥到最简:多臂老虎机

   K 台老虎机,每台的真实中奖率未知
   你有 T 次机会,想让总收益最大

   ⭐ 这就是 MDP 去掉「状态」之后剩下的东西
      → 没有状态转移,纯粹的探索利用问题

衡量指标:遗憾(Regret)

$$\text{Regret}(T) = T\cdot\mu^* - \sum_{t=1}^{T}\mathbb{E}[r_t]$$

💡 人话「如果我一开始就知道哪台最好」和「我实际拿到的」之间的差距。

   目标:让 Regret 增长得【尽可能慢】

   ❌ 纯利用:可能一直卡在次优臂 → Regret 线性增长 O(T)  💀
   ❌ 纯随机:一直在试 → Regret 也是线性 O(T)  💀
   ✅ 好算法:Regret 只有 O(log T)  ⭐

   → log T 意味着:跑得越久,平均每次的损失越小

🔑 理论下界任何算法的 Regret 至少是 Ω(log T)。 所以达到 O(log T) 的算法就是渐近最优的 —— 这不是"够好",是"到顶了"。


🎲 二、ε-贪心:最简单的办法

   以 ε 概率随机选一个(探索)
   以 1−ε 概率选当前最好的(利用)
一行代码 Regret 是线性的(ε 固定时永远在浪费 ε 比例的机会)⭐
什么场景都能用 探索是均匀的 —— 明显很差的臂也照试不误 💀

改进:ε 衰减

eps = max(eps_min, eps_start * (decay ** episode))   # 或 eps = 1/t

💡 实践中 ε-贪心仍然大量使用(DQN 就用它), 因为在高维问题上,理论上更优的方法往往难以实现但在老虎机这种简单场景,它明显不如下面两个。


📈 三、UCB:给不确定性一个奖金 ⭐

$$a_t = \arg\max_a\Big[\underbrace{\hat\mu_a}_{\text{当前估计}} + \underbrace{c\sqrt{\tfrac{\ln t}{N_a}}}_{\text{不确定性奖金}}\Big]$$

💡 人话翻译

选「估计值 + 不确定性」最大的那个 —— 不是选最好的,是选最有可能是最好的

   N_a 小(试得少)→ 奖金大 → 更容易被选中  ⭐
   N_a 大(试得多)→ 奖金小 → 靠真实表现说话

   ⭐ 这就是第 1 章那句「不确定性本身就是探索的理由」的公式版

回到第 1 章那个餐厅例子

   A 店:试过 10 次,均值 7 分
   B 店:试过 1 次,得了 6 分
   现在是第 t = 11 次,取 c = 2

   UCB(A) = 7 + 2·√(ln11 / 10) = 7 + 2·√0.2398 = 7 + 0.98 = 7.98
   UCB(B) = 6 + 2·√(ln11 / 1)  = 6 + 2·√2.398 = 6 + 3.10 = 9.10  ⭐

   → 选 B!因为它的不确定性太大,值得再试

UCB 的 Regret 是 O(log T) —— 达到理论下界,渐近最优。 而且它是确定性的(不需要随机数),可复现性好。

⚠️ c 怎么定:c 越大越爱探索。理论建议 c=√2,实践常用 1~2。 奖励范围不是 [0,1] 时必须先归一化,否则 c 的含义完全变了。


🎯 四、Thompson Sampling:从后验里抽一个 ⭐⭐

   ① 对每个臂维护一个【概率分布】,表示"我认为它的中奖率是多少"
   ② 每次决策时,从每个分布里【随机抽一个数】
   ③ 选抽出来最大的那个
   ④ 观察结果,更新那个臂的分布

伯努利奖励下用 Beta 分布(数学上最漂亮的部分):

   臂 a 的先验:Beta(1, 1)   ← 均匀分布,什么都不知道

   每次拉臂后更新:
     中奖 → Beta(α+1, β)
     没中 → Beta(α, β+1)

   ⭐ 就是数一下赢了几次、输了几次,这叫【共轭先验】
import numpy as np

class ThompsonSampling:
    def __init__(self, k):
        self.alpha = np.ones(k)      # 赢的次数 + 1
        self.beta_ = np.ones(k)      # 输的次数 + 1

    def select(self):
        # ⭐ 核心就这一行:从每个臂的后验里抽样,选最大的
        return int(np.argmax(np.random.beta(self.alpha, self.beta_)))

    def update(self, a, reward):
        self.alpha[a] += reward
        self.beta_[a] += 1 - reward

💡 为什么它这么优雅

不确定性大的臂,它的分布"胖" → 抽出大值的概率就高 → 自然被探索。 试的次数多了,分布收窄 → 抽样结果趋近真实均值 → 自然转向利用。

探索和利用不是两个模式在切换,是同一个动作的自然结果。

UCB vs Thompson Sampling

UCB Thompson Sampling
原理 乐观面对不确定性 按后验概率采样
Regret O(log T) O(log T)
实践表现 通常更好
是否随机 确定性 随机
并行/延迟反馈 较差 天然友好 ⭐⭐

🔑 最后一行是工业界选它的真正原因: 推荐系统里,你同时给一万个用户发了推荐,反馈几分钟后才回来。 UCB 在这段时间里会给所有人推同一个东西(因为它是确定性的); Thompson Sampling 天然给每个人抽不同的样,探索自动分散开。

🔗 推荐算法第 13 章用的就是它 —— 那一章告诉你怎么用,这一章告诉你为什么它是对的。


🧊 五、有状态时的探索:难得多

老虎机没有状态,所以简单。真实 MDP 里探索要难一个数量级

   问题:有些状态要走 20 步才能到达
   → 随机探索几乎不可能走到那里  💀

   经典难题:Montezuma's Revenge(雅达利游戏)
   → 需要"拿钥匙→开门→下楼梯"一长串正确动作才有奖励
   → 纯 ε-贪心:训练几亿帧,得分 0

三类解法

思路 做法 代表
内在奖励 给"没见过的状态"额外加分,把好奇心变成奖励 RND、ICM
计数式探索 记录每个状态访问次数,少的给奖金(UCB 的 MDP 版) Pseudo-count
参数空间噪声 不是给动作加噪声,而是给网络权重加噪声 NoisyNet ⭐

💡 第三个思路很聪明:给动作加随机噪声,效果是"每步都可能手抖"; 给权重加噪声,效果是"这一整局我是一个略微不同的智能体" —— 后者产生的探索行为是连贯的,能走出很长的新路径。


🤖 六、这一章在 RLHF 里的样子

   语言模型生成时的 temperature / top-p,就是探索利用!

   temperature = 0   → 纯利用(每次都选概率最高的 token)
   temperature 高    → 更多探索

   ⭐ RLHF 训练时必须保持一定随机性,否则:
      · 采不到多样的回答 → 奖励模型只能看到一种风格
      · 策略迅速塌缩到单一模式(mode collapse)

⚠️ 上面这句「top-p 就是探索利用」是个结论,但这一章从头到尾没说 top-p 到底是什么。 🔗 补上那一半:全景导论 06b · 解码策略。 那一章讲的正是这里的对偶面——top-k 是「候选池固定大小」,top-p 是「候选池按累积概率动态伸缩」, 所以模型很确定时 top-p 自动收成近乎 greedy(利用),模型犹豫时自动放宽(探索): ⭐ 它比 temperature 更像一个「自适应的 ε」,这是把这一章的老虎机直觉搬到 LLM 上时最该知道的一件事。 那边还写了 temperature / top-k / top-p 三个旋钮同时开时的作用顺序,以及复读机该用 repetition penalty 还是调 top-p。

🔗 这解释了全景导论里那个现象RLHF 训久了模型会变得"无聊"、回答趋同 —— 那正是探索不足导致的策略塌缩。KL 惩罚(第 11、12 章)是用来把模型拴在 SFT 附近的。

⚠️ 但别指望那个 KL 惩罚能拦住 mode collapse ——这是最容易搞反的一处。 RLHF 罚的是反向 KL:$\text{KL}(\pi_\theta\,\|\,\pi_{SFT})$,$\pi_\theta$ 在分子。 展开看就明白它在罚什么:$\pi_{SFT}$ 概率接近 0 而 $\pi_\theta$ 还给了概率的地方,$\log$ 里的比值爆炸 → 罚得极重; 反过来,$\pi_{SFT}$ 概率很高而 $\pi_\theta$ 已经塌到 0 的地方,整项被前面的 $\pi_\theta$ 乘成 0 → 一分钱不罚。 而 mode collapse 恰恰是后一种:模型没有跑出去,它是缩回来了——把 SFT 的其他峰全丢掉,只钻进一个。 ⭐ 所以「反向 KL 是 mode-seeking 的」不是学术八股,它就是「RLHF 训久了变无聊」的数学解释: 你用来防塌缩的那一项,本身就偏爱塌缩。真要对抗它得靠别的(保温度、熵正则、限制训练轮数)。 🔗 数学原理 01b · KL 散度 是这个「前向铺开 / 反向找峰」的正式出处—— KL 在这套教程里被引用了六次(这里、第 11、12、13 章,蒸馏,变分推断),那一章是它唯一被定义的地方。


🔗 七、和站内其他章的关系

相关的地方 这里的位置
第 1 章的餐厅例子 这里给了它三个公式解
推荐算法 13 Thompson Sampling 本章是它的理论解释
第 6 章 ε-贪心 这里说明它为什么不够好
全景导论 06b · 解码策略 LLM 的 temperature / top-k / top-p 是探索利用的生成版 ⭐。这一章讲「为什么要探索」,那一章讲这三个旋钮各自怎么调、同时开时谁先生效
数学原理 01b · KL 散度 第六节那个「反向 KL 罚不到 mode collapse」的正式解释。前向 KL 铺开、反向 KL 找峰
A/B 测试 老虎机是它的"自适应"版本

✅ 检查点

  1. 遗憾(Regret)是什么?好算法的 Regret 是什么量级?理论下界呢?
  2. ε-贪心有哪两个缺点?
  3. UCB 的公式在做什么?用餐厅例子算一遍。
  4. Thompson Sampling 怎么工作?为什么说它的探索利用"不是两个模式在切换"?
  5. 工业界为什么常选 Thompson Sampling 而不是 UCB?
  6. 为什么有状态的 MDP 里探索难得多?
  7. 参数空间噪声比动作噪声好在哪?
  8. LLM 的 temperature 和这一章什么关系?RLHF 训久了变无聊是为什么?
👀 答案
  1. Regret = 「一开始就知道最优臂能拿到的」减去「实际拿到的」。好算法是 O(log T)理论下界是 Ω(log T),所以 O(log T) 是渐近最优。
  2. Regret 线性增长(ε 固定时永远浪费 ε 比例的机会)②探索是均匀的——明显很差的臂也照试不误。
  3. 选「估计值 + 不确定性奖金」最大的,即不是选最好的,是选最有可能是最好的。餐厅:UCB(A)=7+2√(ln11/10)=7.98,UCB(B)=6+2√(ln11/1)=9.10 → 选 B
  4. 每个臂维护一个后验分布,每次从各分布抽一个数,选最大的。因为不确定性大的臂分布"胖",抽出大值的概率高就被探索;试多了分布收窄就自然转向利用——同一个动作的自然结果,不是两个模式切换。
  5. 并行/延迟反馈友好。推荐里同时给一万人发推荐、反馈几分钟后才回来,UCB 是确定性的会给所有人推同一个,Thompson 天然给每人抽不同的样,探索自动分散。
  6. 因为有些状态要走 20 步才到,随机探索几乎不可能走到。如 Montezuma's Revenge 需要"拿钥匙→开门→下楼梯"一长串正确动作才有奖励,纯 ε-贪心训几亿帧得分 0。
  7. 动作噪声 = "每步都可能手抖";权重噪声 = "这一整局我是个略微不同的智能体",产生的探索行为是连贯的,能走出很长的新路径。
  8. temperature 就是探索利用:temperature=0 是纯利用。RLHF 训久了变无聊是探索不足导致的策略塌缩(mode collapse)。⚠️ KL 惩罚拦不住它——KL 惩罚管的是「别跑出 SFT 的范围」,而 mode collapse 是缩回来不是跑出去。RLHF 用的是反向 KL($\pi_\theta$ 在分子),$\pi_\theta$ 已经塌到 0 的地方整项被乘成 0,一分钱不罚。⭐ 你用来防塌缩的那一项,本身就偏爱塌缩。真要对抗得靠保温度、熵正则、限制训练轮数。

🛑 可以停在这里

走神救援

多臂老虎机 = MDP 去掉状态。指标是遗憾 Regret,好算法 O(log T)理论下界也是 Ω(log T) 所以这就是到顶ε-贪心:一行代码但Regret线性探索均匀(很差的臂也照试)。⭐UCB = 估计值 + c√(ln t / N_a) 不确定性奖金 —— 不是选最好的,是选最有可能是最好的(餐厅例子:试1次的B店 UCB=9.10 > 试10次的A店 7.98)。⭐⭐Thompson Sampling = 每个臂维护后验分布(伯努利用 Beta,就是数赢几次输几次),每次从各分布抽一个数选最大的;优雅在于不确定性大的臂分布"胖",抽出大值概率高就被探索 —— 探索和利用不是两个模式切换,是同一个动作的自然结果。⭐工业界选它的真正原因是并行/延迟反馈友好:同时给一万人推荐时,UCB是确定性的会给所有人推同一个,Thompson天然分散。有状态时探索难一个数量级(Montezuma需要一长串正确动作,ε-贪心训几亿帧得0分)→ 内在奖励/计数探索/参数空间噪声(给权重加噪声="这局我是个略不同的智能体",探索连贯能走很长新路径)。⭐LLM的temperature就是探索利用RLHF训久了变无聊=探索不足导致策略塌缩,KL惩罚就是对抗它的

下一节 👉 08-DQN.md

打卡记录保存在你的浏览器里,首页能看到总进度