强化学习的基础知识和6种基本算法解释

简介: 本文将涉及强化学习的术语和基本组成部分,以及不同类型的强化学习(无模型、基于模型、在线学习和离线学习)。本文最后用算法来说明不同类型的强化学习。

强化学习的基础知识和概念简介(无模型、在线学习、离线强化学习等)

机器学习(ML)分为三个分支:监督学习、无监督学习和强化学习。

  • 监督学习(SL):关注在给定标记训练数据的情况下获得正确的输出
  • 无监督学习(UL):关注在没有预先存在的标签的情况下发现数据中的模式
  • 强化学习(RL):关注智能体在环境中如何采取行动以最大化累积奖励

通俗地说,强化学习类似于婴儿学习和发现世界,如果有奖励(正强化),婴儿可能会执行一个行动,如果有惩罚(负强化),婴儿就不太可能执行这个行动。这也是来自监督学习和非监督学习的强化学习之间的主要区别,后者从静态数据集学习,而前者从探索中学习。

本文将涉及强化学习的术语和基本组成部分,以及不同类型的强化学习(无模型、基于模型、在线学习和离线学习)。本文最后用算法来说明不同类型的强化学习。

本文的公式基于Stuart J. Russell和Peter Norvig的教科书《Artificial Intelligence: A Modern Approach》(第四版),为了保持数学方程格式的一致性所以略有改动,。

强化学习

在深入研究不同类型的强化学习和算法之前,我们应该熟悉强化学习的组成部分。

  • Agent:从环境中接收感知并执行操作的程序,被翻译成为智能体,但是我个人感觉代理更加恰当,因为它就是作为我们人在强化学习环境下的操作者,所以称为代理或者代理人更恰当
  • Environment:代理所在的真实或虚拟环境
  • State (S):代理当前在环境中所处的状态
  • Action (A):代理在给定状态下可以采取的动作
  • Reward (R):采取行动的奖励(依赖于行动),处于状态的奖励(依赖于状态),或在给定状态下采取行动的奖励(依赖于行动和状态)

在一个婴儿探索世界的例子中,婴儿(代理)在现实世界(环境)中,能够感到高兴或饥饿(状态)。因此,宝宝可以选择哭泣,吃或睡(动作),如果宝宝饿的时候吃了东西(奖励),宝宝就满足了(正奖励)。

强化学习涉及探索,强化学习的输出是一个最优策略。策略描述了在每个状态下要采取的行动;类似于说明书。比如,政策可以是宝宝饿了就吃,否则,宝宝就该睡觉。这也与监督学习形成了对比,监督学习的输出只是一个单一的决策或预测,比策略更简单。

强化学习的目标是通过优化所采取的行动来最大化总累积奖励。和婴儿一样,我们不都想从生活中获得最大的累积利益吗?;)

马尔可夫决策过程(MDP)

由于强化学习涉及一系列最优行为,因此它被认为是一个连续的决策问题,可以使用马尔可夫决策过程建模。

这里的状态(用S表示)被建模为圆圈,动作(用A表示)允许代理在状态之间转换。在上图2中,还有一个转换概率(用T表示),T(S11, A1, S12)是在状态S11采取A1动作后转换到状态S12的概率。我们可以认为动作A1是向右的动作A2是向下的。为了简单起见,我们假设转移概率为1,这样采取行动A1将确保向右移动,而采取行动A2将确保向下移动。

参照图2,设目标为从状态S11开始,结束于状态S23,黄色状态为好(奖励+1),红色状态为坏(奖励-1),紫色为目标状态(奖励+100)。我们希望智能体了解到最佳的行动或路线是通过采取行动A2-A1-A1来走向下-右-右,并获得+1+1+1+100的总奖励。再进一步,利用金钱的时间价值,我们在奖励上应用折扣因子gamma,因为现在的奖励比以后的奖励更好。

综上所述,从状态S11开始执行动作A2-A1-A1,预期效用的数学公式如下:

上面的例子是一个简单的例子,一般情况下都会有一些变化,比如,

  • 转移概率不可能是1,因为需要在行动中考虑不确定性因素,例如采取某些行动可能并不总是保证成功地向右或向下移动。因此,我们需要在这个不确定性上取一个期望值
  • 最优动作可能还不知道,因此一般的表示方式是将动作表示为来自状态的策略,用π(S)表示。
  • 奖励可能不是基于黄色/红色/紫色状态,而是基于前一个状态、行动和下一个状态的组合,用R(S1, π(S1), S2)表示。
  • 问题可能不需要4步就能解决,它可能需要无限多的步骤才能达到目标状态

考虑到这些变化,确定给定状态下策略π的期望效用U(s)的更一般的方程是这样的:

用上图4的话来说,状态的预期效用是折现奖励的预期总和。

所以一个状态的效用与其相邻状态的效用相关;假设选择了最优行动,状态的效用是转移的预期奖励加上下一个状态的折扣效用。这就是递归。在数学上使用下面的方程表示

上图5是著名的Bellman方程,它求解最大效用并推导出最优策略。最优策略是在考虑转移概率的情况下,对所有可能的下一个状态进行求和,使当前状态的最大效用加上下一个状态的折现效用。

回到MDP问题中,图2的最优策略是,如果代理处于状态S11, S12或S13,代理应该通过采取动作A2向下移动,如果代理处于状态S21或S22,则代理应该通过采取动作A1向右移动。这里的最优策略是通过求解Bellman方程来执行获得最大当前和折现未来奖励的行动。

MDP一般用(S, A, T, R)表示,它们分别表示一组状态,动作,转移函数和奖励函数。MDP假设环境是完全可观察的,如果代理不知道它当前处于什么状态,我们将使用部分可观察的MDP (POMDP) 图5中的Bellman方程,可以使用值迭代或策略迭代来求解最优策略,这是一种将效用值从未来状态传递到当前状态的迭代方法。

强化学习类似于求解MDP,但现在转移概率和奖励函数是未知的,代理必须在训练期间执行动作来学习

无模型与基于模型的强化学习

上面提到的MDP示例是基于模型的强化学习。基于模型的强化学习具有转移概率T(s1, a, s2)和奖励函数R(s1, a, s2),它们是未知的,他们表示要解决的问题。

基于模型的方法对仿真很有用。基于模型的强化学习的例子包括值迭代和策略迭代,因为它使用具有转移概率和奖励函数的MDP。

无模型方法不需要知道或学习转移概率来解决问题。我们的代理直接学习策略。

无模型方法对于解决现实问题很有用。无模型强化学习的例子包括Q-learning 和策略搜索,因为它直接学习策略。

离线学习vs.在线学习

离线学习和在线学习又称为被动学习和主动学习。

离线学习

在离线(被动)学习中,通过学习效用函数来解决该问题。给定一个具有未知转移和奖励函数的固定策略,代理试图通过使用该策略执行一系列试验来学习效用函数。

例如,在一辆自动驾驶汽车中,给定一张地图和一个要遵循的大致方向(固定策略),但控制出错(未知的转移概率-向前移动可能导致汽车稍微左转或右转)和未知的行驶时间(奖励函数未知-假设更快到达目的地会带来更多奖励),汽车可以重复运行以了解平均总行驶时间是多少(效用函数)。

离线强化学习的例子包括值迭代和策略迭代,因为它使用使用效用函数的Bellman方程(图5)。其他的一些例子包括直接效用估计、自适应动态规划(Adaptive Dynamic Programming, ADP)和时间差分学习(Temporal-Difference Learning, TD),这些将在后面详细阐述。

在线学习

在线(主动)学习中,通过学习规划或决策来解决问题。对于基于模型的在线强化学习,有探索和使用的阶段。在使用阶段,代理的行为类似于离线学习,采用固定的策略并学习效用函数。在探索阶段,代理执行值迭代或策略迭代以更新策略。

如果使用值迭代更新策略,则使用最大化效用/值的一步前瞻提取最佳行动。如果使用策略迭代更新策略,则可获得最优策略,并可按照建议执行操作。

以自动驾驶汽车为例,在探索阶段,汽车可能会了解到在高速公路上行驶所花费的总时间更快,并选择向高速公路行驶,而不是简单地沿着大方向行驶(策略迭代)。在使用阶段,汽车按照更新的策略以更少的平均总时间(更高的效用)行驶。

在线强化学习的例子包括Exploration、Q-Learning和SARSA,这些将在后面几节中详细阐述。

当状态和动作太多以至于转换概率太多时,在线学习是首选。在线学习中探索和“边学边用”比在离线学习中一次学习所有内容更容易。但是由于探索中的试错法,在线学习也可能很耗时。

需要说明的是:在线学习和基于策略的学习(以及基于策略的离线学习)是有区别的,前者指的是学习(策略可以更改或固定),后者指的是策略(一系列试验来自一个策略还是多个策略)。在本文的最后两部分中,我们将使用算法来解释策略启动和策略关闭。

在理解了不同类型的强化学习之后,让我们深入研究一下算法!

1、直接效用估计 Direct Utility Estimation

无模型的离线学习

在直接效用估计中,代理使用固定策略执行一系列试验,并且状态的效用是从该状态开始的预期总奖励或预期奖励。

以一辆自动驾驶汽车为例,如果汽车在一次试验中从网格 (1, 1) 开始时,未来的总奖励为 +100。在同一次试验中,汽车重新访问该网格,从该点开始的未来总奖励是+300。在另一项试验中,汽车从该网格开始,未来的总奖励为 +200。该网格的预期奖励将是所有试验和对该网格的所有访问的平均奖励,在本例中为 (100 + 300 + 200) / 3。

优点:给定无限次试验,奖励的样本平均值将收敛到真实的预期奖励。

缺点:预期的奖励在每次试验结束时更新,这意味着代理在试验结束前什么都没有学到,导致直接效用估计收敛非常慢。

2、自适应动态规划 (ADP)

基于模型的离线学习

在自适应动态规划 (ADP) 中,代理尝试通过经验学习转换和奖励函数。转换函数是通过计算从当前状态转换到下一个状态的次数来学习的,而奖励函数是在进入该状态时学习的。给定学习到的转换和奖励函数,我们可以解决MDP。

以自动驾驶汽车为例,在给定状态下尝试向前移动 10 次,如果汽车最终向前移动 8 次并向左移动 2 次,我们了解到转换概率为 T(当前状态, 向前,前状态)= 0.8 和 T(当前状态,向前,左状态)= 0.2。

优点:由于环境是完全可观察的,因此很容易通过简单的计数来学习转换模型。

缺点:性能受到代理学习转换模型的能力的限制。这将导致这个问题对于大状态空间来说是很麻烦的,因为学习转换模型需要太多的试验,并且在 MDP 中有太多的方程和未知数需要求解。

3、时间差分学习(TD Learning)

无模型的离线学习

在时间差分学习中,代理学习效用函数并在每次转换后以学习率更新该函数。

这里的时间差分(temporal difference)是指连续状态之间的效用差异,并根据此误差信号更新效用函数,由学习率缩放,如上图6所示。学习率可以是一个固定的参数,也可以是对一个状态访问量增加的递减函数,这有助于效用函数的收敛。

与直接效用估计在每次尝试后进行学习相比,TD学习在每次转换后进行学习,具有更高的效率。

与ADP相比,TD学习不需要学习转换函数和奖励函数,使其计算效率更高,但也需要更长的收敛时间。

ADP和TD学习是离线强化学习算法,但在线强化学习算法中也存在主动ADP和主动TD学习!

4、Exploration

基于模型的在线学习,主动ADP

Exploration 算法是一种主动ADP算法。与被动ADP算法类似,代理试图通过经验学习转换和奖励函数,但主动ADP算法将学习所有动作的结果,而不仅仅是固定的策略。

它还有一个额外的函数,确定代理在现有策略之外采取行动的“好奇程度”。这个函数随着效用的增加而增加,随着经验的减少而减少。

如果状态具有高效用,则探索函数倾向于更频繁地访问该状态。探索功能随着效用的增加而增加。如果状态之前没有被访问过或访问过足够多次,探索函数倾向于选择现有策略之外的动作。如果多次访问状态,则探索函数就不那么“好奇”了。由于好奇程度的降低,探索功能随着经验的增加而降低。

优点:探索策略会快速收敛到零策略损失(最优策略)。

缺点:效用估计的收敛速度不如策略估计的快,因为代理不会频繁地出现低效用状态,因此不知道这些状态的确切效用。

5、Q-Learning

无模型的在线学习,主动TD学习

Q-Learning 是一种主动的 TD 学习算法。图 6 中的更新规则保持不变,但现在状态的效用表示为使用 Q 函数的状态-动作对的效用,因此得名 Q-Learning。被动 TD 学习与主动 TD 学习的更新规则差异如下图 7 所示。

这种差异是由于被动RL都是用固定的策略,因此每个状态只会执行固定的操作,效用仅取决于状态。而在主动RL 中,策略会被更新并且效用现在取决于状态-动作对,因为每个状态可能会根据不同的策略执行不同的动作。

Q-Learning 是 Off-Policy(无既定策略),这意味着目标或下一个状态的效用是使Q函数最大化(而不是下一个状态中可能的操作),我们就不需要下一个状态下的实际动作。

优点:可以应用于复杂领域,因为它是无模型的,代理不需要学习或应用转换模型。

缺点:它不看到未来的情况,所以当奖励稀少时可能会遇到困难。与 ADP 相比,它学习策略的速度较慢,因为本地更新不能确保 Q 值的一致性。

6、SARSA

无模型的在线学习,主动TD学习

SARSA是一种主动TD学习算法。算法名称SARSA源自算法的组件,即状态S、动作A、奖励R、(下一个)状态S和(下一个)动作A。这意味着SARSA算法在更新Q函数之前,要等待下一个状态下执行下一个动作。相比之下,Q-Learning是一种“SARS”算法,因为它不考虑下一个状态的动作。

SARSA 算法知道在下一个状态下采取的动作,并且不需要在下一个状态下的所有可能动作上最大化 Q 函数。Q-Learning与SARSA的更新规则差异显示在下面的图8中。

SARSA 以“策略”或者当前正在运行的策略的下一个状态的效用的q函数为目标,这样就能够获得下一个状态下的实际动作。

也就是说如果Q-Learning不探索其他操作并在下一个状态下遵循当前策略,则它与SARSA相同。

优点:如果整个策略由另一个代理或程序控制,则适合使用策略,这样代理就不会脱离策略并尝试其他操作。

缺点:SARSA不如Q-Learning灵活,因为它不会脱离策略来进行探索。与 ADP 相比,它学习策略的速度较慢,因为本地更新无法确保与 Q 值的一致性。

总结

在本文中我们介绍了强化学习的基本概念,并且讨论了6种算法,并将其分为不同类型的强化学习。

这6种算法是帮助形成对强化学习的基本理解的基本算法。还有更有效的强化学习算法,如深度Q网络(Deep Q Network, DQN)、深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)等算法,具有更实际的应用。

我一直觉得强化学习很有趣,因为它阐明了人类如何学习以及我们如何将这些知识传授给机器人(当然也包括其他应用,如自动驾驶汽车、国际象棋和Alpha Go等)。希望本文能够让你对强化学习有了更多的了解,并且知道了强化学习的不同类型,以及说明每种类型的强化学习的算法。

https://avoid.overfit.cn/post/ddd23fcbbd9b4c1aa1ecbfd10ed0e083

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 机器人
多代理强化学习综述:原理、算法与挑战
多代理强化学习是强化学习的一个子领域,专注于研究在共享环境中共存的多个学习代理的行为。每个代理都受其个体奖励驱动,采取行动以推进自身利益;在某些环境中,这些利益可能与其他代理的利益相冲突,从而产生复杂的群体动态。
195 5
|
4月前
|
机器学习/深度学习 算法 TensorFlow
深入探索强化学习与深度学习的融合:使用TensorFlow框架实现深度Q网络算法及高效调试技巧
【8月更文挑战第31天】强化学习是机器学习的重要分支,尤其在深度学习的推动下,能够解决更为复杂的问题。深度Q网络(DQN)结合了深度学习与强化学习的优势,通过神经网络逼近动作价值函数,在多种任务中表现出色。本文探讨了使用TensorFlow实现DQN算法的方法及其调试技巧。DQN通过神经网络学习不同状态下采取动作的预期回报Q(s,a),处理高维状态空间。
60 1
|
4月前
|
机器学习/深度学习 存储 算法
强化学习实战:基于 PyTorch 的环境搭建与算法实现
【8月更文第29天】强化学习是机器学习的一个重要分支,它让智能体通过与环境交互来学习策略,以最大化长期奖励。本文将介绍如何使用PyTorch实现两种经典的强化学习算法——Deep Q-Network (DQN) 和 Actor-Critic Algorithm with Asynchronous Advantage (A3C)。我们将从环境搭建开始,逐步实现算法的核心部分,并给出完整的代码示例。
273 1
|
4月前
|
测试技术 数据库
探索JSF单元测试秘籍!如何让您的应用更稳固、更高效?揭秘成功背后的测试之道!
【8月更文挑战第31天】在 JavaServer Faces(JSF)应用开发中,确保代码质量和可维护性至关重要。本文详细介绍了如何通过单元测试实现这一目标。首先,阐述了单元测试的重要性及其对应用稳定性的影响;其次,提出了提高 JSF 应用可测试性的设计建议,如避免直接访问外部资源和使用依赖注入;最后,通过一个具体的 `UserBean` 示例,展示了如何利用 JUnit 和 Mockito 框架编写有效的单元测试。通过这些方法,不仅能够确保代码质量,还能提高开发效率和降低维护成本。
54 0
|
5月前
|
机器学习/深度学习 存储 数据采集
强化学习系列:A3C算法解析
【7月更文挑战第13天】A3C算法作为一种高效且广泛应用的强化学习算法,通过结合Actor-Critic结构和异步训练的思想,实现了在复杂环境下的高效学习和优化策略的能力。其并行化的训练方式和优势函数的引入,使得A3C算法在解决大规模连续动作空间和高维状态空间的问题上表现优异。未来,随着技术的不断发展,A3C算法有望在更多领域发挥重要作用,推动强化学习技术的进一步发展。
|
5月前
|
并行计算 算法 Python
Dantzig-Wolfe分解算法解释与Python代码示例
Dantzig-Wolfe分解算法解释与Python代码示例
|
6月前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
59 0
|
7月前
|
机器学习/深度学习 算法 Python
使用Python实现强化学习算法
使用Python实现强化学习算法
84 1
使用Python实现强化学习算法
|
7月前
|
机器学习/深度学习 敏捷开发 算法
算法人生(1):从“强化学习”看如何“战胜拖延”
算法人生系列探讨如何将强化学习理念应用于个人成长。强化学习是一种机器学习方法,通过奖励和惩罚促使智能体优化行为策略。它包括识别环境、小步快跑、强正避负和持续调优四个步骤。将此应用于克服拖延,首先要识别拖延原因并分解目标,其次实施奖惩机制,如延迟满足和替换刺激物,最后持续调整策略以最大化效果。通过这种动态迭代过程,我们可以更好地理解和应对生活中的拖延问题。
111 8
|
7月前
|
机器学习/深度学习 算法
算法人生(2):从“强化学习”看如何“活在当下”
本文探讨了强化学习的原理及其在个人生活中的启示。强化学习强调智能体在动态环境中通过与环境交互学习最优策略,不断迭代优化。这种思想类似于“活在当下”的哲学,要求人们专注于当前状态和决策,不过分依赖历史经验或担忧未来。活在当下意味着全情投入每一刻,不被过去或未来牵绊。通过减少执着,提高觉察力和静心练习,我们可以更好地活在当下,同时兼顾历史经验和未来规划。文章建议实践静心、时间管理和接纳每个瞬间,以实现更低焦虑、更高生活质量的生活艺术。