深度强化学习简介
深度强化学习简介
深度强化学习课程第一章 – Hugging Face 🤗
⚠️ 这篇文章的更新版本在这里 👉 https://huggingface.co/deep-rl-course/unit1/introduction
本文是深度强化学习课程的一部分。这是一门从入门到专家的免费课程。请查看课程大纲。
⚠️ 这篇文章的更新版本在这里 👉 https://huggingface.co/deep-rl-course/unit1/introduction
本文是深度强化学习课程的一部分。这是一门从入门到专家的免费课程。请查看课程大纲。
欢迎来到人工智能中最引人入胜的话题:深度强化学习。
深度强化学习是一种机器学习的类型,其中代理通过执行动作并观察结果来学习在环境中如何行为。
自2013年以来,《深度Q学习》论文的发表以来,我们已经见证了许多突破。从OpenAI Five击败世界上一些最好的Dota2选手,到Dexterity项目,我们正处于深度强化学习研究的激动时刻。
此外,自2018年以来,您现在可以访问众多令人惊叹的环境和库来构建您的代理。
这就是为什么现在是开始学习的最佳时机,而且通过这门课程,您来对了地方。
是的,因为本文是深度强化学习课程的第一单元,这是一门从入门到专家的免费课程,您将学习理论和实践,并使用著名的深度强化学习库,如Stable Baselines3、RL Baselines3 Zoo和RLlib。
在这门免费课程中,您将会:
- 📖 学习深度强化学习的理论和实践。
- 🧑💻 掌握使用著名的深度强化学习库,如Stable Baselines3、RL Baselines3 Zoo和RLlib。
- 🤖 在独特的环境中训练代理,例如SnowballFight、Huggy the Doggo 🐶,以及经典环境,如Space Invaders和PyBullet。
- 💾 通过一行代码将训练好的代理发布到Hub。同时也可以从社区下载强大的代理。
- 🏆 参加挑战,在这些挑战中,您将与其他团队的代理进行评估。
- 🖌️🎨 学习如何共享您使用Unity和Godot创建的环境。
因此,在本单元中,您将学习深度强化学习的基础知识。然后,您将训练您的第一个着陆器代理,以正确着陆在月球上🌕,并将其上传到Hugging Face Hub,这是一个免费开放的平台,人们可以共享ML模型、数据集和演示。
在实现深度强化学习代理之前,掌握这些要素非常重要。本章的目标是为您打下坚实的基础。
如果您愿意,您也可以观看本章的📹 视频版本:
那么,让我们开始吧!🚀
- 什么是强化学习?
- 大局观
- 正式定义
- 强化学习框架
- 强化学习过程
- 奖励假设:强化学习的核心思想
- 马尔可夫性质
- 观测/状态空间
- 动作空间
- 奖励和折扣
- 任务类型
- 探索/利用权衡
- 解决强化学习问题的两种主要方法
- 策略 π:代理的大脑
- 基于策略的方法
- 基于值的方法
- “深度”在强化学习中的含义
什么是强化学习?
为了理解强化学习,让我们先从宏观的角度来看。
宏观视角
强化学习的想法是,一个代理(一种人工智能)通过与环境的互动(通过试错)和获得奖励(负面或正面)作为对其行为的反馈来从环境中学习。
从与环境的互动中学习源自我们的自然经验。
例如,想象把你的小弟弟放在一个他从未玩过的视频游戏前,放一个控制器在他手里,然后让他独自玩。
你的弟弟将通过按下正确的按钮(行动)与环境(视频游戏)进行互动。他得到了一个硬币,这是一个+1的奖励。这是积极的,他刚刚明白在这个游戏中他必须得到硬币。
但是,他再次按下右键,碰到了一个敌人,他就死了,-1 的奖励。
通过与环境的互动试错,你的小弟弟明白了在这个环境中他需要获得硬币,但要避开敌人。
在没有任何监督的情况下,孩子会越来越擅长玩这个游戏。
这就是人类和动物学习的方式,通过互动。强化学习只是一种从行动中学习的计算方法。
正式定义
现在我们来看一个正式的定义:
强化学习是通过构建代理从环境中互动试错并获得奖励(正面或负面)作为唯一反馈来解决控制任务(也称为决策问题)的框架。
⇒ 但是强化学习是如何工作的呢?
强化学习框架
强化学习过程
为了理解强化学习过程,让我们想象一个代理学习玩一个平台游戏:
- 我们的代理从环境中接收到状态 S 0 S_0 S 0 ——我们接收到游戏的第一帧(环境)。
- 基于该状态 S 0 S_0 S 0 ,代理采取行动 A 0 A_0 A 0 ——我们的代理向右移动。
- 环境进入一个新的状态 S 1 S_1 S 1 ——新的帧。
- 环境给予代理一些奖励 R 1 R_1 R 1 ——我们没有死(正面奖励+1)。
这个强化学习循环输出一系列的状态、行动、奖励和下一个状态。
代理的目标是最大化累积奖励,称为预期回报。
奖励假设:强化学习的核心思想
⇒ 为什么代理的目标是最大化预期回报?
因为强化学习基于奖励假设,即所有目标都可以描述为最大化预期回报(预期累积奖励)。
这就是为什么在强化学习中,为了获得最佳行为,我们需要最大化预期的累积奖励。
马尔可夫性质
在论文中,你会看到RL过程被称为马尔可夫决策过程(MDP)。
我们将在接下来的单元中再次讨论马尔可夫性质。但是如果你今天需要记住一些关于它的东西,马尔可夫性质意味着我们的智能体只需要当前状态来决定采取什么行动,而不需要之前所有状态和行动的历史记录。
观测/状态空间
观测/状态是我们的智能体从环境中获得的信息。在视频游戏中,它可以是一帧(截图)。在交易智能体的情况下,它可以是某只股票的价值等。
观测和状态之间需要进行区分:
- 状态 s :是对世界状态的完整描述(没有隐藏信息)。在完全观测的环境中。
在国际象棋游戏中,我们从环境中接收到一个状态,因为我们可以访问整个棋盘信息。
对于国际象棋游戏,我们处于完全观测的环境中,因为我们可以访问整个棋盘信息。
- 观测 o :是对状态的部分描述。在部分观测的环境中。
在超级马里奥兄弟中,我们只能看到玩家附近的一部分关卡,所以我们接收到一个观测。
在超级马里奥兄弟中,我们处于部分观测的环境中。我们接收到一个观测,因为我们只能看到关卡的一部分。
实际上,在本课程中我们使用术语状态,但我们将在实现中进行区分。
总结一下:
动作空间
动作空间是环境中所有可能动作的集合。
动作可以来自离散空间或连续空间:
- 离散空间:可能动作的数量是有限的。
在超级马里奥兄弟中,我们有一组有限的动作,因为我们只有4个方向和跳跃。
-
连续空间:可能动作的数量是无限的。
总结一下:
考虑这些信息是至关重要的,因为在选择未来的RL算法时它将具有重要性。
奖励和折扣
奖励在强化学习中是基础,因为它是智能体唯一的反馈。通过奖励,我们的智能体可以知道采取的行动是好还是坏。
每个时间步骤 t 的累积奖励可以表示为:
这等价于:
然而,实际上,我们不能简单地这样相加。因为比起长期未来奖励,较早出现的奖励(游戏开始时)更有可能发生,因为它们比较可预测。
假设你的智能体是一只小老鼠,每个时间步骤只能移动一个方块,而对手是一只猫(也可以移动)。你的目标是在被猫吃掉之前尽可能多地吃到奶酪。
从图中可以看出,吃到离我们近的奶酪比靠近猫的奶酪更有可能(我们离猫越近,越危险)。因此,即使离猫的奖励更大(奶酪更多),它也会被更大程度地折扣,因为我们不能确定我们能否吃到它。
为了对奖励进行折扣,我们采取以下步骤:
- 我们定义一个称为 gamma 的折扣率。它必须介于 0 和 1 之间,通常介于 0.99 和 0.95 之间。
-
gamma 越大,折扣越小。这意味着我们的智能体更关心长期奖励。
-
另一方面,gamma 越小,折扣越大。这意味着我们的智能体更关心短期奖励(最近的奶酪)。
2. 然后,每个奖励都会按照时间步骤的 gamma 次方进行折扣。随着时间步骤的增加,猫离我们越来越近,因此未来的奖励发生的可能性越来越小。
我们的折扣累积期望奖励为:
任务类型
任务是强化学习问题的实例。我们可以有两种类型的任务:片段式任务和连续性任务。
片段式任务
在这种情况下,我们有一个起始点和一个结束点(终止状态)。这创建了一个片段:一个状态、动作、奖励和新状态的列表。
例如,想象一下超级马里奥兄弟:一个片段从新的马里奥关卡开始,并在你被杀死或到达关卡结尾时结束。
连续性任务
这些是永远持续的任务(没有终止状态)。在这种情况下,智能体必须学会选择最佳行动并与环境同时进行交互。
例如,一个进行自动股票交易的智能体。对于这个任务,没有起始点和终止状态。智能体会一直运行,直到我们决定停止它们。
探索/利用权衡
最后,在讨论解决强化学习问题的不同方法之前,我们必须涵盖另一个非常重要的主题:探索/利用权衡。
-
探索是通过尝试随机动作来探索环境,以便获取有关环境的更多信息。
-
利用是利用已知信息以最大化奖励。
请记住,我们的强化学习代理的目标是最大化预期的累积奖励。然而,我们可能会陷入一个常见的陷阱。
让我们举个例子:
在这个游戏中,我们的老鼠可以获得无限数量的小奶酪(每个奶酪+1)。但是在迷宫的顶部,有一堆巨大的奶酪(+1000)。
然而,如果我们只关注利用,我们的代理将永远无法达到巨大的奶酪。相反,它只会利用最近的奖励源,即使这个源很小(利用)。
但是如果我们的代理稍微进行一些探索,它就可以发现巨大的奖励(一堆大奶酪)。
这就是我们所说的探索/利用权衡。我们需要平衡我们探索环境的程度和我们利用对环境的了解的程度。
因此,我们必须制定一个规则来处理这种权衡。在未来的章节中,我们将看到不同的处理方法。
如果还是有点困惑,想象一个真实的问题:选择一家餐厅:
- 利用:你每天都去同一家你知道很好的餐厅,冒着错过其他更好的餐厅的风险。
- 探索:尝试你以前从未去过的餐厅,可能会有一个糟糕的经验的风险,但可能会有一个很棒的经验的机会。
总结:
解决RL问题的两种主要方法
⇒ 现在我们已经了解了RL框架,我们如何解决RL问题呢?
换句话说,如何构建一个RL代理,它可以选择最大化期望累积奖励的动作?
策略π:代理的大脑
策略π是我们的代理的大脑,它是一个告诉我们在给定状态下应该采取的动作的函数。因此,它定义了代理在给定时间的行为。
将策略看作是我们代理的大脑,根据状态告诉我们应该采取的动作的函数
我们希望学习的是这个策略函数,我们的目标是找到最优策略π,当代理根据该策略行动时,它*最大化预期回报。我们通过训练找到这个π。
训练我们的代理找到这个最优策略π*有两种方法:
- 直接教代理学习在给定状态下应该采取哪个动作:基于策略的方法。
- 间接地,教代理学习哪个状态更有价值,然后采取导致更有价值状态的动作:基于价值的方法。
策略优化方法
在策略优化方法中,我们直接学习一个策略函数。
这个函数将从每个状态映射到该状态下的最佳相应动作。 或者是该状态下可能动作集合的概率分布。
我们有两种类型的策略:
- 确定性:给定状态下的策略总是返回相同的动作。
- 随机性:输出动作的概率分布。
如果我们回顾一下:
值函数方法
在值函数方法中,我们不训练一个策略函数,而是训练一个值函数,它将一个状态映射到该状态的期望值。
一个状态的值是智能体在该状态下开始并根据我们的策略行动所能获得的折扣期望回报。
“根据我们的策略行动”只是意味着我们的策略是“前往具有最高值的状态”。
在这里,我们可以看到我们的值函数为每个可能的状态定义了值。
由于我们的值函数,在每一步中,我们的策略将选择由值函数定义的最大值的状态:-7,然后是-6,然后是-5(依此类推)以达到目标。
如果我们回顾一下:
强化学习中的“深度”
⇒ 到目前为止,我们所讨论的是强化学习。 但是“深度”是如何运作的?
深度强化学习引入深度神经网络来解决强化学习问题,因此被称为“深度”。
例如,在下一篇文章中,我们将讨论Q学习(经典强化学习)和深度Q学习,两者都是基于值的强化学习算法。
你将会看到两种方法之间的区别在于,首先的方法中,我们使用传统算法创建一个Q表来帮助我们找到每个状态下应该采取的动作。
在第二种方法中,我们将使用神经网络(来近似 q 值)。
如果你对深度学习不熟悉,你绝对应该观看 fastai Practical Deep Learning for Coders(免费)的视频。
总结一下,那是很多信息,如果我们总结一下:
-
强化学习是一种通过行动进行学习的计算方法。我们建立一个通过与环境进行交互,并通过试错和接收奖励(负面或正面)的反馈来学习环境的代理。
-
任何强化学习代理的目标是最大化其预期的累积奖励(也称为预期回报),因为强化学习是基于奖励假设的,即所有目标都可以描述为预期累积奖励的最大化。
-
强化学习过程是一个循环,输出一系列的状态、动作、奖励和下一个状态。
-
为了计算预期的累积奖励(预期回报),我们对奖励进行折扣:越早出现的奖励(在游戏开始时)越有可能发生,因为它们比长期未来的奖励更可预测。
-
要解决强化学习问题,你需要找到一种最优策略,策略是你的 AI 的“大脑”,它将告诉我们在给定状态下采取什么行动。最优策略是那个能够使预期回报最大化的策略。
-
有两种方法可以找到最优策略:
- 通过直接训练策略:策略方法。
- 通过训练一个值函数,该函数告诉我们代理在每个状态下预期获得的回报,并使用此函数来定义我们的策略:值方法。
-
最后,我们谈论深度强化学习,因为我们引入了深度神经网络来估计要采取的行动(基于策略)或估计一个状态的值(基于值),因此被称为“深度”。
现在你已经学习了强化学习的基础知识,你可以开始训练你的第一个登月器代理,以正确地在月球上着陆,并通过 Hub 与社区分享。
从这里开始教程 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit1/unit1.ipynb
既然学习和避免自以为是的最佳方式是测试自己。我们编写了一个测验,帮助你找出你需要加强学习的地方。在这里检查你的知识 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit1/quiz.md
祝贺你完成了这一章节!那是最大的一个章节,包含了很多信息。还有祝贺你完成了教程。你刚刚训练了你的第一个深度强化学习代理,并在 Hub 上分享了它 🥳。
如果你对所有这些要素感到困惑,那是正常的。这对我和所有学习强化学习的人来说都是一样的。
在继续之前,花时间真正理解这些内容是很重要的。在进入有趣的部分之前,掌握这些要素并建立扎实的基础是很重要的。
我们在课程大纲中发布了更多的阅读材料,如果你想深入了解,请点击这里 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit1/README.md
当然,在课程期间,我们会再次使用和解释这些术语,但在深入了解下一章之前,最好先理解它们。
在下一章中,我们将学习关于 Q 学习,并更深入地了解基于值的方法。
别忘了与想要学习的朋友分享 🤗!
最后,我们希望通过您的反馈不断改进和更新课程。如果您有意见,请填写此表格 👉 https://forms.gle/3HgA7bEHwAmmLfwh9