<?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-math/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-math/index.xml" rel="self" type="application/rss+xml"/><item><title>前言</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/preface.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/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;h2 id="内容简介"&gt;内容简介&lt;a class="anchor" href="#%e5%86%85%e5%ae%b9%e7%ae%80%e4%bb%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本书从强化学习最基本的概念开始介绍，将介绍基础的分析工具，包括贝尔曼方程和贝尔曼最优方程，然后推广到基于模型的和无模型的强化学习算法，最后推广到基于值函数和策略函数的强化学习方法。本书强调从数学的角度引入概念、分析问题、分析算法。本书不要求读者具备任何关于强化学习的知识背景，仅要求读者具备一定的概率论和线性代数的知识。如果读者已经具备强化学习的学习基础，本书可以帮助读者更深入地理解一些问题并提供新的视角。&lt;/p&gt;
&lt;p&gt;本书面向对强化学习感兴趣的本科生、研究生、研究人员和企业或研究所的从业者。&lt;/p&gt;
&lt;p&gt;本教材的英文版已于2022年8月发布在GitHub上，供国内外读者免费下载阅读，其纸质版分别于2024年底和2025年初由清华大学出版社和施普林格自然出版社在国内外发行。自上线以来，本教材得到了许多关注，我也收到了不少反馈。其中有一些有意思的故事，借着这次机会，我想和大家分享一下。&lt;/p&gt;
&lt;p&gt;这个自序可能有点长，我想和大家分享的东西不少，大家可以把它当作学习之余的休闲。&lt;/p&gt;
&lt;h2 id="为什么要做这个教程"&gt;为什么要做这个教程？&lt;a class="anchor" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%81%e5%81%9a%e8%bf%99%e4%b8%aa%e6%95%99%e7%a8%8b"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;曾经有小伙伴在我的线上课程视频下留言，原文是：“您是怎么学得这么透彻的呢，学习路线是什么样子的呢？”我回复的原文是“这个问题有点意思：如果一开始就能顺利而透彻地学习，我又怎么会呕心沥血去做这样一个教程呢？强化学习有多难学透，局中人才了解。”&lt;/p&gt;
&lt;p&gt;我为什么要花大量时间来做这个教程呢？虽然国内外已经有很多关于强化学习的书籍和课程，但是我自己学习强化学习的过程是十分痛苦的。现有的教程大部分比较偏向直观，也有一些是比较偏向控制理论的。直观的解释往往难以令人透彻理解，而偏向控制理论的教程则需要专业背景。所以，我觉得现有教程中存在一个鸿沟。我想做一个新的教程，既能通过数学解释让读者“透彻理解”，又能通过创新体系架构和直观例子让读者“快速理解”。&lt;/p&gt;
&lt;p&gt;我做这个教程的另一个原因在于自己的学习习惯。多年的研究经历让我有了一个习惯：打破砂锅问到底。对于一个算法，许多人可能知道怎么用就行了，但是我必须知道为什么，否则心里没有安全感，所以会一直往下挖，等所有的来龙去脉都搞清楚了，我才会安心。因此，我在学习过程中积累了大量的笔记资料，后来就想把这些资料整理后分享出来。&lt;/p&gt;
&lt;p&gt;做这个教程的更深原因可能来源于早些年种在我内心中的一颗种子。虽然我是一名科研人员，但是一直觉得教学也能产生很大的影响力。为什么这么说呢？因为我自己就被深深地影响过！虽然我在本科期间上过线性代数的课程，但是在读博士时又自学了一遍，当时用的是MIT的Gilbert Strang教授的线性代数教材，我相信很多人都读过这本书。他在2023年退休了，当时网上还有一些讨论和感慨。他的书给我留下了很深的印象，感觉自己能够沉醉其中，并且在读的时候不禁感叹“太优美了”，有时候自己还能够会心一笑，我现在还清晰地记得当时读那本书会心一笑的场景。这个可能是种在我心里的一颗种子，希望有机会我也能写一本能帮助很多人的教材。如果你在读我的教程时也能够会心一笑，这将是我至高无上的荣幸。&lt;/p&gt;
&lt;h2 id="究竟花了多少时间"&gt;究竟花了多少时间？&lt;a class="anchor" href="#%e7%a9%b6%e7%ab%9f%e8%8a%b1%e4%ba%86%e5%a4%9a%e5%b0%91%e6%97%b6%e9%97%b4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果当初知道要花这么多时间，我可能就不会去做这个教程了。但是好在人生没有那么多“如果”，否则也不会有那么多惊喜了。&lt;/p&gt;
&lt;p&gt;我究竟花了多少时间来做这个教程呢？这个很难统计，不过我简单算了一下。这本教材约300页，所有内容都由我亲自开发，包括数学推导、例子设计、仿真绘图、语言组织等。如果平均一天工作八小时，那么能不能写出来一页呢？我想了想，答案是不能。本质原因是现在没有一本类似的教材可以供我参考，我需要从零开始去开发。例如，我需要首先从大量文献中把分散的内容挖掘出来，之后用合适的方式将这些内容有机地组织在一起，再配上严格的数学推导和直观的例子说明，最后一遍又一遍地不断优化结构和文字。这些事情耗费的时间是难以想象的。所以，大家现在看到的10小时的课程视频，是我花了几百倍的时间浓缩而成的作品。如果你觉得好，那一定是有原因的。我经常去参观一些博物馆，当看到一些好物件，例如瓷器或手工艺品时，我经常会感叹“好东西啊好东西”。很多东西一看就知道当初那个工匠在这上面花了很多时间和心血，我自己也一直比较推崇工匠精神。&lt;/p&gt;
&lt;p&gt;开发这个教程的过程中的酸甜苦辣，一般人是体会不了的。因为我还有很多其他事情要处理，中间有好几次想过放弃。不过随着投入的时间越来越多，后来想放弃也越来越困难，好在最后还是咬牙坚持下来了。值得庆幸的是，我经过多年的科研训练，学习能力还处于巅峰的状态，科技写作的经验也相对丰富，这些对我最终完成这个教程起到了重要的作用。有不少同学留言问我能不能做其他课程或者知识点的教学视频，虽然我很感谢大家的信任，但是我的统一回复都是：实在“肝”不动了。&lt;/p&gt;
&lt;h2 id="这么做值得吗"&gt;这么做值得吗？&lt;a class="anchor" href="#%e8%bf%99%e4%b9%88%e5%81%9a%e5%80%bc%e5%be%97%e5%90%97"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;对于一个大学老师来说，花费如此巨大的精力和时间值得吗？当很多同学和老师和我说我的教程给了他们很大帮助时，我觉得是值得的！&lt;/p&gt;
&lt;p&gt;截至 2025 年 3 月，教材在 GitHub 已经收获 7000+ 星，课程视频在 B 站等平台播放总和超过 130 万次，它也是中国大学 MOOC 上的第一个强化学习课程。此外，有很多热心读者在网上发布了他们学习我的课程的笔记，单单这些笔记就已经得到了很多关注。还有一些读者把我的教程里面所有的例子都自己动手编程复现了出来，也有读者录制了视频来重新解读我的课程，我都很受触动。这些笔记和代码等资料的链接我都已经放到了 GitHub 的主页上。&lt;/p&gt;
&lt;p&gt;我自己也收到了很多国内外邮件来信，其中一些给我留下了深刻的印象。例如，有一个在美国加州留学的中国学生给我写邮件，很坦诚地说他一般只看西方的教材和课程视频，因为他觉得西方的质量更高，但是他说我的课程是一个“反例”，给他带来了很大的帮助。这个同学给我留下了很深的印象，因为我觉得只要我们中国人愿意用心去做一件事情，那就一定能做好！此外，我也收到了一些国内外大学老师的来信，希望把我的教材或者课件用在他们的教学上，我一般都会非常开心地支持。&lt;/p&gt;
&lt;h2 id="该怎么学习强化学习"&gt;该怎么学习强化学习？&lt;a class="anchor" href="#%e8%af%a5%e6%80%8e%e4%b9%88%e5%ad%a6%e4%b9%a0%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0"&gt;#&lt;/a&gt;&lt;/h2&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;
&lt;p&gt;系统性：强化学习的系统性很强，许多概念一环扣一环。要想深入地理解强化学习，就要从最基础的概念出发，一点一滴地学习。这也是我建议大家放弃“速成”想法的一个重要原因。如果大家上来就学习Q-learning或者Actor-Critic的方法，连基本的概念都没有搞清楚，那么往往会一知半解。这个教程的一个新颖之处就是对现有方法的梳理：大家可以看书里的第一张图，这张图明确指出了不同方法之间的逻辑关系，也明确指出了应该先学什么、后学什么。&lt;/p&gt;
&lt;p&gt;在了解了这两个特点之后，我们对该如何学习也就很清楚了。大家可以回想一下自己之前是怎么学习高等数学的。我们从不奢望能够在短时间内“速成”高等数学，因为我们知道必须脚踏实地一步一步来。我们必须先学会什么是极限，才能知道什么是导数，之后才能学习怎么求积分。如果还没有学习导数就想求积分，即使把积分的公式记下来了，也不意味着能够很好地理解和应用。&lt;/p&gt;
&lt;p&gt;基础打得不牢，将来“楼”盖得越高，越会感觉乏力。一步一步地吃透强化学习中的数学原理看似是一个笨办法，实则是真正高效的捷径。&lt;/p&gt;
&lt;h2 id="这个教程适合你吗"&gt;这个教程适合你吗？&lt;a class="anchor" href="#%e8%bf%99%e4%b8%aa%e6%95%99%e7%a8%8b%e9%80%82%e5%90%88%e4%bd%a0%e5%90%97"&gt;#&lt;/a&gt;&lt;/h2&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;
&lt;p&gt;第三，本教程会涉及高等数学、线性代数、概率论中的一些基础知识，读者最好学过这些课程。如果没有学过，可以参考本教程附录中给出的基础知识。我在介绍的时候也会循序渐进、逐步深入、配以例子，所以大家不用太担心这门教程过于数学化。&lt;/p&gt;
&lt;p&gt;第四，本教程更适合那些希望深入了解强化学习的同学，特别是未来需要进行学术研究或创新的同学。如果你未来要以此为生，强化学习就是你的“饭碗”，那么这个碗饭你要端得很牢才可以。相反，如果你只是想浅浅地了解一些名词和概念，那么你可能会发现本教程的深度超出了你的预期。&lt;/p&gt;
&lt;p&gt;第五，本教程侧重于原理而不是编程。如果你对编程感兴趣，那么可以参考许多其他优秀的资料。如果你想了解强化学习的原理，那么这个教程就是合适的。&lt;/p&gt;
&lt;h2 id="四宫格集齐"&gt;“四宫格”集齐&lt;a class="anchor" href="#%e5%9b%9b%e5%ae%ab%e6%a0%bc%e9%9b%86%e9%bd%90"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;到目前为止，整套教程的“四宫格”已经集齐：中文版的教材；中文版的视频；英文版的教材；英文版的视频。详细信息请参见 &lt;a href="https://github.com/MathFoundationRL/BookMathematical-Foundation-of-Reinforcement-Learning"&gt;https://github.com/MathFoundationRL/BookMathematical-Foundation-of-Reinforcement-Learning&lt;/a&gt;，这是本教程在 GitHub 上的主页，大家也可以自行在网上搜索。&lt;/p&gt;
&lt;p&gt;最初的教材是英文的，这一方面是因为我的所有学习笔记都是英文的，另一方面是因为我想写一本能够让国内外读者都能阅读的教材。那为什么我又要把英文教材翻译成中文呢？主要还是应读者的呼吁，对于一个不熟悉的领域，直接用母语阅读确实会更方便。不过翻译成中文要花费太多的时间，好在随着大语言模型的出现，现在的翻译工作也变得相对容易了。不过目前大语言模型翻译的文稿还有很多问题，还是需要我花费大量时间一遍遍地优化修改。&lt;/p&gt;
&lt;p&gt;最初的课程视频是中文的，后来我把中文视频转成了英文。国内的读者可能不会太关注英文视频，因为大家可以看中文视频，不过我觉得这是很有意义的一件事情，因为我们中国人做的课程在国际上还是很少的。那怎么去做英文课程视频呢？重新录视频真的是太花时间了，因为要非常流畅清晰而且中间不能出错，想一遍录制下来其实是很难的，大家看到的我的视频一般是录制了很多遍后才得到的。因此，这次转成英文视频的时候，我们利用了一些最近兴起的AI工具，例如声音克隆等。不过现在AI工具的输出还有大量的错误和问题，也需要我做仔细的修改和校对。&lt;/p&gt;
&lt;h2 id="致谢"&gt;致谢&lt;a class="anchor" href="#%e8%87%b4%e8%b0%a2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我要感谢清华大学出版社的郭赛编辑对我中英文教材的大力支持。在教材翻译的过程中，我实验室的吕嘉玲、徐璐峰、季文康等同学做了许多琐碎但是重要的工作，在此表示感谢。最后，要感谢关注这本书、帮助我改进这本书的天南海北的小伙伴，你们的认真学习是对我时间和精力付出的最好回报。希望这个教程能够扎扎实实地帮助到大家，让更多的读者进入生机勃勃的强化学习领域。&lt;/p&gt;
&lt;p&gt;赵世钰&lt;/p&gt;
&lt;p&gt;2025年3月&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;
&lt;p&gt;◇ 第三，提供了大量例子，能够帮助读者更好地理解概念和算法。特别是本书广泛使用了网格世界的例子，这个例子非常直观，对理解概念和算法非常有帮助。&lt;/p&gt;
&lt;p&gt;第四，在介绍算法时尽可能将其核心思想与一些不太重要但是可能让算法看起来很复杂的东西分离开来。通过这种方式，读者可以更好地把握算法的核心思想。&lt;/p&gt;</description></item><item><title>符号说明</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/notations.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/notations.html</guid><description>&lt;h2 id="符号"&gt;符号&lt;a class="anchor" href="#%e7%ac%a6%e5%8f%b7"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在本书中，矩阵、随机变量通常由大写字母表示；向量、标量、样本值通常由小写字母表示。本书常用的数学符号如下所述。&lt;/p&gt;
&lt;p&gt;$= \quad$ 等于 $\approx$ 近似 $\doteq$ 定义 $\geqslant , &gt;, \leqslant , &lt;$ 向量或者矩阵元素间的比较 $\in$ 属于 $\| \cdot \|_2$ 向量的欧几里得范数或相应的诱导矩阵范数 $\| \cdot \|_\infty$ 向量的无穷范数或相应的诱导矩阵范数 $\ln$ 自然对数 $\mathbb{R}$ 实数集合 $\mathbb{R}^n$ 由所有 $n$ 维实数向量组成的集合 $\mathbb{R}^{n\times m}$ 由所有 $n\times m$ 维实数矩阵组成的集合 $A\succeq 0 (A\succ 0)$ 矩阵 $A$ 是半正定的（正定的） $A\succeq 0 (A\succ 0)$ 矩阵 $A$ 是半负定的（负定的） $|x|$ 实数 $x$ 的绝对值 $|S|$ 集合 $S$ 中元素的个数 $\nabla_x f(x)$ 标量函数 $f(x)$ 对向量 $x$ 的梯度，有时简写为 $\nabla f(x)$ $[A]_{ij}$ 矩阵 $A$ 中第 $i$ 行第 $j$ 列的元素 $[x]_i$ 向量 $x$ 的第 $i$ 个元素 $X\sim p$ 随机变量 $X$ 的概率分布是 $p$ $p(X = x),\Pr (X = x)$ $X = x$ 的概率，常简写为 $p(x)$ 或 $\Pr (x)$ $p(x|y)$ 条件概率 $\mathbb{E}_{X\sim p}[X]$ 随机变量 $X$ 的期望值；当 $X$ 的分布明确时，常简写为 $\mathbb{E}[X]$ $\operatorname{var}(X)$ 随机变量 $X$ 的方差 $\arg \max_xf(x)$ 使得 $f(x)$ 达到最大值的最优 $x$ $\mathbb{1}_n$ 元素全为1的向量；当其维数明确时，常简写为1 $I_{n}$ $n\times n$ 的单位矩阵；当其维数明确时，常简写为 $I$ &lt;!-- validate-skip --&gt;&lt;/p&gt;</description></item><item><title>第1章 · 基本概念</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch01.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch01.html</guid><description>&lt;h1 id="第1章--基本概念"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch01.html"&gt;第1章&lt;/a&gt; · 基本概念&lt;a class="anchor" href="#%e7%ac%ac1%e7%ab%a0--%e5%9f%ba%e6%9c%ac%e6%a6%82%e5%bf%b5"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;本章介绍强化学习中最基本的概念，这些概念将在本书中广泛使用。本章首先通过网格世界的例子引出这些概念，之后会在马尔可夫决策过程的框架中对它们进行更加正式的介绍。&lt;/p&gt;
&lt;h2 id="11-网格世界例子"&gt;1.1 网格世界例子&lt;a class="anchor" href="#11-%e7%bd%91%e6%a0%bc%e4%b8%96%e7%95%8c%e4%be%8b%e5%ad%90"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p class="caption"&gt;
 图1.2展示了一个网格世界（grid world）的例子。其中有一个智能体（agent）在网格中移动。在每个时刻，智能体只能占据一个单元格。白色单元格代表可以进入的区域，橙色单元格代表禁止进入的区域，蓝色单元格代表目标区域。智能体的任务是从一个初始区域出发，最终到达目标区域。这个网格世界的例子非常直观，能够很好地解释许多新概念、新算法，将在本书中广泛使用。
&lt;/p&gt;

&lt;p&gt;&lt;img src="images/5ad9bcfae860b185e43f388e1dba0812427de9454218adb720ee7912de197425.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 1.2 网格世界的示例。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;如果智能体知道网格世界的地图，那么规划一条能到达目标单元格的路径其实并不难。然而，如果智能体事先不知道有关环境的任何信息，这个任务就变得有挑战性了。此时智能体需要与环境交互，通过获取经验来找到一个好的策略。为了能够描述这样一个过程，我们需要学习一系列的基本概念。&lt;/p&gt;
&lt;h2 id="12-状态和动作"&gt;1.2 状态和动作&lt;a class="anchor" href="#12-%e7%8a%b6%e6%80%81%e5%92%8c%e5%8a%a8%e4%bd%9c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本书介绍的第一个概念是状态（state），它描述了智能体与环境的相对状况。具体到网格世界的例子中，状态对应了智能体所在单元格的位置。如图1.3(a)所示，这个网格有9个单元格，因此也对应了9个状态，它们被表示为 $s_{1}, s_{2}, \ldots, s_{9}$ 。所有状态的集合被称为状态空间（state space），表示为 $S = \{s_{1}, s_{2}, \ldots, s_{9}\}$ 。我们通常用花括号 {} 来表示一个集合。&lt;/p&gt;
&lt;p&gt;我们介绍的第二个概念是动作（action）。具体到网格世界的例子中，智能体在每一个状态有5个可选的动作：向上移动、向右移动、向下移动、向左移动、保持不动。这5个动作分别表示为 $a_1, a_2, \ldots, a_5$ （图1.3(b)）。所有动作的集合被称为动作空间（action space），表示为 $\mathcal{A} = \{a_1, a_2, \ldots, a_5\}$ 。&lt;/p&gt;
&lt;p&gt;值得注意的是，不同的状态可以有不同的动作空间。例如，我们可以设置状态 $s_1$ 的动作空间为 $\mathcal{A}(s_1) = \{a_2, a_3, a_5\}$ ，即可以把那些明显不合理的动作（即向上或向左移动）从动作空间中删除。不过在本书中，我们考虑最一般的情况，即所有的状态都对应5个动作。即使其中有我们认为不合理的动作，我们也并不人为避开，而是要通过算法学习到哪些动作好、哪些动作不好。此时，对任意状态 $s \in S$ ，有 $\mathcal{A}(s) = \mathcal{A} = \{a_1, a_2, \ldots, a_5\}$ 。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/abaaa48a0d0fe0e191810f63f0161af8fb0ed7e90f97e51f16caa3030af65805.webp" alt="" /&gt;

(a) 状态&lt;/p&gt;</description></item><item><title>第2章 · 状态值与贝尔曼方程</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch02.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch02.html</guid><description>&lt;h1 id="第2章--状态值与贝尔曼方程"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch02.html"&gt;第2章&lt;/a&gt; · 状态值与贝尔曼方程&lt;a class="anchor" href="#%e7%ac%ac2%e7%ab%a0--%e7%8a%b6%e6%80%81%e5%80%bc%e4%b8%8e%e8%b4%9d%e5%b0%94%e6%9b%bc%e6%96%b9%e7%a8%8b"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;img src="images/129d1f0dca2e92822353932fbbab309f4ed685ddbf45aa7aaace28b21e9bba6b.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 2.1 本章在全书中的位置。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;本章介绍一个核心概念和一个核心工具。抓住这两个核心就能很好地掌握本章的内容。这个核心概念是状态值，它很重要是因为它可以作为评价一个策略好坏的指标。既然状态值这么重要，那么我们怎么分析它呢？答案就是使用一个核心工具：贝尔曼方程。贝尔曼方程描述了所有状态值之间的关系：通过求解贝尔曼方程，我们就可以得到状态值，进而评价一个策略的好坏。&lt;/p&gt;
&lt;h2 id="21-启发示例1为什么回报很重要"&gt;2.1 启发示例1：为什么回报很重要？&lt;a class="anchor" href="#21-%e5%90%af%e5%8f%91%e7%a4%ba%e4%be%8b1%e4%b8%ba%e4%bb%80%e4%b9%88%e5%9b%9e%e6%8a%a5%e5%be%88%e9%87%8d%e8%a6%81"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;回报这个概念已经在&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch01.html"&gt;第1章&lt;/a&gt;介绍过了，它在强化学习中扮演着重要的角色，这是因为它可以用来评价一个策略的好坏。我们通过下面的例子来说明这一点。图2.2给出了三个策略：这三个策略在状态 $s_1$ 是不同的，在其他状态是相同的。那么这三个策略哪一个是最好的、哪一个是最差的呢？&lt;/p&gt;
&lt;p&gt;&lt;img src="images/bc51f72074d038205ffd7ae8e856c95ba9c46c76dfe01957cc55c3858dbb80b9.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图2.2 用于说明回报重要性的三个例子。这三个例子中的策略在 $s_1$ 中是不同的。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;这三个策略的好坏在直观上是很容易判断的：最左边的策略是最好的，因为从 $s_{1}$ 出发会避开禁止区域；中间的策略最差，因为从 $s_{1}$ 出发会进入禁止区域；最右边的策略相比前面两个既不好也不坏，因为它有0.5的概率避开禁止区域，也有0.5的概率进入禁止区域。&lt;/p&gt;
&lt;p&gt;上面的直观判断能否用数学来描述呢？答案是可以的，这就依赖于“回报”这个概念。具体来说，假设智能体的初始状态是 $s_1$ 。&lt;/p&gt;
&lt;p&gt;如果按照最左边的策略，得到的轨迹是 $s_{1} \rightarrow s_{3} \rightarrow s_{4} \rightarrow s_{4} \cdots$ ，相应的折扣回报是&lt;/p&gt;
$$
\begin{array}{r l} \mathrm{return} _{1} &amp; = 0 + \gamma 1 + \gamma^{2} 1 + \dots \\ &amp; = \gamma (1 + \gamma + \gamma^{2} + \dots) \\ &amp; = \frac{\gamma}{1 - \gamma}, \end{array}
$$&lt;p&gt;其中 $\gamma \in (0,1)$ 是折扣因子。&lt;/p&gt;</description></item><item><title>第3章 · 最优状态值与贝尔曼最优方程</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch03.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch03.html</guid><description>&lt;h1 id="第3章--最优状态值与贝尔曼最优方程"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch03.html"&gt;第3章&lt;/a&gt; · 最优状态值与贝尔曼最优方程&lt;a class="anchor" href="#%e7%ac%ac3%e7%ab%a0--%e6%9c%80%e4%bc%98%e7%8a%b6%e6%80%81%e5%80%bc%e4%b8%8e%e8%b4%9d%e5%b0%94%e6%9b%bc%e6%9c%80%e4%bc%98%e6%96%b9%e7%a8%8b"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;img src="images/27a255817df7ccbced7f11b7b3c45b2f166f2c90b28cfc2af68f2d7daa932819.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 3.1 本章在全书中的位置。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;强化学习的终极目标究竟是什么？在线下的授课中，我告诉我的学生：如果你听到了这个问题，你一定要能够非常快速地回答出来，强化学习的终极目标是寻找最优策略。因此，最优策略是强化学习中非常基础且重要的概念。&lt;/p&gt;
&lt;p&gt;本章将介绍一个核心概念和一个核心工具：这个核心概念是最优状态值，基于此，我们可以定义最优策略；这个核心工具是贝尔曼最优方程，基于此，我们可以求解最优状态值和最优策略。&lt;/p&gt;
&lt;p&gt;本章与前后两章关系密切：&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch02.html"&gt;第2章&lt;/a&gt;介绍了贝尔曼方程；本章将介绍的贝尔曼最优方程是一个特殊的贝尔曼方程；&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch03.html"&gt;第3章&lt;/a&gt;将介绍的”值迭代”算法就用于求解本章介绍的贝尔曼最优方程。因此，本章起到了承上启下的关键作用。&lt;/p&gt;
&lt;p&gt;本章的数学内容相比之前两章会稍微多一些，因此读者可能需要耐心地学习。即使多花一些时间也是非常值得的，因为这些数学内容能够非常清晰地解答许多基本问题，这对于透彻理解后面章节的内容至关重要。此外，这些数学内容以合理的方式呈现了出来，相信大家只要耐心学习，就不会觉得特别困难。&lt;/p&gt;
&lt;h2 id="31-启发示例如何改进策略"&gt;3.1 启发示例：如何改进策略？&lt;a class="anchor" href="#31-%e5%90%af%e5%8f%91%e7%a4%ba%e4%be%8b%e5%a6%82%e4%bd%95%e6%94%b9%e8%bf%9b%e7%ad%96%e7%95%a5"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;考虑图3.2中的例子，其中橙色和蓝色的单元格分别代表禁止区域和目标区域。图中的箭头代表一个给定的策略。这个策略从直观上来说不好，因为它在状态 $s_1$ 选择 $a_2$ （向右）会进入禁止区域。那么我们能否改进这个策略进而得到一个更好的策略呢？答案是可以的。下面通过一个例子来介绍改进策略的思路。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/1e214b6d128ce46deba028b969d5223eefc196e331f1a57e25d031ba8ed6c188.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 3.2 用于说明如何改进策略的一个例子。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;◇ 第一，直觉。直觉告诉我们：如果在 $s_{1}$ 选择 $a_{3}$ （向下）而不是 $a_{2}$ （向右），那么策略会更好，这是因为向下移动能够避免进入禁止区域。&lt;/p&gt;
&lt;p&gt;◇ 第二，数学。上面的直觉可以基于状态值和动作值的计算来得到验证。&lt;/p&gt;
&lt;p&gt;首先，计算给定策略的状态值。根据&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch02.html"&gt;第2章&lt;/a&gt;的内容，不难写出这一策略对应的贝尔&lt;/p&gt;
&lt;p&gt;曼方程为&lt;/p&gt;
$$
v_{\pi} (s_{1}) = - 1 + \gamma v_{\pi} (s_{2}),
$$$$
v_{\pi} (s_{2}) = + 1 + \gamma v_{\pi} (s_{4}),
$$$$
v_{\pi} (s_{3}) = + 1 + \gamma v_{\pi} (s_{4}),
$$$$
v_{\pi} (s_{4}) = + 1 + \gamma v_{\pi} (s_{4}).
$$&lt;p&gt;如果设 $\gamma = 0.9$ ，可以求出&lt;/p&gt;</description></item><item><title>第4章 · 值迭代与策略迭代</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch04.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch04.html</guid><description>&lt;h1 id="第4章--值迭代与策略迭代"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch04.html"&gt;第4章&lt;/a&gt; · 值迭代与策略迭代&lt;a class="anchor" href="#%e7%ac%ac4%e7%ab%a0--%e5%80%bc%e8%bf%ad%e4%bb%a3%e4%b8%8e%e7%ad%96%e7%95%a5%e8%bf%ad%e4%bb%a3"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;img src="images/148b2676456f15c87e9891c78073cd951b9cecf33b44a04b0189cf0ac9d7613b.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 4.1 本章在全书中的位置。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;本书的前三章都是在介绍基础工具。从本章开始，我们将介绍用于求解最优策略的算法。本章将介绍三个密切相关的方法。第一，值迭代（value iteration）算法。该算法实际上就是&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch03.html"&gt;第3章&lt;/a&gt;中压缩映射定理给出的求解贝尔曼最优方程的算法，其具体细节将在本章给出。第二，策略迭代（policy iteration）算法。该算法的基本思想在强化学习中有广泛应用。第三，截断策略迭代（truncated policy iteration）算法。值迭代和策略迭代是该算法的两个特殊情况，因此截断策略迭代更加一般化。&lt;/p&gt;
&lt;p&gt;本章介绍的算法需要事先知道系统模型，这些算法也被称为动态规划（dynamic programming）[10, 11]。从&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch05.html"&gt;第5章&lt;/a&gt;开始，我们将介绍无模型的算法。不过，读者需要先透彻理解需要模型的算法，才能理解无模型的算法。例如，如果读者理解了本章介绍的策略迭代算法，那么就可以很轻松地理解&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch05.html"&gt;第5章&lt;/a&gt;介绍的无需模型的蒙特卡罗方法。&lt;/p&gt;
&lt;h2 id="41-值迭代算法"&gt;4.1 值迭代算法&lt;a class="anchor" href="#41-%e5%80%bc%e8%bf%ad%e4%bb%a3%e7%ae%97%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;下面介绍全书第一个能够求解最优策略的算法——值迭代（value iteration）。该算法实际上是定理3.3中给出的用于求解贝尔曼最优方程的算法。不过，&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch03.html"&gt;第3章&lt;/a&gt;并没有过多介绍该算法，下面介绍其具体的实施细节。&lt;/p&gt;
&lt;p&gt;为了方便阅读，我们将该算法再次写出来：&lt;/p&gt;
$$
v_{k + 1} = \max_{\pi \in \Pi} (r_{\pi} + \gamma P_{\pi} v_{k}), \quad k = 0, 1, 2, \ldots
$$&lt;p&gt;定理3.3已经告诉我们，随着 $k$ 趋向无穷大， $v_{k}$ 和 $\pi_{k}$ 分别收敛于最优状态值和最优策略。&lt;/p&gt;
&lt;p&gt;该迭代算法的每次迭代包含两个步骤。&lt;/p&gt;
&lt;p&gt;◇ 第一步是策略更新（policy update）。在数学上，它旨在找到一个能解决以下优化问题的策略：&lt;/p&gt;
$$
\pi_{k + 1} = \arg \max_{\pi} (r_{\pi} + \gamma P_{\pi} v_{k}),
$$&lt;p&gt;其中 $v_{k}$ 是上一次迭代得到的值。&lt;/p&gt;
&lt;p&gt;◇ 第二步是值更新（value update）。在数学上，它通过下式来计算新的值 $v_{k+1}$ :&lt;/p&gt;</description></item><item><title>第5章 · 蒙特卡罗方法</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch05.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch05.html</guid><description>&lt;h1 id="第5章--蒙特卡罗方法"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch05.html"&gt;第5章&lt;/a&gt; · 蒙特卡罗方法&lt;a class="anchor" href="#%e7%ac%ac5%e7%ab%a0--%e8%92%99%e7%89%b9%e5%8d%a1%e7%bd%97%e6%96%b9%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="51-启发示例期望值估计"&gt;5.1 启发示例：期望值估计&lt;a class="anchor" href="#51-%e5%90%af%e5%8f%91%e7%a4%ba%e4%be%8b%e6%9c%9f%e6%9c%9b%e5%80%bc%e4%bc%b0%e8%ae%a1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;接下来我们将通过例子来展示如何利用蒙特卡罗（Monte Carlo，MC）方法来解决一个期望值估计问题。蒙特卡罗方法是使用随机样本解决估计问题的一种通用方法。读者可能会问我们为什么要关心“期望值估计”这个问题，这是因为状态值和动作值的定义都是期望值，所以估计状态值或动作值实际上是期望值估计问题。通过本节，我们将知道如何使用“数据而非模型”来估计期望值。&lt;/p&gt;
&lt;p&gt;考虑一个随机变量 $X$ ，它可以在一个有限的实数集合内取值，令该集合为 $\mathcal{X}$ 。我们的目标是计算 $X$ 的期望值 $\mathbb{E}[X]$ ，有两种计算 $\mathbb{E}[X]$ 的方法。&lt;/p&gt;
&lt;p&gt;◇ 第一种方法是基于模型的。这里的模型指的是 X 的概率分布。如果模型已知，那么期望值可以根据其定义直接计算得到：&lt;/p&gt;
$$
\mathbb{E} [ X ] = \sum_{x \in \mathcal{X}} p (x) x.
$$&lt;p&gt;第二种方法是无模型的。当 $X$ 的概率分布（即模型）未知时，如果我们有一些 $X$ 的样本 $\{x_{1}, x_{2}, \ldots, x_{n}\}$ ，那么这些样本可以被用于估计期望值：&lt;/p&gt;
$$
\mathbb{E} [ X ] \approx \bar{x} = \frac{1}{n} \sum_{j = 1} ^{n} x_{j}.
$$&lt;p&gt;当 $n$ 很小时，这种近似可能不够准确。然而，随着 $n$ 的增大，近似会变得越来越准确。当 $n \to \infty$ 时，我们有 $\bar{x} \to \mathbb{E}[X]$ 。这实际上就是大数定律（Law of large numbers），详情参见方框5.1。&lt;/p&gt;</description></item><item><title>第6章 · 随机近似算法</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch06.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch06.html</guid><description>&lt;h1 id="第6章--随机近似算法"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch06.html"&gt;第6章&lt;/a&gt; · 随机近似算法&lt;a class="anchor" href="#%e7%ac%ac6%e7%ab%a0--%e9%9a%8f%e6%9c%ba%e8%bf%91%e4%bc%bc%e7%ae%97%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;上一章介绍了基于蒙特卡罗的无需模型的强化学习算法，&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch07.html"&gt;第7章&lt;/a&gt;将介绍另一种无需模型的强化学习算法——时序差分。然而，在开始介绍下一章的内容之前，我们需要按下暂停键，先学习本章关于随机近似算法的内容。为什么要这么做呢？我们到目前为止学习的算法都是非增量式的（non-incremental）。然而，时序差分算法是增量式的（incremental），它与我们之前学习过的算法看起来非常不同。许多读者在第一次看到时序差分算法时会有很多问题，例如这些算法为什么设计成这个样子、它们为什么能有效工作等。为了让大家能更容易地理解时序差分算法，我们在本章先来介绍随机近似算法。时序差分算法可以被视为特殊的随机近似算法；经典的随机梯度下降也是特殊的随机近似算法。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/662a353d99c8f5fb00d032e57515105cdf6565ffc5065aa2fc48fff8a00a110d.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 6.1 本章在全书中的位置。
&lt;/p&gt;
&lt;/p&gt;
&lt;h2 id="61-启发示例期望值估计"&gt;6.1 启发示例：期望值估计&lt;a class="anchor" href="#61-%e5%90%af%e5%8f%91%e7%a4%ba%e4%be%8b%e6%9c%9f%e6%9c%9b%e5%80%bc%e4%bc%b0%e8%ae%a1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;期望值估计问题已经在上一章讨论过一次。下面我们从另一个角度再次研究这个问题，并且介绍如何用“增量式”的方法解决这个问题。&lt;/p&gt;
&lt;p&gt;考虑一个随机变量 $X$ ，它取值于有限集 $\mathcal{X}$ 。我们的目标是估计期望值 $\mathbb{E}[X]$ 。假设有一个独立同分布的样本序列 $\{x_i\}_{i=1}^n$ 。那么 $X$ 的期望值可以通过这些样本的平均值来近似：&lt;/p&gt;
$$
\mathbb{E} [ X ] \approx \bar{x} \doteq \frac{1}{n} \sum_{i = 1} ^{n} x_{i}.\tag{6.1}
$$&lt;p&gt;式(6.1)就是蒙特卡罗估计的基本思想，并且大数定律告诉我们，当 $n\to\infty$ 时， $\bar{x}\to E[X]$ 。这些已经在&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch05.html"&gt;第5章&lt;/a&gt;介绍过了。&lt;/p&gt;
&lt;p&gt;有两种方法可以计算平均值 $\bar{x}$ 。第一种是非增量式的（non-incremental）：首先收集所有样本，然后计算平均值。这种方法的缺点是如果样本数量很大，可能需要等待很久才能把所有样本收集完毕。第二种是增量式的（incremental）。具体来说，令&lt;/p&gt;
$$
w_{k + 1} \doteq \frac{1}{k} \sum_{i = 1} ^{k} x_{i}, \quad k = 1, 2, \dots
$$&lt;p&gt;类似地&lt;/p&gt;
$$
w_{k} = \frac{1}{k - 1} \sum_{i = 1} ^{k - 1} x_{i}, \quad k = 2, 3, \dots
$$&lt;p&gt;实际上， $w_{k + 1}$ 可以用 $w_{k}$ 表示：&lt;/p&gt;</description></item><item><title>第7章 · 时序差分方法</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch07.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch07.html</guid><description>&lt;h1 id="第7章--时序差分方法"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch07.html"&gt;第7章&lt;/a&gt; · 时序差分方法&lt;a class="anchor" href="#%e7%ac%ac7%e7%ab%a0--%e6%97%b6%e5%ba%8f%e5%b7%ae%e5%88%86%e6%96%b9%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;在&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch05.html"&gt;第5章&lt;/a&gt;，我们介绍了全书第一类无需模型的强化学习算法：蒙特卡罗（Monte Carlo，MC）。在本章，我们将介绍全书第二类无需模型的强化学习算法：时序差分（temporal difference, TD）。与MC算法相比，TD算法最大的不同在于它是增量式的。许多读者第一次看到TD算法时会有很多疑惑，例如这些算法为什么设计成这个样子。不过在学习了&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch06.html"&gt;第6章&lt;/a&gt;的随机近似算法后，相信读者能更加轻松地掌握TD算法，这是因为TD算法本质上是求解贝尔曼方程或者贝尔曼最优方程的随机近似算法。&lt;/p&gt;
&lt;p&gt;由于本章将介绍多种TD算法，为了帮助读者更好地学习，我们首先梳理这些算法之间的关系。&lt;/p&gt;
&lt;p&gt;◇ 第7.1节介绍最基本也是最核心的TD算法。该算法可以估计一个给定策略的状态值。掌握这个算法对于学习后面的TD算法是非常有必要的。&lt;/p&gt;
&lt;p&gt;◇ 第7.2节介绍Sarsa算法。该算法可以估计给定策略的动作值。实际上，将第7.1节的TD算法中的状态值替换为动作值，就可以得到Sarsa算法。&lt;/p&gt;
&lt;p&gt;◇ 第7.3节介绍 n-Step Sarsa 算法，这是Sarsa算法的一种推广。我们将会看到Sarsa算法和MC算法是n-Step Sarsa算法的两个特殊情况。&lt;/p&gt;
&lt;p&gt;第7.4节介绍Q-learning算法，这是经典的强化学习算法之一。Q-learning算法和Sarsa算法的区别在于：Sarsa算法是在求解一个给定策略的贝尔曼方程，而Q-learning算法是直接求解贝尔曼最优方程。&lt;/p&gt;
&lt;p&gt;◇ 第7.5节总结本章介绍的所有TD算法，并提供一个统一的描述框架。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/7e8b866caa7e90966b0674ff03ede234cbcc2bcb8d9ced568c60e0456b473c71.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 7.1 本章在全书中的位置。
&lt;/p&gt;
&lt;/p&gt;
&lt;h2 id="71-状态值估计最基础的时序差分算法"&gt;7.1 状态值估计：最基础的时序差分算法&lt;a class="anchor" href="#71-%e7%8a%b6%e6%80%81%e5%80%bc%e4%bc%b0%e8%ae%a1%e6%9c%80%e5%9f%ba%e7%a1%80%e7%9a%84%e6%97%b6%e5%ba%8f%e5%b7%ae%e5%88%86%e7%ae%97%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本节将介绍最基础的TD算法，它可以估计一个给定策略的状态值。后面的章节会进一步推广这个TD算法从而得到更复杂的算法，因此本节的内容非常重要。&lt;/p&gt;
&lt;h3 id="711-算法描述"&gt;7.1.1 算法描述&lt;a class="anchor" href="#711-%e7%ae%97%e6%b3%95%e6%8f%8f%e8%bf%b0"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;给定一个策略 $\pi$ ，我们的目标是估计所有 $s\in S$ 的状态值 $v_{\pi}(s)$ 。假设我们有一些由 $\pi$ 生成的经验样本 $(s_0,r_1,s_1,\ldots ,s_t,r_{t + 1},s_{t + 1},\ldots)$ ，其中 $t = 0,1,2,\ldots$ 表示采样时刻。下面的TD算法可以使用这些样本来估计状态值：&lt;/p&gt;
$$
v_{t + 1} (s_{t}) = v_{t} (s_{t}) - \alpha_{t} (s_{t}) \Big [ v_{t} (s_{t}) - \big (r_{t + 1} + \gamma v_{t} (s_{t + 1}) \big) \Big ],\tag{7.1}
$$$$
v_{t + 1} (s) = v_{t} (s), \quad \text{当} s \neq s_{t},\tag{7.2}
$$&lt;p&gt;其中 $v_{t}(s_{t})$ 是在 $t$ 时刻对 $v_{\pi}(s_t)$ 的估计， $\alpha_{t}(s_{t})$ 是在 $t$ 时刻对于状态 $s_t$ 的学习率（learning rate）。&lt;/p&gt;</description></item><item><title>第8章 · 值函数方法</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch08.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch08.html</guid><description>&lt;h1 id="第8章--值函数方法"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch08.html"&gt;第8章&lt;/a&gt; · 值函数方法&lt;a class="anchor" href="#%e7%ac%ac8%e7%ab%a0--%e5%80%bc%e5%87%bd%e6%95%b0%e6%96%b9%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;值函数方法&lt;/p&gt;
&lt;p&gt;&lt;img src="images/c47a554e9e45be5252254eb544c0d86eaddb66109b4b81acc832d3481344a26b.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 8.1 本章在全书中的位置。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;本章将继续介绍时序差分方法，不过我们将使用不同的方法来表示状态值/动作值。到目前为止，本书中所有的状态值/动作值都是通过表格来表示的。虽然表格形式易于理解，但是在处理大型状态空间或动作空间时效率不高。本章将用函数来表示状态值/动作值，这种方法已经成为目前强化学习的主流方法。由于人工神经网络是很好的函数近似器，因此这也是人工神经网络进入强化学习的原因。本章将用函数来表示值，下一章将用函数来表示策略。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/b70c2f7527c373c8a2fc7e5482773e01c94742e2a75460df25e7d9f67519f2dd.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 8.2 用函数来描述状态值的示意图。横轴和纵轴分别对应 s 和 $\hat{v}(s)$ 。
&lt;/p&gt;
&lt;/p&gt;
&lt;h2 id="81-价值表示从表格到函数"&gt;8.1 价值表示：从表格到函数&lt;a class="anchor" href="#81-%e4%bb%b7%e5%80%bc%e8%a1%a8%e7%a4%ba%e4%bb%8e%e8%a1%a8%e6%a0%bc%e5%88%b0%e5%87%bd%e6%95%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;下面通过一个例子来说明表格和函数方法的区别。
假设有 $n$ 个状态 $\{s_i\}_{i=1}^n$ 。对于一个给定的策略 $\pi$ ，其状态值为 $\{v_\pi(s_i)\}_{i=1}^n$ 。设 $\{\hat{v}(s_i)\}_{i=1}^n$ 为状态值的估计值。
如果使用表格法，则估计值可以通过如下表格表示。这个表格可以以数组或者向量的形式存储在内存中。如果要检索或更新一个状态值，我们可以直接读取或重写表格中的相应元素。&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;td&gt;状态&lt;/td&gt;&lt;td&gt; $s_1$ &lt;/td&gt;&lt;td&gt; $s_2$ &lt;/td&gt;&lt;td&gt; $\cdots$ &lt;/td&gt;&lt;td&gt; $s_n$ &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;估计的状态值&lt;/td&gt;&lt;td&gt; $\hat{v}(s_1)$ &lt;/td&gt;&lt;td&gt; $\hat{v}(s_2)$ &lt;/td&gt;&lt;td&gt; $\cdots$ &lt;/td&gt;&lt;td&gt; $\hat{v}(s_n)$ &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;如果使用函数法，注意到 $\{(s_i, \hat{v}(s_i))\}_{i=1}^n$ 是一组点（图8.2），这些点可以通过一条曲线来拟合或近似。最简单的曲线是一条直线，可以描述为&lt;/p&gt;
$$
\hat{v} (s, w) = a s + b = \underbrace{[ s , 1 ]} _{\phi^{\mathrm{T}} (s)} \underbrace{\left[ \begin{array}{l} a \\ b \end{array} \right]} _{w} = \phi^{\mathrm{T}} (s) w.\tag{8.1}
$$&lt;p&gt;其中 $\hat{v}(s,w)$ 是用来近似 $v_{\pi}(s)$ 的函数，它由状态 $s$ 和参数向量 $w\in \mathbb{R}^2$ 共同决定。 $\hat{v} (s,w)$&lt;/p&gt;</description></item><item><title>第9章 · 策略梯度方法</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch09.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch09.html</guid><description>&lt;h1 id="第9章--策略梯度方法"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch09.html"&gt;第9章&lt;/a&gt; · 策略梯度方法&lt;a class="anchor" href="#%e7%ac%ac9%e7%ab%a0--%e7%ad%96%e7%95%a5%e6%a2%af%e5%ba%a6%e6%96%b9%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;img src="images/282d9295d0c19737cd13601453f2aa8c69e500c1203e7edda07c37453808f37c.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图 9.1 本章在全书中的位置。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;上一章介绍了用函数表示值的方法，本章将介绍用函数表示策略的方法。当用函数表示策略时，我们可以选择一个目标函数，进而优化该目标函数以得到最优策略。这种方法被称为策略梯度（policy gradient）。策略梯度方法是基于策略的（policy-based），而本书之前的所有章节介绍的方法都是基于值的（value-based）。这两者有什么区别呢？其本质区别在于基于策略的方法是直接优化关于策略参数的目标函数，从而得到最优策略；而基于值的方法是通过先估计值再得到最优策略的。具体的区别大家学完本章就会清楚了。&lt;/p&gt;
&lt;h2 id="91-策略表示从表格到函数"&gt;9.1 策略表示：从表格到函数&lt;a class="anchor" href="#91-%e7%ad%96%e7%95%a5%e8%a1%a8%e7%a4%ba%e4%bb%8e%e8%a1%a8%e6%a0%bc%e5%88%b0%e5%87%bd%e6%95%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在本书之前的章节中，策略都是用表格来表示的：所有状态的动作概率都存储在一个表格中，参见表9.1。实际上，策略也可以用函数来表示，记为 $\pi (a|s,\theta)$ ，其中 $\theta \in \mathbb{R}^m$ 是参数向量。该策略函数也可以写成其他形式，如 $\pi_{\theta}(a|s)$ 、 $\pi_{\theta}(a,s)$ 、 $\pi (a,s,\theta)$ 。&lt;/p&gt;
&lt;p&gt;表 9.1 用表格来表示策略。&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;
&lt;p&gt;当用表格描述策略时，可以通过直接改变表格中的元素来直接更新选择某些动作的概率。当用函数描述策略时，不能再以这种方式更新策略，而只能通过改变函数参数 $\theta$ 来间接更新选择某些动作的概率。&lt;/p&gt;
&lt;p&gt;◇ 第三，查看动作概率的方式不同。&lt;/p&gt;
&lt;p&gt;当用表格描述策略时，可以通过查看表格中相应的元素直接获得某个动作的概率。当用函数描述策略时，我们需要将 $(s, a)$ 输入到函数中，通过计算函数值来获得其&lt;/p&gt;
&lt;p&gt;(b)&lt;/p&gt;
&lt;p&gt;概率（见图9.2(a)）。当然，函数的结构可能多种多样。例如，我们也可以输入一个状态，然后输出所有动作的概率（见图9.2(b)）。&lt;/p&gt;
&lt;p&gt;&lt;img src="images/952d29dc1fc96f44eb4a00dab17c816d18243a416649c108b79822edfe01f911.webp" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img src="images/30e2bc34561c9b44ec737be40fc13b4da260ae38a13623f31120f44ce987a182.webp" alt="" /&gt;

&lt;p class="caption"&gt;
 图9.2 用函数来表示策略。这些函数可能有不同的结构。
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;由于上面的几点不同，使用函数表示策略具有诸多优势，例如它在处理大型状态-动作空间时更加高效，也具有更强的泛化能力。其原因与用函数表示值是类似的，这里不再赘述。&lt;/p&gt;
&lt;p&gt;当用函数表示策略时，我们的任务是最大化一个标量目标函数 $J(\theta)$ ，其中 $\theta$ 代表策略函数的参数。不同参数对应不同的目标函数值，因此我们需要找到最优的参数从而优化该目标函数。最简单的优化方法是梯度上升：&lt;/p&gt;
$$
\theta_{t + 1} = \theta_{t} + \alpha \nabla_{\theta} J (\theta_{t}),
$$&lt;p&gt;其中 $\nabla_{\theta}J$ 是 $J$ 相对于 $\theta$ 的梯度， $\alpha &gt; 0$ 是步长。&lt;/p&gt;</description></item><item><title>第10章 · 演员-评论家方法</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/ch10.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/ch10.html</guid><description>&lt;h1 id="第10章--演员-评论家方法"&gt;&lt;a href="https://uynajgi.github.io/yuulibrary/books/rl-math/ch10.html"&gt;第10章&lt;/a&gt; · 演员-评论家方法&lt;a class="anchor" href="#%e7%ac%ac10%e7%ab%a0--%e6%bc%94%e5%91%98-%e8%af%84%e8%ae%ba%e5%ae%b6%e6%96%b9%e6%b3%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="101-最简单的演员-评论家算法qac"&gt;10.1 最简单的演员-评论家算法：QAC&lt;a class="anchor" href="#101-%e6%9c%80%e7%ae%80%e5%8d%95%e7%9a%84%e6%bc%94%e5%91%98-%e8%af%84%e8%ae%ba%e5%ae%b6%e7%ae%97%e6%b3%95qac"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本节将介绍最简单的 Actor-Critic 算法。我们可以通过推广式(9.32)中的策略梯度算法很容易地得到该算法。&lt;/p&gt;
&lt;p&gt;首先，让我们回想一下。策略梯度方法的基本思想是通过最大化一个目标函数 $J(\theta)$ 来得到最优策略。用于最大化 $J(\theta)$ 的梯度上升算法是&lt;/p&gt;
$$
\begin{array}{r l} \theta_{t + 1} &amp; = \theta_{t} + \alpha \nabla_{\theta} J (\theta_{t}) \\ &amp; = \theta_{t} + \alpha \mathbb{E} _{S \sim \eta , A \sim \pi} \Big [ \nabla_{\theta} \ln \pi (A | S, \theta_{t}) q_{\pi} (S, A) \Big ], \end{array}\tag{10.1}
$$&lt;p&gt;其中 $\eta$ 是状态的分布（更多信息可参见定理9.1）。由于真实的梯度是无法得到的，我们可以使用随机梯度来近似：&lt;/p&gt;
$$
\theta_{t + 1} = \theta_{t} + \alpha \nabla_{\theta} \ln \pi (a_{t} | s_{t}, \theta_{t}) q_{t} (s_{t}, a_{t}).\tag{10.2}
$$&lt;p&gt;这就是上一章式(9.32)中给出的算法。&lt;/p&gt;</description></item><item><title>附录</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/appendix.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/appendix.html</guid><description>&lt;h1 id="附录"&gt;附录&lt;a class="anchor" href="#%e9%99%84%e5%bd%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="-随机变量random-variable"&gt;◇ 随机变量（random variable）&lt;a class="anchor" href="#-%e9%9a%8f%e6%9c%ba%e5%8f%98%e9%87%8frandom-variable"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;顾名思义，“变量”表示它可以从一个数值集合中取值，“随机”表示其取值必须服从一个概率分布。&lt;/p&gt;
&lt;p&gt;随机变量通常用大写字母表示，而一个具体样本值通常用小写字母表示。例如，X 是一个随机变量，x 是 X 的一个具体样本值。随机变量可以是标量，也可以是向量。与普通变量一样，随机变量可以进行数学运算，例如求和、乘积、绝对值等。如果 X、Y 是两个随机变量，我们可以计算 $X + Y$ 、 $X + 1$ 、XY 等。&lt;/p&gt;
&lt;h2 id="-随机序列stochastic-sequence"&gt;◇ 随机序列（stochastic sequence）&lt;a class="anchor" href="#-%e9%9a%8f%e6%9c%ba%e5%ba%8f%e5%88%97stochastic-sequence"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们可能经常遇到对一个随机变量 X 采样得到的随机序列 $\{x_{i}\}_{i=1}^{n}$ 。例如，如果投掷一枚骰子 n 次，设 $x_{i}$ 为第 i 次投掷获得的值，那么 $\{x_{1}, x_{2}, \ldots, x_{n}\}$ 是一个随机序列或者随机过程，其中 $x_{i}$ 被认为也是一个随机变量。&lt;/p&gt;
&lt;p&gt;初学者可能会感到困惑： $x_{i}$ 只是随机变量的一个具体的样本值，为什么这里认为它是一个随机变量？实际上，如果样本序列已经确定下来了，例如是 $\{1,6,3,5,\ldots\}$ ，那么这个序列不是一个随机序列，因为所有样本值都已经确定了。然而，如果我们使用变量 $x_{i}$ 来代表样本值，那么它是一个随机变量，这是因为它的取值服从了一个概率分布。这里虽然 $x_{i}$ 是小写字母，但它仍然代表一个随机变量。&lt;/p&gt;
&lt;h2 id="-概率probability"&gt;◇ 概率（probability）&lt;a class="anchor" href="#-%e6%a6%82%e7%8e%87probability"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;符号 $p(X = x)$ 或 $p_X(x)$ 描述了随机变量 $X$ 取值 $x$ 的概率。当上下文明确时， $p(X = x)$ 通常简写为 $p(x)$ 。&lt;/p&gt;
&lt;h2 id="-联合概率joint-probability"&gt;◇ 联合概率（joint probability）&lt;a class="anchor" href="#-%e8%81%94%e5%90%88%e6%a6%82%e7%8e%87joint-probability"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;符号 $p(X = x, Y = y)$ 或 $p(x, y)$ 描述了随机变量 $X$ 取值 $x$ 并且 $Y$ 取值 $y$ 的概率。一个有用的公式为&lt;/p&gt;</description></item><item><title>索引</title><link>https://uynajgi.github.io/yuulibrary/books/rl-math/index_term.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://uynajgi.github.io/yuulibrary/books/rl-math/index_term.html</guid><description>&lt;h2 id="索引"&gt;索引&lt;a class="anchor" href="#%e7%b4%a2%e5%bc%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;$\epsilon$ -Greedy策略，88 $n$ -StepSarsa算法，135&lt;/p&gt;
&lt;p&gt;Dvoretzky 定理, 107&lt;/p&gt;
&lt;p&gt;Expected Sarsa 算法, 134&lt;/p&gt;
&lt;p&gt;Off-policy 演员-评论家算法, 217
伪代码, 222
策略梯度定理, 220
重要性采样, 217&lt;/p&gt;
&lt;p&gt;Off-policy 策略梯度定理, 220&lt;/p&gt;
&lt;p&gt;Q-learning算法（基于值函数），177伪代码，177深度Q-learning,178&lt;/p&gt;
&lt;p&gt;Q-learning算法（基于表格），137伪代码，140示例，141异策略，138&lt;/p&gt;
&lt;p&gt;QAC算法, 213&lt;/p&gt;
&lt;p&gt;REINFORCE算法, 206&lt;/p&gt;
&lt;p&gt;Sarsa算法（基于值函数），176
伪代码，176
Sarsa算法（基于表格），130
n-Step Sarsa算法，135
Expected Sarsa算法，134
伪代码，132
同策略，139
学习最优策略，132
收敛性分析，132&lt;/p&gt;
&lt;p&gt;不动点, 41
优势演员-评论家算法, 213
伪代码, 216
基准不变性, 213
时序差分误差, 216
最优基准函数, 214&lt;/p&gt;</description></item></channel></rss>