介绍 Q 学习
什么是 Q 学习?
Q 学习是一种**非策略基于价值的方法,它使用 TD 方法来训练它的动作价值函数:**
- 非策略:我们将在本单元结束时讨论它。
- 基于价值的方法:通过训练价值函数或动作价值函数来间接找到最优策略,该函数将告诉我们**每个状态或每个状态-动作对的价值**。
- TD 方法:**在每一步更新它的动作价值函数,而不是在情节结束时更新**。
**Q 学习是用于训练我们的 Q 函数的算法**,一个**动作价值函数**,它确定在特定状态下采取特定动作的价值。
**Q 来自“质量”(价值)在该状态下采取该动作的程度**。
让我们回顾一下价值和奖励之间的区别
- 状态的价值,或状态-动作对的价值,是我们代理从该状态(或状态-动作对)开始,然后按照其策略采取行动所获得的预期累计奖励。
- 奖励是我们在特定状态下执行动作后**从环境中获得的反馈**。
在内部,我们的 Q 函数由**Q 表编码,Q 表是一个表格,每个单元格对应一个状态-动作对的值**。将此 Q 表视为**我们 Q 函数的记忆或备忘单**。
让我们以迷宫为例。
Q 表已初始化。这就是为什么所有值都 = 0 的原因。该表格**包含每个状态和动作的对应状态-动作值**。对于这个简单的示例,状态仅由鼠标的位置定义。因此,我们的 Q 表中有 2*3 行,每行对应鼠标的每个可能位置。在更复杂的情况下,状态可能包含比参与者位置更多的信息。
这里我们看到**初始状态和向上移动的状态-动作值为 0:**
所以:Q 函数使用一个 Q 表**包含每个状态-动作对的值**。给定一个状态和动作,**我们的 Q 函数将在其 Q 表中搜索以输出该值**。
如果我们回顾一下,Q 学习**是 RL 算法,它:**
- 训练一个Q 函数(一个**动作价值函数**),它在内部是一个**Q 表,包含所有状态-动作对的值**。
- 给定一个状态和动作,我们的 Q 函数**将在其 Q 表中搜索对应值**。
- 当训练完成后,**我们拥有一个最优的 Q 函数,这意味着我们拥有最优的 Q 表**。
- 如果我们**拥有最优的 Q 函数**,那么我们**拥有最优的策略**,因为我们**知道在每个状态下要采取的最优动作**。
在开始时,**我们的 Q 表毫无用处,因为它为每个状态-动作对提供了任意值**(大多数情况下,我们将 Q 表初始化为 0)。随着代理**探索环境并更新 Q 表,它将为我们提供越来越接近最优策略的近似值**。
现在我们已经了解了 Q 学习、Q 函数和 Q 表是什么,**让我们深入研究 Q 学习算法**。
Q 学习算法
这是 Q 学习伪代码;让我们研究每个部分,并在**实现它之前用一个简单的示例看看它是如何工作的**。不要被它吓倒,它比看起来简单得多!我们将逐个步骤进行。
步骤 1:我们初始化 Q 表
我们需要为每个状态-动作对初始化 Q 表。**大多数情况下,我们使用 0 的值进行初始化**。
步骤 2:使用 ε-贪婪策略选择一个动作
ε-贪婪策略是一种处理探索/利用权衡的策略。
这个想法是,初始值为 ɛ = 1.0。
- 以 1 — ɛ 的概率 : 我们进行 利用 (也就是我们的代理选择具有最高状态-动作对值的动作)。
- 以 ɛ 的概率: 我们进行探索 (尝试随机动作)。
在训练开始时, 探索的概率会很大,因为 ɛ 非常高,所以大部分时间我们都在探索。 但是随着训练的进行,我们的 Q 表在估计方面越来越好,我们逐渐降低 epsilon 值 ,因为我们需要的探索越来越少,而利用越来越多。
步骤 3:执行动作 At,获得奖励 Rt+1 和下一个状态 St+1
步骤 4:更新 Q(St, At)
请记住,在 TD 学习中,我们会在 交互完成一步后 更新策略或价值函数(取决于我们选择的 RL 方法)。
为了生成我们的 TD 目标, 我们使用了即时奖励,计算方法是找到在下一个状态下使当前 Q 函数最大化的动作。(我们称之为 bootstrap)。 加上下一个状态的折现价值
因此,我们的 更新公式如下
这意味着要更新我们的:
- 我们需要.
- 为了更新给定状态-动作对的 Q 值,我们使用 TD 目标。
我们如何形成 TD 目标?
- 我们获得奖励在执行动作.
- 为了获得下一个状态的最佳状态-动作对值,我们使用贪婪策略来选择下一个最佳动作。请注意,这不是 epsilon-greedy 策略,它始终会采取具有最高状态-动作值的动作。
然后,当完成此 Q 值的更新后,我们从一个新的状态开始,并使用 epsilon-greedy 策略再次 选择我们的动作。
这就是我们说 Q 学习是一种非策略算法的原因。
非策略 vs 策略
区别很微妙
- 非策略: 使用 不同的策略来执行动作(推理)和更新(训练)。
例如,在 Q 学习中,epsilon-greedy 策略(执行策略)与用来 选择最佳下一状态动作值以更新我们的 Q 值(更新策略) 的贪婪策略不同。
与我们在训练过程中使用的策略不同
- 策略: 使用 相同的策略来执行动作和更新。
例如,在 Sarsa 中,另一种基于值的算法, epsilon-greedy 策略选择下一个状态-动作对,而不是贪婪策略。
< > 在 GitHub 上更新