<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>强化学习入门 on Yuunagi Library</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/index.html</link><description>Recent content in 强化学习入门 on Yuunagi Library</description><generator>Hugo</generator><language>zh-CN</language><copyright>© Yuunagi</copyright><lastBuildDate>Fri, 17 Jul 2026 23:03:29 +0800</lastBuildDate><atom:link href="https://uynajgi.github.io/yuulibrary/books/rl-intro/index.xml" rel="self" type="application/rss+xml"/><item><title>前言</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/preface.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/preface.html</guid><description>&lt;h1 id="前言"&gt;前言&lt;a class="anchor" href="#%e5%89%8d%e8%a8%80"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;2017年，DeepMind公司开发的AlphaGo人工智能围棋博弈软件的升级版Master战胜了围棋世界冠军，引起了不小的轰动。AlphaGo的巨大成功主要得益于它的实现是基于人工智能的“强化学习”原理，通过神经网络模拟了人类的学习过程并充分发挥了现代计算机的强大计算性能。强化学习是什么，何以如此强大？带着这个问题，我翻阅了相关学术文献和一些介绍强化学习的书籍，并认真观看了DeepMind在网络上发布的一套关于强化学习的公开课视频，经过一段时间的摸索，我较为系统地掌握了强化学习的工作原理和经典算法，并编写代码实现了其中的主要算法。为了进一步巩固和加深自己对强化学习的理解，我不断和其他学习者进行学术交流，并陆续把自己的学习体会整理后发表在知乎的一个专栏上，与大家分享。&lt;/p&gt;
&lt;p&gt;随后有不少出版社联系我商谈出版事宜，我深感自己水平有限，均婉拒之。后来我有幸就读于蒙特利尔大学计算机学院人工智能专业，对强化学习、深度学习等的理论和实践有了较为深入的理解。考虑到市面上介绍强化学习入门的书较少，于是在机械工业出版社编辑的诚挚邀请下，我答应将自己的学习体会整理成书。由于自己才疏学浅，我特邀上海交通大学闫维新教授对全文进行了审改，并请他编写了最后一章。&lt;/p&gt;
&lt;p&gt;本书以理论和实践相结合的形式深入浅出地介绍强化学习的历史、基本概念、经典算法和一些前沿技术，共分为三大部分：第一部分（第1～5章）介绍强化学习的发展历史、基本概念以及一些经典的强化学习算法；第二部分（第6～9章）在简要回顾深度学习技术的基础上着重介绍深度强化学习的一些前沿实用算法；第三部分（&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch10.html"&gt;第10章&lt;/a&gt;）以五子棋为例详细讲解战胜了人类顶级围棋选手的Alpha Zero算法的核心思想。为了便于读者学习，本书的每一章都先介绍相关理论以及算法原理，随后通过精心编写的Python示例程序来实现算法、验证理论，让读者能够从理论文字、数学公式、示例代码三个方面综合理解强化学习。&lt;/p&gt;
&lt;p&gt;本书涉及的源代码文件可通过 &lt;a href="https://github.com/qqiang00/reinforce/tree/master/reinforce/codes_for_book"&gt;https://github.com/qqiang00/reinforce/tree/master/reinforce/codes_for_book&lt;/a&gt; 下载。&lt;/p&gt;
&lt;p&gt;本书既可作为计算机专业高年级本科生及硕士生关于人工智能领域的入门参考读物，也可供对人工智能技术特别是强化学习技术感兴趣的读者借鉴参考。限于作者的水平，书中难免有因理解不准确而表述不到位的地方，恳请业内专家指正，先表谢意！&lt;/p&gt;
&lt;p&gt;叶强&lt;/p&gt;
&lt;p&gt;2020年5月23日&lt;/p&gt;</description></item><item><title>常用符号</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/notations.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/notations.html</guid><description>&lt;h1 id="常用数学符号"&gt;常用数学符号&lt;a class="anchor" href="#%e5%b8%b8%e7%94%a8%e6%95%b0%e5%ad%a6%e7%ac%a6%e5%8f%b7"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;符号&lt;/th&gt;
					&lt;th&gt;含义&lt;/th&gt;
					&lt;th&gt;符号&lt;/th&gt;
					&lt;th&gt;含义&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;E&lt;/td&gt;
					&lt;td&gt;期望&lt;/td&gt;
					&lt;td&gt;S&lt;/td&gt;
					&lt;td&gt;空间、集合&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MDP&lt;/td&gt;
					&lt;td&gt;马尔可夫决策过程&lt;/td&gt;
					&lt;td&gt;P&lt;/td&gt;
					&lt;td&gt;概率矩阵&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;r&lt;/td&gt;
					&lt;td&gt;已知标量，状态价值&lt;/td&gt;
					&lt;td&gt;R&lt;/td&gt;
					&lt;td&gt;未知标量，奖励&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;v&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;向量&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;R&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;二维矩阵或更高维张量&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;π&lt;/td&gt;
					&lt;td&gt;策略&lt;/td&gt;
					&lt;td&gt;π*&lt;/td&gt;
					&lt;td&gt;最优策略&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;V&lt;/td&gt;
					&lt;td&gt;状态价值函数&lt;/td&gt;
					&lt;td&gt;Q&lt;/td&gt;
					&lt;td&gt;状态-行为对价值函数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;γ&lt;/td&gt;
					&lt;td&gt;衰减因子&lt;/td&gt;
					&lt;td&gt;O&lt;/td&gt;
					&lt;td&gt;复杂度&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>算法列表</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/algorithms.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/algorithms.html</guid><description>&lt;h1 id="主要算法列表"&gt;主要算法列表&lt;a class="anchor" href="#%e4%b8%bb%e8%a6%81%e7%ae%97%e6%b3%95%e5%88%97%e8%a1%a8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;#&lt;/th&gt;
					&lt;th&gt;算法&lt;/th&gt;
					&lt;th&gt;章节&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;1&lt;/td&gt;
					&lt;td&gt;Sarsa 算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html"&gt;第1章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2&lt;/td&gt;
					&lt;td&gt;Sarsa(λ) 算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html"&gt;第2章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3&lt;/td&gt;
					&lt;td&gt;Q 学习算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html"&gt;第3章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;4&lt;/td&gt;
					&lt;td&gt;基于经验回放的 DQN 算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch06.html"&gt;第4章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;5&lt;/td&gt;
					&lt;td&gt;QAC 算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch07.html"&gt;第5章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;6&lt;/td&gt;
					&lt;td&gt;DDPG 算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch07.html"&gt;第6章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;7&lt;/td&gt;
					&lt;td&gt;Dyna-Q 算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch08.html"&gt;第7章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;8&lt;/td&gt;
					&lt;td&gt;蒙特卡罗树搜索算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch10.html"&gt;第8章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;9&lt;/td&gt;
					&lt;td&gt;纯蒙特卡罗树搜索算法&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch10.html"&gt;第9章&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>第1章 · 概述</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch01.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch01.html</guid><description>&lt;h1 id="第1章-概述"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch01.html"&gt;第1章&lt;/a&gt; 概述&lt;a class="anchor" href="#%e7%ac%ac1%e7%ab%a0-%e6%a6%82%e8%bf%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;强化学习的历史最早可以追溯到20世纪50年代在研究关于动物学习心理学时产生的试错学习，同时工业控制领域对强化学习的发展也产生了不小的推动作用。本章简要叙述强化学习的历史，并初步介绍强化学习领域的一些既基本又非常重要的概念，最后简要说明本书的章节组织和一些代码资源。&lt;/p&gt;
&lt;h2 id="强化学习的历史"&gt;强化学习的历史&lt;a class="anchor" href="#%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0%e7%9a%84%e5%8e%86%e5%8f%b2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;强化学习的历史可以用两条各自独立但丰富多彩的主线来追溯。其中一条主线源于研究动物学习心理学时产生的试错学习，它贯穿了一些人工智能领域最早期的工作，随后从20世纪80年代延续至今，复兴了强化学习的研究。另一条主线聚焦于研究最优化控制，以及使用价值函数动态规划等算法来寻找问题的解决方案。这两条主线在很长时间里是相对独立发展的，如今的强化学习理论主要是第一条主线的延续。&lt;/p&gt;
&lt;p&gt;对于第二条主线，最优化控制这一术语最早出现在20世纪50年代，它探讨如何设计一个控制系统来衡量一个随时间变化的动态系统的行为。理查德·贝尔曼曾提出使用“状态”和“价值函数”等概念构建贝尔曼方程，并且通过动态规划算法来求解这个方程，以此来求解动态系统的最优化控制问题。贝尔曼也提出了最优化控制的离散随机版本：马尔可夫决策过程（Markov Decision Process，MDP）。RonHoward提出了解决MDP问题的策略迭代方法。这些概念对于理解现今的强化学习算法都是至关重要的。动态规划算法在很长时期内被认为是解决随机最优化问题的唯一可行算法，尽管该算法的时间复杂度会随着系统状态数量的增多呈指数级增长，但还是比其他一些算法高效。本书也会介绍用动态规划算法来解决强化学习的问题。&lt;/p&gt;
&lt;p&gt;回到第一条主线：试错学习。试错学习的精髓在于那些能够带来好结果的行为在后续决策中更容易被采纳，而那些曾经带来不好结果的行为则倾向于避免被选择。最早提出这一思想的学者Thorndike将其命名为“效果法则”（Law of Effect），它描述了在选择行为的倾向性上强化事件的效果。这一法则包含试错学习中两个重要的方面：第一个方面是“选择”，指尝试各种可能的行为并且通过比较各种行为的后果从中进行选择；第二个方面是“联想”，强调选择的行为与特定场景是呼应的。换句话说，效果法则的两个方面分别相当于“探索”和“记忆”：前者指的是从每一个状态下的众多可选行为中尝试选择其中一个，后者指的是要记住在特定场景下最有效的行为。效果法则的这两个方面是强化学习算法中必不可少的两个概念。&lt;/p&gt;
&lt;p&gt;“强化学习”术语最早出现在20世纪60年代的文献中，其中受关注最多的是Minsky的一篇论文“Steps Toward Artificial Intelligence”。在这篇论文中，作者讨论了与强化学习相关的几个问题，其中包括“信用分配问题”，即导致最后成功的前期各个行为对这一成功结果的贡献程度。这是强化学习领域所要解决的一个极其重要的问题。&lt;/p&gt;
&lt;p&gt;在强化学习的发展过程中，一些研究人员模糊了强化学习和监督式学习的界限并带来了一些困惑，比如把强化学习中的奖励和惩罚与监督式学习中的样本标签进行对应，把试错学习过程同提供正反两种标签的监督式学习样本联系起来。这些联系忽略了试错学习的精髓：&lt;/p&gt;
&lt;p&gt;“选择”和“联想”。这些困惑导致在20世纪60年代到70年代强化学习的进展不大。&lt;/p&gt;
&lt;p&gt;除了“最优化控制”和“试错学习”这两条主线，强化学习的发展历史上还有一条线索，即“时序差分学习”（Temporal-DifferenceLearning）。这条线索主要是受到心理学中研究动物学习的一些启发，特别是“次级强化子”（Secondary Reinforcer）的影响。它为强化学习提供了一个独特、新颖同时又十分重要的方法。Sutton等人将时序差分学习进行了推广，并提出了TD（λ）算法。本书也会介绍“时序差分学习”方法的基本思想。&lt;/p&gt;
&lt;p&gt;自20世纪80年代起，强化学习迎来了一次快速发展的时期。Actor-Critic架构于1981年被提出。整合了试错学习和最优化控制的Q学习算法于1989年被提出。进入21世纪后，深度学习技术的发展给强化学习算法带来了新的生命，两者的结合很好地解决了诸如“围棋”之类极其复杂的问题。&lt;/p&gt;
&lt;h2 id="12-强化学习的基本概念"&gt;1.2 强化学习的基本概念&lt;a class="anchor" href="#12-%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0%e7%9a%84%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;强化学习主要研究这样一类问题：具有一定思考和行为能力的个体（Agent）在与其所处的环境（Environment）进行交互的过程中，通过学习策略达到收获最大化或实现特定的目标。其中，“个体”处在“环境”中，在某时刻可以有一个对自身的认识，这可以表示成个体自身在该时刻的状态（State）。个体在某时刻可以向环境实施一个行为（Action），环境会因为这一行为做出相应的改变并给予个体一定形式的反馈，个体接收到这个反馈后可以建立“自身状态”“所施行为”及“所得反馈”之间的联系，作为自身记忆的一部分给后续的决策提供参考。个体在不同状态下向环境施加的各种不同行为则构成了个体与环境交互的“策略”（Policy）。个体策略的构建与个体的目的密切相关。环境给予个体的反馈通常是一个数值（由一个标量确定的数值），表达环境对于个体的奖励或惩罚的程度，可称之为“奖励”（Reward）。个体构建策略的目的就是要争取通过与环境的交互而获得尽可能多的累积奖励值。&lt;/p&gt;
&lt;p&gt;举个例子，图1.1是一个由7×10的格子组成的矩形区域，我们可以认为该矩形区域构成了一个环境，可称之为“格子世界”环境。格子世界是一个二维世界，可以用一个二维坐标系统来描述格子世界中每一个格子位置的坐标。假设最左下角的格子位置为（0,0），那么格子世界中镶边的白色格子的位置可以用（7,3）来表示。在（0,3）位置用一个小球代表一个可以在格子世界中移动的个体。小球在任意一个时刻可以往上、下、左、右4个方向移动一格，构成小球在格子世界中可能的行为集合。格子世界这个环境有其特定的动力学特征，严格规定了小球的运动方式（环境规则）：小球采取朝某一个方向的移动行为不会导致它越过格子世界的边界，环境将允许小球到达它移动方向上相邻的格子；如果小球移动的下一个位置会超出格子世界的边界，那么环境将让小球停留在当前的格子内。以小球采取“向右移动”这一行为为例，只要小球没有在格子世界最右侧的边界格子中，环境就允许它向右移动一格到达新的格子，如果小球已经在格子世界最右侧的边界格子中，那么环境将让它保持在最右侧的这个边界格子中不动。现在我们提出一个问题：希望个体能够通过最少的移动次数从起始位置（0,3）移动到目标位置（7,3）。为此，我们设定一个奖惩系统：对于任何没有到达目标位置的每一次移动行为，我们都会给小球一个数值为-1的奖励（或者说是数值为1的惩罚），如果小球到达了目标位置，我们一次性给予一定正数的奖励。如此，我们的问题就转化为希望小球在到达目标位置时获得的累积奖励最大。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/3a414f1548d4364d860da835e010553fcb3e401ee7a784f9da3349775314731f.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p class="caption"&gt;
 图1.1 “格子世界”环境
&lt;/p&gt;

&lt;p&gt;看起来这是一个非常简单的问题。根据描述的格子世界规则和小球的可选行为，只要小球一直朝着右侧移动7次就能以最少的移动次数到达目标位置。确实如此，持续向右移动7次是这个问题的最优解，因为读者清楚地知道格子世界的整个构造，而且格子世界的规则也非常简单。如果从小球的角度来看，又会是什么样的情形呢？通常情况下，开始时小球对这个格子世界一无所知，它只知道自己置身于格子世界的某一个位置，可能并不知道它所在位置的坐标信息（这取决于格子世界是否愿意提供给小球坐标信息）。假设格子世界不将位置信息告知小球，而只是告诉小球每一个位置对应的是一个一个数字所组成的代号，也就是说小球在进入一个新的格子时只知道这个格子的代号，并且在与格子世界进行交互的初期只能判断出自己之前是否曾进入这个格子，而无法知道所经过的格子之间的相对位置关系。例如，我们可以从每一个格子的位置（x,y）信息得到由单个数字x+10y所表达的信息并提供给小球，甚至可以仅提供给小球所在格子坐标中的一维信息。也就是说，小球无法完整地观测到自身的位置信息，只能观测到环境允许它观测到的信息。在这种情况下，小球要想以最短的步数从起始位置移动到目标位置就不那么容易了。那么它应该如何做呢？&lt;/p&gt;
&lt;p&gt;使用强化学习算法来求解这个问题，我们会用到试错学习的两个方面：第一，小球可以从4个行为中选择其中一个；第二，小球要能记住自己在某个状态下实施某一行为后从格子世界得到的反馈，包括小球对实施行为前后的位置观测、小球从格子世界得到的即时奖励反馈。小球对自己所处的不同位置有一个价值评估，在新的位置上，小球要利用自己的记忆和对状态的价值评估来逐渐地优化自己的策略，以便实施更高效的行为，朝着目标格子前进。至于具体如何实现这一算法，我们将在后续的章节介绍。&lt;/p&gt;
&lt;p&gt;从上述例子中，我们可以抽象出一些基本概念。个体可以结合自身在某时刻所获得的奖励值来评估这一状态（State）的价值（Value），并通过选择某一行为来让自身处在价值更高的状态。这种从状态到价值的映射可以用状态价值函数（State Value Function）来表示。个体也可以评估在某一状态下采取各种不同可能行为的价值，进而选取那些能够在该状态下带来较大价值的行为。这种针对某一状态下某一行为的价值评估可以用状态行为价值函数（State-Action Value Function）来描述，简称行为价值函数。状态（或行为）价值函数是个体对未来奖励的预测，用来衡量个体在某一个状态（或某一状态行为组合）下的好坏程度并指导后续行为的选择。&lt;/p&gt;
&lt;p&gt;环境有一套描述自己的规则，称为环境的动力学特征（Dynamics）。个体能从环境得到的信息取决于环境开放给个体的信息，当环境把描述自身的所有信息都开放给个体时，我们认为对于该个体来说环境是完全可观测的（Fully Observable）。当环境仅开放部分信息给个体时，我们认为对于该个体而言环境是部分可观测的（Partial Observable）。环境永远不会开放自身的动力学特征给个体，仅提供个体可观测的信息以及个体在实施每一次行为后给予个体的奖励信息。一些个体可以通过观测及奖励信息对环境的动力学特征进行建模，而后根据建模得到的模型（Model）来决定个体的行为。个体建立的模型可以很接近环境的动力学特征，也可以与环境的动力学特征有较大差别，这取决于个体在已掌握信息下的建模水平。一个完整的模型通常会预测个体在实施某一行为后的下一个状态以及个体可能从环境得到的即时奖励值。&lt;/p&gt;
&lt;p&gt;为了便于理解环境的动力学特征和个体构建的模型之间的关系，我们可以用人类认识宇宙的过程来做个类比：宇宙相当于环境，人类相当于个体。宇宙以什么样的规律运行取决于宇宙自身的动力学特征，人类可能永远无法完全弄清楚。但是几百年来，从早期的“地心说”到随后的“日心说”、从牛顿的三大定律到爱因斯坦的相对论等都是人类建立的试图解释宇宙动力学特征的模型。牛顿的三大定律没有爱因斯坦的相对论完善准确，这是因为人类的认识在进步，同时人类的观测水平在进步，人类构建的认识宇宙的模型也在不断发展。&lt;/p&gt;
&lt;p&gt;在强化学习中，策略（Policy）与生活中所说的策略的含义十分接近。用数学的语言来描述，策略是从个体状态到行为的一个映射（Mapping）。如果一种策略在一个确定的状态下能够产生一个确定的行为，那么这种策略就可以称为确定性策略（DeterministicPolicy）。相反，如果某一种策略在确定状态下不能产生一个确定的行为，而是提供各种可能行为的概率，那么这种策略就可以称为随机性策略（Stochastic Policy）。这两种策略均有各自的应用场景。&lt;/p&gt;
&lt;p&gt;在求解强化学习问题时，个体通常会建立策略、模型、价值函数这三个组件中的一个或多个，通过与环境的交互来积累经历，形成记忆，并从这些记忆中提取经历，不断地试错学习来优化自身的策略、模型或价值函数，逐渐逼近问题的最优解。根据个体建立的组件的特点，我们可以将强化学习中的个体进行如下分类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;仅基于价值函数：这样的个体有对状态价值的估计函数，但是没有直接的策略函数，策略函数由价值函数间接得到。&lt;/li&gt;
&lt;li&gt;仅直接基于策略：在这样的个体中，行为直接由策略函数产生，个体并不维护一个对各状态价值的估计函数。&lt;/li&gt;
&lt;li&gt;演员-评判家（Actor-Critic）类型：这样的个体既有价值函数也有策略函数，两者相互结合解决问题。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;此外，根据个体是否建立一个针对环境动力学的模型，可将其分为两大类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;不基于模型的个体：这类个体并不试图了解环境如何工作，而仅聚焦于价值和策略函数，或者二者之一。&lt;/li&gt;
&lt;li&gt;基于模型的个体：个体尝试建立一个描述环境运作过程的模型，以此来指导价值或策略函数的更新。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上两种分类方式相结合可以形成多种多样的组合方式，这里不再详述。&lt;/p&gt;
&lt;p&gt;个体通过与环境进行交互，逐渐改善其行为的过程称为学习（Learning）过程。当个体对于环境如何工作有了一定的认识，在与环境进行实际的交互前，模拟分析个体与环境交互情况的过程称为规划（Planning）过程。一个常用的强化问题解决思路是让个体先学习环境如何工作，在具备了一定的认识环境的能力后，利用这个能力进行一定的规划工作，两者相互结合来解决问题，这其实与人类解决实际问题的思路是比较一致的。&lt;/p&gt;
&lt;p&gt;当具备一定智能水平的个体在继续与环境进行交互时，它也可能会遇到一些困惑。比如，个体处于某一状态时，它会根据自身学习所得的能力来决策产生一个建议的行为，而舍弃其他的可选行为。这种方式似乎是明智的，但又隐藏着很大的风险。个体如何能确定自己产生的建议行为就一定是而且总是最优的行为呢？无法确定。首先这要求个体必须在同一个状态下尝试过相当多次的非最优行为，否则个体推荐的最优行为就是不可靠的，但是尝试过多的非最优行为需要相当多次的学习过程，而且会降低个体的学习效率，这通常是不现实的。此外，环境本身及其动力学特征可能也不是一成不变的，一旦发生变化，那么先前个体得到的最优行为可能就不再是环境变化后的最优行为了。这种困惑的背后其实是关于个体的探索（Exploration）与利用（Exploitation）之间的矛盾。个体通常要在偏好探索和偏好利用之间取得一个平衡。偏好探索指的是，个体在与环境进行交互的过程中，会偏好于从不是自身认为最优的其他可选行为中选取一个并作用于环境；偏好利用则相反，这样的个体更倾向于选择实施自身认为最优的行为。举个生活中的例子：你去某个餐饮一条街就餐，偏好探索意味着你对自己之前没去过的新餐厅感兴趣，很可能最终会去一家以前没有去过的新餐厅体验，或者选择以前去过但感觉不好的餐厅，再去看看这个餐厅有没有什么积极的变化；偏好利用意味着你更愿意去那个以往去过且体验最佳的餐厅。很显然，这两种做法是一对矛盾，但对解决强化学习问题非常重要。没有探索，个体就没有机会体验可能发生的变化，进而无法找到可靠的最优解；没有利用则意味着个体始终处在各种选择过程中，无法固定到最优的一个结果中。本书将在后续多个章节中穿插介绍如何平衡探索与利用，并在&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch09.html"&gt;第9章&lt;/a&gt;对平衡探索和利用进行理论分析。&lt;/p&gt;
&lt;p&gt;在强化学习中还有一些概念也比较常用，比如预测（Prediction）和控制（Control）。这些概念与实际生活中的概念比较接近。预测指的是在给定一个策略下，个体对未来进行一个评价，也可以认为是求解给定策略下的价值函数问题，它间接衡量在一个给定策略下个体表现的优劣程度。控制指的是试图寻找一个最优策略来最大化奖励，即最优化个体的表现。&lt;/p&gt;
&lt;p&gt;深度强化学习（Deep Reinforcement Learning）指的是将深度学习相关的算法融入强化学习算法中，两者相互结合来解决规模较大的实际问题。“规模较大”既可以指状态（或可选行为）数目很多，也可以指状态（或行为）不是离散的值而是一段连续的区间。即使在当今计算能力和内存空间都十分强大的计算环境下，不结合深度学习技术，也无法解决那些诸如“围棋”博弈问题等规模很大的实际问题。深度学习技术可以用来对各种函数进行符合要求的近似，继而减少计算消耗或内存的使用，为解决大规模实际问题提供可能。&lt;/p&gt;
&lt;p&gt;如果把强化学习与监督式机器学习进行对比，我们不难有如下认识：强化学习没有监督数据，只有奖励信号；强化学习中的奖励信号不一定是实时的，很可能是延后的，甚至延后很多，当然通过设计可以认为强化学习的奖励是实时的，对于那些缺少有意义的实时奖励环境，我们可以认为其实时奖励的数值为0；强化学习中时间（序列）是一个很重要的因素，同时个体在某一时刻的行为会导致环境的响应并影响到个体的将来。&lt;/p&gt;
&lt;p&gt;理解强化学习中的这些基本概念对于快速进入强化学习的学习、深刻理解强化学习相关理论和算法意义重大。本章只是简单介绍了这些概念，后续章节将会逐一详细地介绍这些概念以及相关的理论和算法，读者可以在学习具体的理论和算法过程中加深对这些概念的理解。&lt;/p&gt;
&lt;h2 id="13-章节组织"&gt;1.3 章节组织&lt;a class="anchor" href="#13-%e7%ab%a0%e8%8a%82%e7%bb%84%e7%bb%87"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本书一共分为10章。&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch01.html"&gt;第1章&lt;/a&gt;主要讲述强化学习的历史、基本概念以及编程环境等。在随后的第2～10章中，将先介绍理论，再通过编程示例来展开详细讨论。其中，第2～5章讲解强化学习的基本理论，并以&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html"&gt;第5章&lt;/a&gt;作为整个内容的核心。从&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch06.html"&gt;第6章&lt;/a&gt;开始陆续引入深度学习技术、基于策略梯度的强化学习算法、基于模型的学习和规划以及对“探索和利用”的探讨。&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch10.html"&gt;第10章&lt;/a&gt;讲解综合了各种算法的Alpha Zero算法的技术原理和实践。&lt;/p&gt;
&lt;h2 id="14-编程环境与代码资源"&gt;1.4 编程环境与代码资源&lt;a class="anchor" href="#14-%e7%bc%96%e7%a8%8b%e7%8e%af%e5%a2%83%e4%b8%8e%e4%bb%a3%e7%a0%81%e8%b5%84%e6%ba%90"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本书以Python作为编程语言，使用PyTorch和Gym等库。为了便于读者阅读，一些核心的代码将被列入每一章的实践部分，并配以文字解释。完整的代码可以参考GitHub中的内容，地址为&lt;a href="https://github.com/qqiang00/reinforce/tree/master/reinforce/codes_for_book"&gt;https://github.com/qqiang00/reinforce/tree/master/reinforce/codes_for_book&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>第2章 · 从一个示例到马尔可夫决策过程</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch02.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch02.html</guid><description>&lt;h1 id="第2章-从一个示例到马尔可夫决策过程"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch02.html"&gt;第2章&lt;/a&gt; 从一个示例到马尔可夫决策过程&lt;a class="anchor" href="#%e7%ac%ac2%e7%ab%a0-%e4%bb%8e%e4%b8%80%e4%b8%aa%e7%a4%ba%e4%be%8b%e5%88%b0%e9%a9%ac%e5%b0%94%e5%8f%af%e5%a4%ab%e5%86%b3%e7%ad%96%e8%bf%87%e7%a8%8b"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;求解强化学习问题可以理解为个体在与环境交互过程中如何最大化地获得累积奖励。环境的动力学特征确定了个体在交互时的状态序列和即时奖励，环境的状态是构建环境动力学特征所需要的所有信息。当环境状态是完全可观测时，个体可以通过构建马尔可夫决策过程来描述整个强化学习问题。有时环境状态虽不是完全可观测的，但个体仍然可以结合自身对于环境的历史观测数据来描述自身处于一个近似完全可观测的环境中所面临的强化学习问题。从这个角度来说，几乎对所有的强化学习问题的描述都可以被认为或被转化为描述一个马尔可夫决策过程。正确理解马尔可夫决策过程中的一些概念和关系对于正确理解强化学习问题非常重要。&lt;/p&gt;
&lt;h2 id="21-马尔可夫过程"&gt;2.1 马尔可夫过程&lt;a class="anchor" href="#21-%e9%a9%ac%e5%b0%94%e5%8f%af%e5%a4%ab%e8%bf%87%e7%a8%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在一个时序过程中，如果t+1时的状态仅取决于t时的状态 $S_{\mathrm{t}}$ ，而与t时之前的任何状态都无关，则认为t时的状态 $S_t$ 具有马尔可夫性质（Markov Property）。若过程中的每一个状态都具有马尔可夫性质，则这个过程就具备马尔可夫性质。具备了马尔可夫性质的随机过程称为马尔可夫过程（Markov Process），或称为马尔可夫链（MarkovChain，MC），它是由状态空间和概率空间组成的一个元组&amp;lt;S,P&amp;gt;。马尔可夫过程中的每一个状态 $S_{\mathrm{t}}$ 记录了过程历史上所有相关的信息，而且一旦 $s$ 确定了，历史状态信息 $\mathrm{S}_1, \mathrm{S}_2, \cdots, \mathrm{S}_{t-1}$ 对于确定 $\mathrm{S}_{t+1}$ 就不再重要，可有可无。描述一个马尔可夫过程的核心是状态转移概率矩阵：&lt;/p&gt;
$$
\boldsymbol{P} _{s s^{\prime}} = \boldsymbol{P} \left[ S_{t + 1} = s^{\prime} \mid S_{t} = s \right] \tag{2.1}
$$&lt;p&gt;式（2.1）中的状态转移概率矩阵定义了从任意一个状态s到其所有后续状态 $\boldsymbol{s}^{\prime}$ 的状态转移概率：&lt;/p&gt;
$$
\boldsymbol{P} = \left[ \begin{array}{c c c} P_{11} &amp; \dots &amp; P_{1 n} \\ \vdots &amp; &amp; \vdots \\ P_{n 1} &amp; \dots &amp; P_{n n} \end{array} \right] \tag{2.2}
$$&lt;p&gt;其中，矩阵P中每一行的数据表示从某一个状态到所有n个状态的转移概率值。每一行的这些转移概率值加起来之和应该为1。&lt;/p&gt;</description></item><item><title>第3章 · 动态规划寻找最优策略</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch03.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch03.html</guid><description>&lt;h1 id="第3章-动态规划寻找最优策略"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch03.html"&gt;第3章&lt;/a&gt; 动态规划寻找最优策略&lt;a class="anchor" href="#%e7%ac%ac3%e7%ab%a0-%e5%8a%a8%e6%80%81%e8%a7%84%e5%88%92%e5%af%bb%e6%89%be%e6%9c%80%e4%bc%98%e7%ad%96%e7%95%a5"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;本章将详细讲解如何利用动态规划算法来解决强化学习中的规划问题。“规划”是在已知环境动力学的基础上进行评估和控制，就是在了解包括状态和行为空间、转移概率矩阵、奖励等信息的基础上判断一个给定策略的价值函数，或判断一个策略的优劣并最终找到最优策略和最优价值函数。虽然多数强化学习问题并不会给出具体的环境动力学，并且多数复杂的强化学习问题无法通过动态规划算法来快速求解，但是本章的内容仍然十分重要，包含许多非常重要的概念，例如预测和控制、策略迭代、价值迭代等。正确理解这些概念对于了解本书后续章节的内容非常重要，因而可以说本章内容是整个强化学习核心内容的引子。&lt;/p&gt;
&lt;p&gt;动态规划算法把求解复杂问题分解为求解子问题，通过求解子问题进而得到整个问题的解。在求解子问题时，其结果通常需要存储起来，以便用来求解后续的复杂问题。当问题具有下列两个性质时，通常可以考虑使用动态规划来求解：第一个性质是一个复杂问题的最优解由数个小问题的最优解构成，这样就可以通过寻找子问题的最优解来得到这个复杂问题的最优解；第二个性质是子问题在复杂问题内重复出现，使得子问题的解可以被存储起来重复利用。马尔可夫决策过程具有上述两个性质：贝尔曼方程把问题递归为求解子问题；价值函数相当于存储了一些子问题的解，可以复用。因此可以使用动态规划来求解马尔可夫决策过程。&lt;/p&gt;
&lt;p&gt;预测和控制是规划的两个重要内容：预测是对给定策略的评估过程，控制是寻找一个最优策略的过程。对预测和控制的数学描述如下：&lt;/p&gt;
&lt;p&gt;预测（Prediction）：已知一个马尔可夫决策过程 $\operatorname{MDP} \langle S , A , P , R , \gamma \rangle$ 和一个策略π，或者给定一个马尔可夫奖励过程 $\operatorname{MRP} \langle S, P_{\pi}, R_{\pi}, \gamma \rangle$ ，求解基于该策略的价值函数 $v_{\pi}$ 。&lt;/p&gt;
&lt;p&gt;控制（Control）：已知一个马尔可夫决策过程 $\operatorname{MDP} \langle S , A , P , R , \gamma \rangle$ ，求解最优价值函数 $v_{*}$ 和最优策略 $\pi^{*}$ 。&lt;/p&gt;
&lt;p&gt;下文将详细讲解如何使用动态规划算法对一个MDP问题进行预测和控制。&lt;/p&gt;
&lt;h2 id="31-策略评估"&gt;3.1 策略评估&lt;a class="anchor" href="#31-%e7%ad%96%e7%95%a5%e8%af%84%e4%bc%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;策略评估（Policy Evaluation）是指在给定策略下求解状态价值函数的过程。对策略评估，我们可以使用同步迭代联合动态规划的算法：从任意一个状态价值函数开始，依据给定的策略，结合贝尔曼期望方程、状态转移概率和奖励来同步迭代更新状态价值函数，直至其收敛，得到该策略下最终的状态价值函数。理解该算法的关键在于在一个迭代周期内如何更新每一个状态的价值。该迭代法可以确保收敛形成一个稳定的价值函数，关于这一点的证明涉及压缩映射原理，它超出了本书的范围，有兴趣的读者可以查阅相关文献。&lt;/p&gt;
&lt;p&gt;贝尔曼期望方程给出了如何根据状态转换关系中的后续状态S'来计算当前状态S的价值，在同步迭代法中，我们使用上一个迭代周期k内的后续状态价值来计算并更新当前迭代周期k+1内某状态s的价值：&lt;/p&gt;
$$
v_{k + 1} (s) = \sum_{a \in A} \pi (a | s) \left(R_{s} ^{a} + \gamma \sum_{s^{\prime} \in S} P_{s s^{\prime}} ^{a} v_{k} \left(s^{\prime}\right)\right) \tag{3.1}
$$&lt;p&gt;我们可以对计算得到的新状态价值函数再次进行迭代，直至状态函数收敛，也就是迭代计算得到每一个状态的新价值与原价值之间的差别在一个很小的、可接受的范围内。&lt;/p&gt;</description></item><item><title>第4章 · 不基于模型的预测</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch04.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch04.html</guid><description>&lt;h1 id="第4章-不基于模型的预测"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch04.html"&gt;第4章&lt;/a&gt; 不基于模型的预测&lt;a class="anchor" href="#%e7%ac%ac4%e7%ab%a0-%e4%b8%8d%e5%9f%ba%e4%ba%8e%e6%a8%a1%e5%9e%8b%e7%9a%84%e9%a2%84%e6%b5%8b"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;前一章讲解了如何应用动态规划算法对一个已知状态转移概率的MDP进行策略评估，或通过策略迭代或者直接的价值迭代来寻找最优策略和最优价值函数，同时也指出了动态规划算法的一些缺点。从本章开始的连续两章内容将讲解个体在不了解环境动力学规则的条件下，直接通过与环境的实际交互来评估一个策略的好坏，或者寻找最优价值函数和最优策略。本章内容的重点是策略评估，也就是预测问题；下一章的重点是利用本章的概念和原理来解决控制问题，即找出最优策略以及最优价值函数。&lt;/p&gt;
&lt;p&gt;本章分为3个部分，将分别从理论上阐述基于完整采样的蒙特卡罗强化学习、基于不完整采样的时序差分强化学习以及介于两者之间的n步时序差分学习。这部分内容比较抽象，在讲解理论的同时会通过一些精彩的实例来加深对概念和算法的理解。&lt;/p&gt;
&lt;h2 id="41-蒙特卡罗强化学习"&gt;4.1 蒙特卡罗强化学习&lt;a class="anchor" href="#41-%e8%92%99%e7%89%b9%e5%8d%a1%e7%bd%97%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;蒙特卡罗强化学习（Monte-Carlo Reinforcement Learning，简称MC强化学习）：个体在不清楚MDP状态转移概率的情况下，直接从所经历过的完整状态序列（Episode）来估计状态的真实价值，并认为某状态的价值等于在多个状态序列中状态所有收获值的平均值。除非例外说明，本文出现的&amp;quot;MC学习&amp;quot;均指的是&amp;quot;MC强化学习&amp;quot;。&lt;/p&gt;
&lt;p&gt;完整的状态序列（Complete Episode）：从某一个状态开始，个体与环境交互，直到环境给出终止状态的奖励为止。完整的状态序列不要求起始状态一定是某一个特定的状态，但是要求个体最终要进入环境认可的某一个终止状态。&lt;/p&gt;
&lt;p&gt;蒙特卡罗强化学习有如下特点：不依赖状态转移概率，直接从所经历过的完整状态序列中学习，就是用平均收获值代替价值。理论上完整的状态序列越多，结果越准确。&lt;/p&gt;
&lt;p&gt;我们可以使用蒙特卡罗强化学习来评估一个给定的策略。基于特定策略π的一个状态序列（Episode）信息可以表示为如下一个序列：&lt;/p&gt;
$$
S_{1}, A_{1}, R_{2}, S_{2}, A_{2}, \dots , S_{t}, A_{t}, R_{t + 1}, \dots , S_{k} \sim \pi
$$&lt;p&gt;t时刻状态St的收获可以表述为：&lt;/p&gt;
$$
G_{t} = R_{t + 1} + \gamma R_{t + 2} + \dots + \gamma^{T - 1} R_{T}
$$&lt;p&gt;其中，T为终止时刻。该策略下某一状态s的价值为：&lt;/p&gt;
$$
v_{\pi} (s) = \mathbb{E} _{\pi} \left[ G_{i} \mid S_{i} = s \right]
$$&lt;p&gt;不难发现，在运用蒙特卡罗算法评估策略时，要针对多个包含同一状态的完整状态序列求得收获值，继而取收获值的平均值。如果一个完整的状态序列中某一需要计算的状态出现在序列的多个位置，也就是说个体在与环境交互的过程中从某个状态出发后又一次或多次返回到该状态（这种现象在&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch02.html"&gt;第2章&lt;/a&gt;讲解&amp;quot;收获的计算&amp;quot;中曾介绍过：一名学生从上&amp;quot;第一节课&amp;quot;开始因&amp;quot;浏览手机&amp;quot;以及在&amp;quot;第三节课&amp;quot;选择&amp;quot;泡吧&amp;quot;后多次重新回到&amp;quot;第一节课&amp;quot;），那么根据收获的定义，在一个状态序列下不同时刻的同一状态计算得到的收获值是不一样的。很明显，在蒙特卡罗强化学习算法中，计算收获时也会碰到这种情况。我们可以采取如下的两种办法之一来应对这种情况：一种是仅把状态序列中第一次出现该状态时的收获值纳入收获平均值的计算中；另一种是针对一个状态序列中每次出现该状态时都计算对应的收获值并纳入收获平均值的计算中。两种方法对应的蒙特卡罗评估分别称为首次访问（First Visit）和每次访问（Every Visit）蒙特卡罗评估。&lt;/p&gt;
&lt;p&gt;在求解状态收获的平均值的过程中，我们介绍一种非常实用且不需要存储所有历史收获值的计算方法：累进更新平均值（IncrementalMean）。这种计算平均值的思想也是强化学习的核心思想之一，具体公式如下：&lt;/p&gt;
$$
\begin{array}{l} \mu_{k} = \frac{1}{k} \sum_{j = 1} ^{k} x_{j} \\ = \frac{1}{k} \left(x_{k} + \sum_{j = 1} ^{k - 1} x_{j}\right) \\ = \frac{1}{k} \left(x_{k} + (k - 1) \mu_{k - 1}\right) \\ = \mu_{k - 1} + \frac{1}{k} \left(x_{k} - \mu_{k - 1}\right) \\ \end{array}
$$&lt;p&gt;累进更新平均值利用前一次的平均值和当前数据以及数据总个数来计算新的平均值：每产生一个需要计算平均值的新数据 $X_{k}$ 时，先计算 $\mathrm{\Delta \cdot \mathrm{x_{k}}}$ 与先前平均值 的差，再将这个差值乘以系数1/k后作为误差来对旧平均值进行修正。如果把该式中平均值和新数据分别看成状态的价值和该状态的收获值，那么该公式就变成递增式的蒙特卡罗法更新状态价值。其公式如下：&lt;/p&gt;</description></item><item><title>第5章 · 无模型的控制</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html</guid><description>&lt;h1 id="第5章-无模型的控制"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html"&gt;第5章&lt;/a&gt; 无模型的控制&lt;a class="anchor" href="#%e7%ac%ac5%e7%ab%a0-%e6%97%a0%e6%a8%a1%e5%9e%8b%e7%9a%84%e6%8e%a7%e5%88%b6"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;前一章内容讲解了个体在不依赖模型的情况下如何进行预测，也就是求解在给定策略下的状态价值或行为价值函数。本章主要讲解在无模型的条件下如何通过个体的学习优化价值函数，同时改善自身行为的策略，以最大化获得累积奖励的过程（这一过程称作“无模型的控制”）。&lt;/p&gt;
&lt;p&gt;生活中有很多关于优化控制的问题，比如控制一个大厦内的多部电梯使得效率更高，控制直升机的特技飞行、机器人足球世界杯上控制机器人球员、围棋游戏等。这些问题要么环境复杂，我们对其环境动力学的特点无法掌握，例如无法精确地描述直升机特技飞行时的空气流动特征、球场上每一个机器人球员位置和姿态；要么虽然问题的规则容易精确描述，也就是环境动力学特征是已知的，但是问题的规模太大，以至于计算机根据一般算法无法高效地求解。例如，围棋游戏的规则很简单，但是这一规则会形成规模极其庞大的棋局。如果使用传统的方法来构建一个智能的围棋手是极其困难的。从强化学习的角度来说，描述围棋问题的状态空间极其宏大。不过无论问题属于以上何种情况，使用最先进的强化学习技术目前都能较好地解决。&lt;/p&gt;
&lt;p&gt;在学习用动态规划进行策略评估、优化时，我们能体会到个体在与环境进行交互时，其实际交互的行为需要基于一个策略来产生。在评估一个状态或行为的价值时，也需要基于一个策略，因为不同的策略下同一个“状态”或“状态-行为对”（State-Action Pair）的价值是不同的。我们把用来指导个体产生与环境进行实际交互行为的策略称为行为策略，把用来评价状态或行为价值的策略或者待优化的策略称为目标策略。如果个体在学习过程中优化的策略与自己的行为策略是同一个策略，那么这种学习方式就称为同策略学习（On-policyLearning）。如果个体在学习过程中优化的策略与自己的行为策略是不同的策略，那么这种学习方式就称为异策略学习（Off-policyLearning，或称为离策略学习）。&lt;/p&gt;
&lt;p&gt;从已知模型、基于全宽度采样的动态规划学习转至模型未知的、基于采样的蒙特卡罗或时序差分学习，所进行的控制是高效解决中等规模实际问题的一个突破。基于这些思想产生了一些经典的理论和算法，如不完全贪婪搜索策略、同策略蒙特卡罗控制、同策略时序差分学习、属于异策略学习算法的Q学习等。下文将详细论述。&lt;/p&gt;
&lt;h2 id="51-行为价值函数的重要性"&gt;5.1 行为价值函数的重要性&lt;a class="anchor" href="#51-%e8%a1%8c%e4%b8%ba%e4%bb%b7%e5%80%bc%e5%87%bd%e6%95%b0%e7%9a%84%e9%87%8d%e8%a6%81%e6%80%a7"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在无模型的控制时，因为无法精确知晓状态间的转移概率，所以无法使用基于状态转移概率来改善贪婪策略，公式如下：&lt;/p&gt;
$$
\pi^{\prime} (s) = \underset{a \in A} {\arg \max} \left(R_{s} ^{a} + P_{s s^{\prime}} ^{a} V (s^{\prime})\right)
$$&lt;p&gt;这不难理解，就拿&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch02.html"&gt;第2章&lt;/a&gt;提到的学生学习一门课的马尔可夫决策过程的例子来说，假设我们需要在贪婪策略下确定学生处在“第三节课”时的价值，就需要比较学生在“第三节课”后所能采取的“学习”和“泡吧”这两个行为之后状态的价值。对于继续“学习”比较简单，在获得一个价值为10的即时奖励之后，进入价值恒为0的“退出休息”状态，此时得到在“第三节课”后选择继续“学习”的价值为+10；而选择“泡吧”时，计算就没那么简单了，因为在“泡吧”过后学生自己并不确定将回到哪个状态，因此无法直接用某一个状态的价值来计算“泡吧”行为的价值。环境按照一定的概率（分别为0.2、0.4、0.4）把学生重新分配至“第一节课”“第二节课”或“第三节课”。也只有在知道这3个概率值后，我们才能根据后续这3个状态的价值计算出“泡吧”行为的价值为+9.4，根据贪婪策略，学生在“第三节课”的价值为+10。在基于采样的强化学习时，我们无法事先精确知道这些状态之间在不同行为下的转移概率，因而无法单独基于状态的价值来改善我们的贪婪策略。&lt;/p&gt;
&lt;p&gt;生活中也是如此，有时一个人给自己制定了一个价值很高的目标，却发现不知采取什么行为来达到这个目标。与其花时间比较目标与现实的差距，倒不如立足于当下，在所有可用的行为中选择一个最高价值的行为。因此，如果能够确定某个状态下所有可能的行为的价值，那么自然比较容易从中选出一个最优价值的行为。实践证明，在无模型的强化学习问题中，确定“状态行为对”的价值要容易很多。&lt;/p&gt;
&lt;p&gt;生活中有些人喜欢做事但不善于总结，这类人一般要比那些勤于总结的人进步慢，从策略迭代的角度看，这类人的策略更新迭代周期较长；有些人在总结经验上过于勤快，甚至在一件事情还没有完全定论时就急于总结并推理过程之间的关系，这种总结得到的经验有可能是错误的。强化学习中的个体也是如此，为了让个体尽早找到最优策略，可以适当加快策略迭代的速度，但是在一个不完整的状态序列学习中则要注意不能过多地依赖状态序列中相邻“状态-行为对”的关系。基于蒙特卡罗方法的学习所利用的是完整的状态序列，为了加快学习速度，可以在只经历一个完整状态序列后就进行策略迭代；在进行基于时序差分的学习时，虽然学习速度可以更快，但是要注意减少对事件估计的偏差。&lt;/p&gt;
&lt;h2 id="52-贪婪策略"&gt;5.2 贪婪策略&lt;a class="anchor" href="#52-%e8%b4%aa%e5%a9%aa%e7%ad%96%e7%95%a5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在前文讲解动态规划进行策略迭代时，初始阶段我们选择的是均匀随机策略（Uniform Random Policy），而进行过一次迭代后，我们选择了贪婪策略（Greedy Policy），即每一次只选择能到达具有最大价值的状态所对应的行为，在随后的每一次迭代中都使用这个贪婪策略。实验发现，这样能够明显加快找到最优策略的速度。贪婪搜索策略在基于模型的动态规划算法中能收敛至最优策略（价值），但这在无模型、基于采样的蒙特卡罗或时序差分学习中却通常不能收敛至最优策略。这3种算法都采用通过后续状态价值回溯的办法来确定当前状态价值，不过动态规划算法还是考虑了一个状态后续所有状态的价值，而后其他两种算法仅能考虑到在学习过程中有限次数的、通过采样经历过的状态，那些事实存在但还没经历过的状态，对于蒙特卡罗和时序差分算法来说，都是未探索的、不被考虑的状态，有些状态虽然在学习过程中经历过，但是经历次数不多，对其价值的估计也不一定准确。试想一下，有一些事实上价值较高的状态，个体由于一些原因从未经历过，此时使用贪婪算法将始终无法探索到这些状态，因而也“无缘”经历这些状态了。同样的道理，使用贪婪算法，那些曾经经历过但被算法认为价值较低的状态也很难再次被个体选择并继续“光顾”。这两种情况都将导致无法得到一个最优的策略。&lt;/p&gt;
&lt;p&gt;举个例子：假设你刚搬到一个街区，街上有两家餐馆，你决定去两家都尝试一下并给自己的就餐体验打个分，分值在0～10分之间，分值越高表明你对就餐体验的满意度越高。你先体验了第一家，觉得一般，给了5分；过了几天你去了第二家，觉得不错，给了8分。此时，如果选择贪婪策略来指导你选择下次就餐要去的餐馆，则你将只会去评分高的那家餐馆就餐，也就是下一次你将继续选择去第二家餐馆。假设第二次去这家餐馆，你的满意度没有上一次好，给了6分。经过了这3次体验后，你对第一家餐馆的评分为5分，对第二家的评分平均下来是7分。之后你仍然选择贪婪策略，下一次体验仍然是去第二家，假设体验为7分，那么经过这4次体验之后，你能确认对你来说第二家餐馆就一定比第一家好吗？答案是否定的，原因在于你只去了一次第一家餐馆，仅靠这一次的体验是不可靠的。贪婪策略并不意味着你今后就一定无法选择去第一家就餐，但是只有在你去过一定次数的第二家餐馆，并且平均的满意度低于第一家的评分5分时，那么下一次你才会选择去第一家餐馆。如果你对第二家餐馆的平均体验评分一直在第一家的5分之上，依据贪婪策略，你将不会再去第一家餐馆体验。也许你第一次去第一家餐馆就餐时恰好碰到他们刚开业，各方面服务还不完善，但是现在已经做得很好了。贪婪策略有可能使你错失在第一家餐馆就餐的美好体验。&lt;/p&gt;
&lt;p&gt;采取贪婪策略还有一个问题，就是如果这条街上新开了一家餐馆，且你对没有去过的餐馆评分为最低的0，那就将永远不会去尝试这&lt;/p&gt;
&lt;p&gt;家新开的餐馆。&lt;/p&gt;
&lt;p&gt;贪婪策略产生问题的根源是无法保证持续地探索。为了解决这个问题，一种不完全的贪婪（ϵ-Greedy）搜索策略被提出来，它的基本思想就是保证能做到持续的探索，具体通过设置一个较小的ϵ值，使用1-ϵ的概率贪婪地选择目前认为是最大价值的行为，而用ϵ的概率随机地从所有m个可选行为中选择行为，即&lt;/p&gt;
$$
\pi (a | s) = \left\{\begin{array}{l l} \epsilon / m + 1 - \epsilon &amp; \text{如果} a^{*} = \underset{a \in A} {\operatorname{argmax}} Q (s, a) \\ \epsilon / m &amp; \text{其他} \end{array} \right. \tag{5.1}
$$&lt;h2 id="53-同策略蒙特卡罗控制"&gt;5.3 同策略蒙特卡罗控制&lt;a class="anchor" href="#53-%e5%90%8c%e7%ad%96%e7%95%a5%e8%92%99%e7%89%b9%e5%8d%a1%e7%bd%97%e6%8e%a7%e5%88%b6"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;同策略蒙特卡罗控制在通过ϵ贪婪策略采样一个或多个完整的状态序列后，平均得出某一“状态-行为对”（State-Action Pair）的价值，并持续进行策略的评估和改善。通常可以在仅得到一个完整状态序列后就进行一次策略迭代以加速迭代过程。&lt;/p&gt;</description></item><item><title>第6章 · 价值函数的近似表示</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch06.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch06.html</guid><description>&lt;h1 id="第6章-价值函数的近似表示"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch06.html"&gt;第6章&lt;/a&gt; 价值函数的近似表示&lt;a class="anchor" href="#%e7%ac%ac6%e7%ab%a0-%e4%bb%b7%e5%80%bc%e5%87%bd%e6%95%b0%e7%9a%84%e8%bf%91%e4%bc%bc%e8%a1%a8%e7%a4%ba"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;本章之前的内容介绍的多是状态数不多、规模比较小的强化学习问题，生活中有许多实际问题要复杂得多，有些问题的状态数量巨大或者具有连续的状态，有些问题可选择的行为数量很多或者具有连续的行为。这些问题如果使用前几章介绍的基本算法求解，效率则会很低，甚至无法进行较好的求解。本章内容侧重于求解那些状态数量众多或者具有连续状态的强化学习问题。&lt;/p&gt;
&lt;p&gt;解决这类问题的常用方法是，不再使用字典之类的查表式方法来存储状态或行为的价值，而是引入有限个适当的参数来恰当描述状态的特征，构建一定的基于特征的函数来近似计算状态或行为价值。这种设计的好处是不需要存储每一个状态或行为价值的数据，而只需要存储有限个特征参数和函数设计就够了，其优点是显而易见的。&lt;/p&gt;
&lt;p&gt;在引入近似价值函数后，在强化学习中不管是预测问题还是控制问题，就转变成了两个问题：设计近似函数和求解近似函数的参数。函数近似主要分为线性函数近似和非线性近似两类，其中非线性近似的主流设计是使用深度神经网络技术。神经网络参数值可按照一般训练神经网络的流程（建立合适的目标函数、选择合适的优化算法和中止训练算法、准备训练数据集、训练网络等）来求解。由此诞生了著名的强化学习算法：深度Q学习网络（DQN）。本章将详细讲解这些问题。&lt;/p&gt;
&lt;h2 id="61-价值近似的意义"&gt;6.1 价值近似的意义&lt;a class="anchor" href="#61-%e4%bb%b7%e5%80%bc%e8%bf%91%e4%bc%bc%e7%9a%84%e6%84%8f%e4%b9%89"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html"&gt;第5章&lt;/a&gt;介绍的几个强化学习算法都属于查表式（Table Lookup）算法，其特点在于每一个状态或行为价值都用一个独立的数据进行存储，整体像一张大表格一样。在编程实现中多使用字典这种数据结构，我们通过查字典的方式来获取状态和行为的价值。这种算法的设计对于状态或行为数量比较少的问题是快速有效的。例如，在上一章所描述的有风的格子世界环境中，每一个小格子代表一个状态，一共有70个状态，而个体的行为只有标准的4个移步行为，总体上也只有280个价值数据，可以说规模相当小。&lt;/p&gt;
&lt;p&gt;参考图6.1，我们来说明一个比较经典的冰球世界（PuckWorld）强化学习问题。环境由一个正方形区域构成，代表冰球场地，场地内的大圆代表运动员个体、小圆代表目标冰球。在这个正方形环境中，小圆会每隔一定的时间随机改变它在场地的位置，而代表个体的大圆的任务是尽可能快地接近冰球目标。大圆可以操作的行为是在水平和垂直共4个方向上，在一个时间步长内施加一定大小和方向的力，借此来改变大圆的速度。环境会在每一个时间步内告诉个体（大圆）当前的水平与垂直坐标、当前的速度在水平和垂直方向上的分量以及目标冰球（小圆）的水平和垂直坐标共6项数据，同时确定奖励值为个体与目标两者中心距离的负数，也就是距离越大奖励值越低且最高奖励值为0。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/763ebc40db647c65e13a6066268d1df3b4eb82007b91469f25968b5ed4b6042e.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p class="caption"&gt;
 图6.1　PuckWorld环境界面
&lt;/p&gt;

&lt;p&gt;如果打算用强化学习的算法来求解，那么其中一个重要的问题就是如何描述作为大圆的个体在环境中的状态。根据描述，环境给予的状态空间有6个特征，每一个特征都是连续的变量。如果把正方形场地的边长认为是单位值1，那么描述个体水平坐标的特征值可以是0和1之间的所有连续变量，其他5个特征也类似。如果一定要采取查表式的方法确定每一个“状态-行为对”的价值，那么只能将每一个特征进行分割，例如将0~1平均分为100等份，当个体的水平坐标位于这100个区间的某一区间内时，其水平坐标的特征值相同。这种近似的求解方式看似有效，但存在一个问题：多少等份才合理呢？分割得越细，结果势必越准确，但带来状态的数量势必要增大很多。即使每一个特征都分割成100等份的区间，对于一共有6个特征的状态空间和4个离散行为的行为空间来说，也需要 $100^{6} \times 4 {=} 4 \times 10^{12}$ 个数据来描述行为价值，如果每个数据用1个字节表示，则一共需要3726GB的内存容量，这无疑是不现实的。如果分割的区间数较少，那么问题有可能得不到较好的求解结果。假设你拥有一台容量足够的计算机能使用查表法求解上述问题，如果仔细查看表中的数据，我们就会发现表中特征比较接近的那些众多“状态-行为对”其对应的价值也比较接近，这无疑不是经济、高效的求解办法。&lt;/p&gt;
&lt;p&gt;如果能建立一个函数 ，这个函数由参数w描述，它可以直接接受表示状态特征的连续变量s作为输入，计算得到一个状态的价值，通过调整参数w的取值使其符合基于某一策略π的最终状态价值，那么这个函数就是状态价值 的近似表示。&lt;/p&gt;
$$
\hat{v} (\boldsymbol{s}, \boldsymbol{w}) \approx v_{\pi} (\boldsymbol{s})
$$&lt;p&gt;类似地，如果由参数w构成的函数q同时接受状态变量s和行为变量a，计算输出一个行为价值，通过调整参数w的取值，使其符合基于某一策略π的最终行为价值，那么这个函数就是行为价值 的近似表示。&lt;/p&gt;
$$
\hat{q} (s, a, w) \approx q_{\pi} (s, a)
$$&lt;p&gt;此外，由参数构成的函数仅接受状态变量作为输入，计算输出针对行为空间的每一个离散行为的价值，这是另一种行为价值的近似表示。&lt;/p&gt;
&lt;p&gt;在上面的公式中，描述状态的s不再是一个字符串或者一个索引，而是由一系列的数据组成的向量，构成向量的每一项称为状态的一个特征，该项的数据值称为特征值；参数w需要通过求解来确定，通常也是一个向量（或矩阵、张量等）。图6.2直观地显示了上述3种价值近似表示的特点。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/7d44d0457159943b2ddddac358365d04c015a1cccc23a5fdad65b68edbe6b52a.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图6.2　3种不同类型的价值函数架构
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;构建了价值函数的近似表示后，强化学习中的预测和控制问题就转变为求解近似价值函数的参数w了。通过建立目标函数，使用梯度下降联合多次迭代的方式可以求解参数w。&lt;/p&gt;
&lt;h2 id="62-目标函数与梯度下降"&gt;6.2 目标函数与梯度下降&lt;a class="anchor" href="#62-%e7%9b%ae%e6%a0%87%e5%87%bd%e6%95%b0%e4%b8%8e%e6%a2%af%e5%ba%a6%e4%b8%8b%e9%99%8d"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="621-目标函数"&gt;6.2.1 目标函数&lt;a class="anchor" href="#621-%e7%9b%ae%e6%a0%87%e5%87%bd%e6%95%b0"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;先来回顾一下&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch05.html"&gt;第5章&lt;/a&gt;中介绍的几个经典学习算法得到最终价值的思想，首先是随机初始化各价值，通过分析每一个时间步长内产生的状态转换数据，得到一个当前状态的目标价值，这个目标价值由即时奖励和后续价值共同来体现。由于学习过程中的各价值都是不准确的，因此在更新价值的时候只是沿着目标价值的方向做一个很小幅度（α）的更新：&lt;/p&gt;
$$
Q (S, A) \leftarrow Q (S, A) + \alpha (R + \gamma Q (S^{\prime}, A^{\prime}) - Q (S, A))
$$&lt;p&gt;不同算法的差别体现在目标值 $R + \gamma Q ( S^{\prime} , A^{\prime} )$ 的选取上。试想一下，如果价值函数最终收敛而不再更新，就意味着对任何状态或“状态-行为对”，其目标值与价值相同。对于预测问题，收敛得到的Q就是基于某策略的最终价值函数；对于控制问题，收敛得到的价值函数同时也对应着最优策略。&lt;/p&gt;</description></item><item><title>第7章 · 基于策略梯度的深度强化学习</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch07.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch07.html</guid><description>&lt;h1 id="第7章-基于策略梯度的深度强化学习"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch07.html"&gt;第7章&lt;/a&gt; 基于策略梯度的深度强化学习&lt;a class="anchor" href="#%e7%ac%ac7%e7%ab%a0-%e5%9f%ba%e4%ba%8e%e7%ad%96%e7%95%a5%e6%a2%af%e5%ba%a6%e7%9a%84%e6%b7%b1%e5%ba%a6%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;在行为空间规模庞大或者是具有连续行为空间的情况下，基于价值的强化学习将很难学习到一个好的结果。这种情况下可以直接进行策略的学习，也就是将策略看成是具有状态和行为参数的策略函数，通过建立恰当的目标函数、利用个体与环境进行交互产生的奖励来学习得到策略函数的参数。策略函数针对连续行为空间将可以直接产生具体的行为值，进而绕过对状态价值的学习。&lt;/p&gt;
&lt;p&gt;在实际应用中，一个解决强化学习问题的算法可以同时建立用于状态价值的近似函数和直接用于策略的近似函数。通过联合使用这两种函数，一方面可以基于价值函数进行策略评估和优化，另一方面优化的策略函数又会使得价值函数更加准确地反映状态的价值，两者相互促进最终得到最优策略。在这一思想背景下产生的深度确定性策略梯度算法成功地解决了连续行为空间中的诸多实际问题。&lt;/p&gt;
&lt;h2 id="基于策略学习的意义"&gt;基于策略学习的意义&lt;a class="anchor" href="#%e5%9f%ba%e4%ba%8e%e7%ad%96%e7%95%a5%e5%ad%a6%e4%b9%a0%e7%9a%84%e6%84%8f%e4%b9%89"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;基于近似价值函数的学习可以较高效率地解决连续状态空间的强化学习问题，但其行为空间仍然是离散的。以PuckWorld世界环境来说，个体在环境中可以选择5个行为，分别是朝着左、右、上、下4个方向产生一个推动力，或者什么都不做。这个推动力是一个标准的值，假设为1。每一次朝着某个方向施加这个力时，其大小总是1或者0。对个体行为做这样的设定只是为了描述问题的方便。事实上，个体在同样的这个PuckWorld环境中，它完全可以同时在平面上的任何方向施加大小不超过一定值的力。此时该如何描述这个行为空间呢？这种情况下可以使用平面直角坐标系把力在水平和垂直方向上进行分解，分量大小不超过1，那么这个力就可以用水平和垂直两个方向上的分量来描述，每一个方向上的分量可以是[-1，1]之间的任何可能的实数值，例如0.55可以被用来表示在水平方向上对个体施加一个向右的0.55大小的力。在这个例子中，行为就是施加给个体的力。为了计算，这个力可以用其在水平和垂直方向上分量的大小这两个特征来描述，每一个分量的值不再是0或者1这两个离散值，可以是区间[0,1]上的任何一个小数，如图7.1所示。针对这种情形，如果继续使用基于价值函数近似的方法来求解，将无法得到最大行为价值对应的具体行为，可以认为单纯基于价值函数近似的强化学习算法无法解决有连续行为空间的强化学习问题。&lt;/p&gt;
&lt;p&gt;此外，在使用特征来描述状态空间中的某一个状态时，有可能因为个体观测的限制或者建模的局限，导致本来不同的两个状态却拥有相同的特征描述，进而导致无法得到最优解。这种情形可以用如图7.2所示的例子来解释。该环境的状态空间是离散的，其中骷髅占据的格子代表着会受到严厉惩罚的终止状态，钱袋子占据的格子代表着有丰厚奖励的终止状态，其余5个格子个体可以自由进出。环境的状态虽然是离散的，但是由于个体观测水平的限制，假设现在个体只能观测到两个描述自身状态的特征，分别是个体当前位置北侧和南侧是否是墙壁（图中粗灰线条表示的轮廓）。如果一个格子的状态用这两个特征来表示，那么可以认为最左上方格子的状态特征为（1,0），因为其北部是墙壁，而南侧是进入一个惩罚终止状态的通道。类似地，图中灰色的两个格子状态特征均为（1,1），表示这两个格子的北侧和南侧均为墙壁。如果使用基于状态或行为价值的贪婪策略学习方法，在个体处于这两个灰色格子中时，依据贪婪原则，它将永远都只选择向左或者向右其中的一个行为。假设它仅选择向左的行为，那么对于右侧的灰色格子，将进入上方中间的格子，并且很容易随后选择向下的行为进而进入钱袋子表示的终止位置，得到丰厚奖励。但是，对于左侧灰色格子，它选择向左的行为将进入特征值为（1,0）的左上角格子，此状态下的最优策略是向右，因为向下就进入了惩罚的终止状态，而向左、向上都是无效行为。如此就发生了个体将一直在左侧灰色格子与左上角格子之间反复徘徊的局面，无法到达拥有丰厚奖励的终止状&lt;/p&gt;
&lt;p&gt;态。因为个体的观测能力受限，当个体在两个不同的灰色格子中时，它无法区分这两个格子的区别且会认为它们是同一个格子，并会根据学习到的策略生成一个确定的行为，而这个行为对于个体处在其中的一个格子时可能是较优的行为，而对于个体处在另一个格子时就不是最优行为了。也就是说：在灰色格子状态下，依据价值函数可能会得到一个最优策略，其产生的行为总是向左移动，那么个体一旦进入左侧灰色格子就会发生一直左右徘徊的情况。这个例子说明：个体对于状态观测的特征不够多时，会导致多个状态发生重名情况，进而导致单纯基于状态或状态行为价值的学习得不到最优解。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/58a47b727486103157a1cb92a58fb3acd39e6943953980f9cb2b174bc617b7ae.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;p class="caption"&gt;
 图7.1　PuckWorld中的个体连续行为空间
&lt;/p&gt;

&lt;img src="images/1abc2b53293eecaa981e07d56e06bbb690d532d119feb1d764362730acd51c14.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p class="caption"&gt;
 图7.2　特征表示的状态发生重名情况
&lt;/p&gt;

&lt;p&gt;基于价值的学习对应的最优策略通常是确定性策略，因为其是从众多行为价值中选择一个最大价值的行为，而有些问题的最优策略却是随机策略，这种情况下同样是无法通过基于价值的学习来求解的。这其中很简单的一个例子就是“石头剪刀布”游戏。对于这个游戏，玩家的最优策略是随机出石头、剪刀、布中的一个，因为一旦遵循某个确定的策略，就容易被对手发现并利用，进而输给对方。&lt;/p&gt;
&lt;p&gt;从上面的几个例子可以看出，基于价值的强化学习虽然能出色地解决很多问题，但是面对行为空间连续、观测受限、随机策略的学习等问题时仍然显得力不从心。此时基于策略的学习是解决这类问题的一个新途径。在基于策略的强化学习中，策略π可以被描述为一个包含参数θ的函数：&lt;/p&gt;
$$
\pi_{\theta} (s, a) = P [ a | s, \theta ]
$$&lt;p&gt;策略函数πθ确定了在给定的状态和一定的参数设置下，采取任何可能行为的概率是一个概率密度函数。在实际应用这个策略时，选择最大概率对应的行为或者以此为基础进行一定程度的采样探索。可以认为，参数θ决定了策略的具体形式。因而求解基于策略的学习问题就转变为如何确定策略函数的参数θ的问题。同样可以设计一个基于参数θ的目标函数J（θ），通过相应的算法来寻找最优参数。&lt;/p&gt;
&lt;h2 id="72-策略目标函数"&gt;7.2 策略目标函数&lt;a class="anchor" href="#72-%e7%ad%96%e7%95%a5%e7%9b%ae%e6%a0%87%e5%87%bd%e6%95%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;强化学习的目标就是让个体在与环境交互的过程中获得尽可能多的累积奖励，一个好的策略应该能准确反映强化学习的目标。对于一个能够形成完整状态序列的交互环境来说，由于一个策略决定了个体与环境的交互，因而可以设计目标函数 ${\mathrm{J}} _{1} ~ ( ~ \theta ~ )$ 为使用策略πθ时的初始状态价值（Start Value），也就是初始状态收获的期望值：&lt;/p&gt;
$$
J_{1} (\theta) = V_{\pi_{\theta}} (s_{1}) = E_{\pi_{\theta}} [ G_{1} ] \tag{7.1}
$$&lt;p&gt;有些环境没有明确的起始状态和终止状态，个体持续地与环境进行交互。在这种情况下，可以使用平均价值（Average Value）或者每一时间步长的平均奖励（Average Reward Per Time-Step）来设计策略目标函数：&lt;/p&gt;
$$
J_{a v V} (\theta) = \sum_{s} d^{\pi_{\theta}} (s) V_{\pi_{\theta}} (s) \tag{7.2}
$$$$
J_{a v R} (\theta) = \sum_{s} d^{\pi_{\theta}} (s) \sum_{a} \pi_{\theta} (s, a) R_{s} ^{a}
$$&lt;p&gt;其中， $d^{\pi_{\theta}} \left( s \right)$ 是基于策略 $\pi_{\mathrm{~ \theta ~}}$ 生成的马尔可夫链关于状态的静态分布。这3种策略目标函数都与奖励相关，而且都试图通过奖励与状态或行为的价值联系起来。与价值函数近似的目标函数不同，策略目标函数的值越大，代表策略越优秀。可以使用与梯度下降相反的梯度上升（Gradient Ascent）来求解最优参数：&lt;/p&gt;</description></item><item><title>第8章 · 基于模型的学习和规划</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch08.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch08.html</guid><description>&lt;h1 id="第8章-基于模型的学习和规划"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch08.html"&gt;第8章&lt;/a&gt; 基于模型的学习和规划&lt;a class="anchor" href="#%e7%ac%ac8%e7%ab%a0-%e5%9f%ba%e4%ba%8e%e6%a8%a1%e5%9e%8b%e7%9a%84%e5%ad%a6%e4%b9%a0%e5%92%8c%e8%a7%84%e5%88%92"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;多数强化学习问题可以通过查表式或基于近似函数的方法来直接学习状态价值或策略函数，在这些学习方法中，个体并不会试图去理解环境动力学特征（即环境规则）。如果能建立一个较为准确地模拟环境动力学特征的模型，或者当问题的本身就类似于一些棋类游戏等规则非常明确且开放给个体时，个体就可以通过构建一个模型来模拟或复制环境的动力学特征，随后通过这个模型来模拟其与环境的交互。这种交互并不是个体实际发生的与环境的交互，而是个体根据现有的各种策略与模型发生的模拟交互，它非常类似于人类使用大脑进行“思考”的过程，也类似于用军事上的沙盘或计算机推演。通过“思考”“推演”，个体可以对问题进行不同方向的规划、在与模拟环境的模型进行虚拟交互时分析和判断各种交互可能产生的后果，并形成个体当前认为最优的策略，再将该策略应用于个体与环境实际的交互过程中，进而验证和优化当前的策略。这种构建模型进行思考推演在付诸实践的思想，可以广泛应用于规则简单但状态或结果复杂的强化学习问题。&lt;/p&gt;
&lt;h2 id="81-环境的模型"&gt;8.1 环境的模型&lt;a class="anchor" href="#81-%e7%8e%af%e5%a2%83%e7%9a%84%e6%a8%a1%e5%9e%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;模型是个体构建的对于环境动力学特征的一种表示。在解决强化学习问题时，个体可以选择不建立模型，通过与环境直接进行交互而学习得到状态的价值函数或策略函数。在某些情况下，例如环境的动力学特征比较简单或者个体不想与环境进行过多的实际交互，个体可以先与环境进行直接交互来构建一个模型，再根据这个模型去学习得到状态的价值函数或学习得到一个策略函数。当个体拥有一个较为准确的描述环境动力学特征的模型时，它在与环境交互的过程中，既可以通过实际交互来提高其所构建的模型的准确程度，也可以在与环境实际交互的间隙利用构建的模型进行思考、规划，决策出对个体有利的行为。基于模型的强化学习流程可以用图8.1来表示。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/b7edf9c701afd3cff8e64e5fa652cd8c743ba989bb07a7c977c3841b7b9af542.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p class="caption"&gt;
 图8.1　基于模型的强化学习流程
&lt;/p&gt;

&lt;p&gt;从理论上来说，模型M为一个马尔可夫决策过程MDP&amp;lt;S,A,P,R&amp;gt;的参数化表现形式。假设状态和行为空间是已知的，那么模型 $\mathrm{M} {=} \langle \mathrm{P} _{\mathfrak{n}} , \mathrm{R} _{\mathfrak{n}} \rangle$ 描述了环境动力学中的状态转换 $P_{\eta} \approx P$ 和奖励函数 $R_{\eta} \approx R$ ：&lt;/p&gt;
$$
S_{t + 1} \sim P_{\eta} \left(S_{t + 1} \mid S_{t}, A_{t}\right)
$$$$
R_{t + 1} = R_{\eta} \left(R_{t + 1} \mid S_{t}, A_{t}\right)
$$&lt;p&gt;并且假设状态转换和奖励之间是条件独立的：&lt;/p&gt;
$$
P \big [ S_{t + 1}, R_{t + 1} \mid S_{t}, A_{t} \big ] = P \big [ S_{t + 1} \mid S_{t}, A_{t} \big ] P \big [ R_{t + 1} \mid S_{t}, A_{t} \big ]
$$&lt;p&gt;学习一个模型相当于从经历 $S_{1} , A_{1} , R_{2} , \cdots , S_{T}$ 中通过监督式学习得到一个$M_{\eta}$ 。其中：&lt;/p&gt;</description></item><item><title>第9章 · 探索与利用</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch09.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch09.html</guid><description>&lt;h1 id="第9章-探索与利用"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch09.html"&gt;第9章&lt;/a&gt; 探索与利用&lt;a class="anchor" href="#%e7%ac%ac9%e7%ab%a0-%e6%8e%a2%e7%b4%a2%e4%b8%8e%e5%88%a9%e7%94%a8"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;在强化学习问题中，探索和利用是一对矛盾：探索强调尝试不同的行为，继而收集更多的信息，利用则强调做出当前信息下的最佳决定。探索可能会牺牲一些短期利益，但通过搜集更多信息而获得较为长期的、准确的利益；利用侧重于对根据已掌握的信息做到短期利益的最大化。探索不能无止境地进行，否则就牺牲了太多的短期利益进而导致整体利益受损；同时也不能太看重短期利益而忽视一些未探索的、可能会带来巨大利益的行为。因此，如何做好探索和利用之间的平衡是强化学习领域的一个重要课题。&lt;/p&gt;
&lt;p&gt;根据探索过程中使用的数据结构，可以将探索分为依据状态行为空间的探索（State-Action Exploration）和参数化探索（Parameter Exploration）。前者针对当前的每一个状态，以一定的算法尝试之前该状态下没有尝试过的行为；后者直接针对参数化的策略函数，表现为尝试不同的参数设置，进而得到具体的行为。&lt;/p&gt;
&lt;p&gt;本章结合多臂游戏机实例，一步步从理论角度推导出一个有效的探索应该具备什么特征；随后介绍3类常用的探索方法，包括在前几章常用的几种探索：衰减的ϵ贪婪探索、不确定优先探索以及利用信息价值进行探索。&lt;/p&gt;
&lt;h2 id="91-多臂游戏机"&gt;9.1 多臂游戏机&lt;a class="anchor" href="#91-%e5%a4%9a%e8%87%82%e6%b8%b8%e6%88%8f%e6%9c%ba"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;多臂游戏机（见图9.1）是一种博弈类游戏工具，一台机器上有多个拉杆。游戏者拉下一个拉杆后，游戏机会随机给予一定数额的奖励。游戏者一次只能拉下一个拉杆，每个拉杆的奖励分布是相互独立的，并且前后两次拉杆行为之间的奖励也没有关系。在这个场景中，游戏机相当于环境，个体拉下某一单臂游戏机的拉杆表示执行了一个特定的行为，游戏机会给出一个即时奖励R，随即该状态序结束。因此，多臂游戏机中一个完整状态序列中的每一个元素就由一个行为和一个即时奖励构成，并不存在对每个状态的描述和记录。&lt;/p&gt;
&lt;p&gt;从上文的描述可知，多臂游戏机可以看成是由行为空间和奖励组成的元组&amp;lt;A,R&amp;gt;，假如一台多臂游戏机有m个拉杆，那么行为空间将由m个具体行为组成，每一个行为对应拉下某一个拉杆。个体采取行为a得到的即时奖励r服从一个个体未知的概率分布：&lt;/p&gt;
$$
R^{a} (r) = P [ r \mid a ]
$$&lt;p&gt;在t时刻，个体从行为空间A中选择一个行为 $a_{\scriptscriptstyle t} \in A$ ，随后环境产生一个即时奖励 $r_{t} \sim R^{a_{t}}$ 。&lt;/p&gt;
&lt;p&gt;个体可以持续多次地与多臂游戏机进行交互，那么个体每次选择怎样的行为才能最大化来自多臂游戏机的累积奖励 $( \sum_{\tau = 1} ^{t} r_{\tau} ^{} )$ 呢？&lt;/p&gt;
&lt;p&gt;&lt;img src="images/0893912b3d1ad2f20b72bb00d2e549662f40bc3077ebb67504d4590ff94d21c9.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p class="caption"&gt;
 图9.1　多臂游戏机示意图
&lt;/p&gt;

&lt;p&gt;为了方便描述问题，定义行为价值Q（a）为采取行为a获得的奖励期望：&lt;/p&gt;
$$
Q (a) = \mathbb{E} [ r \mid a ]
$$&lt;p&gt;假设能够事先知道哪一个拉杆能够给出最大即时奖励，则可以每次只选择对应的那个拉杆。如果用V&lt;em&gt;表示这个最优价值、a&lt;/em&gt;表示能够带来最优价值的行为，那么：&lt;/p&gt;
$$
V^{*} = Q \left(a^{*}\right) = \max_{a \in A} Q (a)
$$&lt;p&gt;事实上不可能事先知道拉下哪个拉杆能带来最高奖励，因此每一次拉杆获得的即时奖励都与最优价值V*存在一定的差距，定义这个差距为后悔值（Regret）：&lt;/p&gt;
$$
l_{t} = \mathbb{E} \left[ V^{*} - Q (a_{t}) \right]
$$&lt;p&gt;每执行一次拉杆行为都会产生一个后悔值 $l_t$ ，随着拉杆行为的持续进行，将所有的后悔值加起来，形成一个总后悔值：&lt;/p&gt;</description></item><item><title>第10章 · Alpha Zero算法实战</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch10.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/ch10.html</guid><description>&lt;h1 id="第10章-alpha-zero算法实战"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-intro/ch10.html"&gt;第10章&lt;/a&gt; Alpha Zero算法实战&lt;a class="anchor" href="#%e7%ac%ac10%e7%ab%a0-alpha-zero%e7%ae%97%e6%b3%95%e5%ae%9e%e6%88%98"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;2017年10月，DeepMind公司发表了一篇题为“Mastering game ofGo without human knowledge”的论文，文中提出了一个新的挑战围棋的人工智能软件版本Alpha Zero，指出其在不借鉴任何人类围棋棋谱的条件下，仅利用围棋规则本身，通过自博弈的形式实现了对公司既往开发的各个围棋人工智能软件版本的超越，成为最厉害的“围棋手”。随后该公司将Alpha Zero算法的核心思想成功地应用到国际象棋、日本象棋中，并将这类算法统称为Alpha Zero算法。随后，GitHub上也有人对相应算法进行简化，但保持了Alpha Zero的核心思想，将其应用到五子棋上，取得了非常不错的效果。&lt;/p&gt;
&lt;p&gt;读者可能会认为，如此出色的Alpha Zero算法应该是非常复杂和难以理解的。事实上，Alpha Zero算法思想非常简洁、优美，其中的核心思想提取出来可以以流程图（见图10.1）的形式体现。从图10.1中可以看出，该算法主要包括自博弈、策略提升、策略评估环节。其涉及的一些基础概念已经在本书之前的章节有详细的介绍。本章将详细解释Alpha Zero算法的核心思想，并在实践环节结合五子棋游戏深入剖析GitHub开源库对Alpha Zero算法的实现代码[1]。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/ea10f518206116a49aa2dcb564344aa277ac028d3c3f200617921d55b384ba49.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p class="caption"&gt;
 图10.1　Alpha Zero算法流程图框架
&lt;/p&gt;

&lt;p&gt;围棋、国际象棋等游戏有一些共同的特征，都属于双人、零和（Zero-Sum）博弈、完美信息（Perfect Information）类游戏。其中，“双人”是指游戏参与者为两个人；“零和博弈”是指参与游戏的双方不存在合作的可能，一方的收益额等于另一方的损失额，双方的收益和损失相加总和永远为“零”；“完美信息”是指参与游戏的任何一方在做决策前都掌握了所有相关的历史信息，包括游戏的初始化信息。围棋、国际象棋、黑白棋等游戏都属于完美信息游戏。扑克牌游戏由于游戏一方不知道洗牌后的结果以及对方手中的牌，因此属于非完美信息游戏。完美信息游戏产生的事件序列可以严格地使用马尔可夫过程来建模。Alpha Zero算法充分利用了双人、零和博弈、完美信息类游戏的特点，后文将逐步展开。&lt;/p&gt;
&lt;p&gt;如果将诸如围棋、国际象棋、黑白棋、五子棋等棋盘类游戏描述为一个马尔可夫决策过程，那么状态可以由棋盘上每一个位置的落子情况来表示。以一个8×8的五子棋盘为例，描述任何时刻棋盘的状态需要使用64个特征代表棋盘上64个可以落子的位置，每一个位置存在3种可能的情形：黑棋占据、白棋占据或没有一方占据，可以分别用-1、0、1代表这3种可能性。游戏者可能的操作是在棋盘的任何一个位置放置一枚棋子或者放弃落子（Pass）。在不考虑放弃落子情况下，游戏者所有可能的64种行为构成行为空间。在游戏过程中，有些行为是合法的，而有些行为是非法的，不过在行为空间这一层面可以暂不做区分，对这些行为的合法性的判断可留给后续的过程。由于棋类行为的规则明确，只要是执行了一个合法行为那么后续状态就是确定的，因此行为进入对应后续状态的概率为1，而进入其他状态的概率为0。在棋类游戏的过程中，多数情况下参与游戏的双方是无法从每一次落子行为中获得直接奖励的。规则通常规定直到棋局结束系统判定输赢时才认为环境系统给出了奖励。该奖励既是整个状态序列最后一个状态转换的即时奖励，也是该状态序列中唯一一个值可能不为0的奖励。可以设置某一方赢棋获得值为1的奖励、另一方获得-1的奖励，双方和局则奖励为0。由于在非终止的状态转换中奖励值都为0，因此可以不必考虑衰减因子，或者直接设置其值为1。以上就是对一个具有双人、零和博弈、完美信息等特征的棋类游戏的MDP建模描述。&lt;/p&gt;
&lt;p&gt;可以看出，这些棋类游戏对应的MDP问题的状态空间规模非常庞大，如果是19×19格的围棋棋盘，可能的状态数目已经是天文数字（3361）。如此大规模的状态空间，如果使用强化学习算法来求解，势必要使用函数的近似。Alpha Zero算法使用卷积神经网络来建立状态价值v和策略p两个函数的近似——，分别用以估计某一状态的价值和该状态下各行为作为最优行为的概率。在面对一个棋局状态s并确定下一个落子应该在什么位置时，Alpha Zero算法使用$f_\theta$指导的蒙特卡罗树搜索（MCTS）来模拟人类棋手的思考过程。MCTS给出的各行为概率比单纯从神经网络f得到的策略函数给出的各行为概率更加强大，从这个角度看，MCTS搜索可以被认为是一个强大的策略优化工具。通过搜索来进行自我对弈——使用改善了的基于MCTS的策略来指导行为选择，然后使用棋局结果（哪一方获胜，用-1和1分别表示白方和黑方获胜）来作为标签数据。Alpha Zero算法的主体思想就是在策略迭代过程中重复使用上述两个工具：神经网络f的参数得以更新，这样可以使得神经网络输出的各位置落子概率和当前状态的获胜奖励，更接近于经过改善了的搜索得到的概率以及通过自我对弈得到的棋局结果，后者用 $Z$ 表示。网络得到的新参数可以在下一次自我对弈的迭代过程中让搜索变得更加强大（见图10.2）。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/e594d22b73288f6f036d043b1156a410d181d0232295bf24a98aa1525c0dc20f.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;（a）自我博弈
&lt;img src="images/baf674b94a4265050df3297d79c06638230f95a6de74b2f6f55e02c4962e956e.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;（b）神经网络训练&lt;/p&gt;
&lt;p class="caption"&gt;
 图10.2　Alpha Zero自我博弈的强化学习
&lt;/p&gt;

&lt;p&gt;图10.2（a）展示的是算法自我博弈完成一个完整棋局进而产生一个完整的状态序列的过程，T时刻棋局结束，产生了针对某一方的最终奖励Z。在棋局的每一个时刻t，棋盘状态为 $\mathrm{s_{t}}$ 。在该状态下，通过在神经网络 $f_{\theta}$ 引导下的一定次数模拟的蒙特卡罗树搜索产生最终的落子行为 $\mathrm{a_{t}}$ 。图10.2（b）演示的是算法中神经网络的训练过程。神经网络 $f_{\theta}$ 的输入是某时刻t的棋局状态 $\mathrm{s_{t}}$ 外加一些历史和额外信息（包括当前棋手信息），输出是行为概率向量 $\mathrm{p_{t}}$ 和一个标量 $\mathrm{v_{t}}$ ，前者表示的是在当前棋局状态下采取每种可能落子方式的概率，后者表示当前棋局状态下棋手估计的最终奖励。神经网络的训练目标就是要尽可能地缩小两方面的差距：一是搜索得到的概率向量t和网络输出概率向量 $\mathrm{\Delta p_{t}}$ 的差距，二是网络预测的当前棋手的最终结果 $\mathrm{v_{t}}$ 和实际最终结果（用1、-1表示）的差距。网络训练得到的新参数会被用来指导下一轮迭代中自我对弈时的MCTS搜索。&lt;/p&gt;
&lt;p&gt;算法中的蒙特卡罗树搜索过程利用了神经网络 $f_{\theta}$ 给出的近似状态价值，使其在一次搜索内的每一次模拟思考的过程不必考虑终盘，当模拟过程中碰到搜索树内暂不存在的状态时，直接参考网络 $f_{\theta} ^{\phantom{\dagger}}$ 给出的状态价值来更新本次搜索相关的状态的价值。当一定次数的模拟结束时，蒙特卡罗树搜索依据树内策略结合当前所有行为对应的价值来产生实际的落子行为。这一过程如图10.3所示。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/f65a09bfff8f865175218ef0c4208e1456104d501498bffac376e0820b229879.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p class="caption"&gt;
 图10.3　Alpha Zero中的蒙特卡罗树搜索
&lt;/p&gt;</description></item><item><title>致谢</title><link>https://uynajgi.github.io/yuulibrary/books/rl-intro/acknowledgments.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-intro/acknowledgments.html</guid><description>&lt;h1 id="致谢"&gt;致谢&lt;a class="anchor" href="#%e8%87%b4%e8%b0%a2"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;我首先要感谢我的家人：妻子和两个孩子、我的父母和弟弟。他们在我写作的过程中给了我极大的鼓励、宽容和帮助，没有他们的支持，本书不可能完成。&lt;/p&gt;
&lt;p&gt;感谢蒙特利尔大学计算机学院的诸多老师：Frasson Claude、Aaron Courville和Ioannis Mitliagkas等。他们使我对强化学习、深度学习、机器学习相关理论有了尽可能准确的理解。&lt;/p&gt;
&lt;p&gt;感谢在知乎网站上我的强化学习专栏留言和评论的各位网友，他们给了我鼓励和十分有益的建议。&lt;/p&gt;
&lt;p&gt;感谢郑志教授、孙倩主任、徐娴主任和其他同事，他们既是同事也是良师益友，在人生道路上给了我很大的支持，也间接促成了本书。&lt;/p&gt;
&lt;p&gt;最后，感谢母校上海交通大学多年的培养，感谢加拿大魁北克省教育局的间接资助。&lt;/p&gt;
&lt;p&gt;叶强&lt;/p&gt;</description></item></channel></rss>