首页
/ Neuromatch强化学习教程:多臂选择机问题解析

Neuromatch强化学习教程:多臂选择机问题解析

2025-07-10 08:16:44作者:晏闻田Solitary

摘要

本文将深入解析Neuromatch Academy课程中关于强化学习基础的多臂选择机问题。我们将从基本概念出发,逐步探讨如何构建一个能够有效平衡探索与利用的智能体,并通过代码实现展示不同策略在实际应用中的表现。

1. 多臂选择机问题简介

多臂选择机问题是强化学习中最基础也是最经典的场景之一。想象你面前有多个选择机(即"臂"),每个选择机的奖励分布不同但未知。你的目标是通过多次尝试,找出哪个选择机能够提供最高的长期回报。

问题形式化

  • 动作空间(A): 可选择的选择机集合,大小为k
  • 奖励(r): 每次选择臂后获得的数值奖励
  • 目标: 在有限步数内最大化累计奖励

每个臂的奖励服从不同的高斯分布N(μᵢ, σ²),其中均值μᵢ未知,方差σ²=1已知。智能体需要通过尝试来估计每个臂的价值。

2. 动作选择策略

2.1 价值函数

我们使用动作价值函数q(a)来表示对每个臂价值的估计:

q(a) = E[rₜ|aₜ=a]

这个函数表示在时间t选择动作a时,预期获得的奖励值。

2.2 贪婪策略

最简单的策略是每次都选择当前估计价值最高的臂:

aₜ = argmaxₐ qₜ(a)

但这种策略存在明显缺陷:容易陷入局部最优,缺乏探索新可能性的机会。

2.3 探索与利用的平衡

这是强化学习中的核心问题:

  • 利用(Exploitation): 基于当前知识选择最佳动作
  • 探索(Exploration): 尝试可能有潜力的新动作

两者需要适当平衡才能获得最优长期回报。

2.4 ε-贪婪策略

一种简单有效的平衡方法是ε-贪婪策略:

P(aₜ=a) = { 1-ε + ε/N 如果a是最佳动作 ε/N 其他情况 }

其中ε∈[0,1]控制探索概率。有(1-ε)概率选择当前最佳动作,ε概率随机选择(包括最佳动作)。

3. ε-贪婪策略实现

以下是ε-贪婪策略的Python实现:

def epsilon_greedy(q, epsilon):
    """Epsilon-greedy策略
    
    参数:
        q (ndarray): 动作价值数组
        epsilon (float): 随机探索概率
    
    返回:
        int: 选择的动作索引
    """
    if np.random.random() > epsilon:
        # 利用:选择当前最佳动作
        action = np.argmax(q)
    else:
        # 探索:随机选择动作
        action = np.random.choice(len(q))
    return action

可视化示例

我们可以可视化不同动作被选择的频率:

# 参数设置
q = [-2, 5, 0, 1]  # 各动作的估计价值
epsilon = 0.1       # 探索概率

# 可视化选择分布
plot_choices(q, epsilon, epsilon_greedy)

动作选择分布示例

图中显示,虽然最优动作(索引1)被选择最频繁,但其他动作也有被探索的机会。

4. 性能评估指标

评估策略性能时,我们关注两个主要指标:

  1. 累计奖励: 随时间获得的奖励总和
  2. 最优动作选择率: 选择真正最优动作的比例
def plot_parameter_performance(labels, fixed, trial_rewards, trial_optimal):
    """绘制不同参数下的性能比较"""
    fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(16, 6))
    
    # 平均奖励曲线
    ax1.plot(np.mean(trial_rewards, axis=1).T)
    ax1.set(title=f'平均奖励 ({fixed})', xlabel='步数', ylabel='奖励')
    ax1.legend(labels)
    
    # 最优动作选择率
    ax2.plot(np.mean(trial_optimal, axis=1).T)
    ax2.set(title=f'性能 ({fixed})', xlabel='步数', ylabel='最优动作百分比')
    ax2.legend(labels)
    plt.show()

5. 学习率的影响

在实际应用中,我们还需要考虑如何更新价值估计。常用方法是使用学习率α的增量更新:

qₜ₊₁(a) = qₜ(a) + α[rₜ - qₜ(a)]

学习率α控制着新观测值对现有估计的影响程度:

  • α较大: 快速适应新信息,但容易受噪声影响
  • α较小: 稳定但学习速度慢

6. 总结

多臂选择机问题虽然简单,但包含了强化学习的核心概念:

  1. 通过价值函数表示对环境的认知
  2. 策略(如ε-贪婪)平衡探索与利用
  3. 增量更新结合新经验
  4. 性能评估指导策略优化

理解这些基础概念是掌握更复杂强化学习算法的关键。在实际应用中,还需要考虑非平稳环境、上下文信息等扩展场景,但基本原理仍然适用。