AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


图解强化学习 — Q-Learning
发布日期:2024-05-16 14:19:03 浏览次数: 1868


本系列文章在 Ketan Doshi 博客专栏的基础上,参考李宏毅老师的讲稿及《动手学强化学习》一书中的相关内容,并拟在后续的章节中加入强化学习在大语言模型中的一些应用,旨在通过简单的语言,让大家对 RL 的原理和应用有一个深入的理解。


一、回顾及引言

本文为关于强化学习的第 6 篇文章,介绍 Q-Learning 算法的基本原理。在后续的文章中,将以本篇内容为基础,讲解 DQN 算法的工作原理。在前 5 篇文章中,我们分别介绍了强化学习的基础概念,流行的强化学习算法分类,贝尔曼方程的运作原理以及强化学习的算法分类。前 5 篇文章的链接如下:

二、Q-Learning算法概述
Q-Learning 是之前讨论过的查找表方法中最有趣的一种,它也是 Deep Q Learning 的基础。
Q-learning 算法使用一个状态-动作值 Q 表(也称为 Q 值表)。该 Q 表中每个状态有一行,每个动作有一列。每个单元格都包含相应状态-动作对的估计 Q 值。


初始状态下,所有的 Q 值都设置为为零。随着 Agent 与环境互动并获得反馈,算法会反复改进这些 Q 值,直到它们收敛到最优 Q 值。算法利用贝尔曼方程对其进行更新。



三、如何构建 Q 表?

以一个简单的游戏为例。设想一个3x3的网格,玩家从“Start”方格出发,目标是到达“Goal”方格,到达后将获得5分 Reward。某些方格是安全的,某些则有危险,相应的 Reward 分别为 0 分和 -10分。在任何一个方格中,玩家可以选择“上下左右”四个方向移动。



此游戏共有 9 个不同的位置状态,因为玩家可以位于网格的任意一个方格中;游戏中又有四种可能的移动方向。因此-可以构建了一个 9 行 4 列的 Q 表。


现在我们可以使用Q表来查询任何位置和动作组合的Q值。如上所述,初始状态下,将所有的 Q 值都设置为 0。在特定的单元格,比如 ((2, 2), up),这个单元格说对应的值就是位置 (2, 2) 和动作‘up’的 Q 值(或状态-动作值)。




四、Q-Learning 算法整体流程

正如我们之前看到的, Agent 通过学习每个状态-动作对的最优 Q 值来确定最优策略。


1-最优Q值(也称为最优动作价值函数)是指对于给定状态 ? 和动作 ?,能够获得的最大预期总回报的估计。最优 Q 值表明了智能体在遵循最优策略时,从当前状态 ? 开始并选择动作 ?,随后持续采取最优动作所能达到的最高期望效用。

2-之所以称之为“最优”Q值,是因为它基于最优策略的假设:智能体在每个后续状态中都能采取最佳动作。这是一个理想状态,实际中智能体需要通过学习和逐步逼近这些最优值。

3-最优 Q 值为最优策略的形成提供了直接的基础。如果已经知道了每个状态-动作对的最优 Q 值,那么最优策略可以通过以下方式简单确定:

4-在给定的状态 ? 下,选择能够产生最高 Q 值的动作 a,并将这样的选择应用于所有状态,形成的动作集合确实构成了最优策略。


最初,Agent 会随机选择动作。但通过与环境的交互,它会根据获得的 Reward 来学习哪些动作更好。它利用这些经验逐步更新 Q 值。


此过程与我们在上一篇文章中探讨的流程非常类似,因此不必重复解释。



Q-Learning算法的主要特点在其如何更新估计值。第四步中更新估计值的的方程基于贝尔曼方程,实际上采用了我们之前研究过的公式的一个略有不同的变体。


接下来,我们将深入探讨这一更新过程及其数学原理。



五、Q Learning 在每个时间步中使用两种不同的动作
让我们通过一个例子来详细了解。

在算法的第 2 步,Agent 利用 ε-贪婪策略 从当前状态 (S1) 选择一个动作 (a1)。这个动作被传递给环境执行,Agent 随后会收到一个Reward (R1) 和下一个状态 (S2) 的反馈。



接下来,在第四步,算法需要使用来自下一个状态的Q值来更新当前状态和选定动作的Q值 (Q1)。


这里展示了Q-Learning算法的一个特别之处。下一个状态中有多个可选动作,算法应该选用哪个动作呢?它选择了下一个状态中 Q 值最高的动作 (a4)。需要明确的是,这个动作只用于更新 Q1,并不意味着它一定会在下一个时间步骤中执行这个动作。



确定了目标 Q 值之后,算法会使用更新公式,利用 Reward 和目标 Q 值计算当前 Q 值的新值,并更新当前Q值。


计算当前 Q 值的新值:



更新当前的 Q 值:



简而言之,这里涉及到两个动作:

当前动作(Current action) —— 实际在环境中执行的当前状态的动作,其 Q 值将更新。

目标动作(Target Action)—— 来自下一个状态的最高Q值的动作,这个动作的 Q 值用于更新当前动作的Q值。



这种双重动作是 Q-Learning 的特点:



这听起来可稍显复杂,继续观察下一个时间步发生的情况。


现在下一个状态已经变成了新的当前状态。Agent 再次利用ε-贪婪策略选择动作。


如果Agent倾向于探索而非利用,它执行的动作(a2)将与之前时间步骤中用于更新Q值的目标动作(a4)不同,而是选择了 a2 动作。



这种方式被称为“离线策略(off-policy)”学习,因为实际执行的动作与用于学习的目标动作不同。

行为策略(behavior policy)是 Agent 在与环境互动时实际遵循的策略。这个策略决定了 Agent 在每个状态下选择哪个动作来执行。行为策略一般包含探索成分,如ε-贪婪策略。目标策略(Target Policy)是 Agent 希望建立和学习的策略,这是 Agent 认为最优的策略,能够在每个状态下选择最大化预期回报的动作。

离线策略(off-policy)算法表示行为策略和目标策略是同一个策略;在线策略(on-policy)算法表示行为策略和目标策略不是同一个策略。



六、Q表是如何从 0 开始被逐渐填充的

游戏开始时,Agent并不清楚哪些动作优于其他动作。因此,我们最初将Q表的所有值设为0。


随后,算法采用ε-贪婪策略选择一个动作,从环境获取反馈,并使用以下公式更新Q值。这个新的 Q 值反映了我们观察到的 Reward。



以这样的方式,Q表中的一个单元格开始从无到有,开始填充环境提供的实际数据。

我们的目标是使 Q 值逐渐接近其理论最优值。我们已经看到 Q 值开始有所填充,但关键在于,这些更新是否随机还是趋向于更高的准确性?


七、为何估值会随时间提高其准确性?(第一部分)

若认真思考,Q-Learning 算法能够收敛至最优值确实有点儿令人难以置信。


从任意的初始估计开始,然后在每一个时间步,你都会用新的估计来更新之前的估计。


为什么这样做最终能得到更准确的结果呢?


原因在于,每隔一个时间步长,估算值都会根据实际观测结果进行更新,从而变得更加精确。


更新公式结合了三个因素,按一定的权重比例计算:



更新公式中的三个项中有两个是估计值,起初并不十分准确。我们稍后再讨论这两个项。


但对于第一项,即获得的 Reward 是具体数据。这样,Agent 就能根据环境的实际经验来学习和改进自己的估计。

Q 值通过真实 Reward 进行更新

为了更直观地理解这一点,让我们通过一个例子,关注 Q 表中的一个特定单元(即一个状态-动作对),并观察该单元更新过程的演变。看其随时间变化,状态 S3 和动作 a1(对应橙色单元)的 Q 值会发生什么。


第一次访问这个单元时,它的 Q 值是0。我们使用更新公式,并以我们观察到的Reward(R1)为基础来更新这个单元。



现在,当我们再次访问这个状态-动作对时,情况如何呢?(可能发生在同一个回合中或未来的回合中。


这次我们可以看到,表中其他一些 Q 值也填充了数值。随着 Agent 遵循不同路径并开始访问状态-动作对,那些原本为空的单元被填充了数据。


此外,每次 Reward(即使是同一状态下的同一动作)都可能不同。这种变化反映了环境的动态性和不同情境下的结果差异。



我们再次访问那个单元格。需要注意,目标动作(在图中以紫色表示)在我们三次访问中可以不同。


让我们将对这一单元的所有访问放在一张图中,以便可以直观地看到随时间的推移而发生的变化。随着我们在多个回合中多次访问这一状态-动作对,我们每次都会收集到 Reward。尽管单次 Reward 的数值可能有波动,但随着时间的推移,这些Reward会逐渐稳定于它们的期望值。这也使得Q值随时间趋于稳定。



再回顾一下Q 值(或状态-动作值)的含义。它表示从某一特定状态开始采取特定动作,然后按照策略行动直至回合结束,并计算此过程的总回报。如果你多次重复此过程,经过多个回合,你得到的平均回报就是Q值。



八、为什么估计值会随时间变得更准确?(第二部分)

我们已经观察到,随着多次迭代,Reward 项趋向于它的平均或预期值。


但是,更新公式中的其他两个估计项怎么办呢?虽然这些估计最初非常不精确,但随着时间的推移,它们也通过实际观测得到更新,因此精确度也在不断提高。



以一个回合中最后两个时间步为例,当到达终点状态时可以看到,Q 值准确性如何仅基于 Reward 项数据更新得到提升,而不依赖于任何估计值。随后,这个 Q 值的准确性的提高将向前一个Q值扩散,并且如此反复,逐步增强沿路径上的 Q 值的准确性。


在回合结束时,我们会关注终止时 Q 值(蓝色单元)和终止前 Q 值(绿色单元)的更新情况。


假设在第一回合结束时,在(T-1)时间步,Agent 采取了一个动作。基于所选择的目标动作,终止前的Q值得到了更新。


简便起见,使用 Q2 和 Q6 代替 Q(2, 2) 和 Q(6, 4)


下一个时间步是第 1 回合的最后一个时间步。在 T 时间步骤中,Agent 选择一个动作到达了终止状态。


由于下一个状态是终止状态,不存在目标动作。因此,更新公式中的“max”项为0。这意味着终止Q值的更新完全基于实际的Reward数据,不依赖于任何估计值。这将提高终止时 Q 值的准确性。本回合到此结束。



每当我们在后续回合中再次访问终止前的状态时,比如在第二回合的(T-1)时间步,终止前Q值会根据目标动作进行更新,就像之前一样。


更新公式中的“max”项对应于终止Q值。因此,当更新发生时,就像终止Q值向终止前Q值回溯传递一样。



让我们将这三个时间步骤展示在同一张图上,以便直观地观察随时间的演进。我们已经看到终止Q值(蓝色单元)是根据实际数据更新的,而不是估计。我们也注意到这个终止Q值向终止前Q值(绿色单元)逐渐渗透。



因此,随着终止Q值准确性的逐步提升,终止前Q值也逐渐变得更加准确。


接下来,这些Q值会逐步回溯到(T-2)时间步等更早的步骤。


这样,随着估算的 Q 值沿着插曲的路径“涓涓细流”般进行回流,两个估算的 Q 值项也以实际观测为基础,准确性不断提高。



随着越来越多回合进行,Q表估计变得越来越精确。

执行的迭代次数越多,更精确的Q值就会逐渐传递到路径上更远的单元。随着每个单元接受更多的更新,其Q值也变得越来越精确。


随着进行越来越多的回合,Q表中的值经历了多次更新。


Q值收敛到最优值

我们已经看到 Q 值正在变得更加精确。但我们真正需要的是那些最优值(Optimal Values)。我们如何知道我们正在接近这一目标呢?


在第一篇文章中,我们了解到状态-动作值总是基于某种策略。Q-Learning算法隐式地采用ε-贪婪策略来计算它的Q值。


这种策略鼓励Agent尽可能地探索更多的状态和动作。它进行的迭代次数越多,探索的路径越广,我们就越有理由相信它已经尝试了所有可能的选项以寻找更优的Q值。


这就是ε-贪婪策略最终能找到最优Q值的两个理由。虽然这些理解还是非正式的,但我们可以更正式的数学证明中获得一些安慰!


每进行一次迭代,Q值就会有所改善 如果你进行了足够多的迭代,你将会评估所有可能的选项,而且你不会再找到更好的Q值。随着每次更新,Q值逐渐变得更精确,越来越接近最优值。



虽然这不是一个严格的证明,但希望这能让你对Q-Learning如何工作以及为何它会收敛有一个直观的理解。


在下一篇文章中,我们将开始探讨强化学习中更为有趣的部分,开启我们对深度Q网络的研究之旅。




总结:尝试用最简单的语言概括 Q-Learning

自己概括的

1-使用离线策略。一方面保证了足够多的探索,另外一方面保证了能收敛到最优 Q 值。

2-直观理解收敛性的方法:以最后一个时间步和其前一个的时间步为例,每次迭代到最后一个时间步,最后一个时间步都是基于实际的奖励值进行更新,从而其前的时间步在迭代时,也逐渐得到了实际奖励值占较大比重的 Q 值。随时间进行,一直回流到整个路径上的 Q 值。

GPT4.0 概括的:



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询