强化学习核心:Exploit and Explore 策略与多臂老虎机算法
文章以 OpenAI o1 模型发布为背景,引出强化学习中的核心策略 Exploit and Explore(利用与探索)。通过约会吃饭的场景类比,解释了在多臂老虎机问题中如何平衡已知最优策略与未知探索。详细介绍了三种经典算法:ϵ-贪心算法、UCB 算法及 Thompson Sampling 算法,并提供了相应的数学原理与 Python 代码实现,帮助读者理解如何在不确定性环境下做出最优决策。

文章以 OpenAI o1 模型发布为背景,引出强化学习中的核心策略 Exploit and Explore(利用与探索)。通过约会吃饭的场景类比,解释了在多臂老虎机问题中如何平衡已知最优策略与未知探索。详细介绍了三种经典算法:ϵ-贪心算法、UCB 算法及 Thompson Sampling 算法,并提供了相应的数学原理与 Python 代码实现,帮助读者理解如何在不确定性环境下做出最优决策。

北京时间 9 月 13 日午夜,OpenAI 正式公开一系列全新 o1 大模型,旨在专门解决难题。这是一个重大突破,新模型可以实现复杂推理,一个通用模型解决比此前的科学、代码和数学模型能做到的更难的问题。

秘密武器在于强化学习和思维链。OpenAI 的大规模强化学习算法,教会模型如何在数据高度有效的训练过程中利用其思想链进行高效思考。
下面我们用最简单的语言,解释下强化学习中的基本思想:Exploit and Explore(利用与探索)。
又到周末了,你和女朋友出来约会,到了饭点你们开始纠结去哪里吃饭。这时候,经典的对话就出现了:
你:笨笨,今天你想吃什么? 她:随便呀,你定吧。 你:那我们吃火锅吧,上次的我觉得很好吃? 她:不要啦,火锅味太重了,我昨晚刚洗的头发呢。 你:那吃烤肉吧,那边新开了一家烤肉? 她:不行啦,烤肉也有味道,我可是刚洗了头发的!生气! 你:那吃日料吧,上次的那家... 她:唔,上次那家不好吃,三文鱼都不知道是不是虹鳟。 你:那吃西餐吧? 她:哎呀,西餐太贵啦,我们还是省点吧,别告诉我你想的是必胜客!

下面,让我们用 Exploit and Explore 策略帮你终结选择困难症。
利用与探索策略是一种在推荐系统/强化学习中常用的策略,用于在已知的最优策略和未知的最优策略之间进行权衡。在谈恋爱的场景中,我们可以将 Exploit and Explore 策略应用于解决待会儿去哪吃饭的问题。
最简单的方案是:
这样,我们就可以在已知的最优策略和未知的最优策略之间进行权衡。

问题是,这有什么理论依据吗?
多臂老虎机问题 (Multi-armed bandit, MAB): 赌场内,有一名赌徒想要去摇老虎机 (bandit),他面前有一排机器,每台机器都拥有一个臂 (arm),而且每台机器看上去都一样。每次投一枚游戏币就能获得一次摇臂 (play) 的机会,而且每个臂摇下都有可能吐出一枚硬币,即奖励 (rewards)。
但是,每台老虎机吐出硬币的概率分布是未知的。作为赌徒,自然希望自己的累积收益的期望 (expected cumulative reward) 最大化(假如一共有 n 次摇臂的机会),那么,请问这名赌徒应该采取怎样的行动?

目前的解决方案不外乎以下几种:
每次以 1−ϵ 的概率选择以往经验中期望奖励估值最大的那根拉杆(利用),以 ϵ 的概率随机选择一根拉杆(探索)。
import numpy as np
def epsilon_greedy(q, epsilon):
"""ϵ-贪心算法
参数:
q -- 一个列表,表示每个动作的价值
epsilon -- ϵ 值,表示进行随机动作的概率
返回:
选择的动作的索引
"""
if np.random.random() < epsilon: # 以 ϵ 的概率选择一个随机动作
return np.random.choice(len(q))
else: # 以 1-ϵ 的概率选择当前最优的动作
return np.argmax(q)
一根拉杆只被拉动过一次,那么它的不确定性很高,进而其探索的价值高。为此,引入不确定性度量 U(a),它会随着一个动作被尝试的次数的增加而减小。进而,我们可以使用一种基于不确定性的策略来综合考虑现有的期望奖励估值和不确定性,核心问题是如何估计不确定性。
上置信界 (upper confidence bound, UCB) 算法是一种经典的基于不确定性的策略方法,它的思想用到来了著名的数学原理:霍夫丁不等式。
霍夫丁不等式是概率论中的一个重要不等式,它描述了一个随机变量的和其期望值的偏离程度。霍夫丁不等式的一个重要应用是在估计一个随机变量的上界。

其中,P 表示概率。霍夫丁不等式说明当 N 很大的时候,v 与 u 相差不会很大,它们之间的差值被限定在 ϵ 之内。
UCB 算法通过计算每个臂的置信上界来做出选择,置信上界是臂的当前平均奖励加上一个与该臂被选择次数成反比的探索项。这个探索项通常使用一个称为'探索 - 利用权衡'的参数来控制,这个参数随着臂被选择的次数增加而减小。
算法的步骤大致如下:
import numpy as np
class UCB:
def __init__(self, counts, values):
self.counts = counts
self.values = values
def select_arm(self):
n_arms = len(self.counts)
for arm in range(n_arms):
if self.counts[arm] == 0:
return arm
ucb_values = [0.0 for arm in range(n_arms)]
total_counts = sum(self.counts)
for arm in range(n_arms):
bonus = np.sqrt((2 * np.log(total_counts)) / float(self.counts[arm]))
ucb_values[arm] = self.values[arm] + bonus
return np.argmax(ucb_values)
def update(self, chosen_arm, reward):
self.counts[chosen_arm] = self.counts[chosen_arm] + 1
n = self.counts[chosen_arm]
value = self.values[chosen_arm]
new_value = ((n - 1) / float(n)) * value + (1 / float(n)) * reward
self.values[chosen_arm] = new_value
ucb = UCB([, , ], [, , ])
chosen_arm = ucb.select_arm()
(chosen_arm)
reward = np.random.rand()
ucb.update(chosen_arm, reward)
Thompson Sampling 算法是一种基于贝叶斯推断的策略方法,它的核心思想是维护一个每个臂的奖励分布的后验概率分布。在每一步中,算法会从每个臂的后验分布中抽取一个样本,然后选择具有最高样本值的臂。
Beta 分布是定义在区间 [0,1] 上的连续概率分布,由两个参数 α(阿尔法)和 β(贝塔)控制其形状。Beta 分布是贝叶斯统计中常用的共轭先验分布,也是概率论和统计学中的一个重要工具。
Beta 分布的概率密度函数(PDF)为:

Beta 函数的定义是:

Beta 分布的均值和方差分别为:


在实际应用中,我们可以使用 Python 的 scipy 库来实现 Thompson Sampling。
import numpy as np
from scipy.stats import beta
class ThompsonSampling:
def __init__(self, num_arms):
self.num_arms = num_arms
self.alpha = np.ones(num_arms) # 成功计数
self.beta_param = np.ones(num_arms) # 失败计数
def select_arm(self):
samples = np.zeros(self.num_arms)
for i in range(self.num_arms):
samples[i] = beta.rvs(self.alpha[i], self.beta_param[i])
return np.argmax(samples)
def update(self, chosen_arm, reward):
if reward == 1:
self.alpha[chosen_arm] += 1
else:
self.beta_param[chosen_arm] += 1
# 测试
thompson = ThompsonSampling(3)
for _ in range(100):
arm = thompson.select_arm()
reward = np.random.rand() > 0.5 # 模拟奖励
thompson.update(arm, reward)
通过上述分析,我们可以看到强化学习中的 Exploit and Explore 策略在多臂老虎机问题中的具体应用。从简单的 ϵ-贪心到基于不确定性的 UCB,再到基于贝叶斯推断的 Thompson Sampling,这些算法为 AI 模型在面对未知环境时的决策提供了理论基础。OpenAI o1 等先进大模型正是利用了类似的强化学习与思维链机制,才实现了类人的复杂推理能力。掌握这些基础算法,对于理解现代 AI 技术栈及开发相关应用至关重要。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online