TowardsDataScience 博客中文翻译 2020(七百五十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

强化学习框架

原文:https://towardsdatascience.com/reinforcement-learning-frameworks-e349de4f645a?source=collection_archive---------16-----------------------

深度强化学习讲解— 20

在 Ray 框架上使用 RLlib 解决 CartPole 环境

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

欢迎来到这第 20 篇文章,它总结了 " 深度强化学习讲解 " 系列,该系列提供了一种实用的方法来开始令人兴奋的深度强化学习世界。

到目前为止,在之前的帖子中,我们已经看到了相对容易编程的 RL 算法集的基本表示(尽管我们跳过了几个)。但是从现在开始,我们需要考虑 RL 算法的规模和复杂性。在这种情况下,从头开始编写强化学习实现可能会变得单调乏味,并且存在很高的编程错误风险。

为了解决这个问题,RL 社区开始构建框架和库来简化 RL 算法的开发,既通过创建新的部分,又特别是通过涉及各种算法组件的组合。在本帖中,我们将对那些强化学习框架做一个大致的介绍,并使用rl lib(Python 中的一个开源库)基于 Ray 框架解决前面的 CartPole 问题。

本出版物的西班牙语版本

[## 11.难民保护框架:Ray+RLlib

请访问第 11 页的自由介绍

medium.com](https://medium.com/aprendizaje-por-refuerzo/11-frameworks-de-aprendizaje-por-refuerzo-ray-rllib-1329e93f14ee)

强化学习框架

动机

但是在继续之前,作为一个激励的例子,让我们记住在之前的帖子中,我们提出了加强及其局限性。研究界创造了许多训练算法来解决它:、A3C、DDPG、TD3、SAC、PPO 等等。但是从头开始编写这些算法比 REINFORCE 更复杂。此外,你在这个领域参与得越多,你就越会意识到你在一遍又一遍地写同样的代码。

与深度学习等其他领域相比,强化学习的实际应用相对年轻,在深度学习中,TensorFlow、PyTorch 或 MXnet 等成熟的框架简化了 DL 实践者的生活。然而,RL 框架的出现已经开始,现在我们可以从几个项目中进行选择,这些项目极大地促进了高级 RL 方法的使用。

在介绍这些 RL 框架之前,让我们先了解一下它们的背景。

从互动中学习,而不是从例子中学习

在过去的几年中,模式识别一直是深度学习社区中许多工作和讨论的焦点。我们正在使用强大的超级计算机处理大型标记数据集(专家为训练集提供输出),并应用基于梯度的方法在这些数据集中找到模式,这些模式可用于预测或试图找到数据内部的结构。

这与我们对世界的知识的重要部分是通过互动获得的事实形成对比,没有外部老师告诉我们我们采取的每一个行动的结果会是什么。人类能够从互动和经验中发现新问题的解决方案,通过积极探索获得关于世界的知识。

由于这个原因,当前的方法将通过深度强化学习(DRL)的镜头研究从模拟环境的交互中学习的问题,这是一种从交互中进行目标导向学习的计算方法,不依赖于专家的监督。即,强化学习代理必须与环境交互以生成其自己的训练数据。

这激发了与一个环境的多个实例的并行交互,从而更快地产生更多可以学习的经验。这导致了越来越大规模的分布式和并行系统在 RL 训练中的广泛使用。这带来了许多工程和算法上的挑战,我们正在谈论的这些框架可以解决这些挑战。

开源拯救世界

近年来,TensorFlow 或 PyTorch ( 我们在本博客中广泛讨论了这两种框架)等框架已经出现,有助于将模式识别转化为商品,使深度学习更容易被实践者尝试和使用。

类似的模式也开始在强化学习领域上演。我们开始看到许多开源库和工具的出现,通过帮助创建新的部分(而不是从头开始编写),以及最重要的,涉及各种预构建算法组件的组合来解决这一问题。因此,这些强化学习框架通过创建 RL 算法核心组件的高级抽象来帮助工程师。总之,这使得代码更容易开发,阅读起来更舒服,并提高了效率。

接下来,我提供了一个最流行的 RL 框架列表。我认为读者会从使用已经建立的框架或库的代码中受益。在写这篇文章的时候,我可以提到最重要的几个(我肯定我漏掉了其中的一些):

决定使用这里列出的 RL 框架中的哪一个,取决于您的偏好以及您想用它做什么。读者可以通过链接了解更多信息。

我们在研究中心使用 Acme 进行研究。但是为了描述这些环境中的一个,以便读者可以看到它们提供的可能性,我个人选择了基于 RayRLlib ,原因我将在下面解释。

RLlib:使用 Ray 的可扩展强化学习

我们使用 Acme 在我们的研究中心做研究。但是为了描述这些环境中的一个,以便读者可以看到它们提供的可能性,我选择了基于 RayRLlib ,原因我将在下面解释。

计算需求的增长

深度强化学习算法涉及大量模拟,这给深度学习本身的计算复杂性增加了另一个倍增因素。大多数情况下,这是我们在本系列中尚未看到的算法所需要的,例如分布式行动者-批评家方法或多代理方法等。

但是,即使找到最佳模型,也常常需要超参数调整和在各种超参数设置中搜索;这可能很昂贵。所有这些都需要由基于异构服务器的分布式系统(具有多核 CPU 和硬件加速器,如 GPU 或 TPU)的超级计算机提供高计算能力。

两年前,当我作为一名作者在 Medium 上首次亮相时,我已经在文章“超级计算”中解释了这种类型的基础设施是什么样的。在巴塞罗那,我们现在有一台超级计算机,名为 Marenostrum 4,计算能力为 13 Petaflops。

巴塞罗那超级计算中心明年将托管一台新的超级计算机 Marenostrum 5,它将把计算能力提高 x17 倍。

目前的超级计算机 MareNostrum 4 分为两个不同的硬件模块:一个通用模块和一个基于 IBM 系统的模块,专为深度学习和人工智能应用而设计。

在硬件方面,Marenostrum 的这一部分包括一个 54 节点集群,基于 IBM Power 9 和 NVIDIA V100,采用 Linux 操作系统,通过 Infiniband 网络以每秒 100 千兆位的速度互连。每个节点都配备了 2 个 IBM POWER9 处理器,每个处理器有 20 个物理核心和 512GB 内存。这些 POWER9 处理器中的每一个都连接到两个 16GB 内存的 NVIDIA V100(Volta)GPU,每个节点共有 4 个 GPU。

如何有效管理这种硬件结构?

系统软件堆栈

用分布式和并行系统加速强化学习在管理程序执行的并行化和分布方面引入了几个挑战。为了解决这种日益增长的复杂性,已经开始提出新的软件层,我们在现有的软件层上进行堆叠,试图在逻辑上保持系统的分层软件栈的不同组件的分离

由于这个关键的抽象,我们可以专注于不同的软件组件,今天的超级计算机合并,以执行复杂的任务。我想提一下丹尼尔·希利斯,他是开发并行连接机器的思维机器公司的联合创始人,他说抽象的层次结构是我们理解复杂系统最重要的工具,因为它让我们一次专注于问题的一个方面。

我选择的框架 RLlib 就是这种情况,它遵循分而治之的理念,对软件堆栈进行分层设计。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

RLlib 的软件栈(来源: docs.ray.io )

允许这种功能抽象的这种抽象层次结构是基本的,因为它将让我们操纵信息而不用担心它的底层表示。丹尼尔·希利斯说一旦我们知道如何完成一个给定的功能,我们就可以把这个机制放在一个“积木”的“黑匣子”里,不再去想它。积木体现的功能可以反复使用,不用参考里面的细节。

光线

简而言之,并行和分布式计算是强化学习算法的主要内容。我们需要利用多核和加速器(在多台机器上)来加速 RL 应用,Python 的多处理模块不是解决方案。一些 RL 框架,像 Ray 可以很好地处理这个挑战。

官方项目页面上,Ray 被定义为构建和运行分布式应用的快速简单框架:

  1. 为构建和运行分布式应用程序提供简单的原语。
  2. 支持最终用户并行处理单个机器代码,几乎不需要修改代码。
  3. 包括应用程序、库和工具的大型生态系统,以支持复杂的应用程序。

Ray Core 为应用程序构建提供了简单的原语。在 Ray Core 之上,除了 RLlib 之外,还有其他解决机器学习问题的库: Tune(可扩展超参数调优)、 RaySGD(分布式训练包装器)Ray Serve(可扩展可编程服务)。

RLlib

RLlib 是一个用于强化学习的开源库,它为各种应用程序提供了高可扩展性和统一的 API。RLlib 原生支持 TensorFlow、TensorFlow Eager 和 PyTorch,但它的大部分内部是框架不可知的。

目前,这个库已经有了大量的文档( API 文档),除了允许创建自定义算法之外,还提供了大量的内置算法

RLlib 中的关键概念是策略、样本和训练器。简而言之,策略是定义代理在环境中如何行为的 Python 类。RLlib 中的所有数据交换都是以样本批次的形式进行的,这些样本对轨迹的一个或多个片段进行编码。训练器是将上述组件放在一起的样板类,管理算法配置、优化器、训练指标、执行并行组件的工作流等。

在本系列的后面,当我们在分布式和多代理算法方面取得更多进展时,我们将更详细地介绍 RLlib 的这些关键组件。

TensorFlow 或 PyTorch

在之前的一篇帖子中, TensorFlow vs. PyTorch:战斗仍在继续,我展示了深度学习重量级公司 TensorFlow 和 PyTorch 之间的战斗正在全面展开。而在这方面,RLlib 采取的选项,允许用户在 TensorFlow 和 PyTorch 之间无缝切换,用于他们的强化学习工作,似乎也非常合适。

为了允许用户在 RLlib 中作为后端在 TensorFlow 和 PyTorch 之间轻松切换,RLlib 包含了“框架”训练器配置。例如,要切换到 PyTorch 版本的算法,我们可以指定{"framework":"torch"}。在内部,这告诉 RLlib 尝试对算法使用策略的 torch 版本(查看 PPOTFPolicyPPOTorchPolicy 的示例)。

用 RLlib 解决磁极环境问题

现在,我们将展示一个玩具示例来帮助您入门,并向您展示如何使用 RLlib 使用 PPO 算法解决 OpenAI Gym 的 Cartpole 环境。PPO 是解决增强的局限性的建议之一,由 John Schulman 等人(2017)在 OpenAI 的论文“近似策略优化算法”中介绍。但是读者可以使用本节中提出的代码来测试任何已经在这个框架中编程的算法。

这篇文章的完整代码可以在 GitHub 上找到,并且可以使用这个链接作为一个 Colab google 笔记本运行。

警告:鉴于我们正在 Colab 中执行我们的示例,我们需要在安装 ray 包并卸载 pyarrow 后重新启动运行时。

您可以通过ray.rllib.agents访问各种算法。在这里,您可以在 PyTorch 和 Tensorflow 中找到一长串不同的实现来开始使用。

如果您想使用 PPO,您可以运行以下代码:

import ray
from ray.rllib.agents.ppo import PPOTrainer, DEFAULT_CONFIGray.init()

ray.init()命令启动所有相关的光线进程。这必须在我们实例化任何 RL 代理之前完成,例如我们示例中的PPOTrainer对象:

config = DEFAULT_CONFIG.copy()
config["num_gpus"] = 1 # in order to use the GPU
agent = PPOTrainer(config, 'CartPole-v0')

我们可以在一个config对象中传递许多指定网络和训练过程应该如何配置的超参数。更改超参数就像将它们作为字典传递给config参数一样简单。查看可用内容的一个快速方法是调用trainer.config来打印出适用于您选择的算法的选项:

print(DEFAULT_CONFIG){
‘num_workers’: 2, 
‘num_envs_per_worker’: 1, 
‘rollout_fragment_length’: 200, 
‘num_gpus’: 0, 
‘train_batch_size’: 4000, .
.
.}

一旦我们指定了我们的配置,调用我们的trainer对象上的train()方法将更新并发送输出到一个名为results的新字典。

result = agent.train()

所有算法都遵循相同的基本结构,从小写缩写到大写缩写,后跟Trainer。例如,如果您想尝试 DQN,您可以拨打:

from ray.rllib.agents.dqn import DQNTrainer, DEFAULT_CONFIG
agent = **DQNTrainer**(config=DEFAULT_CONFIG, env='CartPole-v0')

从一个训练有素的代理程序计算动作的最简单方法是使用trainer.compute_action():

action=agent.compute_action(state)

该方法在将观察结果传递给代理策略之前对其进行预处理和过滤。下面是一个如何观察使用compute_action()的代理的简单示例:

def watch_agent(env):
   state = env.reset()
   rewards = []
   img = plt.imshow(env.render(mode=’rgb_array’))
   for t in range(2000):
       action=agent.compute_action(state) img.set_data(env.render(mode=’rgb_array’))
       plt.axis(‘off’)
       display.display(plt.gcf())
       display.clear_output(wait=True)

       state, reward, done, _ = env.step(action)
       rewards.append(reward)
       if done:
          print(“Reward:”, sum([r for r in rewards]))
          break
       env.close()

使用watch_agent函数,我们可以比较代理在被训练运行多个更新之前和之后的行为,为给定的数字调用train()方法:

for i in range(10):
   result = agent.train()
   print(f'Mean reward: {result["episode_reward_mean"]:4.1f}')

最后一行代码显示了我们如何监控包含在方法train()的返回中的训练循环打印信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练前

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

训练后

这是一个简单算法的玩具实现,非常简单地展示了这个框架。RLlib 框架的实际价值在于它在执行固有并行的大型基础设施中的使用,同时,从头开始编写代码的复杂算法是完全不可行的。

正如我所说的,在看了上面提到的所有其他框架之后,我选择了 RLlib。原因是多样的;有些已经在本帖中介绍过了。给我加上那个;相关的是,它已经被包括在主要的云提供商中,如 AWSAzureML 。或者有一个像 ANYSCALE 这样的推动公司已经筹集了2000 万并组织了 射线峰会 会议,该会议将于本周(9 月 30 日至 10 月 1 日)在网上举行,并有伟大的演讲者(如我们的朋友Oriol Vinyals;-).也许可以添加更多的背景细节,但对我来说,与上述原因同样重要的是,有来自加州大学伯克利分校的伟大研究人员参与其中,包括有远见的扬·斯托伊察,我在 Spark 的问题上见过他,他们显然是对的!

从这里去哪里

我希望这些帖子能够鼓励读者了解这项令人兴奋的技术,它是人工智能领域最新突破性进展的真正推动者。我们真的没有看到太多,只是最基本的,让你继续自己发现和享受这个神话般的世界。以下参考资料可能有用。

在线资源

深度强化学习讲解系列

UPC 巴塞罗那理工 巴塞罗那超级计算中心

一个轻松的介绍性系列以一种实用的方式逐渐向读者介绍这项令人兴奋的技术,它是人工智能领域最新突破性进展的真正推动者。

[## 深度强化学习解释-乔迪托雷斯。人工智能

本系列的内容](https://torres.ai/deep-reinforcement-learning-explained-series/)

关于这个系列

我在五月份开始写这个系列,那是在巴塞罗那的封锁期。老实说,由于封锁,在业余时间写这些帖子帮助了我 #StayAtHome 。感谢您当年阅读这份刊物;它证明了我所做的努力。

免责声明 —这些帖子是在巴塞罗纳封锁期间写的,目的是分散个人注意力和传播科学知识,以防对某人有所帮助,但不是为了成为 DRL 地区的学术参考文献。如果读者需要更严谨的文档,本系列的最后一篇文章提供了大量的学术资源和书籍供读者参考。作者意识到这一系列的帖子可能包含一些错误,如果目的是一个学术文件,则需要对英文文本进行修订以改进它。但是,尽管作者想提高内容的数量和质量,他的职业承诺并没有留给他这样做的自由时间。然而,作者同意提炼所有那些读者可以尽快报告的错误。

我们在 DRL 的研究

我们在 UPC 巴塞罗那理工巴塞罗那超级计算中心 的课题组正在做这个课题的研究。我们在这一领域的最新论文是在第 37 届国际机器学习会议(ICML2020) 上发表的“探索、发现和学习:状态覆盖技能的无监督发现”。提出了一种新的强化学习无监督技能发现范式。是我们博士生之一的 @vcampos7@DocXavi 共同建议的最后一篇投稿。本文由来自 Salesforce Research@alexrtrott@蔡明雄@RichardSocher 共同撰写。

几行代码中的强化学习

原文:https://towardsdatascience.com/reinforcement-learning-in-a-few-lines-of-code-d6c8af1e0fd2?source=collection_archive---------13-----------------------

强化学习

使用稳定基线和 Gym 训练 SOTA RL 算法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从 Procgen 检索

强化学习在过去的一年里有了很大的改进,最先进的方法每两个月出现一次。我们已经看到 AlphaGo 击败世界冠军围棋手柯洁,多智能体玩捉迷藏,甚至 AlphaStar 在星际中也竞技性地守住了自己。

实现这些算法可能非常具有挑战性,因为它需要对深度学习和强化学习有很好的理解。本文的目的是给你一个使用一些简洁的包的快速入门,这样你就可以很容易地开始强化学习。

关于如何实现 SOTA 深度强化学习算法的深入教程,请参见。强烈推荐他们!

环境

在我们开始实现这些算法之前,我们首先需要创建一个工作环境,即游戏。对于算法来说,理解什么是动作和观察空间是很重要的。为此,我们将进入几个可用于选择有趣环境的包。

体育馆

Gym 是一个开发和比较强化学习算法的工具包。它通常用于实验和研究目的,因为它提供了一个简单易用的环境工作界面。

简单地用pip install gym安装包。完成后,您可以使用以下代码创建一个环境:

import gym
env = gym.make(‘CartPole-v0’)

推车环境中,你的任务是防止通过未启动的接头连接到推车上的杆子翻倒。

env变量包含关于环境(游戏)的信息。要了解侧手翻的动作空间是什么,只需运行env.action_space就会产生Discrete(2)。这意味着有两种可能的独立动作。要查看观察空间,您运行env.observation_space,这将产生Box(4)。这个方框表示 n (4)个闭区间的
笛卡儿积。

要渲染游戏,请运行以下代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,如果我们选择采取随机行动,购物车就会不断失灵。最终,目标将是运行一个强化学习算法,学习如何解决这个问题。

有关健身房环境的完整列表,请参见

注意:如果您在运行雅达利游戏时遇到问题,请参见

重新流行

创造有趣环境的另一个选择是使用复古。这个包是由 OpenAI 开发的,允许你使用 ROMS 来模拟游戏,如空袭者-创世纪。

只需用pip install gym-retro安装软件包即可。然后,我们可以通过以下方式创建和查看环境:

import retro
env = retro.make(game='Airstriker-Genesis')

再次,为了渲染游戏,运行下面这段代码:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要安装 ROMS,你需要找到相应的。sha 文件,然后运行:

python3 -m retro.import /path/to/your/ROMs/directory/

注意:要获得可用环境的完整列表,运行retro.data.list_games()

宝洁公司

强化学习的一个典型问题是,产生的算法通常在特定环境下工作得很好,但无法学习任何通用的技能。例如,如果我们要改变一个游戏的外观或者敌人的反应呢?

为了解决这个问题,OpenAI 开发了一个名为 Procgen 的包,它允许创建程序化生成的环境。我们可以用这个包来衡量强化学习代理学习一般化技能的速度。

渲染游戏很简单:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这将生成一个可以训练算法的单一级别。有几个选项可用来有步骤地生成同一环境的许多不同版本:

  • num_levels -可以生成的独特级别的数量
  • distribution_mode -使用哪种级别,选项为"easy", "hard", "extreme", "memory", "exploration"。所有游戏都支持"easy""hard",而其他选项则是游戏特有的。

强化学习

现在,终于到了实际强化学习的时候了。虽然有许多可用的软件包可以用来训练算法,但由于它们的可靠实现,我将主要进入稳定的基线。

请注意,我不会在这篇文章中解释 RL 算法实际上是如何工作的,因为这需要一篇全新的文章。有关 PPO、SAC 和 TD3 等最新算法的概述,请参见

稳定基线

稳定基线 (SB)基于 OpenAI 基线,旨在使研究社区和行业更容易复制、提炼和识别新想法。他们在基线的基础上进行改进,以制作一个更加稳定和简单的工具,允许初学者在不被实现细节所困扰的情况下尝试强化学习。

由于 SB 能够简单快速地应用最新的强化学习算法,因此经常被使用。此外,创建和训练 RL 模型只需要几行代码。

安装可以简单地通过pip install stable-baselines完成。然后,为了创建和学习一个 RL 模型,例如, PPO2 ,我们运行下面几行代码:

有几件事可能需要一些解释:

  • total_timesteps -用于训练的样本总数
  • MlpPolicy -实现 actor-critical 的策略对象。在这种情况下,一个多层感知器有 2 层 64。还有针对视觉信息的策略,例如CnnPolicy甚至CnnLstmPolicy

为了将这个模型应用到 CartPole 示例中,我们需要将我们的环境包装在一个假人中,以使它对某人可用。在 CartPole 环境中训练 PPO2 的完整示例如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如我们在上面的图片中看到的,仅用了 50,000 步,PPO2 就设法找到了保持杆子稳定的方法。这只需要几行代码和几分钟的处理时间!

如果要将其应用于 Procgen 或 Retro,请确保选择允许基于卷积的网络的策略,因为观察空间可能是环境当前状态的图像。

最后,横翻筋斗的例子非常简单,只需 50,000 步就可以完成。大多数其他环境通常需要数千万个步骤才能显示出显著的改进。

注意:稳定基线的作者警告初学者,在产品中使用这个包之前,要很好地理解强化学习。强化学习有许多至关重要的组成部分,如果其中任何一个出错,算法就会失败,并可能留下很少的解释。

其他包

还有其他几个常用于应用 RL 算法的软件包:

  • [TF-Agents](https://github.com/tensorflow/agents) -比稳定基线需要更多的编码,但通常是强化学习研究的首选包。
  • 用 Pytorch 用最少的代码实现了最先进的 RL 算法。这无疑有助于理解算法。
  • [DeepRL](https://github.com/p-christ/Deep-Reinforcement-Learning-Algorithms-with-PyTorch) -另一个 Pytorch 实现,但是这个版本还实现了额外的环境来使用。
  • [MlAgents](https://github.com/Unity-Technologies/ml-agents) -一个开源的 Unity 插件,支持游戏和模拟作为训练代理的环境。

结论

强化学习可能是一个棘手的问题,因为如果代码中出现问题,很难调试。希望这篇文章能帮助你开始强化学习。

所有代码都可以在以下位置找到:

[## MaartenGr/强化学习

使用 Stable-baselines、Gym、Retro 和 Procgen 在动态环境中创建最先进的强化学习算法。

github.com](https://github.com/MaartenGr/ReinforcementLearning)

如果你和我一样,对人工智能、数据科学或心理学充满热情,请随时在 LinkedIn 上添加我。

自主赛车中的强化学习

原文:https://towardsdatascience.com/reinforcement-learning-in-autonomous-race-car-c25822def9f8?source=collection_archive---------25-----------------------

“邀请所有有志 RL 从业者”系列第 2 集

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

菲利普·维特在 Unsplash 上拍摄的照片

在本系列的第一部分中,我们已经了解了强化学习(RL)中的一些重要术语和概念。我们还学习了 RL 在高层是如何工作的。

在我们深入研究 RL 背后的理论之前,我邀请你和我一起了解基于其超级酷的应用程序 AWS DeepRacer 的 RL。

什么是 AWS DeepRacer?

AWS DeepRacer 是一款 1/18 比例的自主赛车,旨在通过在物理赛道上比赛来测试 RL 模型。AWS DeepRacer 中有三种比赛类型:

  1. 计时赛——代理在没有固定障碍物或移动竞争者的标记清晰的跑道上与时间赛跑。
  2. 物体回避——车辆在双车道轨道上行驶,轨道上放置了固定数量的固定障碍物。
  3. 短兵相接的比赛——车辆在双车道赛道上与其他行驶中的车辆进行比赛。

AWS DeepRacer 中的强化学习

我假设你熟悉 RL 在高层是如何工作的。如果您不知道,请查看本系列的第一篇文章以了解更多信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

RL 如何在 AWS DeepRacer 中工作的基本想法。[图片由作者提供]

在 AWS DeepRacer 中,我们希望我们的车辆( agent )在赛道(环境)中独自比赛,同时获得最大的累计总奖励,以便我们可以实现我们的目标——赢得与时间的比赛,或避开所有障碍,或赢得与另一辆车的比赛。

因此,它被归类为一个阶段性任务,其最终状态可能是终点线或脱离轨道。

国家呢?这里,状态是由车辆上的前置摄像头捕获的图像。车辆将以大约 15 fps 的速度拍摄图像(160x120)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杰克·布吕克在 Unsplash 上拍摄的照片

在现实驾驶体验中,我们可以“平稳”地控制速度和转向角度,而在这里,我们只能“艰难”地控制它们。换句话说,动作空间是一组离散的动作。

需要注意的是:动作空间越细,模型收敛的时间就越长。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AWS DeepRacer 行动空间示例。[图片来自 AWS DeepRacer 控制台]

至于奖励,它是由一个奖励函数返回的,这个函数只是一个 Python 函数,它将基于捕获图像的一些参数(状态)作为输入。AWS DeepRacer 中有几个重要参数:

  1. 轨道上的位置
  2. 标题
  3. 航点
  4. 磁迹宽度
  5. 离中心线的距离
  6. 所有车轮都在轨道上
  7. 速度
  8. 转向角度。

我们可以利用这些参数作为我们自己定义的奖励函数的输入。请参见文档以了解所有可用参数的更多信息。

培训过程怎么样?

培训的目标是找出在所有可能的未来驾驶决策中,哪种状态下的哪种行动将导致最大的预期累积奖励。

换句话说,网络必须计算出车辆在每种状态下应该获得多少速度转向角,这样我们才能获得最大预期累积回报

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杰克·吉文斯在 Unsplash 上的照片

但是……网络是什么?

在 MDP(马尔可夫决策过程)中,政策是在开始时给我们的,而在 RL 中不是。这里,我们利用神经网络(NN)来帮助我们创建一个策略网络。神经网络的输出是每个可能动作的概率。

在 AWS DeepRacer 中,NN 模型基本上是 CNN +前馈 NN,它接收来自特定剧集的经验(超参数)作为输入。一旦模型被训练,它将结果发送回代理以收集更多的经验。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

神经网络架构。[图片由作者提供]

在训练过程中,网络将发现哪种行为更有可能给予更多奖励,这取决于熵超参数。熵(随机程度)告诉代理探索更多的动作,或者只利用已经被理解的动作。

熵越大,代理采取的行动就越随机。

根据探索-开发策略,车辆仍可能有小概率采取随机行动来探索环境。RL 这里有一篇关于熵的好文章。

关于 AWS DeepRacer 的更多信息

AWS DeepRacer 令人兴奋的部分之一是车库。我们可以定义我们的车辆配置:要使用的传感器、动作空间(速度和转向旋转可变性)、车辆的颜色和车辆的名称!

最后的话

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由安东·大流士Unsplash 拍摄

恭喜你坚持到这一步!!

看完这篇文章,你应该知道 RL 是如何应用在自主赛车上的。请记住,我们的 RL 之旅仍处于早期阶段!我还有很多材料要和大家分享。所以,如果你喜欢这些内容,并想在接下来的两个月里继续和我一起学习,请关注我的媒体账号,以获得关于我未来帖子的通知!

我们将在下一篇文章中了解更多关于 RL 算法分类的鸟瞰图。来看看

关于作者

Louis Owen 是一名数据科学爱好者,他总是渴望获得新知识。他在印度尼西亚最好的大学之一Institut Teknologi Bandung攻读数学专业,并获得了最后一年的全额奖学金。最近,2020 年 7 月,他刚刚以优异的成绩毕业。

Louis 曾在多个行业领域担任分析/机器学习实习生,包括 OTA()、电子商务( Tokopedia )、FinTech ( Do-it )、智慧城市 App ( Qlue 智慧城市 ),目前在 世界银行 担任数据科学顾问。

去路易斯的网站了解更多关于他的信息吧!最后,如果您有任何疑问或需要讨论的话题,请通过 LinkedIn 联系 Louis。

约翰·康威的强化学习

原文:https://towardsdatascience.com/reinforcement-learning-in-honor-of-john-conway-5d15fb394c63?source=collection_archive---------49-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由肯尼·罗Unsplash

为哲学家的足球创造一个人工智能球员

哲学家的足球是由已故的传奇数学家约翰·康威(病毒的另一个受害者)发明的棋盘游戏。为了纪念他,我建了一个网站,你可以在这里玩游戏,了解更多关于这个游戏的信息。

你可以在网上或本地找其他人一起玩,你也可以和一个人工智能玩家对战来感受游戏。虽然在写这篇文章的时候,人工智能还在训练中——可能需要几个星期才能有所进步。

我今天的目标是快速解释这个游戏,并涵盖足够的强化学习基础知识,以解释我正在使用的 TD(λ)算法的定制修改,我称之为交替 TD(λ)。顺便说一下,TD 的意思是“时间差异(学习)”,而λ是一个超参数,用于设置“资格轨迹”的衰减(类似于动量)。这些将在下面解释。

在 PyTorch 中实现是从零开始的,你可以在 Github 上找到代码。我选择不使用像 OpenAI Gym 这样的强化学习框架,因为算法相对简单。对于一个定制的“环境”(例如游戏)和修改的算法,框架增加了比它们解决的更多的复杂性。

作为背景,我假设你熟悉 PyTorch 和神经网络的一些基础知识,特别是它们是什么以及在随机梯度下降(SGD)(带动量)中使用的反向传播。当前的实现使用了残差(卷积)神经网络,本质上是一个较小版本的 ResNet ,但这对理解本文并不重要。没有强化学习的先验知识。

本文的其余部分简要介绍了这个游戏,然后进入强化学习的基础。从那里,它涵盖了时间差异学习和资格跟踪的基础。最后,它涵盖了我在一个对称的双人棋盘游戏中使用的修改,我称之为交替 TD(λ)。

哲学家的足球

我在哲学家.足球为这个游戏建了一个网站,所以你可以亲自体验一下。言语不能公平对待一切。要有感觉,你可以阅读规则,然后在沙盒模式下玩(对自己),或者对像 RandoTron 这样的基线机器人,他总是随机玩。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

否则,这里有一个精简版的规则,删除了一些细节。在一个像围棋棋盘一样的 19x15 的棋盘上(通常用于游戏),放置石头。只有一块白色的石头,球。黑石是“玩家”。两个对手传统上被称为 X 和 O。X 和 O 都可以放置一个球员或在他们移动时将球跳过一些球员。如果球停在或越过最右边的一栏,x 获胜;o 赢在左边。

这个游戏是约翰·康威在剑桥玩的,并在一本名为 的书中描述了数学游戏 *的获胜方式。*它是以一个搞笑的巨蟒剧团的小品命名的。康威最出名的可能是他的生命游戏和有限单群的分类工作,但是他一生中还做了许多其他有趣的事情!

当我读到康威的病毒消亡时,在考虑强化学习问题之前,我选择了这个游戏。但是这个游戏后来被证明有一个非常有用的对称性,这将大大简化下面讨论的强化学习。

考虑这样一种情况,你扮演 X,该你走了。你要考虑 O 对你的行动的反应。在你移动之后,轮到 O。现在,如果我们将棋盘转到的位置,又轮到你了,你向右打(如 X)。因为两个玩家使用完全相同的棋子,所以理解如何评估你作为 X 面对的位置与理解你作为 o 面对的位置是完全相同的。

这与井字游戏、国际象棋或围棋等游戏略有不同,例如,在这些游戏中,你可能想在你移动之后使用你对位置的评估来告知你有多喜欢在你移动之前的位置*(反之亦然)。有其他方法来解决这个问题,但哲学家的足球有这个很好的对称性,消除了它。*

强化学习基础

我在这一节的目标不是写一篇关于强化学习的完整介绍。相反,我的目标是“尽可能简单,但不要更简单”,因为我们解释(交替)TD(λ)算法的目的有限。特别是(对于那些了解内情的人来说),一个两人输赢的游戏不需要奖励( R )或者折扣率(γ),所以我会假装这些不存在。游戏不是随机的,所以只处理确定性的情况。我们也不会谈论 Q 学习或政策梯度。

国家(年代)

这是设置。对我们来说有状态 S. ,每一个都是假设 X 要移动的棋盘位置。我们可以假设 X 按照上面讨论的对称性移动。如果只计算游戏还没有结束的状态,可能的状态(#S ≈ 10⁸⁸)比宇宙中的原子要多得多。当然,大多数状态在实际游戏中是不太可能出现的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还有两种游戏结束的“终结”状态。一个用于 X 获胜的情况,一个用于 o。导致两者之一的所有位置(分别)是相同的。

时间(吨)

现在一个游戏由不同时间的一系列状态组成。将时间标记为 t ,游戏开始时 t=0,第一步棋后 t=1,依此类推。此外,让 t=∞表示游戏的结束(尽管它实际上并不花费无限的时间)。

我们将用下标表示不同时刻的状态。例如,Sₒ是游戏开始时的状态。同样,下标 1、t 或∞。

行动(一)

给定一个状态 S,有一组可能的行动(移动)可以由轮到它的玩家采取(再次,我们将总是考虑 X 来玩)。表示这组动作 A(S) ,因为它取决于状态。单个动作将用小写字母表示为 a.

在上下文中,一个动作或者是放置一个棋子(最大可能的 19⨉15–1=284),或者是一个可用的跳转(如果你适当地安排棋子,可能有很多可能的跳转)。对于一个终端状态(游戏结束),动作集合将被视为空。

和以前一样,我们将使用下标来表示给定时间的动作集,或在给定时间采取的动作。例如,Aₒ = A(Sₒ)是开始时可能的动作的集合(284 个可能的位置,没有可能的跳跃)。同样, a ₒ是在时间 0 采取的动作,即第一步动作。

政策(π)

政策 π 是玩游戏的核心意义。给定一个状态 S,你必须选择一个要采取的行动!

现在,即使在像“哲学家的足球”这样确定的完美信息游戏中,政策也可能是随机的(有点随机)。考虑一下“约翰·康威会演奏什么”的政策。换句话说,给定一个状态 S,X 要移动,约翰·康威会怎么移动?不管是什么,放那个。

现在,这个康威政策并不简单(祝你在电脑上评估它好运)。但这肯定是一项政策。⁴:它也不是决定性的。(大多数)人并不总是在相同的位置做出相同的动作。这首先会很难记住,其次会很无聊。

因此,我们将认为该策略是一个函数 π(a|S) 给出采取行动 a概率,给定状态 S。注意,我们必须知道行动 a 是合法的行动( *a∈ A(S))。*此外,不会为终端(游戏结束)状态定义策略功能。

现在做事情,非确定性往往会让事情变得更复杂,而不会更有启发性。因此,请随意考虑策略函数只是将一个状态作为输入,并将一个动作作为输出的情况。

价值函数

有一个值函数 v(S) 将状态 S 作为输入并返回“值”在我们的例子中,这个值将是玩家获胜的概率。它的值介于 0 和 1 之间。

我们还必须加上一个限制,即在两个终端(游戏结束)状态下评估的价值函数在 O 获胜时总是 0,在 X 获胜时总是 1。(这是因为我们可以假设我们总是根据对称性来计算 X)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,价值函数有几种风格(在左边)。在确定性完全信息博弈中的完美博弈中,博弈必然以 X 赢、输或无限循环结束,我们称之为有价值的平局。出于我们的目的,我们可以假设第三种情况永远不会发生。

给定一个策略π,假设对手也在玩同样的策略,有一个“理想”函数,正好决定了获胜的概率,一个 0 到 1 之间的数。如果策略是确定性的,获胜的概率要么是 0,要么是 1(忽略平局情况)。

不幸的是,如果我们知道如何完美地演奏,就没有必要训练计算机来演奏了。此外,理想函数在计算上很难处理:

  1. 如果它是一个有输入/输出值的简单表格,那么每个状态都必须有一个条目,其中大约有 10⁸⁸——比宇宙中的原子还多。
  2. 没有任何已知的数学函数可以简化计算(尽管你可以试着找到一个)。
  3. 最后,我们可以通过模拟(玩游戏)精确地计算出理想函数。但是如果π是随机的,这将花费太长时间来得到一个精确的答案。
  4. 如果π是确定性的,那么理想函数仍然不会有用,因为它不会告诉我们如何*学习,*也就是让π变得更好。

因此,取而代之的是,我们将使用近似值函数,此后我们仅将其称为 v 。最常见的是,近似值函数可以用神经网络来实现,这就是我们要做的。

学问

到目前为止,我们所做的就是建立一个上下文和一些符号。我们还没有描述我们的 AI 玩家将如何学习来玩一个更好的策略。(当然)有多种算法可以做到这一点。粗略地说,学习算法可以尝试直接学习策略函数π(策略梯度)。它可以尝试学习决定哪些行动是最好的(Q-learning)。或者它可以只学习价值函数——简单地学习一个职位有多好。我们只讨论最后一种情况。

在这种情况下,给定一个价值函数 v ,我们可以让我们的政策“选择一个我们认为对我们最有利的结果。”特别是,由于我们的博弈是确定性的,选择一个动作 a 就相当于在时间 t+1 选择下一个状态 S。因此,稍微滥用符号,将π视为从状态到动作的简单函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在π(a|S)符号中,如果 a 是最佳移动,则π为 1,否则为 0。

注意,我们暂时忽略了处理在 X 之后是 O 的事实,我们说过所有的状态都假设 X 是 0。目前,价值函数在概念上是 X 对他们获胜可能性的估计,给定状态 S 包括关于谁要移动的信息。

概述

我们的 AI 玩家遵循某种策略π,它在时间 t 采取状态 S 并确定一个动作(移动)*a–或者给出单个移动或者每个移动的概率。*还有一个价值函数 v 来估计我们在给定状态下,遵循策略π时获胜的概率。反过来,如果π是“选择最佳移动”(或几个最佳移动的概率分布),那么我们可以将 v 视为一等对象,并从中导出π。我们的学习问题简化为一个很好的估计

以下是我们定义的符号及其简要解释。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时间差异学习:TD(0)

所以我们已经建立了强化学习的基本环境。我们的目标是估计一个价值函数 v. 在每一步,人工智能玩家只需选择产生最佳结果值(即获胜概率)的一步。这是一种确定性策略,但是我们可以通过给出前 3 或 5 步的概率分布或其他方法来使它变得随机(不那么无聊)。

现在我们要如何学习 v ?现在,让我们考虑这样一种情况,即 v 仅仅是一个巨大的表,其中包含所有可能的状态及其值。这里在计算上是不可能的,但是概念上很简单。

下面是我们可以对学习算法进行升级的列表,从显而易见的开始,向聪明的方向前进。

  1. 评估 v(S) 的最简单方法是采用确定性策略。给定一个状态,玩游戏,看看谁赢。
  2. 如果策略不是确定性的,我们可以模拟一些游戏,从每一步的概率分布中取样。总的来说,我们将产生一个可能的游戏样本,我们可以用它来估计获胜的概率。这些被称为蒙特卡罗方法。
  3. 我们可以利用这样的事实:在从状态 S 移动 a 导致新的状态 Sʹ 之后,我们已经知道了新的值 v(Sʹ).为了保持一致,如果我们做出最佳选择,我们希望 v(S) = v(Sʹ).这被称为自举(见下面的等式)。不要与来自统计学或 web 框架的术语相混淆。
  4. 一般来说,我们可以混合搭配选项(2)和(3):我们可以模拟出 3 个步骤,然后自举,或做两者的线性组合。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用 TD(0)自举价值函数估计

选项 3,时间差异学习也称为 TD(0),是学习真正发挥作用的地方。我们经历了一系列的状态,每一步我们都更新我们对 v(S)的估计,以匹配我们对 v(Sʹ).的估计一般来说,我们从一个用随机数或零初始化的表开始,并用学习速率α进行更新。我们引入一个时间差δ 并进行如下更新:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用学习率α更新时间差

仔细注意下标。我们的价值函数 v 现在在每个时间步都发生变化,所以我们必须跟踪我们在哪个时间步进行评估。

政策外学习

如果我们的机器人只是一遍又一遍地玩同样的动作,所有这些都会很无聊。它需要尝试不同的动作,看看他们是否有任何好处。这被称为勘探-开发权衡,涉及的内容很多,所以我就不多谈了。

我们的 TD(0)算法的一个好处是,当我们与机器人对弈并学习近似值函数 v 时,我们可以随机移动而不进行更新。这使得尝试新动作变得非常简单。蒙特卡罗方法遇到了问题,因为你必须在政策下模拟整个游戏来了解它们。如果你在中间做了一个随机的(很可能是坏的)移动,你必须试着弄清楚它如何影响你对早期移动的估计。这是可能的,但也有不好的一面(主要是高方差)。

使用神经网络

上面我们考虑了函数 v 只是一个数值表的情况。为了更新 v(S) ,我们只需改变表中的值。如上所述,这种表格方法在计算上对于哲学家的足球是不可能的。所以我们需要将 v 升级为神经网络。它将把状态的某种表示作为输入,如一个张量或一列张量。并且它将产生 0 和 1 之间的数字作为输出。我们需要在每次 t. 时添加一组参数(网络权重) w ,因此我们将 v 的定义阐明为如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们需要修改我们的更新算法以使用反向传播:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于神经网络的时间差分学习

请注意以下几点:

  • 我们使用梯度上升。我们想要使 v(S) 更接近v(sʹ),而不是最小化它的值(如在标准随机梯度下降中)。这一更新的结果是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 如往常一样,梯度∇v 是 v 在时间 t 相对于参数 w 的(分量)导数,在预先存在的 wS 处评估。
  • 在更新之后,不能保证在任何其他状态下评估 v。希望神经网络学习一种状态表示,使其能够概括,就像在任何其他应用中一样。

合格痕迹:TD(λ)

在随机梯度下降中,资格轨迹本质上是动量,但在强化学习中,它们被不同地激发并有不同的解释。它们允许我们保持 TD(0)算法的简单性,但获得使用蒙特卡罗方法的好处。

具体来说,TD(0)受到我们同时学习整个值函数的问题的困扰。所以 v(Sʹ)可能不是对 v(S)的一个好的估计。特别是,在移动到 Sʹ后,人工智能玩家移动到另一个州,称之为 Sʹʹ.如果 v(Sʹ)不是对 v(Sʹʹ)的好估计,那么它也不是对 v(S)的好估计。蒙特卡洛方法通过在整个游戏结束后进行更新来解决这一问题,但在处理不符合政策的移动时又会受到影响。

资格追踪是解决方案。类似于随机梯度下降中的动量,我们将轨迹 z ( 初始化为 0)添加到我们的算法中,并且具有衰减参数λ < 1。我们在时间 t: 得到更新

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

轨迹匹配组件的参数 w 组件。所以如果 w 是一个向量,那么 z 就是一个长度相同的向量。同样,用“张量”代替矢量,用“形状”代替长度。同样的还有“张量列表”和“相应的形状列表”

值得考虑一步步会发生什么。让我们从时间 t=0 开始进行更新。仔细理解我们的衍生品是基于当前状态评估的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们的第一步中,我们得到以下更新(z 被初始化为 0):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TD(λ)在时间 0 更新

与之前一样,更新 v(S) 以匹配 v(Sʹ) 。差异出现在下一步:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时间 1 的 TD(λ)更新

这就好像我们回到过去,在时间 0 更新未来,还不知道, v(Sʹ)v(Sʹʹ) 的区别!适当地用因子λ折现。

请注意,这两个导数是在不同的时间用不同的参数和输入进行评估的。这意味着我们无法为由此产生的 v(Sₒ).写下任何有启发性的表达

我们算法的最后一点是,如果我们做出一个关闭策略动作,我们应该将跟踪清零。未来头寸的价值不再能为我们过去的行动提供信息。

概述

我们引入了更多新的符号。通过对标准内容的简单重复,我们得到了以下总结:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

交替 TD(λ)

这篇文章的要点是需要对 TD(λ)稍加修改,以说明这个游戏是一个双人游戏。有各种各样的方法来处理这个问题,但哲学家足球的对称性使它非常干净。

具体来说,让我们将状态 S 解释为代表棋子的排列,并假设 X 将要出牌。然后 v 评估 X 获胜的概率。使用 a 表示电路板已经翻转。现在忽略参数更新,当 AI 玩家移动时,我们有以下的转换

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

状态和获胜概率的变化

特别是,在游戏之后,如果我们将棋盘转过来,那么获胜的概率就变成了 1- v. 这就需要对算法进行一些修改。

另一个变化是必须考虑到,在评估完成的同时计算导数是可取的。在教科书 TD(λ)算法中,我们隐含地首先对状态进行正向评估以选择一个移动,然后计算相对于旧状态的导数。这显然是浪费。我们一个步骤的完整算法现在变成了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

棘手的部分是第 6 步中的减号!这就是我称之为交替 TD(λ)的原因。我们基于时间 t+1 和 t 之间的值差在时间 t 进行更新。如果在时间 t+2,我们意识到我们的 t+1 值被低估(因此δ为负),我们需要增加我们在时间 t 对状态 S 的值估计。因此梯度的交替符号说明交替的参与者。

结论

希望你已经很好地了解了强化学习以及双人游戏的额外复杂性。如果你还没有,在哲学家.足球玩这个游戏。人工智能玩家仍在训练,但你可以和另一个人类对战。

[1]我不确定算法是否原创。我根据教科书上的描述在萨顿和巴尔托。

[2]爱因斯坦的释义。

[3]首先,因为不可能有足够多的游戏来达到所有这些状态。第二,因为任何一个稍有能力的玩家早在达到这些状态之前就已经赢了。

[4]从技术上来说,要很好地定义这个策略,我们应该在状态变量中包含人类所必需的所有信息:一天中的时间,他们是否饥饿,水星是否逆行,房间里有多少只猫,他们的对手是否戴着黑帽子,他们是否相信此刻的选择公理,等等。但这种技术性不会影响主要论点。

强化学习变得简单(第 1 部分):基本概念和术语介绍

原文:https://towardsdatascience.com/reinforcement-learning-made-simple-part-1-intro-to-basic-concepts-and-terminology-1d2a87aa060?source=collection_archive---------1-----------------------

入门,直观强化学习系列

简明易懂的马尔可夫决策过程应用指南

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Philippe Murray-PietschUnsplash 上拍摄的照片

在过去的几年里,你可能已经开始听到更多关于强化学习的事情,自从 AlphaGo 模型在复杂的围棋比赛中击败当时的世界冠军,震惊世界以来,alpha Go 模型就是使用强化学习训练的。

在一系列文章中,我将回顾强化学习(RL)的基础知识以及一些用于解决 RL 问题的最流行的算法和深度学习架构。我们将努力以尽可能直观的方式来理解这些原理,而不要过多地探究数学理论。

以下是本系列文章的简要总结。我的目标是不仅要理解事物是如何工作的,还要理解它为什么会这样工作。

  1. 基本概念和术语介绍—本文 (什么是 RL 问题,以及如何使用马尔可夫决策过程和概念(如回报、价值和政策)中的技术将 RL 问题解决框架应用于该问题)
  2. 解决方案方法 (热门 RL 解决方案概述,并根据这些解决方案之间的关系进行分类。贝尔曼方程的重要提示,它是所有 RL 算法的基础。)
  3. 无模型算法 (基于价值和基于政策的解决方案的异同,使用迭代算法逐步提高预测。剥削、探索和贪婪的政策。)
  4. Q-Learning(深入分析这个算法,这是后续深度学习方法的基础。发展直觉,了解为什么这个算法会收敛到最优值。)
  5. 深度 Q 网络 (我们的第一个深度学习算法。一步一步地演示它是如何工作的,以及为什么做出那些架构选择。)
  6. 策略梯度 (我们第一个基于策略的深度学习算法。)
  7. 演员评论家(复杂的深度学习算法,结合了 Deep Q 网络和策略梯度的优点。)**
  8. 惊喜话题😄(敬请期待!)**

RL 概述

RL 在机器学习的世界中处于什么位置?

通常,当人们提供 ML 的概述时,他们首先解释的是它可以分为两类,监督学习和非监督学习。然而,还有第三类,即。虽然它不像它的两个更迷人的兄弟姐妹那样经常被提及。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

机器学习可以分为监督学习、非监督学习和强化学习(图片由作者提供)

监督学习使用标记的数据作为输入,并预测结果。它接收来自作为“监督者”的损失函数的反馈。

无监督学习使用未标记的数据作为输入,并检测数据中的隐藏模式,如聚类或异常。它不接受来自主管的反馈。

强化学习通过与外部世界互动来收集输入和接收反馈。它输出与世界互动时需要采取的最佳行动。

RL 与监督(或无监督)学习有什么不同?

  • 没有监督人指导训练
  • 你不用一个大的(有标签的或无标签的)预先收集的数据集来训练。相反,你的“数据”是通过你与之互动的真实世界环境的反馈动态提供给你的。
  • 你在一系列的时间步骤上迭代地做出决策,例如,在一个分类问题中,你在数据输入上运行一次推理来产生一个输出预测。通过强化学习,你可以反复进行推理,在真实世界的环境中导航。

RL 是用来解决什么问题的?

RL 不是典型的 ML 问题,如分类、回归、聚类等,而是最常用于解决不同类别的现实世界问题,如控制任务或决策任务,其中您操作与现实世界交互的系统。

  • 例如,机器人或无人驾驶飞机必须学会从一个盒子中取出一个设备并将其放入一个容器中

它适用于各种应用,例如:

  • 操作无人驾驶飞机或自动驾驶车辆
  • 操纵机器人在环境中导航并执行各种任务
  • 管理投资组合并做出交易决策
  • 玩游戏,如围棋、象棋、视频游戏

强化学习是通过反复试验实现的

在 RL 中,学习是通过反复试验从经验中进行的,就像人类一样。例如,婴儿可以触摸火或牛奶,然后从消极或积极的强化中学习。

  • 婴儿采取一些行动
  • 接收来自环境的关于该动作结果的反馈
  • 重复这个过程,直到它知道哪些行动产生有利的结果,哪些行动产生不利的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

婴儿从正负强化中学习(图片由作者提供)

要使用 RL,请将您的问题构建为马尔可夫决策过程

假设你想训练一个机器人。你会如何使用 RL 来解决这样的问题?

要应用 RL,第一步是将问题构建成一个叫做马尔可夫决策过程(MDP)的东西。如果你以前没有和 RL 合作过,很可能你对 MDP 的唯一了解就是它听起来很吓人😄。

所以让我们试着理解什么是 MDP。MDP 有五个组件,它们以明确的方式协同工作。

代理人:这是你操作的系统,比如机器人。这是您希望使用 RL 构建和训练的模型。

***环境:*作为操作的一部分,代理与之交互的真实世界环境。例如,机器人必须导航的地形、其周围环境、诸如风、摩擦、照明、温度等因素。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个 MDP 有一个代理人,环境,状态,行动和奖励(图片由作者提供)

***状态:*这代表当前任何一点的‘世界状态’。它可以捕捉机器人相对于其地形的位置,周围物体的位置,也许还有风向和风速。

可能有一组有限或无限的状态。

***动作:*这些是代理在与环境交互时采取的动作。机器人可以右转、左转、前进、后退、弯腰、举手等等。

可能有一组有限或无限的可能动作。

***奖励:*是行动者因其行动而从环境中获得的正面或负面强化。这是一种评估特定行为“好”或“坏”的方式。

如果向一个特定的方向移动导致机器人撞到墙上,那将会有负面的回报。另一方面,如果向左转使机器人找到了它需要捡起的物体,它会得到积极的回报。

在定义您的 MDP 时,您应该记住什么?

代理和环境:显然,第一步是决定您的代理的角色和范围,以及您试图解决的问题的环境。

状态:接下来,您必须定义状态包含哪些数据点,以及它们是如何表示的。

重要的是,它捕获了解决您的问题所需的一切,以表示当前的世界形势,以便代理可以在不需要关于过去的信息或任何其他知识的情况下对未来进行推理。

换句话说,国家的定义应该是独立的。因此,举例来说,如果您需要了解一些关于您如何到达这个状态的信息,那么这个历史应该封装在您的状态定义本身中。

行动:您的代理可以采取的一系列潜在行动是什么?

奖励:这是代理人从经验中学习的方式。因此,这是您需要认真考虑的事情,因为以一种真正反映您希望代理学习的行为的方式来定义奖励是至关重要的。

MDP 是如何工作的?

现在我们已经看到了什么是 MDP,我们将进入它是如何工作的。让我们用井字游戏作为一个简单的例子。两个玩家通过将他们的代币放在一个 3x3 的格子上来玩这个游戏。一个玩家放置零(甜甜圈形状),而其他玩家放置十字。目标是通过将三个代币排成一行来赢得游戏。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

您可以按如下方式定义 MDP:

  • 代理人与环境对抗,所以环境充当它的对手。
  • 任何一点的状态都是棋盘上所有标记的当前位置,包括代理和环境的标记。
  • 有 9 种可能的操作,代理可以将令牌放在网格中 9 个可用方格的每一个上。
  • 如果代理赢了,它会得到+10 点的正奖励,如果它输了,它会得到-10 点的负奖励。每一个中招给中性奖励 0 分。

现在让我们来看看 MDP 在玩游戏时的操作。

代理在一系列时间步骤内与其环境进行交互。在每个时间步骤中出现一组操作流程,然后在每个时间步骤中重复该流程。

该序列从初始状态开始,该初始状态成为当前状态。例如,你的对手,环境已经把他们的令牌放在一个特定的位置,这就是游戏的开始状态。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MDP 是如何工作的(图片由作者提供)

现在,从第一个时间步开始,每个时间步发生以下步骤:

  1. 环境的当前状态被输入到代理。
  2. 代理使用该当前状态来决定它应该采取什么动作。它不需要记住在它之前的国家和行动的全部历史。代理决定将其令牌放在某个位置。有许多可能的动作可供选择,那么它是如何决定采取什么动作的呢?这是一个非常重要的问题,但我们以后会谈到这个问题。
  3. 该动作作为输入传递给环境。
  4. 环境使用当前状态和选择的动作,并输出两件事——它将世界转换到下一个状态,并提供一些奖励。例如,它通过将令牌放在某个位置来采取下一步行动,并为我们提供奖励。在这种情况下,由于还没有人赢得游戏,它提供了 0 点的中性奖励。环境如何做到这一点对代理来说是不透明的,并且不在我们的控制之下。
  5. 这种来自环境的奖励随后作为先前行动的结果被提供给代理人。

这完成了一个时间步骤,并使我们进入下一个时间步骤。这个下一个状态现在变成当前状态,然后作为输入提供给代理,并且循环重复。

在整个过程中,代理人的目标是最大化在给定状态下采取行动所获得的总回报。它不仅想最大化眼前的回报,还想最大化长期累积的回报。我们将很快回到这个话题。

MDP 在一系列时间步长上迭代

这是 MDP 操作的另一个视图,显示了时间步骤的进展。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MDP 迭代一系列时间步骤(图片由作者提供)

在每个时间步骤中,会发生三件事——状态、行动和奖励,它们充分描述了在该时间步骤中发生的事情。

轨迹描述了多个时间步的执行情况

因此,MDP 的执行可以描述为在一系列时间步骤上发生的轨迹(根据状态、动作、奖励),如下所示。

(s3、a3、r4、s4、a4、r5、s5、a5、r6、s6)

偶发任务以终止状态结束

对于具有明确定义的结束或终止状态的 RL 任务,从开始状态到结束状态的完整序列被称为情节。游戏的每一轮都是一集。

  • 因此,在一集结束时,您可以重置到一个开始状态(或从一组开始状态中随机选择一个)并播放另一个完整的集,并重复。
  • 每一集都独立于下一集。

因此,RL 系统的操作在多个事件中重复。在每一集里,它会重复多个时间点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每集都以终结状态结束(图片由作者提供)

持续的任务永远继续下去

另一方面,没有结束的 RL 任务被称为持续任务,可以永远继续下去(或者直到你停止系统)。持续管理生产或仓库自动化的机器人。

主体和环境控制状态-动作转换

正如我们刚刚看到的,在每个时间步中,MDP 通过在代理做某事和环境做某事之间交替来运行:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

给定一个状态,代理决定动作。给定一个动作(和状态),环境决定下一个状态。(图片由作者提供)

  • 给定当前状态,下一个动作由代理决定。事实上,那是代理的唯一工作。例如,从当前状态,代理可以选择动作 a₁a₂ 来放置其令牌。
  • 给定当前状态和代理选择的下一个动作,到下一个状态的转换和奖励由环境控制。例如,如果代理人选择了动作 a₁ ,环境可以通过玩不同的移动转换到状态 S₂S₃ 。另一个视频游戏的例子可能是,从一个给定的状态(例如,角色站在屋顶上)开始,同一个代理动作(角色跳跃)可能以某种概率在一个以上的下一个状态中结束(例如,落在相邻的屋顶上,或掉到地上),这是由环境控制的。

环境如何过渡到下一个状态?

给定一个当前状态,以及代理选择的动作,环境如何计算出结果。下一个状态和奖励?

对于我们将要处理的大多数现实的 RL 问题,答案通常是“它就是这样”。大多数环境都有复杂的内部动态,当从特定状态采取行动时,这些动态控制着环境的行为。

例如,在股票交易 RL 应用程序中,股票市场环境有一系列看不见的因素决定股票价格如何变动。或者无人机导航 RL 应用中的环境取决于物理定律,这些定律控制各种地形和微天气条件下的气流、运动、热力学、能见度等。

我们的重点是培训代理,我们通常可以将环境视为外部黑盒。

注意,这个外部黑匣子可能是环境的模拟器。在许多情况下,建立一个模拟器可能是不实际的,我们将直接与真实环境进行交互。

然而,为了完整起见,让我简单地提一下,如果我们确实建立了这样一个环境模型,MDP 将把它表示为一个大的转移概率矩阵或函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

该矩阵将给定的状态和动作对映射到:

  • 下一个状态,有一定的概率,因为我们可能以不同的概率结束。这就是所谓的转移概率。
  • 奖励。

代理如何选择动作?

另一方面,我们对代理如何决定在给定状态下选择什么动作非常感兴趣。事实上,这正是我们想要解决的 RL 问题。

为此,它使用了三个概念,我们将在下面探讨:

  • 返回
  • 政策
  • 价值

回报是所有时间步的总回报

当代理执行时间步长时,它会在每个时间步长累积奖励。

然而,我们真正关心的不是任何个人奖励,而是累积奖励。

我们称之为回归。它是代理在任务持续时间内累积的总奖励。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

回报是在每个时间点收到的奖励的总和(图片由作者提供)

使用折扣奖励计算回报

当我们计算回报时,我们不是简单地将所有的奖励相加,而是应用一个折扣因子γ来加权随时间推移的后续奖励。这些被称为折扣奖励。

返回= r₀ +γ r₁ + γ r₂

更一般地说:

Return = r₀ +γ r₁ + γ r₂ + …+ γr

这样,当时间步数变得很大时,累积奖励不会无限增长(比如连续的任务,或者很长的情节)。

这也鼓励代理人更关心眼前的回报,而不是以后的回报,因为以后的回报会大打折扣。

代理人的最终目标是获得最大的回报,不仅仅是超过一集,而是超过很多很多集。

基于这个折扣,我们可以看到代理在评估奖励时考虑了两个因素。

眼前的奖励比以后的奖励更有价值

第一点是,如果代理人必须在现在和以后获得一定数量的奖励之间做出选择,即时奖励更有价值。由于折扣系数γ小于 1,我们将对以后的奖励给予比直接奖励更多的折扣。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

即时奖励比后期奖励更有价值(图片由作者提供)

给我们最高总回报的奖励更好

第二点是,如果代理人必须在现在获得一些奖励和以后获得更大的奖励之间做出选择,更大的奖励很可能是更可取的。这是因为我们希望代理人关注总回报,而不是个人回报。在一盘棋中,代理人必须从两条路径中选择较好的一条。在第一个游戏中,它可以通过激进的打法在早期杀死一些棋子。这给了它一些直接的回报。然而,从长远来看,这使它处于不利地位,并失去了游戏。因此它最终会得到一大笔负回报。或者,它可以玩一套不同的走法,一开始回报较低,但最终赢得游戏。从而获得大量的积极回报。显然,第二种方法更好,因为它给出了更高的总回报,而不是更大的直接回报。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们想获得更高的总奖励(图片由作者提供)

策略是选择行动所遵循的策略

我们要讨论的第二个概念是政策。早些时候,我们推迟了一个非常重要的问题,那就是,在给定的状态下,代理如何决定选择哪个动作。代理可能会使用许多不同的策略:

  • 总是随机选择下一步行动
  • 总是选择已知奖励最高的下一个州
  • 抓住机会,探索新的状态,希望找到一条更好的道路。
  • 总是谨慎行事,避免负面回报的机会。

代理为决定在给定状态下选择哪个动作而遵循的任何策略都称为策略。虽然这听起来很抽象,但策略只是将给定的状态映射到要采取的操作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

策略告诉代理从任何状态中选择哪个动作(图片由作者提供)

政策就像一个(巨大的)查找表

您可以将策略视为一个(巨大的)查找表,它将状态映射到操作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

因此,给定当前状态,代理在表中查找该状态,以找到它应该选择的动作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该政策就像一个(巨大的)查找表(图片由作者提供)

在实践中,对于真实世界的问题,有如此多的状态和如此多的动作,以至于使用一个函数,而不是一个查找表,来将状态映射到动作。

然而,直觉是一样的——把一个函数想象成一个“巨大的查找表”。

确定性和随机性策略

策略可以是确定性的,也可以是随机的。

确定性策略是代理在达到特定状态时总是选择相同的固定动作的策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

或者,随机策略是一种策略,其中代理人根据每个动作的某种概率,改变它为一个状态选择的动作。

例如,它可能会在玩游戏时这样做,这样它就不会变得完全可预测。在玩石头剪子布的时候,如果它总是玩同一个动作,对手可以发现这一点并轻松击败它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

代理如何获得保单?

我们一直在讨论这个策略,就好像代理已经有一个现成的策略可供使用一样。但事实并非如此。

就像人类婴儿一样,代理在开始时并没有真正有用的策略,也不知道在任何给定的状态下应该采取什么行动。然后,通过使用强化学习算法,它会慢慢地学习一个有用的策略。

有这么多可能的策略,代理应该使用哪一个?

代理人从给定状态采取的行动决定了它获得的回报,因此随着时间的推移,最终的总回报。因此,代理人的目标是选择最大化其回报的行动。

换句话说,代理人的目标是遵循一个使其回报最大化的政策(这是它选择行动的方式)。

因此,在代理可以遵循的所有策略中,它想要选择最好的一个。回报最高的那个。

为了做到这一点,代理需要比较两个策略来决定哪一个更好。为此,我们需要理解价值的概念。

这个值告诉你遵循一些政策的预期回报

假设代理处于特定状态。此外,假设代理不知何故得到了一个策略,π。现在,如果它从那个状态开始,并且总是根据那个策略选择行动,它能期望得到什么回报?

这就好比说,如果代理人从那个状态开始,并且总是根据那个政策选择行动,那么在很多很多集里,它的平均回报会是多少?

这种平均长期回报,或预期回报,被称为特定国家的价值,在政策π下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

状态值(V)或状态-行动值(Q)是通过在许多情节中遵循给定的策略,分别从特定的状态或状态-行动获得的预期回报(图片由作者提供)

或者,代理可以从状态-动作对开始。它已经从一个特定的州采取了一个特定的行动。如果从那个状态-动作开始,它总是根据给定的策略π选择动作,那么它期望得到的回报是什么?

正如前面针对策略表所讨论的,我们可以将 Value 视为一个(巨大的)查找表,它将一个状态或状态-动作对映射到一个值。

因此,我们有两种价值:

  • 状态值—通过执行基于给定策略π的操作,从给定状态开始的预期回报。换句话说,状态值函数将状态映射到它的值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

状态值函数将状态映射到其值(图片由作者提供)

  • 状态-行动值(也称为 Q 值)—从给定状态采取给定行动,然后根据给定策略π执行行动的预期回报。换句话说,状态-动作值函数将状态-动作对映射到它的值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

状态-动作值函数将状态-动作对映射到它的值(图片由作者提供)

报酬、回报和价值之间的关系

  • 奖励是单个行动获得的直接奖励。
  • Return 是该集结束前获得的所有折扣奖励的总和。
  • 价值是许多集的平均回报(又名预期回报)。

把奖励看作是即时的快乐,把价值看作是长久的幸福😃。

人们可以直观地认为价值如下。像人类一样,代理从经验中学习。当它与环境互动并完成剧集时,它会获得每集的回报。

随着它积累更多的经验(即获得越来越多的剧集的回报),它了解哪些状态以及这些状态中的哪些动作产生最多的回报。

它将这种“体验”存储为“价值”。

为什么价值取决于我们遵循的政策?

显然,我们得到的回报(以及回报和价值)取决于我们在特定状态下采取的行动。由于操作取决于所选择的策略,因此值也取决于策略。

如果我们的政策是选择完全随机的行动(例如,从均匀分布中抽取行动样本),那么一个状态的价值(预期回报)可能会很低,因为我们肯定没有选择最好的行动。

相反,如果我们的政策是从抽样时产生最大回报的概率分布中选择行动,那么一个状态的价值(预期回报)会高得多。

使用值函数来比较策略

既然我们已经理解了价值,那么让我们回到我们之前关于比较两种策略来看看哪种更好的讨论。我们如何评价“更好”的含义?

给定两个策略,通过遵循策略并评估回报,我们可以为每个策略确定相应的状态值或状态动作值函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

一旦我们有了各自的价值函数,我们就可以使用这些价值函数来比较策略。价值函数更高的政策更好,因为这意味着它将产生更高的回报。

“最佳”策略被称为最优策略

因为我们现在可以比较策略来找出哪些是“好”的,哪些是“坏”的,所以我们也可以使用它来找到“最佳”策略。这就是所谓的最优策略。

最优策略是能给代理人带来比其他策略更多回报的策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最优策略是优于所有其他策略的策略(图片由作者提供)

通过寻找最优策略来解决 RL 问题

现在我们有了解决 RL 问题的方法。

我们把我们的问题构造成一个 MDP,然后我们可以通过构建一个代理来解决这个问题。MDP 的大脑,这样它就能决定采取什么行动。它应该以回报最大化的方式来做这件事。

换句话说,我们需要为代理人找到最优策略。一旦有了最佳策略,它就简单地使用该策略从任何状态中选择动作。

我们将应用强化学习算法来建立一个代理模型,并训练它找到最佳策略。找到最优策略实质上解决了 RL 问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

在本系列的下一篇文章中,我们将研究这些 RL 算法使用的解决方案。

最后,如果你喜欢这篇文章,你可能也会喜欢我关于变形金刚和音频深度学习的其他系列。

* [## 直观解释的变压器(第 1 部分):功能概述

NLP 变形金刚的简明指南,以及为什么它们比 rnn 更好,用简单的英语。注意力如何帮助…

towardsdatascience.com](/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452) [## 音频深度学习变得简单(第一部分):最新技术

颠覆性深度学习音频应用和架构世界的温和指南。以及为什么我们都需要…

towardsdatascience.com](/audio-deep-learning-made-simple-part-1-state-of-the-art-techniques-da1d3dff2504)

让我们继续学习吧!*

强化学习变得简单(第 2 部分):解决方法

原文:https://towardsdatascience.com/reinforcement-learning-made-simple-part-2-solution-approaches-7e37cbf2334e?source=collection_archive---------4-----------------------

直观强化学习系列

RL 解决方案的概述,以及如何对它们进行分类。用简单的英语从贝尔曼方程式中得出的重要结论

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由张秀坤镰刀Unsplash 上拍摄

这是我关于强化学习系列的第二篇文章。既然我们已经了解了什么是 RL 问题,那么让我们来看看用来解决它的方法。

这里是对本系列之前和之后文章的一个快速总结。我的目标是不仅要理解事物是如何工作的,还要理解它为什么会这样工作。

  1. 基本概念和术语介绍 (什么是 RL 问题,以及如何使用马尔可夫决策过程和概念(如回报、价值和政策)中的技术将 RL 问题解决框架应用于该问题)
  2. 解决方案方法 —本文 (概述流行的 RL 解决方案,并根据这些解决方案之间的关系进行分类。贝尔曼方程的重要提示,它是所有 RL 算法的基础。)
  3. 无模型算法 (基于价值和基于策略的解决方案的异同,使用迭代算法逐步提高预测。剥削、探索和贪婪的政策。)
  4. Q-Learning 发展直觉,了解为什么这个算法会收敛到最优值。)
  5. 深度 Q 网络 (我们的第一个深度学习算法。一步一步地演示它是如何工作的,以及为什么做出那些架构选择。)
  6. 策略梯度 (我们第一个基于策略的深度学习算法。)
  7. 演员评论家*(复杂的深度学习算法,结合了 Deep Q 网络和策略梯度的最佳技术。)*
  8. 惊喜话题😄*(敬请期待!)*

RL 解决方案类别

解决强化学习问题基本上等于找到最优策略(或最优值)。有许多算法,我们可以把它们分成不同的类别。

基于模型与无模型

非常宽泛地说,解决方案是:

  1. 基于模型(又名计划)
  2. 无模型(又名强化学习)

当环境的内部操作已知时,使用基于模型的方法。换句话说,当从某个当前状态执行某个动作时,我们可以可靠地说出环境将输出什么下一个状态和奖励。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于模型:环境的内部操作是已知的(图片由作者提供)

当环境非常复杂并且其内部动态未知时,使用无模型方法。他们将环境视为黑箱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

无模型:环境是一个黑匣子(图片由作者提供)

预测与控制

另一个高层次的区别是预测和控制。

对于一个预测问题,给我们一个策略作为输入,目标是输出相应的值函数。这可以是任何策略,不一定是最优策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

预测与控制问题(图片由作者提供)

对于控制问题,不提供输入,目标是探索策略空间并找到最优策略。

大多数实际问题都是控制问题,因为我们的目标是找到最优策略。

流行 RL 算法分类

最常见的 RL 算法可分类如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

知名 RL 解决方案分类(图片由作者提供)

最有趣的真实世界 RL 问题是无模型控制问题。因此,在本系列中,我们不会进一步探讨基于模型的解决方案,只是在下面简单地介绍一下。从现在开始,我们讨论的一切都只与无模型控制解决方案有关。

基于模型的方法

因为基于模型的方法可以产生每个状态和动作交互的精确结果,所以它们可以在不与环境实际交互的情况下通过分析找到解决方案。

举个例子,用基于模型的方法下国际象棋,你可以在国际象棋的所有规则和策略中编程。另一方面,无模型算法对象棋游戏本身一无所知。它唯一的知识是一般性的信息,例如状态是如何表示的以及可能采取什么行动。它只是在抽象的意义上通过观察当它尝试一些动作时获得的奖励来学习象棋。

大多数现实世界的问题都是无模型的,因为环境通常太复杂而无法建立模型。

无模型方法

相比之下,无模型解决方案只能通过与环境的实际交互来观察环境的行为。

与环境互动

既然环境的内部运行是我们看不到的,那么无模型算法是如何观察环境的行为的呢?

我们通过与它互动,一次一个动作,来了解它的行为。算法充当代理,采取一个动作,观察下一个状态和奖励,重复。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

无模型算法通过与环境交互来了解环境,一次一个动作。(图片由作者提供)

代理人通过反复试验获得经验。它尝试步骤并接收正面或负面的反馈。这与人类学习的方式非常相似。

互动轨迹

当代理走每一步时,它遵循一条路径(即轨迹)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

互动轨迹(作者图片)

代理的轨迹成为算法的“训练数据”。

贝尔曼方程是所有 RL 算法的基础

在我们进入用于解决 RL 问题的算法之前,我们需要一点数学知识来使这些概念更加精确。

数学实际上非常直观——它完全基于一个简单的关系,即贝尔曼方程。

这种关系是所有 RL 算法的基础。这个方程有几种形式,但它们都是基于相同的基本思想。让我们一步一步来建立对它的直觉。

从终端状态往回工作(这样更容易理解)

通过从一个状态采取行动达到一个终端状态来考虑奖励。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

达到终极状态时的奖励(图片由作者提供)

从那种状态得到的回报和采取那种行动得到的回报是一样的。请记住,奖励是为单个行动获得的,而回报是从该状态向前(直到该集结束)获得的累积折扣奖励。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

现在考虑先前的状态 S6。来自 S6 的回报是通过采取行动到达 S7 获得的奖励加上我们将从 S7 获得的任何贴现回报。重要的是,我们不再需要知道 S7 之后的各个步骤的细节。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

回报的贝尔曼方程

一般来说,任何状态的回报都可以分解为两部分——达到下一个状态的行动的直接回报,加上通过对所有后续步骤遵循相同的政策从下一个状态获得的贴现回报。这种递归关系被称为贝尔曼方程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

状态值的贝尔曼方程

回报是单个路径的贴现回报。状态值是通过对多条路径(即回报的预期)。

因此,状态值可以类似地分解为两部分——达到下一个状态的下一个行动的直接回报,加上通过遵循所有后续步骤的策略而得到的下一个状态的贴现值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

状态-动作值的贝尔曼方程

类似地,状态-行动值可以分解为两个部分——达到下一个状态的行动的直接回报,加上通过遵循所有后续步骤的策略得到的下一个状态的贴现值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(图片由作者提供)

为什么贝尔曼方程有用?

从贝尔曼方程中我们可以得出两个关键的观察结果。

Return 可以递归计算,而不需要转到剧集的结尾

第一点是,为了计算回报,我们不必一直走到这一集的结尾。剧集可能会很长(穿越成本也很高),也可能永无止境。相反,我们可以使用这种递归关系。

如果我们知道下一步的回报,那么我们就可以利用它。我们可以只走一步,观察回报,然后重复使用随后的回报,而不用遍历整个事件。

我们可以使用估计值,而不是精确值

第二点是有两种方法来计算同一件事:

  • 一个是从当前状态的返回。
  • 其次是一步的回报加上下一步的回报。

为什么这很重要?

由于衡量某个州(到本集结束)的实际回报非常昂贵,我们将使用估计回报。然后,我们用两种方法计算这些估计值,并通过比较两个结果来检查我们的估计值有多正确。

由于这些是估计值,而不是精确的测量值,所以这两种计算的结果可能不相等。这种差异告诉我们,我们在估算中犯了多少“错误”。这有助于我们通过修正估计值来减少误差,从而提高我们的估计值。

坚持这两个想法,因为所有的 RL 算法都会用到它们。

结论

现在我们对 RL 问题有了一个总体的概念,以及用来解决它们的方法的广阔前景,我们准备更深入地研究用来解决它们的技术。由于现实世界中的问题通常是用无模型方法解决的,这就是我们要关注的。它们将是下一篇文章的主题。

最后,如果你喜欢这篇文章,你可能也会喜欢我关于变形金刚和音频深度学习的其他系列。

[## 直观解释的变压器(第 1 部分):功能概述

NLP 变形金刚的简明指南,以及为什么它们比 rnn 更好,用简单的英语。注意力如何帮助…

towardsdatascience.com](/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452) [## 音频深度学习变得简单(第一部分):最新技术

颠覆性深度学习音频应用和架构世界的温和指南。以及为什么我们都需要…

towardsdatascience.com](/audio-deep-learning-made-simple-part-1-state-of-the-art-techniques-da1d3dff2504)

让我们继续学习吧!

(强化)学习非惯性系、伪力和爱因斯坦等效原理

原文:https://towardsdatascience.com/reinforcement-learning-non-inertial-frames-pseudo-force-and-einsteins-equivalence-principle-7d9e94b8297c?source=collection_archive---------65-----------------------

对一个经典控制问题的强化学习学到了一类不明显且不平凡的解决方案。

几周前,我在解决强化学习中的翻跟斗问题时,发现了一些非常有趣的事情。实际上这是一种保守的说法。我真的很惊讶,AI algo 在我想到它之前就找到了我要描述的解决方案(我是 Lore AI 的高级机器学习工程师,也是量子信息和黑洞专业知识的弦理论学家,所以我不知道以上是对 AI 的赞美还是我只是变得生疏了。读者可以自己判断。)

OpenAI Gym 为人们提供了几个环境来训练他们的强化学习算法,而 cartpole 由于其简单性而成为一个非常受欢迎的选择。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

问题陈述:如上图所示,在一个无摩擦的表面上有一个物体,物体上有一根绕无摩擦铰链旋转的杆。“环境”因此由 4 个数字表征:质心的水平位置和速度以及杆的角位置和速度。代理采取的**“动作”只能是左推或右推**。学习任务的目标是保持系统运行 200 步(系统保持运行的每个时间步有+1 的奖励)。跑步本身定义为质心保持在(-2.4,2.4)以内,角度在(-12,12)度之间。

正如你所看到的,这是一个非常简单的经典力学问题,但是当然,这个模型对经典力学一无所知,必须学会完成这个任务。一些人已经写了一般的强化学习,特别是这个问题,所以我不会深入研究它,只是说我将使用策略梯度。

我想讲的是问题的物理学,以及机器如何学习一类有趣的解。

惯性框架解决方案

思考一下的解决方案应该是什么。如果你对物理学不是很感兴趣,你会认为质心应该是静止的,而极点应该是垂直的。这确实是人工智能算法找到的解决方案,我们可以看到该解决方案的视频

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最直观的解决方案是重心几乎不动,杆子保持垂直。

以及脉冲、位置和角度位置的曲线图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

惯性坐标系解中的冲量(左右推力)、质心位置和杆的角位置。

现在,你们中稍微懂点物理的人会发现,这是一系列解中的一部分,在这个解中,质心的速度是均匀的,在这个例子中是零速度。通过将参考系转换到另一个惯性系,其他解决方案与这个解决方案简单相关。从一辆匀速行驶的汽车来看,想象与上述相同的解决方案。

如果你们不记得什么是惯性系,在牛顿第一定律中,惯性系被定义为没有外力的情况下,物体以恒定速度运动。

人工智能算法也可以找到这样的解决方案,但这不是本文的重点。

非惯性系解

在这一节中,我描述了人工智能发现的让我惊讶的有趣的解决方案,但在我到达那里之前,我需要给读者一个物理入门,以欣赏人工智能系统发现的解决方案。

物理学入门——非惯性系、赝力和爱因斯坦等效原理

牛顿第一定律将惯性系定义为物体在没有力的情况下保持其速度的坐标系。另外两个定律告诉我们在这种框架下的动力学定律。但是不遵守第一定律的框架,也就是非惯性系呢?加速中的汽车就是这样一个例子,尽管没有外力作用在你身上,但你“感觉”到自己正在加速。物理学家已经找到了一种方法来简化非惯性系中的计算,并且通过发明赝力的概念,甚至可以在非惯性系中使用另外两个定律。

简而言之,这个想法是假设非惯性系是惯性的,并且该惯性系中的所有物体都受到一个(伪)力的作用,该力等于质量乘以加速度的负值(回想一下,加速度是一个矢量,因此负值意味着方向相反的矢量)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

汽车中的钟摆向右加速时会向左倾斜。这个解是相同的,就好像重力在θ= arctan(A0/g)旋转的方向上作用。图片来源:https://www . toppr . com/ask/question/a-单摆悬吊汽车加速匀加速 a/

伪力可以用来解释为什么当悬挂在天花板上的汽车向前加速时,钟摆会向后摆动。有一个伪力向后作用在钟摆上。那么作用在摆锤上的总“力”是向下的重力和以角度θ= arctan(a/g)向后作用的伪力之和。

我们甚至可以说,有一个“有效引力”作用在上述方向,大小为 Sqrt(a +g)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

与上述相同的系统,其中加速框架被视为添加了适当伪力的惯性系。如图所示,伪力和重力一起作为有效重力。图片来源:https://www . toppr . com/ask/question/a-单摆悬于车顶-匀加速-上/

事实上,爱因斯坦的 广义相对论 正是基于这样一种想法,即没有局域方式来区分真实重力和赝力,这种东西被称为 等效原理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

爱因斯坦的等效原理指出,在重力开启的情况下,加速框架和非加速框架之间的差异无法仅通过局部实验来确定。图片来源:https://claesjohnsonmathscience . WordPress . com/2012/01/17/questioning-relativity-3-the-equivalence-principle/

强化学习伪力解

那么这一切和强化学习以及我们的横竿问题有什么关系呢?我看到的是,人工智能在非惯性系中学习解!也就是说,它学会了一种解决方案,其中杆保持倾斜一个角度,代理不断将系统推向该方向,以保持恒定的加速度,使杆不会进一步下落。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

非显而易见的非平凡解,其中小车以恒定加速度加速,而杆子保持恒定角度倾斜。

该系统学习让杆倾斜到一个角度,然后不断地加速它(这不像只在一个方向上给予脉冲那么简单,这会导致杆很快倒下)。

在上面的视频中可能很难看到加速度,但我们可以看到质心位置非常接近地遵循恒定加速度轨迹(使用 MSE 在轨迹上拟合 a 的 1/2 处)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

冲量(左右推动),质心位置,非惯性系解的杆的角位置。

技术细节

使用标准的体育馆环境来解决横拉杆问题并不容易。当我第一次看到上面的解决方案时,我很惊讶 AI 系统学会了这一点,但它不是这么干净,因为标准问题要求杆保持在 12 度倾斜和中心的 2.4 个单位内,这与 200 步的恒定加速度不兼容。因此,我用自己的代码包装了标准环境,还必须修改渲染函数,以便购物车在 200 步的持续时间内保持在可见区域。这一切的代码都可以在 my github repo 中找到。

强化学习—第 1 部分

原文:https://towardsdatascience.com/reinforcement-learning-part-1-a5518a7a0bed?source=collection_archive---------27-----------------------

FAU 讲座笔记关于深度学习

顺序决策

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级 / 下一讲

欢迎回到深度学习!所以今天,我们想讨论强化学习的基础。我们将研究如何教会一个系统玩不同的游戏,我们将从顺序决策的第一次介绍开始。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只有几次强化学习的迭代,训练出来的智能体还处于初级水平。使用 gifify 创建的图像。来源: YouTube

这里,我有几张幻灯片给你们看。你看,我们的主题是强化学习,我们想继续讨论顺序决策。在本课程的后面,我们还将讨论强化学习及其所有细节。我们还将研究深度强化学习,但今天我们只研究了顺序决策。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比较容易的游戏之一:多臂大盗。 CC 下的图片来自深度学习讲座的 4.0 。

好吧。顺序决策!嗯,我们想玩几个游戏。你能想到的最简单的游戏就是拉几个杠杆。如果你试图形式化这一点,那么你最终会陷入所谓的多臂土匪问题。所以,让我们做几个定义:我们需要一些动作,我们将其形式化为在时间 t 从一组动作 A 中选择一个动作 a 。所以,这是我们可以采取的一系列可能的行动。如果我们选择一个动作,那么这就有一些含义。如果你选择了一个特定的行动,那么你将会产生一些奖励。行动和奖励之间的关系是概率性的,这意味着有一个可能不同的、未知的概率密度函数来描述行动和奖励之间的实际关系。所以,如果你想到你的多臂强盗,你有几个吃角子老虎机,你拉其中一个杠杆,这产生一些奖励。但也许,所有这些老虎机都是一样的。或许他们不是。所以,你可能拉的每一只手都有不同的概率产生某种回报。现在,您希望能够选择一个动作。为了做到这一点,我们定义了一个所谓的政策。策略是一种形式化如何选择动作的方法。它本质上也是一个概率密度函数,描述了选择某种行为的可能性。政策本质上是我们想要影响游戏的方式。所以,政策是掌握在我们手中的。我们可以定义这个策略,当然,我们希望这个策略在游戏中是最优的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

玩这个游戏完全是为了预期的回报。来自深度学习讲座的 4.0CC 下的图片。

那么,关键要素是什么呢?那么,我们想要实现什么呢?我们希望获得最大的回报,特别是,我们不仅仅希望在游戏的每一个时间点都有最大的价值。相反,我们想计算一段时间内的最大预期回报。因此,我们对将要产生的回报进行了估计。我们计算了一个平均值,因为这让我们可以估计如果我们玩这个游戏很长时间,哪些行为会产生什么样的回报。这和监督学习是不同的,因为在这里,我们不是说做这个动作或者做那个动作。相反,我们必须通过我们的训练算法来决定选择哪些动作。显然,我们可能会犯错误,我们的目标是选择能够随着时间的推移产生最大预期回报的行动。所以,如果我们在一步中输了,如果平均来说,我们仍然可以获得高平均回报,这并不重要。所以,这里的问题是,当然,我们对回报的期望值是不知道的。所以,这就是强化学习的实际问题。我们想尝试估计这个预期回报和相关的概率。所以,我们能做的是,我们可以把我们的 r 下标 t 公式化为一个热编码向量,它反映了 a 的哪个动作实际上导致了奖励。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

行动价值函数 Q(a)描述了该行动的平均预期回报。来自深度学习讲座的 4.0CC 下的图片。

如果我们这样做了,我们就可以使用奖励的平均值在线估计概率密度函数。我们把它称为函数 Q(a ),这就是所谓的作用值函数,它基本上随着我们观察到的每一个新信息而变化。那么,我们如何做到这一点呢?有一种增量的方法来计算 a 的 Q 下标 t,我们可以很容易地展示出来。我们定义 Q 下标 t 为所有时间步长的和。所以,Q 下标 t+1 等于所有时间步 t 和所得报酬的总和。当然,你除以 t,现在,我们可以证明这是可以分开的。所以,我们可以取出总和的最后一个元素,也就是 t,然后让总和从 1 运行到 t-1。如果我们这样做,那么我们也可以引入 t-1 项,因为如果你在这里引入它,除以 1/(t-1),这将抵消。所以,这是一个完美的陈述。然后,我们看到在右边部分,除了 Q 下标 t,我们基本上没有别的了,所以,前面的 Q 下标 t,这是我们已经确定的。然后,我们可以稍微重新排列一下,在最后一行,你可以看到,我们可以将 Q 下标 t+1 更新为旧的 Q 下标 t+1/t 乘以 r 下标 t 减去 Q 下标 t,因此,我们可以得到一个增量式的动作值函数更新公式。这非常有用,因为我们不必存储所有的奖励,但我们可以通过迭代的方式来实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

探索与开发的困境。来自深度学习讲座CC BY 4.0 下的图片。

现在,如果我们继续,那么我们可以考虑为了训练这样一个系统,我们必须做的所有不同的步骤。你最终会遇到所谓的探索-开发困境。所以,当然,我们想最大化我们的回报。我们试图以一种方式选择我们的政策,使我们能够从我们的行动价值函数中获得最大的回报。如果你已经有了一个好的计划,这将会起作用。所以,如果你已经知道事情是怎样的。所以,让我们说你正在寻找一个比萨饼的配方,你已经看到了一些。你已经喜欢的披萨。然后,你可以再次生产同样的比萨饼,你知道这个食谱是好的。所以,我会得到我的奖励,这将是决定性的,如果你使用所谓的贪婪行动选择,你总是选择最大值。你总是产生同样的动作,给出同样的输入。这导致了一个问题,我们也需要对我们的回报进行抽样,因为我们不知道最佳配置是什么,因为我们只是在剥削。所以,如果我们只遵循贪婪的行动选择,那么我们将永远不会做出任何新的观察。我们将永远生产同样的比萨饼。也许有更好的披萨。也许有我们更喜欢的披萨。所以,只有探索才能发现。所以时不时地,我们必须尝试新的食谱,因为否则,我们不知道应该如何混合配料。或许,我们会找到一个比我们已经吃过的更好的披萨。这意味着有时,我们不得不做一些不会产生最大回报的举动。从没有产生一个好的回报,我们至少可以知道,这个特殊的举动不是一个非常好的。所以,如果你训练这样一个系统,那么,在开始的时候,你要更多地关注探索,找出哪些动作是好的,哪些动作不是那么好。然后,你可以越来越多地利用它,以便专注于在某些情况下有效的策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同的行动选择策略。 CC 下的图片来自深度学习讲座的 4.0 。

那么,我们如何做到这一点呢?一种非常简单的行为抽样形式是均匀随机分布。所以,在均匀随机分布中,你不需要任何关于系统的知识。你只是随机选择行动,并且以相等的概率选择它们。所以,你只需选择一些行动,所有的行动都是同样可能的。每个动作的可能性是一个可能动作集的基数。嗯,这可能有利于探索,但你可能会犯很多错误。所以,有一点好一点的。这被称为ε-贪婪方法。所以在这里,你选择行动给定这个概率密度函数。你可以看到我们选择 1 — ε。假设ε是 0.1。然后,我们以 90%的概率选择使我们的行动价值函数最大化的行动,即产生最大预期回报的行动。在 10%以上 n — 1,其中 n 是行动的数量,即对于所有其他行动,我们以此概率选择它们。所以,你可以看到,在大多数情况下,我们会选择,当然,产生最大预期回报的行动,但我们仍然可以切换到其他行动,以便也做一些探索。当然,你选择的ε越高,你就越有可能探索你的行动空间。然后,还有其他的变种。例如,您也可以使用 softmax 并引入一些温度参数τ。这里,τ的用法与我们刚才使用ε的方法相似。所以在这里,我们找到了一个不同的公式,我们可以使用这个温度,然后慢慢降低温度,这样我们就开始主要关注产生最大预期回报的行动。那么,这本质上是一个更柔和的版本吗,因为这里我们也考虑到了其他行为也可能引入不同的奖励。所以,如果你有两个奖励几乎相同的行动,最大奖励版本当然只会选择真正产生最大奖励的那一个。如果你的奖励是 10 和 9,那么 softmax 函数也会相应地拆分这个分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们当前观察的总结。来自深度学习讲座CC BY 4.0 下的图片。

到目前为止我们看到了什么?到目前为止,我们已经看到,我们可以在一个被称为多臂土匪问题的环境中进行顺序决策。我们可以看到,我们找到了一个函数 Q——所谓的行动价值函数——它能够描述我们的行动有哪些预期回报。然后,我们可以用它来选择我们的行动。例如,对于贪婪行为选择,这将总是选择产生最大预期回报的行为。所以,我们也看到,如果你只做贪婪的选择,那么我们会有点卡住,因为我们永远不会观察某些星座。如果我们错过了星座,我们可能会错过赢得游戏或在游戏中产生大量奖励的非常好的食谱或非常好的策略。所以,我们也需要探索。否则,我们就无法找出最佳策略。到目前为止,我们还没有看到的是,我们的奖励实际上取决于世界的状态。因此,在我们的场景中,我们的一切都只与动作相关。行动是决定性因素。但这是一种简化。当然,一个世界有一个状态。这是我们在讨论强化学习和马尔可夫决策过程时要考虑的。此外,我们的时间没有影响奖励。所以,在当前的星座中,先前的动作完全独立于随后的动作。这也是一种广泛的简化,在实际应用中可能并不如此。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。

这就是我们下次真正讨论强化学习的原因。在接下来的视频中,我们将介绍所谓的马尔可夫决策过程。我们将研究强化学习到底是什么。所以,这只是一个关于我们在玩游戏时可以期待什么的小玩笑。但在下一个视频中,我们将真正了解 constellation,其中世界确实有一个状态,然后我们还对不同动作之间的依赖关系进行建模。所以,会稍微复杂一点。但是你应该已经在这个视频中学到了,重要的是,你找到了一个描述特定动作值的函数。这是一个会再来的概念。您还应该记住的概念是,您可以使用不同的策略。所以,你可以有贪婪行动选择,ε-贪婪行动选择,或者均匀随机策略。所以,请记住这些。在未来的视频中,当我们谈到强化学习时,它们也很重要。非常感谢您的收听,希望在下一段视频中见到您。再见!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在接下来的讲座中,我们将看到如何训练深度强化学习系统。使用 gifify 创建的图像。来源: YouTube

如果你喜欢这篇文章,你可以在这里找到更多的文章,在这里找到更多关于机器学习的教育材料,或者看看我们的深度 学习 讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTube、Twitter、脸书、LinkedIn 或 T21。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中生成文字记录,试试自动博客

链接

链接到萨顿 2018 年草案中的强化学习,包括深度 Q 学习和 Alpha Go 细节

参考

[1]大卫·西尔弗、阿贾·黄、克里斯·J·马迪森等,“用深度神经网络和树搜索掌握围棋”。载于:自然 529.7587 (2016),第 484–489 页。
【2】大卫·西尔弗、朱利安·施利特维泽、卡伦·西蒙扬等人《在没有人类知识的情况下掌握围棋游戏》。载于:自然 550.7676 (2017),第 354 页。
【3】David Silver,Thomas Hubert,Julian Schrittwieser,等《用通用强化学习算法通过自玩掌握国际象棋和松木》。载于:arXiv 预印本 arXiv:1712.01815 (2017)。
[4] Volodymyr Mnih,Koray Kavukcuoglu,David Silver 等,“通过深度强化学习实现人类水平的控制”。载于:自然杂志 518.7540 (2015),第 529-533 页。
【5】马丁·穆勒。《电脑围棋》。摘自:人工智能 134.1 (2002),第 145-179 页。
[6]理查德·萨顿和安德鲁·g·巴尔托。强化学习导论。第一名。美国麻省剑桥:麻省理工学院出版社,1998 年。

强化学习—第二部分

原文:https://towardsdatascience.com/reinforcement-learning-part-2-d38cffee992d?source=collection_archive---------53-----------------------

FAU 讲座笔记关于深度学习

马尔可夫决策过程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是讲座视频&配套幻灯片的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级 / 下一讲

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

强化学习 PacMac。使用 gifify 创建的图像。来源: YouTube

欢迎回到深度学习!所以,今天我们想讨论一下这个所谓的马尔可夫决策过程,它是强化学习的基础。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多臂土匪的局限性。 CC 下的图片来自深度学习讲座的 4.0 。

我给你带了几张幻灯片。我们可以在这里看到我们实际上在谈论什么。现在的主题是强化学习。真的,我们想学习如何玩游戏。关键要素将是马尔可夫决策过程。因此,我们必须扩展我们在前面的视频中谈到的多臂土匪问题。我们必须引入一个状态世界。所以,世界现在有了一个状态。奖励也取决于行动和单词的状态。因此,根据世界的状况,行动可能会产生非常不同的回报。我们可以用概率密度函数对其进行编码,就像你在这张幻灯片上看到的那样。还有什么?这个场景现在被称为语境强盗。在完全强化学习问题中,行为也会影响状态。所以,我们会看到无论我采取什么行动,它都会对状态产生影响,这也可能是概率性的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马尔可夫决策过程。来自深度学习讲座CC BY 4.0 下的图片。

所以,我们可以用另一个概率密度函数来描述。这就把我们引向了所谓的马尔可夫决策过程。马尔可夫决策过程,它们采取以下形式:你有一个代理,在上面的代理正在做动作 a 下标 t。这些动作对环境有影响,然后产生奖励,就像在多臂强盗问题中一样。它也改变了状态。所以现在,我们的行为和国家是相互关联的,它们当然是相互依赖的。因此,我们有一个状态转移概率密度函数,它将导致状态根据先前的状态和采取的行动而改变。这种转变也产生了一种回报,这种回报现在取决于国家和行动。否则,它与我们已经在多臂土匪问题中看到的非常相似。当然,我们需要策略,而策略现在也依赖于状态,因为你想了解状态以选择你的行动,而不仅仅是依赖于先验知识来选择独立于状态的行动。所以,都是相应展开的。现在,如果所有这些集合都是有限的,这就是有限马尔可夫决策过程。如果你看这个图,你会发现这是一个非常抽象的描述整个情况的方式。代理本质上是选择动作和设计动作的系统。环境就是一切。因此,举例来说,如果你要控制一个机器人,机器人本身可能是环境的一部分,因为机器人的位置也编码在状态中。代理所能做的一切仅仅是设计动作。关于当前情况的知识被编码在状态中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

网格世界中一个简单游戏的例子。 CC 下的图片来自深度学习讲座的 4.0 。

让我们看一个更简单的例子,而不是马上控制机器人。我们将研究一个简单的游戏。你看这是一个伟大的游戏。一个网格世界,我们有几个方块,然后我们的代理人可以在这些方块之间移动。当然,代理人的职位也是国家的一部分。你可以这样表述: s 是我们当前所在的字段。现在,我们的特工可以向四个方向移动。所以,我们可以上下左右移动。任何引导网格的动作都有一个概率等于狄拉克δ函数,这个函数总是产生先前的状态。所以,你不能离开网格。每当你试图离开棋盘的时候,你就会回到你试图离开棋盘的原始位置。此外,你会得到-1 的确定性奖励。所以,试图离开董事会将会受到负回报的惩罚。还有什么?好吧,每当我们到达一个不同于 A '和 B '的牌,这必然导致奖励为 0。所以,所有的瓷砖都没有奖励。全面行动对你没有任何好处。唯一能产生奖励的牌是当你到达 A '或 B '时。为了产生奖励,你必须移动到位置 A 或 B。在这些位置上,你可以选择任何动作不管你做什么,但你会被传送到 B '或 A ',这取决于你是在 A 还是 B 上。你在那里神秘地为 A 产生+10 的奖励,为 B 产生+5 的奖励。所以,这是我们的游戏,游戏非常简单。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们网格世界例子的统一随机策略。来自深度学习讲座CC BY 4.0 下的图片。

当然,如果你想玩这个游戏或关卡,你想产生大量的奖励。策略应该引导你到方块 A 和 B,然后在 A '和 A 或 B '和 B 之间来回循环,所以这可能是玩这个游戏的好策略,对吗?好吧。所以现在,我们必须以某种方式编码我们的状态和位置。因为我们可以在 25 个潜在的不同位置上,我们的行动也必须乘以这个棋盘游戏中潜在位置的数量。那么,让我们来看一个示例策略。该策略现在依赖于动作和状态。状态或多或少是这个网格中的位置,动作当然是,正如我们所说的上、下、左、右。那么现在,我们来看看统一随机政策。它可以用这里显示的方式来可视化。所以,不管我们在棋盘的哪个位置,我们总是以相等的概率选择四个行动中的一个。在这个网格世界的例子中,我们可以在这个简单的图形中可视化我们的整个状态动作空间。所以,这对于可视化非常有用,你可以很好地理解这个例子。所以在这个统一随机政策下。当然,没有理由认为这是一个非常好的策略,因为我们会尝试走出棋盘,当然,我们偶尔也会碰到 A 和 B,但这不是一个非常好的策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

怎样才能得到更好的政策? CC 下的图片来自深度学习讲座的 4.0 。

所以现在的问题是“我们如何才能制定更好的政策?”或者“我们如何评估好的政策?”。这里你要问的关键问题是你要问“什么是好政策?”。所以,我们必须非常精确地定义什么是好的。本质上,我们必须区分两种不同的任务。有些偶发的任务是有结束的。所以它们像一集一样有开头和结尾。有无限长的连续任务。所以,如果你有一个无限长的任务,那么这是一个不同的情况。实际上,您可以通过在情节任务中选择一个终端状态来统一这两者,该状态只转换到它们自己,并产生确定性的零回报。所以,你可以通过到达一个最终状态,将你的阶段性任务变成一个无限的任务,而这个最终状态继续产生零回报。这样,我们就不用再区分两者了。我们如何衡量什么是好政策?我们希望未来的回报最大化。因此,这是非常重要的,与我们的多臂强盗问题相反,我们只是简单地平均或计算我们的回报的期望值,我们现在感兴趣的是最大化未来回报。所以,如果你看这个值 g 下标 t,你可以看到,这当然取决于政策。因此,我们寻求最大化我们对政策的预期未来回报。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 80 年代的玩具中,通过范例进行训练已经成为可能。使用 gifify 创建的图像。来源: YouTube

我们用下面的方法来计算它:所以,我们从 t + 1 开始,遍历整个序列,直到 T 是最后一个元素。所以,T 也可以是无穷大,如果你去做一个无限长的任务。我们要计算在游戏结束前的所有未来时间步骤中产生的奖励。现在,如果我们不考虑离下一次奖励还有多远,这就有点不公平了。例如,在前面的游戏中,我们可能会试图找到到达 A 和 B 的最短路径,以获得奖励。如果我们不忽略这一点,那么如果我们有一个很高但在未来很遥远的奖励,它对我们来说可能没有我们能很快产生的奖励重要。这就是为什么我们在这里引入了这个贴现因子γ。γ的(k — t — 1)次方用于贴现遥远未来的报酬。如果我们这样做,我们就会含蓄地倾向于短的解决方案,而不是长的。所以,我们想摆脱随机移动的解决方案,因为我们想选择最短的路径直接获得回报。这可以通过引入这个贴现因子来实现。我们看到我们现在能够描述一项政策的优点或价值。现在的问题是,当然,我们想要优化这个政策的预期未来回报。在这个等式中,你甚至看不到政策,因为政策是产生我们奖励的决定性因素。你必须记住的一点是,你要在 0 和 1 之间选择你的贴现因子。只要你的序列不是无限长,值 1 实际上是允许的。在这种情况下 T 不可能有无穷大。如果您有无限长的序列,那么您必须选择一个小于 1 的折扣因子。好吧。现在,我们讨论了最基本的内容,如何定义马尔可夫决策过程,以及如何评估保单的价值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。

当然,我们仍然缺少的和我们下次在深度学习中讨论的,是这一点的实际含义。因此,我们希望能够确定好的政策,我们真的希望进入学习部分。因此,我们希望更新政策,以便在每一步都做得更好。这个概念被称为策略迭代。所以,我希望你喜欢这个视频,你学习了马尔可夫决策过程的基本概念,以及在这样一个马尔可夫决策过程中对政策的评估。这是对预期未来回报的评价。因此,这与我们的多臂强盗问题相比有很大的不同,在多臂强盗问题中,我们只考虑最大的预期回报。现在,我们要考虑到,我们要最大化未来的回报。到目前为止,我们所做的一切不仅仅是重要的,而是为未来的步骤奠定基础,以便找到赢得比赛的途径。非常感谢您的收听,希望在下一段视频中见到您!再见!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

后来的强化迭代学会了吃豆人。使用 gifify 创建的图像。来源: YouTube

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

链接

链接到萨顿 2018 年草案中的强化学习,包括深度 Q 学习和 Alpha Go 细节

参考

[1]大卫·西尔弗、阿贾·黄、克里斯·J·马迪森等,“用深度神经网络和树搜索掌握围棋”。载于:自然 529.7587 (2016),第 484–489 页。
【2】大卫·西尔弗、朱利安·施利特维泽、卡伦·西蒙扬等人《在没有人类知识的情况下掌握围棋游戏》。载于:自然 550.7676 (2017),第 354 页。
【3】David Silver,Thomas Hubert,Julian Schrittwieser,等《用通用强化学习算法通过自玩掌握国际象棋和松木》。载于:arXiv 预印本 arXiv:1712.01815 (2017)。
[4] Volodymyr Mnih,Koray Kavukcuoglu,David Silver 等,“通过深度强化学习实现人类水平的控制”。载于:自然杂志 518.7540 (2015),第 529-533 页。
【5】马丁·穆勒。《电脑围棋》。摘自:人工智能 134.1 (2002),第 145-179 页。
[6]理查德·萨顿和安德鲁·g·巴尔托。强化学习导论。第一名。美国麻省剑桥:麻省理工学院出版社,1998 年。

强化学习—第 3 部分

原文:https://towardsdatascience.com/reinforcement-learning-part-3-711e31967398?source=collection_archive---------28-----------------------

FAU 讲座笔记关于深度学习

策略迭代

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级 / 下一讲

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,马里奥并没有从强化学习中解脱出来。使用 gifify 创建的图像。来源: YouTube

欢迎回到深度学习!所以今天,我们想深入探讨强化学习。我们今天要解释的概念是政策迭代。它告诉我们如何制定更好的策略来设计赢得比赛的策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

价值函数模拟了我们的水晶球。 CC 下的图片来自深度学习讲座的 4.0 。

那么,让我们来看看我给你们准备的幻灯片。这是我们讲座的第三部分,我们想谈谈政策迭代。现在,在我们有这个行为价值函数之前,这个函数可以评估一个行为的价值。当然,这现在还取决于状态 t。这本质上是我们的——你可以说是甲骨文——试图预测未来的回报 g 下标 t。它取决于遵循特定的政策,该政策描述了如何选择行动和结果状态。现在,我们也可以在这里找到一个替代的公式。我们引入了状态值函数。所以,以前我们有行动价值函数,它告诉我们某个行动有多有价值。现在,我们想引入状态值函数,它告诉我们某个状态有多有价值。在这里,你可以看到它以非常相似的方式被形式化。同样,我们对未来的回报有一些期望值。当然,这现在取决于国家。所以,我们有点抛开了对动作的依赖,我们只关注状态。你现在可以看到,这是相对于国家的未来回报的期望值。所以,我们想边缘化的行动。我们不关心行动的影响是什么。我们只想弄清楚某个状态的值是多少。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

记住网格世界。现在,我们可以计算每个状态的状态值函数。来自深度学习讲座的 4.0CC 下的图片。

我们实际上可以计算这个。因此,我们也可以在网格示例中这样做。如果你还记得这一个,你会记得我们有一个简单的游戏,你有一个 A 和 B,基本上是网格上的位置,然后将你传送到 A '和 B '。一旦你到达 A 和 B,你会得到奖励。对 A 来说是+10,对 B 来说是+5。每当你试图离开董事会,你会得到一个负的奖励。现在,我们可以玩这个游戏,计算状态值函数。当然,我们可以在统一随机策略下这样做,因为我们不必了解游戏的任何内容。如果我们玩随机统一策略,我们可以简单地选择行动,玩这个游戏一段时间,然后我们能够根据之前的定义计算这些状态值。你可以看到边缘的瓷砖,特别是在底部,它们甚至有一个负值。当然,他们可以有负值,因为如果你在边缘瓦片,我们发现-1.9 和-2.0 和底部。在角落瓷砖,有 50%的可能性,你会尝试离开网格。在这两个方向上,你当然会产生负回报。所以,你可以看到我们有更有价值的状态。你可以看到如果你看 A 和 B 所在的位置,它们有一个非常高的值。所以 A 的预期未来回报是 8.8,而 B 的预期未来回报是 5.3。所以,这些都是非常好的州。所以,你可以说,有了这个状态值,我们在某种程度上对我们的游戏有所了解。所以,你可以说“好吧,也许我们可以用这个。”我们现在可以对这个状态值使用贪婪操作选择。让我们定义一个策略,这个策略现在总是选择导致更高值状态的动作。如果你这样做,你有一个新的政策。如果你玩这个新政策,你会发现你有一个更好的政策。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

行动价值函数估计每个状态下每个行动的预期未来回报。 CC 下的图片来自深度学习讲座的 4.0 。

因此,我们现在可以将它与我们之前使用的动作值函数联系起来。我们以类似的方式引入了状态值函数。因此,我们现在可以看到,我们可以引入一个动作值函数,它是 s 和 a 的 Q 下标策略,即状态和动作的 Q 下标策略。这基本上说明了转移概率。所以,你现在可以计算你的状态和行为的 Q 政策,作为给定状态和行为的未来回报的期望值。你可以用类似的方法来计算。现在,你得到了每个状态和每个行为的预期未来回报。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

只能有一个 V*。 CC 下的图片来自深度学习讲座的 4.0 。

所有这些价值函数都是相等的吗?不能。只能有一个最优状态值函数。我们可以在不提及具体政策的情况下表明它的存在。因此,最优状态值函数就是具有最佳策略的所有状态值函数的最大值。因此,最佳政策总是会产生最优的状态-价值函数。现在,我们还可以定义最优行动值函数。这现在可以与我们的最优状态值函数联系起来。我们可以看到,最佳行动价值函数是下一步的预期回报加上我们的贴现因子乘以最佳状态价值函数。因此,如果我们知道最优状态值函数,那么我们也可以导出最优动作值函数。所以,他们是有关系的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

均匀随机 V 和 V*的状态值函数。来自深度学习讲座CC BY 4.0 下的图片。

这就是均匀随机政策的状态值函数。我可以给你看最优 V*,也就是最优状态值函数。当然,您会看到它的价值要高得多,因为我们一直在为此进行优化。您还观察到最优状态值函数是严格正的,因为我们在这里处于确定性设置中。所以,非常重要的观察:在确定性设置中,最优状态值函数将严格为正。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如何才能订购保单? CC 下的图片来自深度学习讲座的 4.0 。

现在,我们还可以订购保单。我们必须确定什么是更好的政策。我们可以用下面的概念对它们进行排序:当且仅当π的状态值都高于用π’得到的状态值时,更好的策略π优于策略π’。如果这样做,那么任何返回最优状态值函数的策略都是最优策略。所以,你可以看到只有一个最优状态值函数,但是可能有不止一个最优策略。因此,可能有两个或三个不同的政策导致相同的最优状态值函数。因此,如果你知道最优状态值或最优动作值函数,那么你可以通过贪婪动作选择直接获得最优策略。所以,如果你知道最优状态值,如果你完全了解所有的行动等等,那么你总是可以通过贪婪的行动选择得到最优策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对状态值的贪婪行为选择。 CC 下的图片来自深度学习讲座的 4.0 。

那么,让我们看看这在政策方面会产生什么样的结果。现在,对最优状态值函数或最优行为值函数的贪婪行为选择将导致最优策略。你在左边看到的是在均匀随机状态值函数上的贪婪行为选择。我们之前在视频中计算的。当然,你可以选择你的行动,你的下一个状态是一个更高价值的状态,你最终得到这种策略。现在,如果你对最优状态值函数做同样的事情,你可以看到我们基本上出现了一个非常相似的政策。你会看到一些不同之处。事实上,你不必总是像左边显示的那样向上移动。所以,在很多情况下,你也可以向左或向上移动。实际上,你可以在这些方块中的每一个上选择行动,这些方块用多个箭头以相等的概率表示。所以,如果有一个向上和向左的箭头,你可以选择任何一个行动,你仍然会有一个最优的政策。因此,这将是由最优状态值函数上的贪婪动作选择创建的最优策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贝尔曼方程。来自深度学习讲座CC BY 4.0 下的图片。

现在,最大的问题是:“我们如何计算最优价值函数?”我们还必须确定这个最佳状态值函数和最佳动作值函数。为了做到这一点,有贝尔曼方程。它们本质上是值函数的一致性条件。这是状态值函数的例子。您可以看到,您必须总结由您的策略决定的所有不同的操作。所以,我们想边缘化实际行动的影响。当然,根据你选择的行动,你会产生不同的状态和不同的回报。所以,你也可以对不同的状态和相应的奖励进行求和,然后将这些状态的概率乘以实际奖励加上下一个状态的贴现状态值函数。这样,你就可以确定状态值函数。你可以看到,在这个计算中,当前状态和下一个状态之间存在这种依赖性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贝尔曼方程也可以解释为更新规则。 CC 下的图片来自深度学习讲座的 4.0 。

这意味着你可以把它写成一个线性方程组,然后用小问题来解决它。但更好的是,您可以通过将贝尔曼方程转化为更新规则来迭代解决这个问题。所以,你现在可以看到,如果我们简单地应用贝尔曼方程,我们可以为当前状态生成一个新的值函数 k+1。所以,我们必须计算所有不同的行动。我们必须实际评估给定状态下的所有不同行为。然后,我们确定所有下一个未来状态和下一个未来奖励,并根据我们之前的状态-值函数更新它。当然,我们对所有的状态都这样做,然后,我们有一个更新的状态值函数。好吧。所以,这是一个有趣的观察。如果我们有一些策略,我们实际上可以运行这些更新。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

政策是可以改进的。来自深度学习讲座CC BY 4.0 下的图片。

这就引出了政策改进的概念。这个政策迭代是我们在这个视频中真正想要谈论的。所以,我们现在可以用我们的国家价值函数来指导我们寻找好的政策。然后,我们更新策略。因此,如果我们使用贪婪动作选择来更新状态值函数,那么这也意味着我们同时更新我们的策略,因为如果我们改变状态值,对我们的状态值的贪婪动作选择将总是导致不同的动作。因此,在贪婪动作选择的情况下,状态值的任何改变或更新也将意味着更新的策略,因为我们将它们直接链接在一起。这意味着我们可以在我们的状态值函数上迭代评估一个贪婪策略。如果我们的策略停止改变,我们就停止迭代。这样,我们可以更新状态值,随着状态值的更新,我们也可以立即更新我们的策略。这真的能保证有效吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

政策改进定理。 CC 下的图片来自深度学习讲座的 4.0 。

这是政策改进定理。如果我们考虑改变一个单一的行动 a 下标 t 和状态 s 下标 t,遵循一个政策。那么,一般来说,如果我们有一个更高的动作值函数,所有状态的状态值都会增加。这意味着我们有了更好的政策。因此,新政策是更好的政策。这也意味着我们也获得了更好的状态值,因为我们在所有的状态下都产生了更高的未来回报。这意味着状态值函数也必须增加。如果我们只贪婪选择,那么我们总会产生比收敛前状态值更高的动作值。因此,我们使用贪婪动作选择来迭代地更新状态值,这确实是一个有保证的概念,以便改进我们的状态值。如果政策不再改变,我们就终止。最后一句话:如果我们不为策略评估遍历状态空间中的所有状态,而是直接更新策略,这就叫做值迭代。好吧。你已经在这个视频中看到了,我们如何使用状态值函数,来描述一个特定状态的预期未来回报。我们已经看到,如果我们对状态-值函数进行贪婪的动作选择,我们可以用它来生成更好的策略。如果我们遵循更好的政策,那么我们的国家价值函数也会增加。所以如果我们遵循这个概念,我们最终会得到政策迭代的概念。因此,随着状态值函数的每次更新,当您找到更高的状态值时,您也会找到更好的策略。这意味着我们可以通过策略迭代的概念来逐步改进我们的策略。好吧。这是强化学习概念中的第一个学习算法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。 CC 下的图片来自深度学习讲座的 4.0 。

但当然,这并不是一切。有几个缺点,我们将在下一个视频中讨论更多关于如何改善我们政策的概念。还有几个。因此,我们将介绍它们,并谈一谈不同版本的缺点。所以,我希望你喜欢这个视频,我们将在接下来的几个视频中更多地讨论强化学习。所以,敬请期待,希望在下一段视频中见到你。拜拜。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

强化学习超级马里奥赛车 64。使用 gifify 创建的图像。来源: YouTube

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

链接

链接到 Sutton 2018 年草案中的强化学习,包括深度 Q 学习和 Alpha Go 细节

参考

[1]大卫·西尔弗、阿贾·黄、克里斯·J·马迪森等,“用深度神经网络和树搜索掌握围棋”。载于:自然 529.7587 (2016),第 484–489 页。
【2】大卫·西尔弗、朱利安·施利特维泽、卡伦·西蒙扬等人《在没有人类知识的情况下掌握围棋游戏》。载于:自然 550.7676 (2017),第 354 页。
【3】David Silver,Thomas Hubert,Julian Schrittwieser,等《用通用强化学习算法通过自玩掌握国际象棋和松木》。载于:arXiv 预印本 arXiv:1712.01815 (2017)。
[4] Volodymyr Mnih,Koray Kavukcuoglu,David Silver 等,“通过深度强化学习实现人类水平的控制”。载于:自然杂志 518.7540 (2015),第 529-533 页。
【5】马丁·穆勒。《电脑围棋》。摘自:人工智能 134.1 (2002),第 145-179 页。
[6]理查德·萨顿和安德鲁·g·巴尔托。强化学习导论。第一名。美国麻省剑桥:麻省理工学院出版社,1998 年。

强化学习—第 4 部分

原文:https://towardsdatascience.com/reinforcement-learning-part-4-3c51edd8c4bf?source=collection_archive---------52-----------------------

FAU 讲座笔记关于深度学习

替代方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是与幻灯片匹配的讲座视频&的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级/下一讲

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

刺猬索尼克也被看作是关于强化学习的。使用 gifify 创建的图像。来源: YouTube

欢迎回到深度学习!今天,除了您在之前的视频中看到的策略迭代概念,我们还想讨论一些其他的强化学习方法。让我们看看今天我为你们带来了什么。我们将研究其他解决方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

政策迭代的局限性。 CC 下的图片来自深度学习讲座的 4.0 。

您可以看到,在我们之前讨论的策略和值迭代中,它们需要在学习期间更新策略,以获得我们的最佳状态值函数的更好近似。这些被称为策略算法,因为你需要 n 个策略。该政策正在更新。此外,我们假设状态转换和奖励是已知的。因此,产生新状态和新奖励的概率密度函数是已知的。如果他们不是,那么你不能应用以前的概念。所以,这很重要,当然有方法可以让你放松。因此,这些方法的主要区别在于它们如何执行策略评估。那么,让我们来看几个替代方案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

蒙特卡洛技术。来自深度学习讲座CC BY 4.0 下的图片。

我想给你们看的第一个是基于蒙特卡罗技术的。这仅适用于偶发任务。在这里,这个想法是不符合政策的。因此,您可以通过遵循任意策略来了解最佳状态值。你用什么策略并不重要。所以这是一个武断的政策。可能是多份保单。当然,你仍然有探索/开发的困境。所以你要选择真正覆盖所有州的政策。您不需要关于环境动态的信息,因为您可以简单地运行许多临时任务。你试图到达所有可能的状态。如果您这样做,那么您可以使用一些策略来生成这些剧集。然后,你反向循环一集,积累预期的未来回报。因为你一直玩游戏到最后,所以你可以在这一集的时间上倒退,累积已经获得的不同奖励。如果一个州还没有被访问过,你可以把它添加到一个列表中,然后使用这个列表来计算状态值函数的更新。所以,你可以看到这只是特定状态下这些列表的总和。这将允许您更新您的状态值,这样您就可以迭代,以实现最佳的状态值函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时间差异学习。 CC 下的图片来自深度学习讲座的 4.0 。

现在,另一个概念是时间差异学习。这是一种符合政策的方法。同样,它不需要关于环境动态的信息。这里的方案是,你循环并遵循一定的策略。然后,您使用策略中的一个动作来观察奖励和新状态。您可以使用先前的状态值函数加上α来更新您的状态值函数,α用于加权新观察的影响乘以新奖励加上新状态的旧状态值函数的折扣版本,然后减去旧状态的值。这样,你可以生成更新,这实际上会收敛到最优解。这种方法的一个变体实际上估计了动作值函数,然后被称为 SARSA。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

q 学习。来自深度学习讲座CC BY 4.0 下的图片。

q 学习是一种脱离政策的方法。这是一种时间差分类型的方法,但它不需要关于环境动态的信息。这里的想法是,你循环并遵循从你的动作值函数中导出的策略。例如,您可以使用ε-贪婪型方法。然后,你使用策略中的动作来观察你的奖励和你的新状态。接下来,您使用前一个行动值加上某个加权因子,再乘以观察到的奖励,更新您的行动值函数,再乘以贴现行动,该贴现行动将从生成的状态减去前一个状态的行动值函数,得出您已经知道的最大行动值。所以这又是一种时间差异,你在这里用它来更新你的行动值函数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用通用函数逼近器的 q 学习。 CC 下的图片来自深度学习讲座的 4.0 。

好吧,如果你有通用函数逼近器,那么用权重和一些损失函数来参数化你的策略怎么样?这就是所谓的政策梯度。这种情况称为加强。所以,你用你的策略和权重生成一集。然后,你在你的剧集中从时间 0 前进到时间 t-1。如果你这样做,你实际上可以计算相对于重量的梯度。您使用这个渐变来更新您的权重。与我们之前在学习方法中看到的非常相似。你可以看到,这个在策略上使用梯度的想法,给了你一个如何更新权重的想法,也是一个学习率。我们现在离我们早期的机器学习想法已经很近了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。来自深度学习讲座CC BY 4.0 下的图片。

这就是为什么我们在下一个视频中谈论深度 Q 学习,这是一种强化学习的深度学习版本。所以,希望你喜欢这个视频。现在,您已经看到了如何实际确定最佳状态值和动作值函数的其他选项。这样,我们已经看到,有许多不同的想法不再需要关于如何产生未来状态和如何产生未来回报的确切知识。有了这些想法,你也可以进行强化学习,尤其是政策梯度的想法。我们已经看到,这与我们在这门课早些时候看到的机器学习和深度学习方法非常一致。我们将在下一个视频中讨论这个想法。非常感谢大家的收听,下期视频再见。拜拜。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于今天的强化学习方法来说,Sonic 仍然是一个挑战。使用 gifify 创建的图像。来源: YouTube

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

链接

链接到萨顿 2018 年草案中的强化学习,包括深度 Q 学习和 Alpha Go 细节

参考

[1]大卫·西尔弗、阿贾·黄、克里斯·J·马迪森等,“用深度神经网络和树搜索掌握围棋”。载于:自然 529.7587 (2016),第 484–489 页。
【2】大卫·西尔弗、朱利安·施利特维泽、卡伦·西蒙扬等人《在没有人类知识的情况下掌握围棋游戏》。载于:自然 550.7676 (2017),第 354 页。
【3】David Silver,Thomas Hubert,Julian Schrittwieser,等《用通用强化学习算法通过自玩掌握国际象棋和松木》。载于:arXiv 预印本 arXiv:1712.01815 (2017)。
[4] Volodymyr Mnih,Koray Kavukcuoglu,David Silver 等,“通过深度强化学习实现人类水平的控制”。载于:自然杂志 518.7540 (2015),第 529-533 页。
【5】马丁·穆勒。《电脑围棋》。摘自:人工智能 134.1 (2002),第 145-179 页。
[6]理查德·萨顿和安德鲁·g·巴尔托。强化学习导论。第一名。美国麻省剑桥:麻省理工学院出版社,1998 年。

强化学习—第 5 部分

原文:https://towardsdatascience.com/reinforcement-learning-part-5-70d10e0ca3d9?source=collection_archive---------49-----------------------

FAU 讲座笔记关于深度学习

深度 Q 学习

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FAU 大学的深度学习。下图 CC BY 4.0 来自深度学习讲座

这些是 FAU 的 YouTube 讲座 深度学习 的讲义。这是讲座视频&配套幻灯片的完整抄本。我们希望,你喜欢这个视频一样多。当然,这份抄本是用深度学习技术在很大程度上自动创建的,只进行了少量的手动修改。 自己试试吧!如果您发现错误,请告诉我们!

航行

上一讲 / 观看本视频 / 顶级/下一讲

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

突破很难学。使用 gifify 创建的图像。来源: YouTube

欢迎回到深度学习!今天,我们想谈谈深度强化学习。我有几张幻灯片给你们看。当然,我们希望建立在我们在强化学习中看到的概念之上,但我们今天谈论的是深度 Q 学习。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

怎样才能学会玩雅达利游戏? CC 下的图片来自深度学习讲座的 4.0 。

一个非常著名的例子是通过深度强化学习的人类水平的控制。在[4]中,这是由 Google Deepmind 完成的。他们展示了一个能够玩雅达利游戏的神经网络。因此,这里的想法是使用深度网络直接学习动作值函数。输入基本上是来自游戏的三个连续的视频帧,这由深度网络处理。它会产生最佳的下一步行动。因此,现在的想法是使用这个深度强化框架来学习最佳的下一个控制器动作。他们在卷积层进行帧处理,然后在全连接层进行最终决策。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所用网络概述。 CC 下的图片来自深度学习讲座的 4.0 。

在这里,你可以看到建筑的主要思想。所以有这些卷积层和 ReLUs。这些处理器处理输入帧。然后,你进入完全连接的层,再进入完全连接的层。最后,你直接产生输出,你可以看到在 Atari 游戏中,这是一个非常有限的集合。所以你可以什么都不做,然后本质上有八个方向,有一个发射按钮,有八个方向加上发射按钮。这就是你能做的所有不同的事情。所以,这是一个有限的领域,你可以用它来训练你的系统。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

成功的学习实际上需要更多。来自深度学习讲座CC BY 4.0 下的图片。

嗯,是直接应用 Q-learning 的深度网络。游戏的状态本质上是当前帧加上前三帧作为图像堆栈。所以,你有一个相当模糊的方法来整合记忆和状态。然后,您有 18 个与不同动作相关联的输出,每个输出估计给定输入的动作。你没有一个标签和一个成本函数,但是你可以根据未来回报的最大化来更新。游戏分数增加时奖励+1,游戏分数减少时奖励-1。否则就是零分。它们使用ε-贪婪策略,在训练期间ε减小到一个低值。他们使用 Q 学习的半梯度形式来更新网络权重 w ,并且再次使用小批量来累积权重更新。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

目标网络的权重更新。 CC 下的图片来自深度学习讲座的 4.0 。

因此,他们有了这个目标网络,并使用以下规则对其进行更新(见幻灯片)。你可以看到,这与我们在之前的视频中看到的非常接近。同样,你有权重,你根据奖励更新它们。当然,现在的问题是,这个γ和最大 q 函数的选择又是权重的函数。所以,你现在有一个依赖于最大化的权重,你试图更新。所以,你的目标随着我们想要学习的重量同时改变。这实际上会导致你的体重摆动或分散。所以,这不是很好。为了解决这个问题,他们引入了第二个目标网络。在 C 步骤之后,他们通过将行动-价值网络的权重复制到一个复制网络中并保持固定来生成这一点。于是,你用目标网络的输出 q 条作为目标,稳定之前的最大化。你不使用 q hat,你正在尝试学习的函数,但是你使用 q bar,它是一种固定的版本,你用它来进行几次迭代。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

经验回放有助于保持学习的正轨。来自深度学习讲座CC BY 4.0 下的图片。

他们使用的另一个技巧是体验回放。这里的想法是减少更新之间的相关性。因此,在对图像堆栈执行了一个下标 t 的操作并收到奖励后,您将它添加到重放内存中。你在这个重放记忆中积累经验,然后用从这个记忆中随机抽取的样本而不是最近的样本来更新网络。这样,你可以稳定下来,同时不要太专注于游戏中的某个特定情况。你试着记住游戏中所有不同的情况,这消除了对当前重量的依赖,增加了稳定性。我给你举个小例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

240 小时的训练很有帮助。使用 gifify 创建的图像。来源: YouTube

所以,这是雅达利突破游戏,你可以看到,在开始时,代理人的表现不是很好。如果你反复训练它,你会发现这个游戏玩得更好。所以这个系统学习如何用球拍跟随球,然后它能够反映球。你可以看到,如果你一次又一次地迭代,你可以争辩说,在某些时候,强化学习系统也找出了游戏的弱点。特别是,如果你设法把球带到砖块后面,然后让他们在那里跳来跳去,你就可以得到很多分。它将被边界而不是球拍所反映,它将产生一个很大的分数。所以,这是一个声明,系统已经学会了一个好的策略,只踢左边的砖块。然后,它需要让球进入其他砖块后面的区域。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

游戏快进 Lee Sedol vs. AlphaGo。使用 gifify 创建的图像。来源: YouTube

当然,我们需要在这个视频里说说 AlphaGo。我们想了解它实际上是如何实现的一些细节。你已经听说过这个了。所以是出自《用深度神经网络掌握围棋博弈》这篇论文。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

围棋比国际象棋难多了。来自深度学习讲座CC BY 4.0 下的图片。

所以,我们已经讨论过,围棋比国际象棋更难,因为它有很多可能的走法。由于可能会出现大量可能的状态,所以想法是黑方与白方争夺对棋盘的控制权。它有简单的规则,但有非常多的可能的移动和情况。由于这个问题在数值上的高度复杂性,要达到人类玩家的表现被认为是多年以后的事。因此,我们可以蛮力下棋,但人们认为这是不可能的,直到我们有更快的计算机——快几个数量级的计算机。他们可以证明他们真的可以用这个系统打败人类围棋专家。所以,围棋是一个完美的信息游戏。没有隐藏信息,也没有机会。因此,理论上,我们可以构建一个完整的博弈树,并用最小-最大遍历它,以找到最好的移动。问题在于大量的法律诉讼。所以在国际象棋中,你大约有 35 个。在围棋中,你可以在游戏的每一步中走 250 种不同的棋。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2002 年,解决围棋问题被认为是几十年后的事情。 CC 下的图片来自深度学习讲座的 4.0 。

此外,游戏可能涉及许多步骤。所以大约有 150 人。这意味着穷举搜索是完全不可行的。当然,如果你有一个精确的评估函数,搜索树是可以被修剪的。对于国际象棋来说,如果你还记得深蓝,这已经非常复杂,并且是基于大量的人工输入。对于 2002 年的围棋,“永远找不到简单而合理的围棋评价。”是 2016 年和 2017 年最先进的油井;AlphaGo 击败了世界上最强的两名选手 Lee Sedol 和 Ke Kie。有一种方法可以解决这个博弈。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AlphaGo 使用了几种聪明的方法。来自深度学习讲座CC BY 4.0 下的图片。

这篇论文中有几个非常好的想法。它是由 Silver 等人开发的。它也是 Deepmind,并且是多种方法的结合。当然,他们使用深度神经网络。然后,他们使用蒙特卡罗树搜索,并结合监督学习和强化学习。与全树搜索相比,第一个改进是蒙特卡罗树搜索。他们使用网络来支持通过树的有效搜索。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

蒙特卡罗树搜索综述。 CC 下的图片来自深度学习讲座的 4.0 。

那么,什么是蒙特卡罗树搜索?嗯,你通过寻找不同的未来可能的移动来扩展你的树,你寻找产生非常有价值的状态的移动。你将有价值的状态扩展到未来。然后,你还要看这些状态的值。所以你只查看几个有价值的状态,然后一遍又一遍地展开几个步骤。最后,您可以找到一种情况,其中您可能有一个更大的状态值。所以,你试着展望一下未来,跟随可能产生更高状态值的移动。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实际的蒙特卡罗树搜索算法。 CC 下的图片来自深度学习讲座的 4.0 。

因此,您从当前状态的根节点开始。然后,您迭代地这样做,直到您扩展搜索树以找到最佳的未来状态。算法是这样的:从根节点开始,用树策略遍历到一个叶节点。然后,展开并向当前叶添加一个或多个子节点,这些子节点可能具有有价值的状态。接下来,根据您的展开策略,从当前或子节点模拟带有动作的剧集。所以,你也需要一个政策来扩展这里。然后,您可以备份并通过树向后传播收到的奖励。这允许您找到具有较大状态值的未来状态。所以,你重复这个动作一段时间。最后,你停下来,根据累积的统计数据从根音符中选择动作。下一步,你必须根据你的对手实际采取的行动,用一个新的根音重新开始。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让 AlphaGo 运行起来的更多技巧。来自深度学习讲座CC BY 4.0 下的图片。

因此,树策略指导成功路径的使用程度和查看频率。这是一个典型的勘探/开采权衡。当然,这里的主要问题是,普通的蒙特卡罗树搜索对于围棋来说不够精确。AlphaGo 的想法是用神经网络来控制树的扩展,以找到有希望的动作,然后通过神经网络来改善值的估计。所以,在扩展和评估方面,这比搜索一棵树更有效,这意味着你最好放手。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 AlphaGo 中我们实际上需要三个网络。 CC 下的图片来自深度学习讲座的 4.0 。

他们是如何使用这些深度神经网络的?他们有三个不同的网络。他们有一个策略网络,为扩展建议叶节点中的下一步移动。然后,他们有一个价值网络,查看当前的董事会情况,并计算基本上获胜的机会。最后,他们有一个部署策略网络来指导部署操作的选择。所有这些网络都是深度卷积网络,输入是当前棋盘位置和其他预先计算的特征。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

政策网络。 CC 下的图片来自深度学习讲座的 4.0 。

这是政策网络。它有 13 个卷积层,围棋棋盘上的每个点有一个输出。然后,一个巨大的人类专家动作数据库,有 3000 万个。他们从监督学习开始,训练网络来预测人类专家游戏的下一步。然后,他们通过与旧版本的自我比赛,用强化学习来训练这个网络,并且他们会因为赢得比赛而获得奖励。当然,所有的版本都避免了相关性不稳定性。如果你看看训练时间,有三个星期在 50 个 GPU 上用于监督部分,一天用于强化学习。所以,实际上这里涉及了相当多的监督学习,而不是强化学习。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

价值网络。来自深度学习讲座CC BY 4.0 下的图片。

这是价值网络。这与策略网络具有相同的架构,但是只有一个输出节点。这里的目标是预测赢得比赛的概率。他们再次在强化学习的自我游戏上训练,并对来自这些游戏的 3000 万个位置使用蒙特卡罗策略评估。在 50 个 GPU 上训练时间为一周。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

政策推广网络。 CC 下的图片来自深度学习讲座的 4.0 。

然后,他们有了部署策略网络,可以在部署期间使用该网络来选择移动。当然,这里的问题是推理时间相对较长,解决方案是在数据子集上训练一个更简单的线性网络,以非常快速地提供动作。因此,与策略网络相比,这导致了大约 1000 倍的速度提升。因此,如果您使用这种推广政策网络,那么您的网络会更细,但速度会更快。所以,你可以多做模拟,多收集经验。所以,这就是为什么他们使用这个推广政策网络。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AlphaGo Zero 不再需要任何人类棋手。 CC 下的图片来自深度学习讲座的 4.0 。

现在,这里涉及了相当多的监督学习。那么,我们来看看 AlphaGo zero。现在,AlphaGo zero 已经不需要人类下棋了。所以,这里的想法是,然后你只玩强化学习和自我游戏。它具有更简单的蒙特卡罗树搜索,并且在蒙特卡罗树搜索中没有部署策略网络。同样,在自我游戏中,他们也引入了多任务学习。因此,政策和价值网络共享初始层。这就导致了[3]和扩展也能够玩国际象棋和 shogi。所以,并不是只有代码才能解决围棋。有了这个,你也可以在专家的水平下象棋和松木。好吧。这总结了我们在强化学习中所做的。当然,我们可以在这里看很多其他的东西。然而,没有足够的时间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个深度学习讲座中,更多令人兴奋的事情即将到来。来自深度学习讲座CC BY 4.0 下的图片。

下一次深度学习,我们要讲的是连奖励都没有的算法。所以,完成无人监督的训练,我们也想学习如何从对手那里获益。我们会看到有一个非常酷的概念,叫做生成对抗网络,它能够生成各种不同的图像。另外,这是一个非常酷的概念,我们将在下一个视频中讨论,然后我们将研究执行图像处理任务的扩展。所以,我们越来越倾向于应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

综合题。 CC 下的图片来自深度学习讲座的 4.0 。

嗯,一些综合问题:什么是保单?什么是价值函数?解释开发与探索的困境,等等。如果你对强化学习感兴趣,我绝对推荐你看看理查德·萨顿的《强化学习》这本书。这真的是一本很棒的书,你会学到很多我们只能在这些视频中粗略了解的东西。所以,你可以更深入地了解强化学习的所有细节,以及深度强化学习。关于这一点,实际上还有很多要说的,但我们暂时只能停留在这个水平。嗯,我还给你带来了链接,我也把链接放到了视频描述中。所以请欣赏这本书,它非常好,当然,我们有很多进一步的参考。

非常感谢你们的聆听,我希望你们现在至少能理解一点强化学习和深度强化学习中发生的事情,以及执行游戏学习的主要思想。所以,非常感谢你观看这个视频,希望在下一个视频中见到你。拜拜。

如果你喜欢这篇文章,你可以在这里找到更多的文章,或者看看我们的讲座。如果你想在未来了解更多的文章、视频和研究,我也会很感激关注 YouTubeTwitter脸书LinkedIn 。本文以 Creative Commons 4.0 归属许可发布,如果引用,可以转载和修改。如果你有兴趣从视频讲座中获得文字记录,试试自动博客

链接

链接到萨顿 2018 年草案中的强化学习,包括深度 Q 学习和 Alpha Go 细节

参考

[1]大卫·西尔弗、阿贾·黄、克里斯·J·马迪森等,“用深度神经网络和树搜索掌握围棋”。载于:自然 529.7587 (2016),第 484–489 页。
【2】大卫·西尔弗、朱利安·施利特维泽、卡伦·西蒙扬等人《在没有人类知识的情况下掌握围棋游戏》。载于:自然 550.7676 (2017),第 354 页。
【3】David Silver,Thomas Hubert,Julian Schrittwieser,等《用通用强化学习算法通过自玩掌握国际象棋和松木》。载于:arXiv 预印本 arXiv:1712.01815 (2017)。
[4] Volodymyr Mnih,Koray Kavukcuoglu,David Silver 等,“通过深度强化学习实现人类水平的控制”。载于:自然杂志 518.7540 (2015),第 529-533 页。
【5】马丁·穆勒。《电脑围棋》。摘自:人工智能 134.1 (2002),第 145-179 页。
[6]理查德·萨顿和安德鲁·g·巴尔托。强化学习导论。第一名。美国麻省剑桥:麻省理工学院出版社,1998 年。

强化学习:利用动态规划求解马尔可夫决策过程

原文:https://towardsdatascience.com/reinforcement-learning-solving-mdps-using-dynamic-programming-part-3-b53d32341540?source=collection_archive---------0-----------------------

#解决马尔可夫决策过程

前两个故事是关于理解 马尔可夫-决策过程定义最优政策的贝尔曼方程和价值函数在这一篇中,我们将讨论这些马尔可夫决策过程是如何求解的。但在此之前,我们将定义解决马尔可夫决策过程的概念,然后,看看不同的动态规划算法,帮助我们解决它们。所以,在我们开始之前,让我们看看这个故事中我们要和谈些什么:

  • 什么是 动态编程?
  • 解决 马氏决策过程
  • 什么是 政策评估?
  • 动态编程 算法 1:策略迭代
  • 修改 策略迭代
  • 动态编程 算法 2:数值迭代

所以,给自己冲杯咖啡,保持清新,因为普通和非凡的区别就在于那一点点额外的东西。🤙

什么是动态编程?

动态编程很像分而治之的方法,将一个问题分解为子问题,但唯一的区别是,不是独立地解决它们(像在分而治之中),子问题的结果用于类似的子问题。动态编程的思想是你不需要解决一个你已经解决的问题。如果一个问题满足两个性质,则可以使用动态规划来解决该问题:

  • 最优子结构:这意味着一个问题可以被分成子问题,如果我们找到这些子问题的最优解,那么我们可以使用这个最优解来找到整个问题的最优解。
  • 重叠子问题:前面说过,如果一个问题有相似的子问题,就用动态规划。一个子问题的解决方案被保存,然后用于解决类似的子问题。

但是等等,马尔可夫决策过程有这两个性质吗?

对于第一个性质,我们有一个贝尔曼方程。 但是,如何?

回想一下,贝尔曼方程定义如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贝尔曼方程

记住贝尔曼方程所说的,一个状态的价值等于我们的代理人离开该状态得到的直接回报加上下一个状态的价值。所以,这个等式是分解的过程通过把一个状态分成子问题来寻找这个状态的价值函数

其次,对于重叠子问题*,我们有价值函数。 如何?*

看,值函数已经存储了一个特定状态有多好,所以我们不需要一次又一次地重新计算那个状态的值。 例如,假设有两个 状态(s[1]和 s[2]),我们处于状态 s[1],并且我们已经计算了状态 s[2]的值,因此当计算状态 s[1]的值时,我们将不会重新计算状态 s[2]的值。(s[1]的值依赖于状态 s[2])

求解马尔可夫决策过程的概念

当我们说要解决一个马尔可夫决策过程时,我们的意思是什么?

这意味着我们要找到满足贝尔曼方程的值函数。一旦我们找到了最优值函数,那么我们就可以用它来寻找最优策略。

这个过程分为两个部分:

  1. 预测 :假设我们有一个定义为(S,A,P,R,gamma)的马尔可夫决策过程,给定某个策略π。我们在预测中的工作是找到价值函数。我们通过使用贝尔曼期望方程评估一个策略来找到价值函数。
  2. 控制 :这个过程涉及到优化值函数,我们在预测过程中计算。我们为我们的 马尔可夫决策过程 找到最优值函数最优策略

说到这里,我们来谈谈我们的第一个构建模块,即政策评估

政策评估

***同步备份:*这意味着我们将在计算状态值的马尔可夫决策过程中考虑每个状态。

政策评估意味着我们的代理人通过遵循特定的政策π将获得多少奖励。 但是我们如何评价一个政策π?

我们使用贝尔曼期望方程来评估给定的策略π。回想一下,贝尔曼期望方程告诉我们的代理人在遵循政策π的情况下将获得多少报酬,它被定义为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贝尔曼期望方程

现在,为了评估一个策略,我们要以迭代的方式使用这个等式。也就是说,我们将通过备份前一次迭代中当前状态的值来计算下一个状态的值。让我们通过一个例子来理解这一点:

请看下面的备份图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

计算根节点值函数的备份图

我们知道,根节点[s]的值是由我们采取行动[a]得到的回报加上状态[s’]的值给出的。现在,我们正在做的是,我们在动态规划中以迭代的方式使用贝尔曼期望方程。也就是说,当我们计算状态 s 的值时,我们将使用来自前一次迭代的树叶值(这里是状态[s’])来计算状态[s]的值。这在每次迭代中都会发生。现在,对于第二次迭代,我们将使用上一次迭代中计算的状态值 v [k+1]来计算下一个状态的值,即 v [k+2]。

注意:最初我们开始把我们每个状态的值函数初始化为零。

让我们借助网格世界来理解这一点:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

小网格世界

在这个网格世界中,我们每进行一次转换(我们采取的行动)都会得到-1 的奖励。我们可以采取的行动是上下左右。我们的代理遵循一些随机策略π,每个动作的权重-年龄为 0.25。

现在,让我们用这个网格世界来跟踪策略评估:

如前所述,我们从将每个状态的值初始化为零开始:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个状态的起始值为零

然后在下一次迭代中:我们将使用如上所述的贝尔曼期望方程作为迭代方式,我们最终得到每个状态值函数 be -1(回想一下,-1 是我们采取每项行动得到的奖励):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用贝尔曼期望方程的首次迭代

让我们以用红色突出显示的状态为例:首先,从这个状态到另一个状态的回报是-1。现在,前一次迭代中的下一个状态的值,被我们初始化为 0。所以,应用贝尔曼期望方程,我们得到这个状态的值为-1。因为我们使用同步备份,所以我们要考虑代理可以进入的每个状态,也就是这里的四个状态。

让我们看看下一次迭代会发生什么:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

状态的第二次迭代值

再一次,让我们看看状态的值是-2(红色):所以,我们也在做同样的事情。首先,我们会因为离开状态而得到-1 的奖励,然后从上一次迭代中取下一个状态的值(也就是-1),那么这个状态的值就变成了-2。因为它是同步备份,所以我们对代理可以到达的每个状态都进行同步备份,并对其进行规范化,这样我们就可以得到该状态的值为-2。

我们来说说终端状态旁边的状态:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二次迭代时的终端状态

让我们来看看红色的状态:因此,我们也可以采取四种行动,但唯一的区别是,终端状态的值始终为 0。因此,从此状态开始的每隔一步,都会产生-2 的值,但在终止状态,会产生-1 的值。将它们相加得到-7,然后用 4 归一化(因为这是同步备份),得到该状态的值为-1.75。

现在,如果我们继续迭代过程,我们最终得到的状态值如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

迭代次数第三次

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

迭代次数十次

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

迭代直到收敛到最优值函数

在最后一次迭代中,我们得到了每个状态的最优值函数(我们稍后将讨论收敛)。

我们的迭代评估过程到此结束。现在, 如果我们贪婪地对待这些国家的价值观会怎么样?

表现贪婪意味着在我们的代理可以达到的所有状态中,它会选择一个比其他状态价值更高的状态。

事实证明,如果我们对国家的价值开始变得贪婪,我们最终会得到一个最优的政策。

现在,记住这两点,让我们看看我们的第一个动态编程算法,即策略迭代。

策略迭代

该算法将前面描述的过程分为两个部分。

首先,我们将使用前一节中描述的贝尔曼期望方程来评估一个策略,比如说π,然后我们将对这个评估值函数执行贪婪操作,以找到一个最优策略。我们将重复这个过程,直到我们得到真正的价值函数。

策略迭代的思想分为两步:

  • 政策评估(如前所述)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

价值函数计算

  • 对评估值函数表现出贪婪,从而产生优于前一个策略的策略

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对这个功能表现出贪婪

我们迭代这两个过程,直到它收敛到最优值函数最优策略。

当评估一个策略后(使用贝尔曼期望方程以迭代的方式计算价值函数),我们对该价值函数表现出贪婪,因为我们表现出贪婪,这使得我们的策略具有确定性

让我们更深入地理解这一点:(在该图中,向上的箭头表示政策评估,向下的箭头表示我们对价值函数贪婪)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

政策迭代思想

该图传达的意思是,我们从每个状态的随机值(带零)和一个随机策略开始,然后我们使用之前描述的贝尔曼期望方程来评估该策略,然后对值函数采取贪婪的行为,这为我们提供了一个新策略。然后我们再次评估这个新政策,然后再次对新的价值函数表现出贪婪。我们继续这个过程,直到我们找到最优值函数和我们的马尔可夫决策过程的最优策略。

现在,让我们更深入地探讨一下如何改进我们的政策…

行动贪婪意味着选择一个行动,比如说在一个特定的状态下能给我们带来最大价值的 a。我们可以这样定义:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贪婪的政策

回想一下,qπ (s,a)告诉我们在状态 s 中采取行动 an 有多好,或者在状态 s 中采取行动 an 将获得多少价值,对 qπ (s,a)取 arg-max 意味着我们选择状态 s 中的行动,使 q 值[qπ (s,a)]最大化或产生最大 q 值[qπ (s,a)]。

那么,这是否使我们的政策更好呢?

所以,我们在问,采取贪婪的行动[π’]是否比一直遵循我们的政策π更好。,先迈出贪婪的第一步【π’(s)】,然后跟随政策π,比一直只跟随政策π要好或相等。

这可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里左边先走我们贪婪的一步[π’(s)]然后跟随我们的政策π。这相当于采取可能的最佳行动(具有最大 q 值)。右手边只是自始至终在遵循一个政策π,等于说一个国家的价值函数。现在, 你可能在想为什么它比一直遵循π政策要好或者等于π?

看,当我们在下一步采取贪婪步骤(π’(s))时,我们选择了可以从状态 s 采取的最佳行动。现在,在右侧,我们没有采取任何贪婪步骤或确定性步骤,因此我们的代理可能会选择最佳行动,或者可能最终选择产生的价值低于贪婪行动的行动。

上述想法可以应用到每一步:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

政策改进定理

所以,这个策略每走一步都会变得更好,唯一停止的时候是π成为我们的最优策略的时候。如果改进停止,则贪婪动作值等于状态的当前值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

改进停止

因此,如果价值函数 Vπ (s)等于贪婪价值函数 qπ (s,π’(s)),则满足贝尔曼最优方程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贝尔曼最优方程

我们已经在第 2 部分详细讨论了上面的等式。所以如果这个满足,那么我们的策略π就是最优策略。

所以,这都是关于政策迭代。首先,我们使用贝尔曼期望方程来评估我们的策略,然后对这个评估的值函数采取贪婪的行为,我们已经证明它在迭代上改进了我们的策略。

修改策略迭代

这是基于我们是否需要等到我们的政策评估需要收敛于 Vπ的想法。 我们是不是应该早点收手?

如果你记得在政策评估中,我们首先评估政策,然后表现出对它贪婪的尊重。事实证明,经过几次迭代之后,我们已经实现了我们的最优策略。我们不需要等待我们的价值函数收敛。因此,我们引入了提前停止条件。

知道何时停止的一个方法是,如果我们的价值函数在评估过程中更新了很少的值。所以,我们可以说,如果价值函数的更新量很小,比如说小于一个ε,那么我们可以停止这个过程。

另一种方法是我们可以在 k 次迭代后手动停止策略评估过程。

现在,我们来看另一种动态规划算法:值迭代。

最优性原理 :

在我们深入研究之前,让我们重新定义一下最优行为的定义。因此,最佳策略可以细分为两个部分:

最佳的第一步,比如说

然后遵循下一个状态的最优策略,比如说

如果在我们采取了一个最优的步骤,比如行动 a 之后,一个策略的行为是最优的,那么这个策略就是最优的。

价值迭代

在策略迭代中,我们看到,首先,我们评估一个策略,即找到价值函数,然后对它表现出贪婪,以构造一个新的策略。但是,在值迭代中,我们并不为每个中间值函数计算策略。一旦我们找到了最优值函数,我们就可以从最终的最优值函数中计算出最优策略。

值迭代是策略迭代的特例。当策略评估过程在一个步骤后停止时。

数值迭代采用贝尔曼最优方程。我们从某个随机值函数(比如零)开始,然后使用贝尔曼最优方程迭代这个过程。也就是说,我们通过在贝尔曼最优方程中插入先前迭代的值来计算状态的新值函数。我们迭代这个过程,直到它收敛到最优值函数,然后从这个最优值函数计算最优策略。

我们以迭代的方式使用贝尔曼最优方程进行数值迭代。这可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

值迭代更新规则

我们用一个例子来理解一下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

价值迭代的备份图

因为我们使用同步备份,所以我们的马尔可夫决策过程中的每个状态都是根。就像之前我们第一次使用贝尔曼最优方程计算根的值一样[在之前的博客中详细讨论过]。然后在迭代 k+1,通过插入来自前一次迭代 V [k (s’)]的值来更新状态 s 的值。因此,我们以迭代的方式使用贝尔曼最优方程。这样做,我们的价值函数收敛到最优价值函数。

这可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贝尔曼最优方程

所以,这都是关于价值迭代。

同步动态规划算法

所以,总结一下我们之前看到的,这是大卫·西尔弗讲座的摘要:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

算法概述

太棒了!🤩

至此,我们结束了对马尔可夫决策过程的讨论。用了三篇长文总结。在下一篇文章中,我们将讨论无模型学习(独立于模型动力学),如蒙特卡罗学习和我最喜欢的时间差异学习。

希望这个故事能增加你对马尔可夫决策过程的理解。如果你喜欢它,请鼓掌让我知道👏。我对评论区的任何讨论都持开放态度。我很乐意在# Instagram 上与你联系。

关于马尔可夫决策过程的第 1 部分、第 2 部分和第 3 部分:

参考资料:

待深

强化学习与捕食者猎物球游戏可视化

原文:https://towardsdatascience.com/reinforcement-learning-visualised-with-a-predator-prey-ball-game-ab03518ac551?source=collection_archive---------35-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

米卡·鲍梅斯特在 Unsplash 上的照片

这是上一篇文章的后续,在这篇文章中,我们看了一个简单的强化学习(RL)游戏,其中一个绿色的球学会在 200 步内到达画布中心的一个小圆圈。我们编写了一个 Q-learning 算法,并使用基于 Tkinter 的 GUI 将其可视化。

我们现在给绿球一个稍微复杂一点的挑战。这一次的目标是学会在 200 步内到达中心,但现在有另一个球,一个红色的球,绿色的球必须避开。红球从圆圈附近开始,随机移动。如果绿色和红色的球相撞,游戏结束。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

绿色球学会到达圆

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

红色的球就像一个喝醉了的掠食者,四处乱跑,希望抓住绿色的球。我当然意识到故事中喝醉的部分使我们的 RL 实现变得更容易些:)要记住的关键是绿球只是学习如何通过不碰到红球来避开它。然而,如果碰巧红球接住了绿球,绿球也无能为力,游戏就结束了。

所以现在绿球必须同时学习两件事。它必须明白到达中心是最有意义的事情,它必须明白如何远离红球。

正如你可能已经想到的,这个 RL 的状态空间比单个绿球场景增长了 2 倍(上图)。最佳行动的决定(可能采取的步骤)不仅取决于绿球本身的位置,还取决于红球的位置。动作空间保持不变,因为绿球可以走的步数没有改变。

好了,让我们看看如何修改上一篇文章中的代码来实现这一点。

可能的步骤现在被声明为

mov_list = [-40,-20,20,40]

而不是我们之前用过的[-20,-10,10,20]。通过加倍步长,我们将单个球的搜索空间缩小了 4 倍。所以对于 2 球系统,我们的搜索空间小了 16 倍。即使在这之后,我们的搜索空间也是 202500,而不是之前的 1800。

然后我们介绍球碰撞的检查和碰撞的惩罚。

# Check if green ball hit the red ballif (pos_x1 == pos_x2) and (pos_y1 == pos_y2):
   collision = 1
   reward = -200
   print("green collision", pos_x1, pos_y1, pos_x2, pos_y2)
   green_collision_count += 1

到达圆圈的奖励是 100。我最初将冲突的惩罚设置为-25。没有任何学习,碰撞发生了 40%次。大约 20%是因为绿球踩到了红球(GBC,绿球碰撞),而另外 20%是红球撞到了绿球(RBC)。对我们来说,绿色球击中红色球是重要的统计数据。即使在 100,000 场比赛后,gbc 仍约为 15%。为什么避免碰撞的学习如此缓慢?

我很快发现,绿色球的动机完全是因为它追求到达中心,这是因为与碰撞惩罚相比,奖励要高得多。啊哈!GBCs 从 20 下降到 15%的唯一原因是因为球快速到达中心,而不是随机移动,因此随机击中红球的机会较少。所以在下一步中,我们将冲突的惩罚设置为-200。

对于红细胞,没有处罚规定。随着新的罚分,GBCs 在 20,000 场比赛内降至 0% 。它可能会更快完成,但我只在 20k 步后检查。我很乐观,但没有这么乐观!

整个模拟代码在这里可用,可视化代码在同一个库这里可用。

我们看到了如何将简单的单球问题扩展到双球问题,从而大大增加了算法的复杂性。大多数真实生活场景要复杂得多,Q 表方法不再实用。

在另一篇文章中,我们将尝试使用 DQN 来实现这个游戏。

使用 Python 进行深度强化学习|第 1 部分|创建环境

原文:https://towardsdatascience.com/reinforcement-learning-with-python-part-1-creating-the-environment-dad6e0237d2d?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左 Gif:游戏规则说明| |右 Gif:一个人玩的游戏

在本系列教程中,我们将介绍构建一个能够玩游戏的专家强化学习(RL)代理的每一个步骤。

本系列分为三个部分:

  • 第一部分:游戏环境的设计和搭建。在这一部分中,我们将构建一个游戏环境并对其进行定制,以使 RL 代理能够在其上进行训练。
  • 第二部分 :构建并训练深度 Q 神经网络(DQN)。在这一部分,我们定义和建立 DQN 的不同层次,并训练它。

[## 使用 Python 的深度强化学习|第 2 部分|使用深度 Q 创建和训练 RL 代理…

在第一部分,我们经历了制作游戏环境,并逐行解释。在这一部分,我们是…

towardsdatascience.com](/deep-reinforcement-learning-with-python-part-2-creating-training-the-rl-agent-using-deep-q-d8216e59cf31)

我们也可以尝试制作另一个简单的游戏环境,并使用 Q-Learning 来创建一个可以玩这个简单游戏的代理。

动机:

激励我开始这个系列的视频

有一次我在 YouTube 的兔子洞里,这个视频被推荐给我,它是关于人类婴儿的自我意识,看完视频后,一个类似的问题出现在我的脑海里*“我能开发一个足够聪明的智能代理,它能感知自己的身体,并有能力改变它的特征来完成某项任务吗?”*

这个系列是我回答这个问题的方式。

设计环境:

对于这种环境,我们希望代理人发展对其身体的感觉,以及如何改变其身体特征以避免输掉游戏。

第一:环境的要素:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

环境

1- 字段包含所有其他元素。我们在代码中用名为“Field”的类来表示它,如下所示:

字段属性:

  • 宽度【int】**😗*字段的宽度(不以像素为单位)
  • height (int:字段的高度(不以像素为单位)
  • (np.array) : 保存游戏元素(玩家和墙壁)的数组表示。这个数组被传递给 DQN ,也用于使用 pygame 绘制界面。

字段方法:

  • update_field (自己、墙壁、玩家) :更新字段。

2-墙壁:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那堵墙

墙壁属性:

穿墙方法:

  • create _ hole(self):在墙上创建一个宽度= self 的洞。孔 _ 宽。
  • move (self):垂直移动墙壁(每次调用时,墙壁向下移动 n 步(n = self.speed))

3-玩家:

玩家属性:

玩家方法:

  • 移动 (自身,领域,方向= 0):移动玩家:

-方向= 0 ->不变

-方向= 1 ->向左

-方向= 2 ->向右

  • change _ width(self,action = 0):
  • action = 0 ->无变化

  • action = 3 ->缩小一个单位

  • action = 4 ->加宽一个单位

环境类:

这个类促进了环境和代理之间的通信,它被设计成与一个 RL 代理或一个人类玩家通信。

RL 代理所需的主要组件:

1- 环境 _ 形状属性:由 DQN 用来设置输入层的形状。

2- ACTION_SPACE 属性:由 DQN 用来设置输出层的形状。

3- 惩罚奖励:设置惩罚和奖励的值,用来训练代理(我们用这些值来告诉代理它之前的行为是好是坏)。

4- 重置 方法:重置环境。

5- 步骤 方法:以一个动作为自变量,返回 **下一个状态奖励,**一个名为 game_over 的布尔变量,用来告诉我们游戏是否结束(玩家输了)。

很明显,这个环境并没有什么不同,它包含了所有需要的组件甚至更多。

环境属性:

环境方法:

  • _ _ init _ _(self):通过初始化一些属性,调用 reset 方法来初始化环境。
  • 重置 (自身) :重置环境,重置后返回游戏场状态。
  • print_text (self,WINDOW = None,text_cords = (0,0),center = False,text = ",color = (0,0,0),size = 32):打印给定 pygame.display (WINDOW)中具有给定特征的文本。

+步 (自我,行动):

1-调用玩家的 move 方法来移动玩家。

2-调用播放器的 change_width 方法移动播放器。

3-将墙移动一步。

4-更新字段。

5-检查玩家是否成功通过了一堵墙。如果是这样,给予玩家奖励并增加其耐力。

6-检查三个失败的条件:如果这三个条件中至少有一个满足,玩家就会输掉游戏。

当玩家输了,返回的 奖励 的值将等于惩罚,游戏状态的指示器( game_over )由假变真。

7-检查当前墙是否触及场地底部,当发生这种情况时,超出范围的墙将被新墙取代。

8-返回 下 _ 状态 正常化, 奖励游戏 _ 结束

+ render(自身,窗口=无,人类=假):

论据:

  • 窗口 (pygame.display):游戏将要渲染的 pygame.display。

逐行渲染 方法解释:

1-检查玩家是否是人类。如果是,获取按下的键并将其转换为相应的动作(例如:如果按下了右箭头,则设置 action = 2,这意味着向右移动上一步的玩家),然后调用 步骤 方法来执行选择的动作。

2-更新区域,然后开始将墙壁和玩家画成方块。

3-打印分数和球员的耐力。

4-最后,更新显示以显示渲染的屏幕。

最后:把它们放在一起

现在我们将使用我们解释过的所有东西来玩这个游戏:

以下代码重复游戏,直到玩家通过获得高于或等于 winning_score、 的分数获胜或退出游戏。

你可以在这里得到完整的代码。

** [## 使用 Python 的深度强化学习|第 2 部分|使用深度 Q 创建和训练 RL 代理…

在第一部分,我们经历了制作游戏环境,并逐行解释。在这一部分,我们是…

towardsdatascience.com](/deep-reinforcement-learning-with-python-part-2-creating-training-the-rl-agent-using-deep-q-d8216e59cf31) [## 使用 Python 进行深度强化学习|第 3 部分|使用 Tensorboard 分析训练好的模型

在前面的部分中:

towardsdatascience.com](/deep-reinforcement-learning-with-python-part-3-using-tensorboard-to-analyse-trained-models-606c214c14c7)

你可以在推特上关注我 @ModMaamari

您可能还喜欢:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值