Epsilon-Greedy Q-learning
上次更新:2025年2月28日
1. 简介
在本教程中,我们将学习epsilon-greedy Q-learning,一种著名的强化学习算法。我们还会提到一些基本的强化学习概念,例如时序差分和脱离策略学习。然后我们将考察探索与利用之间的权衡以及epsilon-greedy动作选择。最后,我们将讨论学习参数以及如何调整它们。
2. Q-Learning 算法
强化学习 (RL) 是 机器学习 的一个分支,其中系统从动作的结果中学习。 在本教程中,我们将重点介绍 Q-learning,它被认为是一种脱离策略的时序差分 (TD) 控制算法。它由 Watkins 于 1989 年提出。
我们创建并填充一个存储状态-动作对的表格。该表格被称为 或 Q-table,两者可以互换使用。
在我们的 Q-table 中对应于状态
和动作
的状态-动作对。
表示奖励。
表示当前时间步,因此
表示下一个时间步。Alpha (
) 和 gamma (
) 是学习参数,我们将在后面的章节中解释。
在这种情况下,状态-动作对的可能值通过以下公式迭代计算
这被称为动作值函数或 Q 函数。 该函数近似于在给定状态下选择某个动作的值。在这种情况下, 是算法学习的动作值函数。
近似于最优动作值函数
。
该算法的输出是计算出的 值。对于
个状态和
个动作的 Q-table 如下所示
Q-learning的一个简单应用是在迷宫中寻路,其中可能的状态和动作非常简单。通过Q-learning,我们可以教会一个智能体如何向目标移动,并忽略沿途的一些障碍。
让我们假设一个更简单的例子,智能体位于3×3网格的中心。在这个小示例中,可能的状态是智能体可以驻留的网格单元格。可能的动作是(最多)智能体可以移动到的8个相邻单元格。状态和动作值是
在这种情况下,我们可以根据智能体的状态轻松表示Q值。在上面的例子中,我们的状态是智能体位于中心并刚刚开始。当然,智能体最初对其周围环境一无所知。当它采取动作时,它会知道动作值,并且Q表会在每个步骤中更新。经过多次试验后,我们期望相应的Q表部分收敛到
因此,智能体会忽略炸弹并基于动作值向目标移动。
3. Q-Learning 属性
正如我们已经提到的,Q-learning是一种离线策略时序差分(TD)控制算法。现在让我们检查这些属性的含义。
3.1. 无模型强化学习
Q-learning是一种无模型算法。 我们可以将无模型算法视为试错方法。智能体探索环境并直接从动作的结果中学习,而无需构建内部模型或马尔可夫决策过程。
在开始时,智能体知道环境中可能的状态和动作。然后智能体通过探索发现状态转换和奖励。
3.2. 时序差分
它是一种TD算法,在采取一步后会重新评估预测。 即使是不完整的episode也会生成TD算法的输入。总而言之,我们测量上次动作与最初估计值之间的差异,而无需等待最终结果。
在Q-learning中,存储在Q表中的Q值使用估计值进行部分更新。因此,无需等待最终奖励并在Q-learning中更新先前的状态-动作对值。
3.3. 离线学习
Q-learning是一种离线算法。 它基于最优(贪婪)策略来估计状态-动作对的奖励,与智能体的动作无关。离线算法近似最优动作值函数,与策略无关。此外,离线算法可以使用虚构的动作来更新估计值。在这种情况下,Q-learning算法可以探索并受益于在学习阶段未发生的动作。
因此,Q-learning是一种简单有效的强化学习算法。但是,由于贪婪的动作选择,该算法(通常)会选择具有最佳奖励的下一个动作。在这种情况下,动作选择并未基于可能更长更好的路径执行,使其成为一种目光短浅的学习算法。
4. ϵ-贪婪Q-Learning 算法
我们已经展示了如何填充Q表。让我们看一下伪代码,以便更好地理解Q-learning算法的工作方式
algorithm EpsilonGreedyQLearning():
// INPUT
// alpha = learning rate
// gamma = discount factor
// epsilon = exploration rate
// OUTPUT
// A Q-table containing Q(S,A) pairs defining estimated optimal policy π*
// Initialization
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
for each step of episode:
// Choose A from S using policy derived from Q (e.g., epsilon-greedy)
A <- selectAction(Q, S, epsilon)
// Take the action A, observe R, Z
Take action A, observe reward R and next state Z
// Q-learning update
q <- the maximum Q(Z, a) over a
Q(S, A) <- Q(S, A) + alpha * (R + gamma * q - Q(S, A))
S <- S
在伪代码中,我们最初创建一个Q表,其中包含任意值,除了终端状态。终端状态的动作值设置为零。
在伪代码中,我们最初创建一个Q表,其中包含任意值,除了终端状态。终端状态的动作值设置为零。
在初始化之后,我们按照剧集的每个步骤进行。在每个步骤中,我们从我们的 Q-table 中选择一个动作
。我们将在后面的章节中讨论 epsilon-greedy 动作选择。
当我们执行动作 时,我们的状态从
变为
。与此同时,我们获得一个奖励
。然后我们使用这些值来更新我们的 Q-table 条目
。我们重复直到达到一个终止状态。
5. 动作选择
强化学习算法的目标是教代理如何在不同的情况下表现。代理在训练过程中发现需要采取哪些行动。
5.1. 探索与利用的权衡
为了更好地理解如何执行动作选择,我们需要首先理解探索和利用的概念。
在强化学习中,代理试图发现它的环境。如上所述,无模型算法依赖于试错。在这些试验中,代理有一组要选择的动作。其中一些动作是先前选择的,代理可能会猜想结果。另一方面,有些动作以前从未采取过。
在一个多臂老虎机问题中,代理最初对环境一无所知或了解有限。代理可以选择通过选择一个结果未知的动作来探索,以获取有关环境的更多信息。或者,它可以选择利用并选择基于其先验环境知识的动作以获得良好的奖励。
代理已经知道的内容与探索随机动作的概念称为探索-利用的权衡。 当代理探索时,它可以改进其当前知识并在长期内获得更好的奖励。但是,当它利用时,即使它是一种次优行为,它也能立即获得更多的奖励。由于代理无法同时做这两件事,因此存在权衡。
正如我们已经说过的那样,最初代理不知道可能动作的结果。因此,需要足够的初始探索。如果某些动作比其他动作导致更好的奖励,我们希望代理选择这些选项。但是,仅仅利用代理已经知道的内容是一种危险的方法。
例如,一个贪婪的代理可能会陷入次优状态。或者,随着时间的推移,环境可能会发生变化。因此,我们希望在探索和利用之间保持平衡;不要放弃其中任何一个。
5.2. Epsilon-Greedy 动作选择
在 Q-learning 中,我们基于其奖励来选择一个动作。 代理总是选择最优动作。因此,它会为给定的状态生成最大的可能奖励。
在 epsilon-greedy 动作选择中,代理使用利用来利用先验知识和探索来寻找新选项
epsilon-greedy 方法大多数时候会选择估计回报最高的动作。 目标是在探索和利用之间取得平衡。 探索允许我们尝试新的事物,有时与我们已经学到的知识相矛盾。
以一个小的概率 ,我们选择探索,即 不利用我们迄今为止所学的知识。 在这种情况下,动作是随机选择的,与动作价值估计无关。
如果我们进行无限次的试验,每个动作都会被执行无限次。 因此,epsilon-greedy 动作选择策略肯定会发现最优动作。
现在让我们考虑实现
algorithm selectAction(Q, S, epsilon):
// INPUT
// Q = Q-table
// S = current state
// epsilon = exploration rate
// OUTPUT
// Selected action
n <- uniform random number between 0 and 1
if n < epsilon
A <- random action from the action space
else:
A <- maxQ(S, .)
return A
如上所述,通常会选择最优动作,即 Q 值最高的动作。 否则,算法会探索一个随机动作。
epsilon-greedy 算法易于理解和实现。 然而,它很难被超越,并且效果与更复杂的算法一样好。
我们需要记住,使用其他动作选择方法是可能的。 根据具体问题,不同的策略可能表现更好。 例如,softmax 动作选择策略通过将值映射到动作概率来控制探索和利用的相对水平。 这里我们使用与softmax 激活函数相同的公式,我们在分类器神经网络的最后一层中使用该公式。
6. Epsilon-Greedy Q-learning 参数
正如我们从伪代码中看到的,该算法采用三个参数。 其中两个(alpha 和 gamma)与 Q-learning 相关。 另一方面,第三个参数(epsilon)与 epsilon-greedy 动作选择相关。
让我们回顾一下用于更新 Q 值的 Q 函数
现在,让我们看一下参数。
6.1. Alpha (
)
与其他机器学习算法类似,alpha () 定义了学习率或步长。 正如我们从上面的方程中看到的那样,状态的新 Q 值是通过将旧 Q 值增加 alpha 乘以所选动作的 Q 值来计算的。
Alpha 是零和一之间的实数 ()。 如果我们将 alpha 设置为零,则 agent 不会从新动作中学习任何东西。 相反,如果我们将 alpha 设置为 1,则 agent 完全忽略先验知识,并且只重视最近的信息。 较高的 alpha 值会使 Q 值更快地变化。
6.2. Gamma (
)
Gamma () 是折扣因子。 在 Q-learning 中,gamma 乘以对未来最优值的估计。 gamma 参数定义了下一个奖励的重要性。
Gamma 是一个介于 0 和 1 之间的实数 ()。 如果我们将 gamma 设置为零,则智能体完全忽略未来的奖励。 这样的智能体只考虑当前奖励。 另一方面,如果我们设置 gamma 为 1,该算法将寻找长期的较高奖励。 较高的 gamma 值可能会阻止收敛:对未打折的奖励求和会导致较高的 Q 值。
6.3. Epsilon (
)
Epsilon () 参数与 Q 学习算法中的 epsilon-贪婪动作选择过程相关。 在动作选择步骤中,我们基于已有的 Q 值来选择特定的动作。 epsilon 参数为算法引入随机性,迫使我们尝试不同的动作。 这有助于避免陷入局部最优解。
如果 epsilon 设置为 0,我们从不探索,而是始终利用我们已有的知识。 相反,将 epsilon 设置为 1 迫使算法始终执行随机动作,并且从不利用过去的知识。 通常,epsilon 被选为一个接近 0 的小数值。
7. 结论
在本文中,我们讨论了 epsilon-贪婪 Q 学习和 epsilon-贪婪动作选择过程。 我们学习了一些与 Q 学习相关的强化学习概念,即时序差分、离线学习和模型无关学习算法。 然后我们讨论了探索与利用的权衡。 最后,我们检查了 epsilon-贪婪 Q 学习算法的超参数以及如何调整它们。