Skip to content

Latest commit

 

History

History
618 lines (369 loc) · 33.9 KB

File metadata and controls

618 lines (369 loc) · 33.9 KB

3.1 两台老虎机:RL 的最小问题

本节导读

核心内容

  • 掌握多臂老虎机这个无状态决策问题,理解探索与利用的基本矛盾。
  • 学会用期望回报比较随机、已知最优、先试后定等策略。
  • 理解策略为什么是 RL 的核心:同一个环境里,选择动作的规则不同,长期回报会完全不同。

前两章你跑通了 CartPole 和 DPO,但你有没有想过一个更基本的问题:智能体怎么知道”哪个动作更好”? 如果连”两个选项选哪个”都回答不了,面对 CartPole 里连续变化的状态就更无从下手了。

RL 有两个区别于其他学习方式的核心特征:试错搜索(trial-and-error)——没有人告诉你正确答案,你得自己去试;延迟奖励(delayed reward)——当前的动作可能要等很多步之后才能看到效果 1。这两个特征交织在一起,构成了 RL 的基本挑战。

其中,试错搜索引出了一个在监督学习中根本不存在的难题:探索与利用(Exploration vs. Exploitation)。想象你走进一家赌场,面前只有两台老虎机,你有 100 枚硬币,不知道哪台更容易中奖——只能亲手去试。每试一次少一枚硬币,继续试不确定的那台,还是锁定目前看起来更好的那台? 专走一条路会失败:只探索不利用,硬币全浪费在差机器上;只利用不探索,可能永远错过更好的那一台。

这个场景学名叫”多臂老虎机问题”(Multi-Armed Bandit, MAB)23,它无处不在:选餐厅(老店还是新店)、看电影(熟悉类型还是陌生推荐)、科研选题(深耕还是跨界)。它之所以适合作为理解 RL 的起点,是因为它剥离了”延迟奖励”这个复杂因素(不管上一轮选了什么,这一轮面对的局面完全相同),让我们能单独看清”试错”和”探索-利用”这两个核心矛盾。

CartPole 不是这样:你每推一下小车,杆子的角度变了,整个局面都变了,试错和延迟奖励搅在一起。老虎机故意拿掉”状态变化”的干扰,让我们先集中精力解决两个最基本的问题:

  1. 如何评估一个动作好不好? → 期望回报
  2. 如何在”尝试新选项”和”利用已知信息”之间权衡? → 探索策略

::: info 核心概念 探索与利用是 RL 区别于其他学习方式的标志性挑战(distinctive challenge)。无论环境有没有状态、动作是离散还是连续,RL 永远在回答两件事:”哪个更好””要不要试试新的”。老虎机是这两个问题的最简版本,搞懂它,后续所有算法都是在它的基础上加东西。 :::

核心公式

要回答”哪个更好”,我们需要用数学来量化。下面两个公式分别解决两个问题:”一台机器到底好不好””玩完一轮下来我总共怎样”

$$ \mathbb{E}[R_a] = p_a \cdot (+1) + (1-p_a)\cdot(-1) = 2p_a - 1 \quad \text{(单臂期望奖励:计算单次平均收益)} $$

单臂期望奖励 (Expected Reward of an Action):

  • $\mathbb{E}$:期望(Expectation),表示多次尝试后的平均结果。
  • $R_a$:选择动作 $a$(比如拉动某根摇杆)后得到的真实奖励。
  • $p_a$:动作 $a$ 带来正收益(赢钱)的真实概率。

$$ \mathbb{E}[R_T] = \mathbb{E}[R_{a_1}] + \mathbb{E}[R_{a_2}] + \cdots + \mathbb{E}[R_{a_T}] = \sum_{t=1}^{T} \mathbb{E}[R_{a_t}] \quad \text{(T 轮期望总回报:衡量策略整体表现)} $$

T 轮期望总回报 (Expected Total Return over T steps):

  • $T$:总共尝试的轮数。
  • $a_t$:在第 $t$ 轮选择的具体动作。
  • $R_T$:玩了 $T$ 轮之后累积的总奖励。

第一个公式(期望奖励)告诉你:如果你在一台机器上反复投币,平均每次赚多少。第二个公式($T$ 轮总回报)把每一轮的结果加起来,让你能比较不同玩法的整体高低。有了这两个工具,我们就能用数字而不是感觉来回答”哪种策略更划算”。

这里的策略(policy),可以先理解成一句很朴素的话:遇到当前情况时,我按什么规则选动作。 在老虎机里,策略就是"这一轮选 A 还是选 B"的规则;在 CartPole 里,策略就是"当前杆子这个角度下,往左推还是往右推"的规则;在大模型里,策略就是"当前上下文下,下一个 token 怎么选"的规则。

两台老虎机

你面前有两台老虎机。每台投 1 枚硬币,中奖吐出 2 枚(净赚 +1),不中奖吞掉(净亏 -1)。你有 100 次机会。你不知道两台机器的出奖概率。

::: info 什么是轮次(Episode)? 在 RL 中,从开始到结束的一整轮交互叫一个轮次(Episode)。比如一局超级马里奥从第 1 关打到 Game Over 是一个轮次,一局 CartPole 从杆子竖起到倒下是一个轮次。

老虎机的轮次比较特殊:每一轮次只包含一次投币(选一个动作,拿到一个奖励)。而后面会遇到的环境(CartPole、Atari)一个轮次里包含很多步。但不管轮次长短,我们评价一个策略好不好,都是看一个完整轮次里的总回报。 :::

这个设定看似简单,但它精确地描述了 RL 的核心矛盾:前几轮你得两边都试试,才能搞清楚谁更好;但试出结果之后,你应该把剩余的硬币全投给那台更准的机器。 试太多,浪费硬币在差机器上;试太少,可能永远不知道另一台其实更赚。

三种策略,三种结局

为使讨论更具体,我们设定一个前提:A 台出奖率 60%,B 台出奖率 40%。这一事实仅用于计算期望值,玩家在游戏中并不知晓,只能通过尝试来估计。

下面的重点不是"算三道题",而是看清一件事:环境没有变,硬币数量也没有变,真正改变结果的是策略。 同样是 100 次机会,你采用"随机选"、"一直选 A"、"先试后定",最后拿到的回报会很不一样。

在比较策略之前,我们需要一个工具来回答"这个选择平均来说能赚多少"——这个工具就是期望(Expected Value)

::: details 什么是期望? 期望(Expected Value) 是随机变量的"长期平均"。直觉上说:如果你把同一件事重复做很多很多次,所有结果的平均值就会趋近期望值。

用数学语言定义:如果一个实验有 $n$ 种可能的结果,每种结果的值分别是 $x_1, x_2, \ldots, x_n$,对应的概率分别是 $p_1, p_2, \ldots, p_n$(概率之和为 1),那么期望值定义为:

$$\mathbb{E}[X] = p_1 \cdot x_1 + p_2 \cdot x_2 + \cdots + p_n \cdot x_n = \sum_{i=1}^{n} p_i \cdot x_i$$

每种结果的值 × 它的概率,全部加起来。

举个例子:抛一枚硬币,正面赢 1 元,反面亏 1 元。硬币是公平的,正面概率 50%。你可能某次抛出反面亏了 1 元,但如果你抛了 1000 次,大约 500 次正面、500 次反面:

$$\text{总盈亏} = 500 \times (+1) + 500 \times (-1) = 0 \quad \Rightarrow \quad \text{平均每次} = \frac{0}{1000} = 0$$

换一种算法——不先算次数,直接用概率。把上面的式子稍微变个形:

$$\text{平均每次} = \frac{500 \times (+1) + 500 \times (-1)}{1000}$$

因为 500 = 0.5 × 1000(50% 的概率 × 1000 次),代入进去:

$$= \frac{0.5 \times 1000 \times (+1) + 0.5 \times 1000 \times (-1)}{1000}$$

分子分母都有 1000,约掉了:

$$= 0.5 \times (+1) + 0.5 \times (-1) = 0$$

和期望的定义 $\mathbb{E}[X] = p_1 \cdot x_1 + p_2 \cdot x_2 = 0.5 \times 1 + 0.5 \times (-1) = 0$ 完全一致。 :::

用这个工具,我们可以算出每台机器投一次的期望收益

$$\mathbb{E}[R_A] = 0.6 \times (+1) + 0.4 \times (-1) = +0.2$$

$$\mathbb{E}[R_B] = 0.4 \times (+1) + 0.6 \times (-1) = -0.2$$

也就是说,A 台平均每次投币赚 0.2,B 台平均每次投币亏 0.2。后面所有策略的比较都基于这两个数字。

这两个数字回答的是"单个动作好不好";策略回答的是"什么时候选哪个动作"。RL 真正关心的是后者:如何把动作价值变成一套稳定赚钱的选择规则。

策略 1:均匀随机

最简单的玩法:每轮抛个硬币决定选哪台,A 和 B 各 50% 的概率。

先算每轮的期望收益。一轮投币其实分两步:先决定选哪台(50%/50%),再看中不中奖。所以一共有 4 种可能的结果:

事件 选哪台 结果 概率
选 A 且中奖 A +1 0.5 × 0.6 = 0.3
选 A 且没中奖 A -1 0.5 × 0.4 = 0.2
选 B 且中奖 B +1 0.5 × 0.4 = 0.2
选 B 且没中奖 B -1 0.5 × 0.6 = 0.3

直接用期望公式,每种结果的值乘以概率,加起来:

$$\mathbb{E}[R_{\text{每轮}}] = 0.3 \times (+1) + 0.2 \times (-1) + 0.2 \times (+1) + 0.3 \times (-1) = 0$$

也可以换个更顺的角度:先不要急着把 4 种结果全部摊平,而是先问"这一轮选到了哪台"。

如果选到 A,这一轮平均赚 0.2;如果选到 B,这一轮平均亏 0.2。又因为 A、B 各有 0.5 的概率,所以:

$$\mathbb{E}[R_{\text{每轮}}] = 0.5 \times 0.2 + 0.5 \times (-0.2) = 0$$

这和上面直接列 4 种结果是同一件事,只是分组方式不同:上面是直接看"最终发生了什么",这里是先看"选到了哪台",再看这台机器自己的平均收益。

::: details 补充:为什么这个"换个角度"在数学上成立?

严格一点说,这一步用的是全期望公式

$$C_A = \text{选 A}, \quad C_B = \text{选 B}$$

$C_A$$C_B$ 互不重叠,而且覆盖了一轮里的所有情况:不是选 A,就是选 B。所以:

$$\mathbb{E}[R_{\text{每轮}}] = P(C_A)\mathbb{E}[R_{\text{每轮}} \mid C_A] + P(C_B)\mathbb{E}[R_{\text{每轮}} \mid C_B]$$

这个公式的意思很朴素:

$$\text{总体平均} = \text{进 A 组的概率} \times \text{A 组内部平均} + \text{进 B 组的概率} \times \text{B 组内部平均}$$

在这里:

$$\mathbb{E}[R_{\text{每轮}} \mid C_A] = 0.6 \times 1 + 0.4 \times (-1) = 0.2$$

$$\mathbb{E}[R_{\text{每轮}} \mid C_B] = 0.4 \times 1 + 0.6 \times (-1) = -0.2$$

所以:

$$\mathbb{E}[R_{\text{每轮}}] = 0.5 \times 0.2 + 0.5 \times (-0.2) = 0$$

为什么这和直接枚举 4 种结果完全一样?因为直接枚举用的是联合概率。联合概率就是"几件事同时发生的概率",比如"选 A 且中奖"、"选 A 且没中奖"。

这里的联合概率可以拆成两步:

$$P(\text{选 A 且中奖}) = P(\text{选 A})P(\text{中奖}\mid \text{选 A}) = 0.5 \times 0.6 = 0.3$$

$$P(\text{选 A 且没中奖}) = P(\text{选 A})P(\text{没中奖}\mid \text{选 A}) = 0.5 \times 0.4 = 0.2$$

所以这个分组写法,本质上只是把原来的四项重新括起来:

$$0.3 \times 1 + 0.2 \times (-1) + 0.2 \times 1 + 0.3 \times (-1)$$

$$= 0.5 \times \big(0.6 \times 1 + 0.4 \times (-1)\big) + 0.5 \times \big(0.4 \times 1 + 0.6 \times (-1)\big)$$

所以它不是新的假设,也不是在说"结果可以随便线性相加";它只是把同一个随机实验按"选哪台"重新分组。 :::

每轮期望是 0。那 100 轮的总期望怎么算?这用到概率论的一个基本性质:

定理(期望的线性性质,Linearity of Expectation):对任意有限个随机变量 $X_1, X_2, \ldots, X_n$,无论它们之间是否独立、是否相关,总有:

$$\mathbb{E}!\left[\sum_{i=1}^{n} X_i\right] = \sum_{i=1}^{n} \mathbb{E}[X_i]$$

唯一要求:每个 $\mathbb{E}[X_i]$ 存在且有限。

也就是说,和的期望等于期望之和——这个结论无条件成立。这正是本节开头那个公式 $\mathbb{E}[R_T] = \sum_{t=1}^{T} \mathbb{E}[R_{a_t}]$ 的数学依据。在这里,每轮的期望都是 0,所以 100 个 0 加起来还是 0:

$$\mathbb{E}[R_{100}] = \overbrace{0 + 0 + \cdots + 0}^{100} = 0$$

总回报在 0 附近波动。选 A 赚的钱刚好被选 B 亏的钱抵消。这个策略的问题在于:它完全不学习。 不管投了多少轮,它都不会利用"哪台好像更好"的信息,永远五五开。

策略 2:始终选 A

假设有个朋友偷偷告诉你 A 更好,你 100 轮全投 A。每轮的期望就是 A 台的期望:

$$\mathbb{E}[R_{\text{每轮}}] = 0.6 \times (+1) + 0.4 \times (-1) = 0.2$$

同理,100 轮总期望 = 每轮期望相加:

$$\mathbb{E}[R_{100}] = \overbrace{0.2 + 0.2 + \cdots + 0.2}^{100} = 100 \times 0.2 = 20$$

期望净赚 20,这是理论上最好的结果。但问题是:现实中没有人告诉你哪台更好——你必须自己去试。所以这个策略虽然分数最高,但没法直接用。

策略 3:先试后定

一个更实际的思路:先花一些轮次两边都试试,搞清楚谁更好,然后把剩下的轮次全投给赢家。

具体做法:前 20 轮交替尝试 A 和 B(各 10 次),记录各自的胜率;后 80 轮始终选择观测胜率更高的那台。

前 20 轮和策略 1 一样,每轮 50% 选 A、50% 选 B,所以每轮期望也是 0,20 轮总共 0。

后 80 轮锁定 A(假设探索阶段正确识别了更优机器),每轮期望 0.2:

$$\mathbb{E}[R_{\text{后80}}] = 80 \times 0.2 = 16$$

100 轮总期望回报为:

$$\mathbb{E}[R_{100}] = 0 + 16 = 16$$

低于理论最优的 20——差额 4 就是探索成本。

到这里,"先试后定"看起来已经抓住了探索与利用的直觉:先花 20 轮探索,后面 80 轮利用更好的机器。但它还有一个隐藏前提:探索阶段真的能判断出哪台更好

这正好回到本节开头的问题:智能体怎么知道"哪个动作更好"?在真实 RL 里,智能体看不到 A 的真实出奖率 60%,也看不到 B 的真实出奖率 40%。它只能看见自己试出来的样本,然后用样本去估计动作价值。下面要看的就是:这个估计可能会错

观测可能骗人

前面的计算做了一个乐观假设:探索阶段能正确识别 A 更优。但真实情况没这么理想,因为我们只试了很少几次,很容易被短期运气骗到。

这里最容易混的是:真实出奖率观测出奖率 不是一回事。

  • 真实出奖率是机器本来的长期规则。A 的真实出奖率是 60%,意思是长期投很多很多次后,中奖比例会靠近 60%。
  • 观测出奖率是你这一次小实验看到的临时结果。只投 10 次时,它可能被短期运气拉偏。

所以,A 的真实出奖率是 60%,不等于"每 10 次一定中 6 次"。它可能这 10 次只中 4 次,也可能下一组 10 次中 7 次。10 次太短,看到的结果不一定代表真实水平。

比如探索阶段真的可能长这样:

这里用符号表示结果:✅ 表示中奖,❌ 表示没中。

机器 真实出奖率 10 次实际结果 中了几次 观测出奖率
A 60% ❌ ✅ ❌ ❌ ✅ ❌ ✅ ❌ ✅ ❌ 4 次 40%
B 40% ✅ ❌ ✅ ✅ ❌ ❌ ✅ ❌ ✅ ❌ 5 次 50%

这两行不是在改机器的真实水平。A 每一次仍然有 60% 的机会中奖,只是这 10 次里刚好没中得比较多;B 每一次仍然只有 40% 的机会中奖,只是这 10 次里刚好中得比较多。

真实情况里,A 明明比 B 好;但只看这 10 次样本,B 反而看起来更好。这不是矛盾,而是小样本随机波动。

如果你按照观测胜率做决定,就会误以为 B 更好,于是后 80 轮全部锁定在 B 上。这就是"观测可能骗人"的意思:真实更好的选项,短期看起来不一定更好。

这段不是为了把问题变复杂,而是为了说明 RL 里的一个核心麻烦:利用依赖估计,估计来自探索,而探索得到的样本可能不可靠。

::: details 数学补充:为什么短期观测会和真实概率不一样?

数学上,真实出奖率和观测出奖率是两个不同的量。

  • 真实出奖率:记作 $p$。这是机器本来的参数。比如 A 的真实出奖率是 $p_A=0.6$
  • 10 次里中奖几次:记作 $N$。这是随机变量,因为每次实验结果都可能不同。
  • 观测出奖率:记作 $\hat p$,读作"p hat",意思是用样本估出来的概率。

观测出奖率等于:

$$\hat p = \frac{N}{10}$$

如果这一次 A 投 10 次只中了 4 次,那么:

$$N_A = 4,\quad \hat p_A = \frac{4}{10}=0.4$$

这并不是说 A 的真实出奖率从 $0.6$ 变成了 $0.4$。真实出奖率还是:

$$p_A = 0.6$$

只是这一次小实验里,观测出来的结果是:

$$\hat p_A = 0.4$$

更严谨地说,每投一次 A,都可以记一个变量:

$$ X_i = \begin{cases} 1, & \text{第 } i \text{ 次中奖}\\ 0, & \text{第 } i \text{ 次没中奖} \end{cases} $$

A 的真实出奖率 $p_A=0.6$,意思是:

$$P(X_i=1)=0.6,\quad P(X_i=0)=0.4$$

注意:$0.6$ 描述的是中奖这个结果出现的概率,不是说每一次的结果都等于 $0.6$。每一次真实发生后,$X_i$ 只能是 1 或 0。

投 10 次以后,总中奖次数是:

$$N_A = X_1 + X_2 + \cdots + X_{10}$$

因为每个 $X_i$ 都是随机的,所以 $N_A$ 也是随机的。它可能等于 6,也可能等于 4,也可能等于别的数。观测出奖率只是:

$$\hat p_A = \frac{N_A}{10}$$

所以机器参数和一次现实结果不是同一个东西:

  • $p_A=0.6$:生成结果的规则。
  • $N_A=4$:这一次 10 次实验刚好生成出来的结果。
  • $\hat p_A=0.4$:根据这一次结果算出来的临时估计。

数学上,$p_A$ 控制的是长期平均:

$$\mathbb{E}[N_A]=10\times 0.6=6,\quad \mathbb{E}[\hat p_A]=0.6$$

这里的意思不是"每 10 次一定中 6 次",而是"如果把 10 次实验重复很多很多组,每组中奖次数的平均值会接近 6"。

概率论在这里告诉我们的正是这件事:10 次里到底中几次,本身也是随机的。A 投 10 次,每次中奖概率 60%,可能中 0 次、1 次……一直到 10 次,并不是固定中 6 次。

每种"中几次"的概率由二项分布给出:

$$P(N=k)=\binom{n}{k}p^k(1-p)^{n-k}$$

这里 $N$ 表示 $n$ 次里中奖的次数,$p$ 表示每次中奖的真实概率。比如 A 恰好中 4 次:

$$P(n_A = 4) = \binom{10}{4} \times 0.6^4 \times 0.4^6 \approx 11.1%$$

也就是说,A 明明真实出奖率是 60%,但 10 次里只中 4 次这件事,大约有 11.1% 的概率发生。它不是最常见的情况,但也完全不奇怪。

B 恰好中 5 次的概率是:

$$P(n_B = 5) = \binom{10}{5} \times 0.4^5 \times 0.6^5 \approx 20.1%$$

所以,"A 这 10 次只中 4 次,B 这 10 次中了 5 次"这种误导人的观察结果,不是数学上不允许,而是概率上确实可能出现。只看这个具体场景,两件事同时发生的概率大约是:

$$11.1% \times 20.1% \approx 2.2%$$

这不是很大,但也不是不可能。更重要的是,误判不只这一种情况:只要 A 的中奖次数少于 B,都会误判。后面我们会把所有误判情况加起来。

概率论真正保证的是:试得足够多时,观测出奖率会越来越接近真实出奖率,这叫大数定律。它不保证短短 10 次就一定看得准。

以 A 恰好中 4 次的公式为例,它由三部分相乘:

  • $\binom{10}{4}$:从 10 次投币中选出 4 次中奖,有多少种不同的组合方式
  • $0.6^4$:这 4 次中奖,每次概率 60%
  • $0.4^6$:剩下 6 次没中奖,每次概率 40%

组合数这部分怎么读?

$\binom{n}{k}$ 读作"从 n 个里面选 k 个",也可以写成 $C_n^k$。它是组合数,表示从 $n$ 个位置里选出 $k$ 个位置,有多少种选法。

组合数在这里的作用,是把"中了 4 次"背后的所有位置情况一次性数出来。因为 10 次里中 4 次不只有一种可能:可以是第 1、2、3、4 次中奖,也可以是第 1、3、5、7 次中奖,还可以是很多别的位置组合。每一种具体位置组合的概率都是 $0.6^4 \times 0.4^6$,所以最后要乘上"一共有多少种位置组合",也就是 $\binom{10}{4}$

所以,$\binom{10}{4}$ 本身不是概率,它只是一个计数系数

关键点是:组合数不考虑顺序

举个小例子:有 4 个位置 ${1,2,3,4}$,要选 2 个位置出来。

$$\binom{4}{2} = \frac{4!}{2! \times 2!} = \frac{4 \times 3 \times 2 \times 1}{(2 \times 1)(2 \times 1)} = 6$$

也就是 $C_4^2 = 6$。列出来就是:

$${1,2}, {1,3}, {1,4}, {2,3}, {2,4}, {3,4}$$

这里不是 $A_4^2$。$A_4^2$ 是排列数,会把顺序也算进去,比如 ${1,2}$${2,1}$ 会被算成两种,所以 $A_4^2 = 4 \times 3 = 12$

回到我们的问题:$\binom{10}{4}$,也就是 $C_{10}^4$,表示"10 次投币中,哪 4 次是中奖"有多少种不同的选法。比如第 1、3、5、7 次中奖是一种,第 2、4、6、8 次中奖也是一种。

这里也不是 $A_{10}^4$,因为我们不关心这 4 次中奖之间的先后排序;投币顺序已经固定为第 1 次到第 10 次,我们只是在选"哪些位置中奖"。所以用组合数 $C_{10}^4$。 :::

接下来真正影响策略回报的是:这次探索有多大概率把差机器 B 看成好机器

先试后定的判断规则很简单:前 20 轮结束后,看 A 和 B 谁中奖次数更多。谁更多,后面 80 轮就选谁。

  • 如果 A 中得更多,判断对了,后面选 A。
  • 如果 B 中得更多,判断错了,后面选 B。
  • 如果一样多,这里先不算 B 更好。

所以,误判其实就是一句话:

B 的中奖次数比 A 多。

这里 $n_A$ 表示 A 在 10 次探索里中了几次,$n_B$ 表示 B 在 10 次探索里中了几次。

怎么算这个概率?先不用看公式,可以把它想成一张表:横向是 A 中了几次,纵向是 B 中了几次。每个格子代表一种探索结果。

A 中了几次 B 中了几次 后面会选谁 是否误判
4 5 B
3 6 B
5 5 不确定/打平
6 4 A

规则很简单:只要 B 那一列数字比 A 大,这个格子就算误判。把所有"误判格子"的概率加起来,结果大约是:

$$P(\text{误判}) \approx 12.8%$$

这句话的意思是:虽然 A 真实更好,但如果只各试 10 次,差不多每 8 次完整实验里,就有 1 次会被短期样本骗到,误以为 B 更好。

::: details 补充:12.8% 是怎么加出来的?

如果要把上面的"误判格子"写成数学,就是:

$$n_A < n_B$$

也就是 A 的中奖次数少于 B 的中奖次数。

可以按 A 中了几次来分情况:

如果 A 中了... 那么 B 要中... 才会误判
0 次 1 到 10 次
1 次 2 到 10 次
2 次 3 到 10 次
... ... ...
9 次 10 次
10 次 不可能更多

所以总误判概率就是把这些情况都加起来:

$$P(\text{误判})$$

$$=P(A\text{中}0)P(B\text{至少中}1)$$

$$+P(A\text{中}1)P(B\text{至少中}2)$$

$$+\cdots+P(A\text{中}9)P(B\text{中}10)$$

$$\approx 12.8%$$

这里有两个小逻辑:

  • 为什么相乘?因为 A 的 10 次探索和 B 的 10 次探索是分开发生的。例如"A 中 4 次并且 B 中 5 次"的概率,就是 $P(A\text{中}4)\times P(B\text{中}5)$
  • 为什么相加?因为这些情况互不重叠。一次实验里,A 不可能既中 0 次又中 1 次,所以可以把不同情况的概率加起来。 :::

一旦误判,后 80 轮全部投给 B,期望总回报变为

$$\mathbb{E}[R_{100} \mid \text{误判}] = 0 + 80 \times (-0.2) = -16$$

策略 3 最终拿多少分,取决于你"运气好不好":有 87.2% 的概率猜对了(拿 16 分),有 12.8% 的概率猜错了(亏 16 分)。期望回报就是把这两种结果按概率加权平均:

$$\mathbb{E}[R_{100}] = 87.2% \times 16 + 12.8% \times (-16) \approx 11.9$$

比不考虑误判的 16 低了将近 4 分。这个下降不是计算细节,而是主题本身:动作价值估计错了,后面的利用就会错。

注意,这只是 A 和 B 差距较大的情况(60% vs 40%)。如果两台机器的差距更小,比如 52% vs 48%,误判概率会飙升到接近 50%——几乎等于抛硬币决定后 80 轮的命运。

这说明探索阶段的样本量直接决定了最终回报。样本太少,误判概率高,"先试后定"的优势会被严重削弱;样本太多,探索成本又吃掉了利润。如何在两者之间取得平衡,正是强化学习中探索策略设计的核心问题。

探索策略对比

上面的例子已经说明,问题不只是"选 A 还是选 B"。真正难的是:你要用有限样本估计哪个动作更好,同时又不能把太多轮次浪费在试探上。

"先试后定"只是探索策略的一种。不同策略本质上是在用不同方式回答同一个问题:怎么在"降低误判"和"少花探索成本"之间折中。

策略 做法 探索机制 缺点
纯随机 均匀采样 永远学不到最优
贪心 永远选当前估计最优 可能锁定次优
ε-贪婪 以 ε 概率随机,1-ε 选最优 固定比例探索 ε 不随时间衰减
先试后定 前 N 步探索后利用 预算制 N 不好选
UCB 选"估计均值 + 不确定性"最高的 不确定性驱动 需要维护置信区间
Thompson Sampling 从后验分布采样 概率匹配 需要贝叶斯更新

其中 UCB(Upper Confidence Bound 4)和 Thompson Sampling 2 是理论上最优的策略。如何衡量"最优"?学界使用一个叫 Regret(遗憾值) 的指标——本节末尾会简单介绍。

Python 搭建老虎机

import random

class TwoArmedBandit:
    """两台老虎机:最简 RL 环境"""

    def __init__(self, prob_a=0.6, prob_b=0.4):
        self.prob_a = prob_a
        self.prob_b = prob_b

    def step(self, action):
        """选择某一台机器,返回奖励"""
        if action == "A":
            return 1 if random.random() < self.prob_a else -1
        else:
            return 1 if random.random() < self.prob_b else -1

这个环境没有"状态"——不管你上一步选了哪台机器,这一步面对的情况一模一样。这就是老虎机的特点:它是一个单状态 MDP。后面我们会看到 CartPole 和 LLM 就不是这样了——它们的状态会随着动作而改变。

三种策略的 Python 实现

将上面的三种策略用代码实现,观察实际运行结果与理论期望的对比。以下代码均基于前面定义的 TwoArmedBandit 类,需先执行该类的定义代码。

策略 1:均匀随机

from random import choice
env = TwoArmedBandit()
total = sum(env.step(choice(["A", "B"])) for _ in range(100))
print(f"均匀随机 100 轮总回报: {total},平均: {total/100:.2f}")

:::output 均匀随机 100 轮总回报: -2,平均: -0.02 :::

理论期望为 0,实际结果在 0 附近波动,符合预期。

策略 2:始终选 A

env = TwoArmedBandit()
total = sum(env.step("A") for _ in range(100))
print(f"始终选 A 100 轮总回报: {total},平均: {total/100:.2f}")

:::output 始终选 A 100 轮总回报: 18,平均: 0.18 :::

理论期望为 20,实际 18——单次实验会有随机波动,但接近期望值。

策略 3:先试后定

env = TwoArmedBandit()

# 阶段 1:探索——A 和 B 各试 10 次,记录各自的表现
rewards = {"A": [], "B": []}
for arm in ["A", "B"]:
    for _ in range(10):
        rewards[arm].append(env.step(arm))

# 根据探索结果,选平均回报更高的机器
avg = {arm: sum(r) / len(r) for arm, r in rewards.items()}
best = max(avg, key=avg.get)  # 比如 avg["A"] = 0.2 > avg["B"] = -0.1 → best = "A"

# 阶段 2:利用——后 80 轮全部选 best
explore_total = sum(sum(r) for r in rewards.values())
exploit_total = sum(env.step(best) for _ in range(80))
total = explore_total + exploit_total

print(f"探索结果: A 平均={avg['A']:.2f}, B 平均={avg['B']:.2f} → 选 {best}")
print(f"先试后定 100 轮总回报: {total},平均: {total/100:.2f}")

:::output 先试后定 100 轮总回报: 14,平均: 0.14 :::

理论期望为 16(不考虑误判),实际 14——低于"始终选 A"的 18,因为前 20 轮的探索没有产出收益。

结果对比

策略 理论期望 实际结果 说明
均匀随机 0 −2 在 0 附近波动,不亏不赚
始终选 A 20 18 接近期望,但需要事先知道 A 更好
先试后定 16 14 比始终选 A 少 4 分,差额来自探索成本

三种策略,同一组机器,结果差异显著。策略决定了你能从环境中拿走多少价值。

由此可以得到两个结论:

  • 策略需要用期望回报来评价。 某一次结果可能有运气,但长期平均会暴露策略水平。
  • 策略能否有效,取决于环境里有没有可利用的结构。 如果 A 和 B 都是 50%,再聪明的策略也占不到便宜;如果 A 确实比 B 好,策略的价值就在于更快发现并利用 A。

本节总结

本章通过多臂老虎机这个最简单的 RL 环境,建立了强化学习的三个基本概念。

1. 策略是决定智能体表现的关键。 三种策略面对同一个环境,长期回报截然不同:

  • 均匀随机(期望回报 0):完全不利用观测信息,永远无法收敛到最优动作。
  • 始终选最优(期望回报 20):理论最优,但前提是事先知道动作价值——在实际中不可得。
  • 先试后定(期望回报 ≈ 12):先花 20 轮探索、后 80 轮利用。它更接近实际场景,但暴露了一个关键问题:小样本估计可能出错。在 60% vs 40% 的设定下,仅各试 10 次就有约 12.8% 的概率误判优劣;如果两台机器差距更小,误判概率会急剧上升。

2. 期望回报是衡量策略优劣的客观指标。 我们用期望公式计算了每台老虎机的单次期望收益(A 台 +0.2,B 台 −0.2),并利用期望的线性性质将单步期望累加为 $T$ 轮总期望回报。单次实验受随机波动影响,但长期平均会收敛到期望值。

3. 探索与利用是 RL 的标志性矛盾。 ε-贪婪通过固定比例混合探索与利用;UCB 基于不确定性上界选择动作;Thompson Sampling 通过贝叶斯后验采样实现概率匹配。

多臂老虎机刻意剥离了"延迟奖励"(每轮面对的局面完全相同),让我们单独看清了"试错搜索"和"探索-利用"这两个基本矛盾。真实 RL 问题(CartPole、LLM 等)不仅有探索与利用的矛盾,还涉及状态转移——智能体看到的局面会随动作而改变,策略也从"选哪个动作"扩展为"在当前状态下选什么动作"。下一节将把这些概念形式化为 MDP 框架:MDP 五元组、折扣回报与策略

延伸阅读:Regret

以下内容供有兴趣的读者深入,初读可跳过。

前面我们用期望回报比较了三种策略。但期望回报依赖于具体的老虎机参数(A 台 60%、B 台 40%),换一组参数数字就全变了。学界需要一个通用的评价指标:不管几台机器、不管出奖率是多少,都能用同一个标准衡量"这个策略有多好"。这个标准就是 Regret(遗憾值)

Regret 的定义很直觉:假设你从一开始就知道哪台机器最优,100 轮全选它,能拿满分。但你不知道,所以用了某个策略,实际拿的分比满分少。少拿的部分就是 Regret:

Regret = 最优策略的回报 − 你的策略的回报

用我们的老虎机算一笔账(最优策略 100 轮全选 A,总期望 20 分):

策略 实际总期望 Regret
均匀随机 0 分 20 − 0 = 20
始终选 A 20 分 20 − 20 = 0
先试后定 ≈12 分 20 − 12 ≈ 8

Regret 越小,策略越好。均匀随机每 100 轮"白亏" 20 分,先试后定亏约 8 分(含探索成本与误判损失),始终选 A 不亏——但前提是你得一开始就知道 A 更好,现实中不可能。

RL 的目标,就是设计出 Regret 增长尽可能慢的策略。 前面提到的 UCB 和 Thompson Sampling,正是学界在这条路上找到的最优解——它们的 Regret 随时间以对数速率增长,达到了理论下界 5。感兴趣的同学可以进一步阅读参考文献。

参考文献

Footnotes

  1. Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction (2nd ed.). MIT Press.

  2. Thompson, W. R. (1933). On the likelihood that one unknown probability exceeds another in view of the evidence of two samples. Biometrika, 25(3/4), 285-294. 2

  3. Robbins, H. (1952). Some aspects of the sequential design of experiments. Bulletin of the American Mathematical Society, 58(5), 527-535.

  4. Auer, P., Cesa-Bianchi, N., & Fischer, P. (2002). Finite-time analysis of the multiarmed bandit problem. Machine Learning, 47(2-3), 235-256.

  5. Lai, T. L., & Robbins, H. (1985). Asymptotically efficient adaptive allocation rules. Advances in Applied Mathematics, 6(1), 4-22.