从随机到贝叶斯两类多臂老虎机探索策略的理论与实验分析
从随机到贝叶斯两类多臂老虎机探索策略的理论与实验分析
一、引言:探索与利用的永恒平衡
在强化学习(Reinforcement Learning, RL)中,智能体(Agent)通过与环境的交互学习最优策略,其目标是在长期内最大化累积回报。
然而,在学习初期,Agent 面临一个根本性问题——**探索(Exploration)与利用(Exploitation)**的权衡:
- 探索:尝试新的动作,以获取对环境更多的信息;
- 利用:基于当前已知的经验选择最优动作,以最大化即时收益。
这一平衡问题在各类 RL 应用(如推荐系统、机器人控制、广告分发等)中至关重要。
本文将聚焦于两种经典的探索策略:
- ε-greedy(ε-贪婪)
- Thompson Sampling(汤普森采样)
并通过一个多臂老虎机(Multi-Armed Bandit)实验,对两者进行对比实现与性能评估。
二、探索策略概述
2.1 ε-greedy 策略
ε-greedy 是最简单、最直观的探索策略之一。其核心思想是:
以概率 ε 随机探索,以概率 1−ε 选择当前估计最优的动作。
公式化表示为:
[
a_t =
\begin{cases}
\text{random action}, & \text{with probability } \varepsilon
\arg\max_a Q(a), & \text{with probability } 1 - \varepsilon
\end{cases}
]
这种方法的优点是实现简单,缺点是探索无差别且低效,无法根据不确定性动态调整探索强度。
2.2 汤普森采样(Thompson Sampling)
汤普森采样基于贝叶斯推理(Bayesian Inference),通过维护每个动作的奖励分布不确定性,实现“概率意义下的最优探索”。
假设每个动作的奖励服从 Beta 分布,则每次选择动作时:
- 对每个动作 ( a_i ),从其后验分布 ( \text{Beta}(\alpha_i, \beta_i) ) 中采样一个值;
- 选择采样值最大的动作;
- 根据奖励结果更新该动作的后验参数。
这种方法能自然平衡探索与利用:高不确定性动作被采样的概率更高,从而实现“智能探索”。
三、实验设计:多臂老虎机(Multi-Armed Bandit)
为了客观对比两种策略,我们采用一个典型的 k 臂老虎机问题(k-Armed Bandit):
- 每个臂代表一种可选动作;
- 每个臂的奖励服从一个固定但未知的概率分布;
- Agent 的目标是在若干轮交互中最大化累积奖励。
四、代码实战:ε-greedy 与汤普森采样的对比实现
下面的代码通过一个 10 臂老虎机环境,比较两种策略在 1000 次尝试下的表现。
💡 提示:该代码可直接运行于本地 Python 环境,无需复杂依赖,仅需
numpy与matplotlib。
import numpy as np
import matplotlib.pyplot as plt
# ====== 环境定义 ======
class BanditEnv:
def __init__(self, k=10):
self.k = k
self.q_true = np.random.randn(k) # 每个动作的真实期望奖励
def step(self, action):
reward = np.random.randn() + self.q_true[action]
return reward
# ====== ε-greedy 策略 ======
class EpsilonGreedyAgent:
def __init__(self, k=10, epsilon=0.1):
self.k = k
self.epsilon = epsilon
self.q_est = np.zeros(k)
self.action_count = np.zeros(k)
def select_action(self):
if np.random.rand() < self.epsilon:
return np.random.randint(self.k)
return np.argmax(self.q_est)
def update(self, action, reward):
self.action_count[action] += 1
self.q_est[action] += (reward - self.q_est[action]) / self.action_count[action]
# ====== Thompson Sampling 策略 ======
class ThompsonSamplingAgent:
def __init__(self, k=10):
self.k = k
self.alpha = np.ones(k)
self.beta = np.ones(k)
def select_action(self):
samples = np.random.beta(self.alpha, self.beta)
return np.argmax(samples)
def update(self, action, reward):
# 奖励二值化处理 (此处假设 reward > 0 为成功)
if reward > 0:
self.alpha[action] += 1
else:
self.beta[action] += 1
# ====== 实验主流程 ======
def run_experiment(agent_class, runs=2000, steps=1000, **agent_kwargs):
rewards = np.zeros((runs, steps))
for r in range(runs):
env = BanditEnv()
agent = agent_class(**agent_kwargs)
for t in range(steps):
action = agent.select_action()
reward = env.step(action)
agent.update(action, reward)
rewards[r, t] = reward
return rewards.mean(axis=0)
# ====== 对比运行 ======
eps_rewards = run_experiment(EpsilonGreedyAgent, epsilon=0.1)
ts_rewards = run_experiment(ThompsonSamplingAgent)
plt.figure(figsize=(8, 5))
plt.plot(eps_rewards, label='ε-greedy (ε=0.1)')
plt.plot(ts_rewards, label='Thompson Sampling')
plt.xlabel('Steps')
plt.ylabel('Average Reward')
plt.title('Exploration Strategies Comparison')
plt.legend()
plt.grid(True)
plt.show()
运行结果分析
实验结果通常表现为:
- ε-greedy 在初期探索较多,后期趋于稳定;
- Thompson Sampling 收敛更快,且平均奖励更高;
- 探索效率显著优于固定 ε 的随机策略。
五、性能与适用性分析
| 维度 | ε-greedy | Thompson Sampling |
|---|---|---|
| 探索机制 | 固定随机 | 基于不确定性 |
| 参数依赖 | 需人工设定 ε | 自动平衡探索 |
| 收敛速度 | 较慢 | 较快 |
| 实现复杂度 | 简单 | 略高 |
| 典型应用 | 离线强化学习、DQN | 推荐系统、在线广告投放 |
结论:
当环境动态变化或样本量有限时,汤普森采样往往能在较短时间内收敛到近似最优策略,尤其适合在线学习场景。
六、结论与展望
本文通过理论与实证对比了强化学习中两种核心探索策略:ε-greedy 与汤普森采样。结果表明:
- ε-greedy 实现简洁但探索盲目;
- 汤普森采样能动态调整探索强度,实现更高采样效率;
- 在真实场景(如个性化推荐、广告竞价)中,Thompson Sampling 已成为主流算法之一。
未来的研究方向可进一步扩展到:
- Contextual Bandit(上下文多臂老虎机),考虑环境状态特征;
- UCB(Upper Confidence Bound) 策略,与 TS 的理论比较;
- 在 Deep RL 中结合贝叶斯神经网络实现不确定性驱动探索。
- 点赞
- 收藏
- 关注作者
评论(0)