# 前言 强化学习是机器学习的一种自我发展的类型,它使我们更接近实现真正的人工智能。 这份易于遵循的指南使用 Python 编写的丰富示例从头开始解释了所有内容。 # 这本书是给谁的 本书适用于对人工智能感兴趣并希望从头开始学习强化学习的机器学习开发人员和深度学习爱好者。 阅读本书,并通过在工作中或项目中实施实际示例,成为强化学习专家。 掌握线性代数,微积分和 Python 编程语言的知识将帮助您理解本书的流程。 # 本书涵盖的内容 第 1 章,“强化学习简介”帮助我们了解强化学习是什么以及它如何工作。 我们将学习强化学习的各种要素,例如代理,环境,策略和模型,并且还将看到用于强化学习的不同类型的环境,平台和库。 在本章的后面,我们将看到强化学习的一些应用。 第 2 章和 “OpenAI 和 TensorFlow 入门”可帮助我们为各种强化学习任务设置机器。 我们将学习如何通过安装 Anaconda,Docker,OpenAI Gym,Universe 和 TensorFlow 来设置机器。 然后,我们将学习如何在 OpenAI Gym 中模拟代理,并且将了解如何构建视频游戏机器人。 我们还将学习 TensorFlow 的基础知识,并了解如何使用 TensorBoard 进行可视化。 第 3 章,“马尔可夫决策过程和动态规划”首先说明什么是马尔可夫链和马尔可夫过程,然后我们将了解如何将强化学习问题建模为马尔可夫决策过程。 我们还将学习一些基本概念,例如值函数,Q 函数和贝尔曼方程。 然后,我们将了解什么是动态规划以及如何使用价值和策略迭代来解决冻湖问题。 第 4 章,“使用蒙特卡洛方法进行的游戏”解释了蒙特卡洛方法和不同类型的蒙特卡洛预测方法,例如首次访问 MC 和每次访问 MC。 我们还将学习如何使用蒙特卡洛方法玩二十一点。 然后,我们将探讨不同的策略上和策略外的蒙特卡洛控制方法。 第 5 章,“时间差异学习”涵盖了时差(TD)学习,TD 预测以及 TD 脱离策略和基于策略的控制方法,例如 Q 学习和 SARSA。 我们还将学习如何使用 Q 学习和 SARSA 解决出租车问题。 第 6 章,“多臂老虎机问题”处理强化学习的经典问题之一,即多臂老虎机(MAB)或 k 臂老虎机问题。 我们将学习如何使用各种探索策略(例如 epsilon-greedy,softmax 探索,UCB 和 Thompson 采样)解决此问题。 在本章的后面,我们将看到如何使用 MAB 向用户显示正确的广告横幅。 第 7 章,“深度学习基础知识”涵盖了深度学习的各种基本概念。 首先,我们将学习神经网络是什么,然后我们将看到不同类型的神经网络,例如 RNN,LSTM 和 CNN。 我们将通过构建一些应用程序来学习,这些应用程序执行诸如生成歌曲歌词和对时尚产品进行分类等任务。 第 8 章,“使用深度 Q 网络玩 Atari 游戏”涵盖了最广泛使用的深度强化学习算法之一,称为深度 Q 网络(DQN)。 我们将通过探索 DQN 的各个组成部分来学习 DQN,然后我们将了解如何构建一个代理来使用 DQN 玩 Atari 游戏。 然后,我们将研究 DQN 架构的一些升级,例如双 DQN 和决斗 DQN。 第 9 章,“使用深度循环 Q 网络玩末日游戏”,介绍了深度循环 Q 网络(DRQN)及其与 DQN 的区别。 我们将看到如何构建使用 DRQN 播放 Doom 的代理。 在本章的后面,我们将学习深度注意力循环 Q 网络,该网络将注意力机制添加到 DRQN 架构中。 第 10 章,“异步优势演员评论家网络”解释了异步优势演员评论家(A3C)网络的工作方式。 我们将详细探讨 A3C 架构,然后将学习如何构建使用 A3C 上山的代理。 第 11 章,“策略梯度和优化”涵盖了策略梯度如何帮助我们找到合适的策略而无需 Q 函数。 我们还将探索深度确定性策略梯度方法。 在本章的后面,我们将看到最新的策略优化方法,例如信任区域策略优化和近端策略优化。 第 12 章,“Capstone 项目–使用 DQN 进行赛车”提供了逐步的方法,以使用决斗 DQN 构建代理以赢得赛车游戏。 第 13 章,“最近的进展和后续步骤”提供了有关强化学习的各种进展的信息,例如想象力增强代理,从人的偏好中学习,从示威活动中进行深度学习以及事后 ,然后我们将研究不同类型的强化学习方法,例如分层强化学习和逆强化学习。 # 充分利用这本书 本书需要以下软件: * 水蟒 * 蟒蛇 * 任何网络浏览器 * 码头工人 # 下载示例代码文件 您可以从 [www.packtpub.com](http://www.packtpub.com) 的帐户中下载本书的示例代码文件。 如果您在其他地方购买了此书,则可以访问 [www.packtpub.com/support](http://www.packtpub.com/support) 并注册以将文件直接通过电子邮件发送给您。 您可以按照以下步骤下载代码文件: 1. 登录或登录 [www.packtpub.com](http://www.packtpub.com/support) 。 2. 选择支持选项卡。 3. 单击代码下载和勘误。 4. 在搜索框中输入书籍的名称,然后按照屏幕上的说明进行操作。 下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹: * Windows 的 WinRAR/7-Zip * Mac 版 Zipeg/iZip/UnRarX * 适用于 Linux 的 7-Zip/PeaZip 本书的代码包也托管在 [GitHub](https://github.com/PacktPublishing/Hands-On-Reinforcement-Learning-with-Python) 上。 如果代码有更新,它将在现有的 GitHub 存储库中进行更新。 我们还从[这里](https://github.com/PacktPublishing/)提供了丰富的书籍和视频目录中的其他代码包。 去看一下! # 下载彩色图像 我们还提供了 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。 [您可以在此处下载](http://www.packtpub.com/sites/default/files/downloads/Bookname_ColorImages.pdf)。 # 使用约定 本书中使用了许多文本约定。 `CodeInText`:指示文本,数据库表名称,文件夹名称,文件名,文件扩展名,路径名,虚拟 URL,用户输入和 Twitter 句柄中的代码字。 这是一个示例:“将下载的`WebStorm-10*.dmg`磁盘镜像文件安装为系统中的另一个磁盘。” 代码块设置如下: ```py policy_iteration(): Initialize random policy for i in no_of_iterations: Q_value = value_function(random_policy) new_policy = Maximum state action pair from Q value ``` 任何命令行输入或输出的编写方式如下: ```py bash Anaconda3-5.0.1-Linux-x86_64.sh ``` **粗体**:表示新术语,重要单词或您在屏幕上看到的单词。 例如,菜单或对话框中的单词会出现在这样的文本中。 警告或重要提示如下所示。 提示和技巧如下所示。