Compare commits
10 Commits
dcee5b5105
...
9c99315ed4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c99315ed4 | ||
|
|
0cbe50a813 | ||
|
|
a3da4be5b3 | ||
|
|
2debe15dc8 | ||
|
|
f958882ec1 | ||
|
|
dec972fc3a | ||
|
|
80de123f00 | ||
|
|
c685e5b276 | ||
|
|
9782af53f5 | ||
|
|
fc65fc9b45 |
@@ -1,4 +1,4 @@
|
||||
[](https://github.com/datawhalechina/easy-rl/issues) [](https://github.com/datawhalechina/easy-rl/stargazers) [](https://github.com/datawhalechina/easy-rl/network) [](https://hits.seeyoufarm.com) 
|
||||
[](https://github.com/datawhalechina/easy-rl/issues) [](https://github.com/datawhalechina/easy-rl/stargazers) [](https://github.com/datawhalechina/easy-rl/network) 
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知识共享许可协议" style="border-width:0" src="https://img.shields.io/badge/license-CC%20BY--NC--SA%204.0-lightgrey" /></a>
|
||||
|
||||
|
||||
@@ -8,6 +8,31 @@
|
||||
|
||||
本教程也称为“蘑菇书”,寓意是希望此书能够为读者注入活力,让读者“吃”下这本蘑菇之后,能够饶有兴致地探索强化学习,像马里奥那样愈加强大,继而在人工智能领域觅得意外的收获。
|
||||
|
||||
## 贡献者
|
||||
|
||||
<table border="0">
|
||||
<tbody>
|
||||
<tr align="center" >
|
||||
<td>
|
||||
<a href="https://github.com/qiwang067"><img width="70" height="70" src="https://github.com/qiwang067.png?s=40" alt="pic"></a><br>
|
||||
<a href="https://github.com/qiwang067">Qi Wang</a>
|
||||
<p>教程设计(第1~12章)<br> 上海交通大学博士生<br> 中国科学院大学硕士</p>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://github.com/yyysjz1997"><img width="70" height="70" src="https://github.com/yyysjz1997.png?s=40" alt="pic"></a><br>
|
||||
<a href="https://github.com/yyysjz1997">Yiyuan Yang</a>
|
||||
<p>习题设计&第13章 <br> 牛津大学博士生<br> 清华大学硕士</p>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://github.com/JohnJim0816"><img width="70" height="70" src="https://github.com/JohnJim0816.png?s=40" alt="pic"></a><br>
|
||||
<a href="https://github.com/JohnJim0816">John Jim</a>
|
||||
<p>算法实战<br> 北京大学硕士</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
## 使用说明
|
||||
|
||||
* 第 4 章到第 11 章为[李宏毅《深度强化学习》](http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html)的部分;
|
||||
@@ -39,7 +64,8 @@
|
||||
|
||||
豆瓣评分:https://book.douban.com/subject/35781275/
|
||||
|
||||
ℹ️ **勘误修订表**:https://datawhalechina.github.io/easy-rl/#/errata
|
||||
> [!IMPORTANT]
|
||||
**勘误修订表**:https://datawhalechina.github.io/easy-rl/#/errata
|
||||
|
||||
## 在线阅读(内容实时更新)
|
||||
|
||||
@@ -49,7 +75,7 @@
|
||||
|
||||
地址:https://github.com/datawhalechina/easy-rl/releases
|
||||
|
||||
国内地址(推荐国内读者使用):链接: https://pan.baidu.com/s/1isqQnpVRWbb3yh83Vs0kbw 提取码: us6a
|
||||
国内地址:链接: https://pan.baidu.com/s/1isqQnpVRWbb3yh83Vs0kbw 提取码: us6a
|
||||
|
||||
压缩版(推荐网速较差的读者使用,文件小,图片分辨率较低):链接: https://pan.baidu.com/s/1mUECyMKDZp-z4-CGjFhdAw 提取码: tzds
|
||||
|
||||
@@ -102,29 +128,6 @@ PDF版本是全书初稿,人民邮电出版社的编辑老师们对初稿进
|
||||
* [蘑菇书开源组队学习活动](https://www.bilibili.com/video/BV1Ha41197Pg/?spm_id_from=333.999.0.0&vd_source=642fa389e9e78cff4881c038963ac312)
|
||||
* [蘑菇书开源学习与成长](https://www.bilibili.com/video/BV1xW4y1B72o/?spm_id_from=333.999.0.0&vd_source=642fa389e9e78cff4881c038963ac312)
|
||||
|
||||
## 贡献者
|
||||
|
||||
<table border="0">
|
||||
<tbody>
|
||||
<tr align="center" >
|
||||
<td>
|
||||
<a href="https://github.com/qiwang067"><img width="70" height="70" src="https://github.com/qiwang067.png?s=40" alt="pic"></a><br>
|
||||
<a href="https://github.com/qiwang067">Qi Wang</a>
|
||||
<p>教程设计(第1~12章)<br> 上海交通大学博士生<br> 中国科学院大学硕士</p>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://github.com/yyysjz1997"><img width="70" height="70" src="https://github.com/yyysjz1997.png?s=40" alt="pic"></a><br>
|
||||
<a href="https://github.com/yyysjz1997">Yiyuan Yang</a>
|
||||
<p>习题设计&第13章 <br> 牛津大学博士生<br> 清华大学硕士</p>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://github.com/JohnJim0816"><img width="70" height="70" src="https://github.com/JohnJim0816.png?s=40" alt="pic"></a><br>
|
||||
<a href="https://github.com/JohnJim0816">John Jim</a>
|
||||
<p>算法实战<br> 北京大学硕士</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## 引用信息
|
||||
|
||||
@@ -168,7 +171,7 @@ url = {https://github.com/datawhalechina/easy-rl}
|
||||
[](https://github.com/datawhalechina/easy-rl/network/members)
|
||||
|
||||
## 关注我们
|
||||
扫描下方二维码关注公众号:Datawhale,回复关键词“Easy-RL读者交流群”,即可加入“Easy-RL读者交流群”
|
||||
扫描下方二维码关注公众号:Datawhale,回复关键词“Easy-RL”,即可加入“Easy-RL读者交流群”
|
||||
<div align=center><img src="https://raw.githubusercontent.com/datawhalechina/easy-rl/master/docs/res/qrcode.jpeg" width = "250" height = "270" alt="Datawhale是一个专注AI领域的开源组织,以“for the learner,和学习者一起成长”为愿景,构建对学习者最有价值的开源学习社区。关注我们,一起学习成长。"></div>
|
||||
|
||||
## LICENSE
|
||||
|
||||
@@ -30,16 +30,16 @@
|
||||
<img width="550" src="../img/ch11/11.4.png"/>
|
||||
</div>
|
||||
<div align=center>图 11.3 数据集聚合</div>
|
||||
|
||||
|
||||
行为克隆还有一个问题:智能体会完全模仿专家的行为,不管专家的行为是否有道理,就算没有道理,没有什么用,就算这是专家本身的习惯,智能体也会把它记下来。如果智能体确实可以记住所有专家的行为,也许还好。因为如果专家这么做,有些行为是多余的。但是没有问题,假设智能体的行为可以完全仿造专家行为,也就算了,它就是与专家一样得好,只是做一些多余的事。但问题是智能体是一个网络,网络的容量是有限的。就算给网络训练数据,它在训练数据上得到的正确率往往也不是 100\%,它有些事情是学不起来的。这个时候,什么该学,什么不该学就变得很重要。
|
||||
|
||||
例如,如图 11.4 所示,在学习中文的时候,老师有语音、行为和知识,但其实只有语音部分是重要的,知识部分是不重要的。也许智能体只能学一件事,如果它只学到了语音,没有问题。如果它只学到了手势,这样就有问题了。所以让智能体学习什么东西是需要模仿的、什么东西是不需要模仿的,这件事情是很重要的。而单纯的行为克隆没有学习这件事情,因为智能体只是复制专家所有的行为而已,它不知道哪些行为是重要的,是对接下来有影响的,哪些行为是不重要的、是对接下来没有影响的。
|
||||
例如,如图 11.4 所示,在学习中文的时候,老师有语音和手势,但只有语音部分是重要的,手势部分是不重要的。也许智能体只能学一件事,如果它只学到了语音,没有问题。如果它只学到了手势,这样就有问题了。所以让智能体学习什么东西是需要模仿的、什么东西是不需要模仿的,这件事情是很重要的。而单纯的行为克隆没有学习这件事情,因为智能体只是复制专家所有的行为而已,它不知道哪些行为是重要的,是对接下来有影响的,哪些行为是不重要的、是对接下来没有影响的。
|
||||
|
||||
<div align=center>
|
||||
<img width="550" src="../img/ch11/11.5.png"/>
|
||||
</div>
|
||||
<div align=center>图 11.4 智能体学习中文</div>
|
||||
|
||||
|
||||
|
||||
行为克隆的问题还在于:我们使用行为克隆的时候,训练数据与测试数据是不匹配的。我们可以用数据集聚合的方法来缓解这个问题。在训练与测试的时候,数据分布是不一样的。因为在强化学习中,动作会影响到接下来的状态。我们先有状态$s_1$,然后采取动作$a_1$,$a_1$ 会决定接下来的状态$s_2$。所以在强化学习里有一个很重要的特征,就是我们采取的动作会影响我们接下来的状态,也就是会影响状态的分布。如果有行为克隆,我们只能观察到专家$\hat{\theta}$的一些状态-动作对$(s,a)$。
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<img width="550" src="../img/ch11/11.7a.png"/>
|
||||
</div>
|
||||
<div align=center>图 11.5 强化学习的学习过程</div>
|
||||
|
||||
|
||||
|
||||
|
||||
但逆强化学习刚好是相反的,如图 11.6 所示,它没有奖励函数,只有一些专家的示范,但还是有环境的。逆强化学习假设现在有一些专家的示范,用 $\hat{\tau}$ 来代表专家的示范。如果是在玩电玩,每一个 $\tau$ 就是一个很会玩电玩的人玩一场游戏的记录。如果是自动驾驶汽车,就是人开自动驾驶汽车的记录。这些就是专家的示范,每一个 $\tau$ 是一个轨迹。
|
||||
@@ -67,7 +67,7 @@
|
||||
<img width="550" src="../img/ch11/11.7b.png"/>
|
||||
</div>
|
||||
<div align=center>图 11.6 逆强化学习的学习过程</div>
|
||||
|
||||
|
||||
|
||||
|
||||
把所有专家的示范收集起来,再使用逆强化学习这一技术。使用逆强化学习技术的时候,智能体是可以与环境交互的。但它得不到奖励,它的奖励必须从专家那里推出来。有了环境和专家的示范以后,可以反推出奖励函数。强化学习是由奖励函数反推出什么样的动作、演员是最好的。逆强化学习则反过来,我们有专家的示范,我们相信它是不错的,我就反推,专家是因为什么样的奖励函数才会采取这些行为。有了奖励函数以后,接下来,我们就可以使用一般的强化学习的方法去找出最优演员。所以逆强化学习是先找出奖励函数,找出奖励函数以后,再用强化学习找出最优演员。
|
||||
@@ -81,7 +81,7 @@
|
||||
怎么让专家得到的奖励大过演员呢?如图 11.7 所示,我们在学习的时候,奖励函数也许就是神经网络。神经网络的输入 为$\tau$,输出就是应该要给 $\tau$ 的分数。或者假设我们觉得输入整个 $\tau$ 太难了,因为 $\tau$ 是 $s$ 和 $a$ 的一个很长的序列。也许就向它输入一个 $s$ 和 $a$ 的对,它会输出一个实数。把整个 $\tau$ 会得到的实数加起来就得到 $R(\tau)$。在训练的时候,对于 $\left\{\hat{\tau}_{1}, \hat{\tau}_{2}, \cdots, \hat{\tau}_{N}\right\}$,我们希望它输出的 $R$ 值越大越好。对于 $\left\{\tau_{1}, \tau_{2}, \cdots, \tau_{N}\right\}$,我们就希望 $R$ 值越小越好。
|
||||
|
||||
什么可以被称为一个最好的奖励函数呢?最后我们学习出来的奖励函数应该是专家和演员在这个奖励函数上都会得到一样高的分数。最终的奖励函数无法分辨出谁应该会得到比较高的分数。通常在训练的时候,我们会迭代地去做。最早的逆强化学习对奖励函数有些限制,它是假设奖励函数是线性的(linear) 。如果奖励函数是线性,我们可以证明这个算法会收敛(converge)。但是如果奖励函数不是线性的,我们就无法证明它会收敛。
|
||||
|
||||
|
||||
其实我们只要把逆强化学习中的演员看成生成器,把奖励函数看成判别器,它就是 生成对抗网络。所以逆强化学习会不会收敛就等于 生成对抗网络 会不会收敛。如果我们已经实现过,就会知道逆强化学习不一定会收敛。但除非我们对 $R$ 执行一个非常严格的限制,否则如果 $R$ 是一个一般的网络,我们就会有很大的麻烦。
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
<img width="550" src="../img/ch11/11.8.png"/>
|
||||
</div>
|
||||
<div align=center>图 11.7 逆强化学习的框架</div>
|
||||
|
||||
|
||||
|
||||
|
||||
我们可以把逆强化学习与 生成对抗网络 详细地比较一下。如图 11.8 所示,在生成对抗网络 里面,我们有一系列很好的图、一个生成器和一个判别器。一开始,生成器不知道要产生什么样的图,它就会乱画。判别器的工作就是给画的图打分,专家画的图得高分,生成器画的图得低分。生成器会想办法去骗过判别器,生成器希望判别器也给它画的图打高分。整个过程与逆强化学习是一模一样的。专家画的图就是专家的示范。生成器就是 演员,生成器画很多图,演员与环境交互,产生很多轨迹。演员与环境交互的记录其实就等价于 生成对抗网络 里面的这些图。然后我们学习一个奖励函数。奖励函数就是判别器。奖励函数要给专家的示范打高分,给演员交互的结果打低分。接下来,演员会想办法,从已经学习出的奖励函数中得到高分,然后迭代地循环。
|
||||
@@ -98,7 +98,7 @@
|
||||
<img width="550" src="../img/ch11/11.9.png"/>
|
||||
</div>
|
||||
<div align=center>图 11.8 生成对抗网络与逆强化学习的区别</div>
|
||||
|
||||
|
||||
|
||||
|
||||
逆强化学习有很多的应用,比如可以用于自动驾驶汽车,有人用这个技术来学开自动驾驶汽车的不同风格。每个人在开车的时候会有不同风格,例如,能不能压到线、能不能倒退、要不要遵守交通规则等。每个人的风格是不同的,用逆强化学习可以让自动驾驶汽车学会各种不同的开车风格。
|
||||
@@ -111,7 +111,7 @@
|
||||
<img width="550" src="../img/ch11/11.11.png"/>
|
||||
</div>
|
||||
<div align=center>图 11.9 自动驾驶汽车停车例子</div>
|
||||
|
||||
|
||||
|
||||
我们也可以用逆强化学习训练机器人,我们可以让机器人做一些我们人类想要它做的动作。过去,如果我们要训练机器人,让它做我们想要它做的动作,其实是比较麻烦的。例如,如果我们要操控机械臂,就需要花很多精力编写程序,这样才能让机械臂做一件很简单的事情。有了逆强化学习技术,我们自身可以做示范,机器人就通过示范来学习。比如,让机器人学会摆盘子,拉着机器人的手臂去摆盘子,机器自己动。再如,让机器人学会倒水,人只教它 20 次,杯子每次放的位置不太一样。
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
<img width="550" src="../img/ch11/11.13.png"/>
|
||||
</div>
|
||||
<div align=center>图 11.10 第三人称视角模仿学习例子</div>
|
||||
|
||||
|
||||
|
||||
|
||||
这怎么做呢?第三人称视角模仿学习技术其实不只用到了模仿学习,它还用到了**领域对抗训练(domain-adversarial training)**。领域对抗训练也是一种 生成对抗网络 的技术。如图 11.11 所示,我们希望有一个特征提取器,有两幅不同领域(domain)的图像,通过特征提取器以后,无法分辨出图像来自哪一个领域。第一人称视角和第三人称视角模仿学习用的技术是一样的,希望学习一个特征提取器,智能体在第三人称的时候与它在第一人称的时候的视角其实是一样的,就是把最重要的东西抽出来就好了。
|
||||
|
||||
@@ -765,7 +765,7 @@ $$
|
||||
|
||||
价值迭代算法的过程如下。
|
||||
|
||||
(1)初始化:令 $k=1$,对于所有状态 $s$,$V_0(s)=0$。
|
||||
(1)初始化:令 $k=0$,对于所有状态 $s$,$V_0(s)=0$。
|
||||
|
||||
(2)对于 $k=1:H$($H$是让$V(s)$收敛所需的迭代次数)
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
**如何使用勘误?首先找到你的书的印次,接下来对着下表索引印次,该印次之后所有的勘误都是你的书中所要注意的勘误,印次前的所有勘误在当印次和之后印次均已印刷修正。为方便读者,所有修订内容都列举在此。其中部分修订是为了更便于读者理解,并非原文有误。**
|
||||
|
||||
## 第1版第15次印刷(2025.03)
|
||||
* 62页,第一段第2行:令 $k=1$ → 令 $k=0$
|
||||
|
||||
## 第1版第14次印刷(2025.02)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user