深度强化学习课程文档

Q-Learning 简介

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Q-Learning 简介

什么是 Q-Learning?

Q-Learning 是一种**异策略(off-policy)的基于价值的方法,它使用 TD 方法来训练其动作价值函数:**

  • *异策略*:我们将在本单元末尾讨论这个问题。
  • *基于价值的方法*:通过训练一个价值函数或动作价值函数来间接找到最优策略,该函数将告诉我们**每个状态或每个状态-动作对的价值。**
  • *TD 方法*:**在每一步而不是在剧集结束时更新其动作价值函数。**

**Q-Learning 是我们用来训练 Q 函数的算法**,它是一个**动作价值函数**,用于确定处于特定状态并在该状态下采取特定动作的价值。

Q-function
给定一个状态和动作,我们的 Q 函数输出一个状态-动作值(也称为 Q 值)

**Q 来自于该状态下该动作的“质量”(价值)。**

让我们回顾一下价值和奖励之间的区别

  • 一个*状态*或一个*状态-动作对的价值*是智能体如果从该状态(或状态-动作对)开始并按照其策略行动所获得的预期累积奖励。
  • *奖励*是智能体在某个状态下执行某个动作后**从环境中获得的反馈**。

在内部,我们的 Q 函数由**一个 Q 表编码,这是一个表格,其中每个单元格对应一个状态-动作对的价值。**可以将此 Q 表视为我们 Q 函数的**记忆或备忘录。**

让我们通过一个迷宫的例子。

Maze example

Q 表被初始化。这就是为什么所有值都为 0。该表格**包含每个状态和动作对应的状态-动作值。**对于这个简单的例子,状态仅由老鼠的位置定义。因此,我们的 Q 表有 2*3 行,每行对应老鼠的一个可能位置。在更复杂的场景中,状态可能包含比行动者位置更多的信息。

Maze example

在这里我们看到**初始状态并向上移动的状态-动作价值为 0:**

Maze example

所以:Q 函数使用一个**包含每个状态-动作对价值**的 Q 表。给定一个状态和动作,**我们的 Q 函数将在其 Q 表中搜索并输出价值。**

Q-function

如果我们回顾一下,*Q-Learning*是**以下强化学习算法:**

  • 训练一个 *Q 函数*(一个**动作价值函数**),它在内部是一个**包含所有状态-动作对价值的 Q 表。**
  • 给定一个状态和动作,我们的 Q 函数**将搜索其 Q 表以获取相应的值。**
  • 当训练完成时,**我们拥有一个最优的 Q 函数,这意味着我们拥有最优的 Q 表。**
  • 如果我们**拥有一个最优的 Q 函数**,我们就**拥有一个最优策略**,因为我们**知道在每个状态下要采取的最佳行动。**
Link value policy

一开始,**我们的 Q 表是无用的,因为它为每个状态-动作对提供了任意值**(大多数情况下,我们将 Q 表初始化为 0)。随着智能体**探索环境并我们更新 Q 表,它将为我们提供越来越好的最优策略近似。**

Q-learning
我们在这里看到,通过训练,我们的 Q 表变得更好了,因为有了它,我们就可以知道每个状态-动作对的价值。

现在我们理解了 Q-Learning、Q 函数和 Q 表是什么,**让我们深入了解 Q-Learning 算法**。

Q-Learning 算法

这是 Q-Learning 伪代码;让我们研究每个部分,并**通过一个简单的例子来了解它是如何工作的,然后再实现它。**不要被它吓到,它看起来比实际简单!我们将逐步介绍每个步骤。

Q-learning

步骤 1:初始化 Q 表

Q-learning

我们需要为每个状态-动作对初始化 Q 表。**大多数情况下,我们将其初始化为 0。**

步骤 2:使用 epsilon-greedy 策略选择一个动作

Q-learning

epsilon-greedy 策略是一种处理探索/利用权衡的策略。

其思想是,初始 ɛ 值为 1.0 时:

  • 以 *1 - ɛ 的概率*:我们进行**利用**(即我们的智能体选择具有最高状态-动作对值的动作)。
  • 以 ɛ 的概率:**我们进行探索**(尝试随机动作)。

在训练开始时,**进行探索的概率会非常大,因为 ɛ 值非常高,所以大部分时间我们都会进行探索。**但随着训练的进行,我们的**Q 表在估计方面会越来越好,我们逐渐降低 epsilon 值**,因为我们需要的探索越来越少,而利用越来越多。

Q-learning

步骤 3:执行动作 At,获取奖励 Rt+1 和下一个状态 St+1

Q-learning

步骤 4:更新 Q(St, At)

请记住,在 TD 学习中,我们会在**一次交互步骤后更新我们的策略或价值函数**(取决于我们选择的强化学习方法)。

为了生成我们的 TD 目标,**我们使用了即时奖励Rt+1R_{t+1} 加上下一个状态的折扣价值**,通过找到使当前 Q 函数在下一个状态下最大化的动作来计算。(我们称之为引导)。

Q-learning

因此,我们的Q(St,At)Q(S_t, A_t) 更新公式如下:

Q-learning

这意味着要更新我们的Q(St,At)Q(S_t, A_t):

  • 我们需要St,At,Rt+1,St+1S_t, A_t, R_{t+1}, S_{t+1}.
  • 为了更新给定状态-动作对的 Q 值,我们使用 TD 目标。

我们如何形成 TD 目标?

  1. 我们获得奖励Rt+1R_{t+1}采取行动后AtA_t.
  2. 为了获得下一个状态的**最佳状态-动作对值**,我们使用贪婪策略选择下一个最佳动作。请注意,这不是 epsilon-greedy 策略,它将始终选择具有最高状态-动作值的动作。

然后,当 Q 值更新完成后,我们进入一个新状态,并**再次使用 epsilon-greedy 策略**选择我们的动作。

这就是我们说 Q 学习是异策略算法的原因。

异策略与同策略

区别微妙。

  • *异策略*:使用**不同的策略进行行动(推断)和更新(训练)。**

例如,在 Q-Learning 中,epsilon-greedy 策略(行动策略)与用于**选择最佳下一个状态-动作值以更新我们的 Q 值(更新策略)的贪婪策略**不同。

Off-on policy
行动策略

与我们在训练部分使用的策略不同

Off-on policy
更新策略
  • *同策略*:使用**相同的策略进行行动和更新。**

例如,对于 Sarsa(另一种基于价值的算法),**epsilon-greedy 策略选择下一个状态-动作对,而不是贪婪策略。**

Off-on policy
Sarsa
Off-on policy
< > 在 GitHub 上更新