1. 简介

在本篇教程中,我们将深入讲解 Epsilon-Greedy Q-learning,这是一种经典的强化学习算法。我们会简要介绍一些基础概念,例如时间差分(Temporal Difference)和离策略学习(Off-policy Learning),重点分析探索与利用的权衡问题,以及 Epsilon-Greedy 的动作选择策略。最后还会讨论 Q-learning 的学习参数及其调优方法。

2. Q-learning 算法

Q-learning 是强化学习中一种非常基础且广为应用的算法。它属于 离策略、时间差分控制算法,最早由 Watkins 于 1989 年提出。

在 Q-learning 中,我们维护一个 Q 表(Q-table),用于记录状态(State)与动作(Action)的对应价值。这个表的每个条目 Q(S, A) 表示在状态 S 下采取动作 A 的预期价值。

Q-learning 的更新公式如下:

$$ Q(S_t, A_t) \gets Q(S_t, A_t) + \alpha \left[ R_{t+1} + \gamma \max_{a} Q(S_{t+1}, a) - Q(S_t, A_t) \right] $$

其中:

  • $ \alpha $:学习率(Learning Rate)
  • $ \gamma $:折扣因子(Discount Factor)
  • $ R_{t+1} $:执行动作后获得的即时奖励
  • $ \max_{a} Q(S_{t+1}, a) $:下一状态中最大 Q 值

这个公式也被称为 Q 函数(Action-value Function),它帮助我们估算在某个状态下采取某个动作的价值。最终,Q 表将逼近最优动作价值函数 $ Q^* $。

Q 表结构示例

假设我们有 N 个状态和 M 个动作,Q 表的结构大致如下:

q learning Q table

举个简单的例子,比如在一个 3×3 的网格中移动的智能体:

  • 状态(S):网格中的每个格子
  • 动作(A):最多 8 个方向(上下左右 + 斜向)

初始状态下,Q 表中所有值都是随机的:

q learning state action

随着训练进行,Q 表逐渐收敛,最终会形成如下结构(假设目标是右下角,有炸弹需要避开):

q learning q table agent

此时,智能体会根据 Q 表选择动作,避开炸弹,朝目标移动。

3. Q-learning 特性

Q-learning 的几个关键特性如下:

3.1. 无模型强化学习(Model-Free RL)

Q-learning 是一种 无模型算法,即不需要事先知道状态转移概率或奖励函数。智能体通过试错来学习,直接从环境中获得反馈。

✅ 优点:无需建模环境
❌ 缺点:学习效率较低,尤其在状态空间大时

3.2. 时间差分(Temporal Difference)

Q-learning 是 TD 算法的一种,其核心思想是:

  • 每一步都更新 Q 值
  • 不需要等到一个完整的 episode 结束

这意味着即使在一个 episode 中途,只要执行了一个动作,就可以立即更新对应的 Q 值。

3.3. 离策略学习(Off-Policy Learning)

Q-learning 是一种 离策略算法,它的更新策略与当前策略无关。它总是朝着最优策略(Greedy)逼近,即使当前策略是随机的。

⚠️ 踩坑点:很多初学者误以为 Q-learning 是 On-policy,其实不是。它使用的是目标策略(Greedy)来更新,而当前策略可以是探索性的(如 Epsilon-greedy)。

4. Epsilon-Greedy Q-learning 算法

Epsilon-Greedy 是 Q-learning 中最常用的动作选择策略之一。它的核心思想是:

  • 以 $ 1 - \epsilon $ 概率选择当前最优动作(Exploit)
  • 以 $ \epsilon $ 概率随机选择动作(Explore)

伪代码

algorithm EpsilonGreedyQLearning():
    // 初始化 Q 表
    Initialize Q(s,a) arbitrarily, for all s in S, a in A(s), except for Q(terminal, .) <- 0
    
    for each episode:
        Initialize state S
        while S is not terminal:
            // 选择动作
            A <- selectAction(Q, S, epsilon)
            // 执行动作,获得奖励和新状态
            Take action A, observe reward R and next state Z
            // 更新 Q 表
            q <- max(Q(Z, a))
            Q(S, A) <- Q(S, A) + alpha * (R + gamma * q - Q(S, A))
            S <- Z

selectAction 函数

algorithm selectAction(Q, S, epsilon):
    n <- random number between 0 and 1
    if n < epsilon:
        A <- random action
    else:
        A <- argmax(Q(S, a))
    return A

5. 动作选择策略

5.1. 探索 vs 利用(Exploration vs Exploitation)

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

  • Exploitation(利用):选择已知收益高的动作,获取即时奖励
  • Exploration(探索):尝试未知动作,可能发现更高收益的路径

⚠️ 踩坑点:如果只利用,容易陷入局部最优;如果只探索,学习效率太低。

5.2. Epsilon-Greedy 策略

Epsilon-Greedy 是解决探索与利用矛盾的常用方法。它的选择逻辑如下图所示:

q learning epsilon greedy 1

  • 以 $ \epsilon $ 概率随机选择动作(探索)
  • 以 $ 1 - \epsilon $ 概率选择当前最优动作(利用)

这种方式确保了在有限时间内能尝试所有动作,从而找到全局最优解。

6. Epsilon-Greedy Q-learning 参数

Q-learning 的性能很大程度上取决于参数设置。以下是三个关键参数:

6.1. 学习率 Alpha (\boldsymbol{\alpha})

  • 控制更新步长
  • $ \alpha \in (0, 1] $
  • $ \alpha=0 $:不学习新信息
  • $ \alpha=1 $:完全忽略历史经验

✅ 建议:通常设置为 0.1~0.5 之间

6.2. 折扣因子 Gamma (\boldsymbol{\gamma})

  • 控制未来奖励的重要性
  • $ \gamma \in [0, 1] $
  • $ \gamma=0 $:只关注当前奖励
  • $ \gamma=1 $:无限期关注未来奖励

✅ 建议:大多数场景设置为 0.9~0.99

6.3. 探索率 Epsilon (\boldsymbol{\epsilon})

  • 控制探索与利用的平衡
  • $ \epsilon \in [0, 1] $
  • $ \epsilon=0 $:完全利用已有知识
  • $ \epsilon=1 $:完全随机探索

✅ 建议:初期设为 0.1~0.2,随着训练进行逐步降低(Epsilon Decay)

7. 总结

在本篇文章中,我们深入探讨了:

  • Q-learning 算法 及其更新机制
  • Epsilon-Greedy 策略 在动作选择中的作用
  • 探索与利用的平衡 是强化学习的关键
  • Alpha、Gamma、Epsilon 三个参数的含义及调优建议

Epsilon-Greedy Q-learning 是一个简单但非常有效的算法,适合入门和实践。在实际项目中,我们还可以结合更复杂的策略(如 Softmax、UCB)来进一步提升性能。


原始标题:Epsilon-Greedy Q-learning