fix ch1 typos

This commit is contained in:
qiwang067
2021-01-27 15:23:11 +08:00
parent f9a96c6da3
commit 0ba05af2d7
10 changed files with 30 additions and 38 deletions

View File

@@ -35,18 +35,16 @@
比如现在是在第三步,你把这个序列放进去,你希望这个网络可以输出一个决策,在当前的这个状态应该输出往右移或者往左移。这里有个问题:我们没有标签来说明你现在这个动作是正确还是错误,必须等到游戏结束才可能说明,这个游戏可能十秒过后才结束。现在这个动作到底对最后游戏结束能赢是否有帮助,其实是不清楚的。这里就面临`延迟奖励(Delayed Reward)`,所以就使得训练这个网络非常困难。
![](img/1.5.png)
**我们对比下强化学习和监督学习。**
* 首先强化学习输入的序列数据不是像监督学习里面这些样本都是独立的。
* 另外一点是学习器并没有被告诉你每一步正确的行为应该是什么。学习器需要自己去发现哪些行为可以使得它最后得到这个奖励,只能通过不停地尝试来发现最有利的动作。
* 这里还有一点是 agent 获得自己能力的过程中,其实是通过不断地试错探索(trial-and-error exploration)。
* 强化学习输入的序列数据,而不是像监督学习里面这些样本都是独立的。
* 学习器并没有被告诉你每一步正确的行为应该是什么。学习器需要自己去发现哪些行为可以得到最多的奖励,只能通过不停地尝试来发现最有利的动作。
* Agent 获得自己能力的过程中,其实是通过不断地试错探索(trial-and-error exploration)。
* 探索(exploration)和利用(exploitation)是强化学习里面非常核心的一个问题。
* 探索是说你会去尝试一些新的行为,这些新的行为有可能会使你得到更高的奖励,也有可能使你一无所有。
* 利用就是就采取你已知的可以获得最大奖励的行为,你就重复执行这个动作就可以了,因为你已经知道可以获得一定的奖励。
* 探索你会去尝试一些新的行为,这些新的行为有可能会使你得到更高的奖励,也有可能使你一无所有。
* 利用采取你已知的可以获得最大奖励的行为,你就重复执行这个动作就可以了,因为你已经知道可以获得一定的奖励。
* 因此,我们需要在探索和利用之间取得一个权衡,这也是在监督学习里面没有的情况。
* 在强化学习过程中,没有非常强的监督者(supervisor),只有一个`奖励信号(reward signal)`就是环境会在很久以后告诉你之前你采取的行为到底是不是有效的。Agent 在这个强化学习里面学习的话就非常困难,因为你没有得到即时反馈。当你采取一个行为过后,如果是监督学习,你就立刻可以获得一个指引,就说你现在做出了一个错误的决定,那么正确的决定应该是谁。而在强化学习里面,环境可能会告诉你这个行为是错误的,但是它并没有告诉你正确的行为是什么。而且更困难的是,它可能是在一两分钟过后告诉你错误,它再告诉你之前的行为到底行不行。所以这也是强化学习和监督学习不同的地方。
* 在强化学习过程中,没有非常强的监督者(supervisor),只有一个`奖励信号(reward signal)`并且这个奖励信号是延迟的,就是环境会在很久以后告诉你之前你采取的行为到底是不是有效的。Agent 在这个强化学习里面学习的话就非常困难,因为你没有得到即时反馈。当你采取一个行为过后,如果是监督学习,你就立刻可以获得一个指引,就说你现在做出了一个错误的决定,那么正确的决定应该是谁。而在强化学习里面,环境可能会告诉你这个行为是错误的,但是它并没有告诉你正确的行为是什么。而且更困难的是,它可能是在一两分钟过后告诉你错误,它再告诉你之前的行为到底行不行。所以这也是强化学习和监督学习不同的地方。
通过跟监督学习比较,我们可以总结出强化学习的一些特征。
@@ -55,20 +53,14 @@
* 在强化学习的训练过程中,时间非常重要。因为你得到的数据都是有时间关联的(sequential data),而不是独立同分布的。在机器学习中,如果观测数据有非常强的关联,其实会使得这个训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量是独立同分布,这样就可以消除数据之间的相关性。
* Agent 的行为会影响它随后得到的数据,这一点是非常重要的。在我们训练 agent 的过程中,很多时候我们也是通过正在学习的这个 agent 去跟环境交互来得到数据。所以如果在训练过程中,这个 agent 的模型很快死掉了,那会使得我们采集到的数据是非常糟糕的,这样整个训练过程就失败了。所以在强化学习里面一个非常重要的问题就是怎么让这个 agent 的行为一直稳定地提升。
![](img/1.7.png)
为什么我们关注强化学习,其中非常重要的一点就是强化学习得到的模型可以有超人类的表现。
为什么我们关注强化学习,其中非常重要的一点就是强化学习得到的这个模型可以取得超人类的结果
* 监督学习获取的这些监督数据,其实是让人来标注的。比如说 ImageNet 的图片都是人类标注的。那么我们就可以确定这个算法的上限(upper bound),人类的这个标注结果决定了它永远不可能超越人类。
* 但是对于强化学习,它在环境里面自己探索,有非常大的潜力,它可以获得超越人的能力的这个表现,比如说 AlphaGo谷歌 DeepMind 的 AlphaGo 这样一个强化学习的算法可以把人类最强的棋手都打败。
![](img/1.8.png)
* 监督学习获取的这些监督数据,其实是让人来标注的。比如说 ImageNet 的图片都是人类标注的。那么我们就可以确定这个算法的上限(upper bound)就是人类的表现,人类的这个标注结果决定了它永远不可能超越人类
* 但是对于强化学习,它在环境里面自己探索,有非常大的潜力,它可以获得超越人的能力的这个表现,比如谷歌 DeepMind 的 AlphaGo 这样一个强化学习的算法可以把人类最强的棋手都打败。
这里给大家举一些在现实生活中强化学习的例子。
* 国际象棋是一个强化学习的过程,因为这个棋手就是在做出一个选择来跟对方对战。
* 在自然界中,羚羊其实也是在做一个强化学习,它刚刚出生的时候,可能都不知道怎么站立,然后它通过试错的一个尝试,三十分钟过后,它就可以跑到每小时 36 公里,很快地适应了这个环境。
* 你也可以把股票交易看成一个强化学习的问题,就怎么去买卖来使你的收益极大化。
* 玩雅达利游戏或者一些电脑游戏,也是一个强化学习的过程。
@@ -100,7 +92,7 @@
* 一场游戏叫做一个 `episode(回合)` 或者 `trial(试验)`
![](img/1.14.png)
强化学习是有一定的历史的,只是最近大家把强化学习跟深度学习结合起来,就形成了`深度强化学习(Deep Reinforcemet Learning)`。这里做一个类比,把它类比于这个传统的计算机视觉以及深度计算机视觉。
强化学习是有一定的历史的,只是最近大家把强化学习跟深度学习结合起来,就形成了`深度强化学习(Deep Reinforcemet Learning)`深度强化学习 = 深度学习 + 强化学习。这里做一个类比,把它类比于这个传统的计算机视觉以及深度计算机视觉。
* 传统的计算机视觉由两个过程组成。
* 你给一张图,我们先要提取它的特征,用一些设计好的特征(feature),比如说 HOG、DPM。
@@ -111,8 +103,8 @@
我们可以把神经网络放到强化学习里面。
* 之前的强化学习,比如 TD-Gammon 玩 backgammon 这个游戏,它其实是设计特征,然后通过训练价值函数的一个过程,就是它先设计了很多手工的特征,这个手工特征可以描述现在整个状态。得到这些特征过后,它就可以通过训练一个分类网络或者分别训练一个价值估计函数来做出决策。
* 现在我们有了深度学习,有了神经网络,那么大家也把这个过程改进成一个端到端训练(end-to-end training)的过程。你直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出动作。那么就可以用一个神经网络来拟合我们这里的价值函数或策略网络,省去了特征工程(feature engineering)的过程。
* Standard RL之前的强化学习,比如 TD-Gammon 玩 backgammon 这个游戏,它其实是设计特征,然后通过训练价值函数的一个过程,就是它先设计了很多手工的特征,这个手工特征可以描述现在整个状态。得到这些特征过后,它就可以通过训练一个分类网络或者分别训练一个价值估计函数来做出决策。
* Deep RL现在我们有了深度学习,有了神经网络,那么大家也把这个过程改进成一个端到端训练(end-to-end training)的过程。你直接输入这个状态,我们不需要去手工地设计这个特征,就可以让它直接输出动作。那么就可以用一个神经网络来拟合我们这里的价值函数或策略网络,省去了特征工程(feature engineering)的过程。
![](img/1.16.png)
@@ -120,7 +112,7 @@
这有如下几点原因:
* 我们有了更多的计算能力,有了更多的 GPU可以更快地做更多的试错的尝试。
* 我们有了更多的计算能力(computation power),有了更多的 GPU可以更快地做更多的试错的尝试。
* 通过这种不同尝试使得 agent 在这个环境里面获得很多信息,然后可以在这个环境里面取得很大的奖励。
* 我们有了这个端到端的一个训练,可以把特征提取和价值估计或者决策一块来优化,这样就可以得到了一个更强的决策网络。
@@ -145,12 +137,11 @@
### Reward
![](img/1.19.png)
**奖励是由环境给的一个反馈信号**,这个信号指定了这个 agent 在某一步采取了某个策略是否得到奖励。强化学习的目的就是为了最大化 agent 可以获得的奖励agent 在这个环境里面存在的目的就是为了极大它的期望积累的奖励。
**奖励是由环境给的一个标量的反馈信号(scalar feedback signal)**,这个信号显示了 agent 在某一步采取了某个策略的表现如何。
![](img/1.20.png)
强化学习的目的就是为了最大化 agent 可以获得的奖励agent 在这个环境里面存在的目的就是为了极大化它的期望的累积奖励(expected cumulative reward)。
这里给大家举一些奖励的例子。不同的环境,奖励也是不同的。
不同的环境,奖励也是不同的。这里给大家举一些奖励的例子
* 比如说一个下象棋的选手,他的目的其实就为了赢棋。奖励是说在最后棋局结束的时候,他知道会得到一个正奖励或者负奖励。
* 羚羊站立也是一个强化学习过程,它得到的奖励就是它是否可以最后跟它妈妈一块离开或者它被吃掉。
@@ -165,8 +156,8 @@
这里一个示意图就是我们玩这个 Atari 的 Pong 游戏,你可能只有到最后游戏结束过后,才知道这个球到底有没有击打过去。中间你采取的 up 或 down 行为,并不会直接产生奖励。强化学习里面一个重要的课题就是近期奖励和远期奖励的一个权衡(trade-off)。怎么让 agent 取得更多的长期奖励是强化学习的问题。
![](img/1.22.png)
在跟环境的交互过程中agent 会获得很多观测。在每一个观测会采取一个动作,它也会得到一个奖励。**所以历史是观测、行为、奖励的序列:**
在跟环境的交互过程中agent 会获得很多观测。在每一个观测会采取一个动作,它也会得到一个奖励。**所以历史是观测(observation)、行为、奖励的序列:**
$$
H_{t}=O_{1}, R_{1}, A_{1}, \ldots, A_{t-1}, O_{t}, R_{t}
$$
@@ -201,8 +192,7 @@ POMDP 可以用一个 7 元组描述:$(S,A,T,R,\Omega,O,\gamma)$,其中 $S$
## Major Components of an RL Agent
![](img/1.25.png)
对于一个强化学习 agent它有如下组成成分
对于一个强化学习 agent它可能有一个或多个如下的组成成分
* 首先 agent 有一个 `策略函数(policy function)`agent 会用这个函数来选取下一步的动作。
@@ -212,14 +202,14 @@ POMDP 可以用一个 7 元组描述:$(S,A,T,R,\Omega,O,\gamma)$,其中 $S$
### Policy
![](img/1.26.png)
我们深入看这三个组成成分的一些细节。
Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的状态变成行为。这里有两种 policy
Policy 是 agent 的行为模型,它决定了这个 agent 的行为,它其实是一个函数,把输入的状态变成行为。这里有两种 policy
* 一种是 `stochastic policy(随机性策略)`,它就是 $\pi$ 函数 $\pi(a | s)=P\left[A_{t}=a | S_{t}=s\right]$ 。当你输入一个状态 $s$ 的时候,输出是一个概率。这个概率就是你所有行为的一个概率,然后你可以进一步对这个概率分布进行采样,得到真实的你采取的行为。比如说这个概率可能是有 70% 的概率往左30% 的概率往右,那么你通过采样就可以得到一个 action。
* 一种是 `deterministic policy(确定性策略)`,就是说你这里有可能只是采取它的极大化,采取最有可能的动作,即 $a^{*}=\arg \underset{a}{\max} \pi(a \mid s)$。 你现在这个概率就是事先决定好的。
* 一种是 `deterministic policy(确定性策略)`,就是说你这里有可能只是采取它的极大化,采取最有可能的动作。你现在这个概率就是事先决定好的。
![](img/1.26.png)
从 Atari 游戏来看的话,策略函数的输入就是游戏的一帧,它的输出决定你是往左走或者是往右走。
@@ -274,11 +264,14 @@ Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的
## Types of RL Agents
![](img/1.33.png)
**根据强化学习 agent 的不同,我们可以把 agent 进行归类。**
**根据 agent 学习的东西不同,我们可以把 agent 进行归类。**
* `基于价值的 agent(value-based agent)`这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。策略是从我们学到的价值函数里面推算出来的。
* `基于策略的 agent(policy-based agent)`。这一类 agent 直接去学习 policy就是说你直接给它一个状态它就会输出这个动作的概率。在基于策略的 agent 里面并没有去学习它的价值函数
* `基于价值的 agent(value-based agent)`
* 这一类 agent 显式地学习的是价值函数
* 隐式地学习了它的策略。策略是从我们学到的价值函数里面推算出来的。
* `基于策略的 agent(policy-based agent)`
* 这一类 agent 直接去学习 policy就是说你直接给它一个状态它就会输出这个动作的概率。
* 在基于策略的 agent 里面并没有去学习它的价值函数。
* 把 value-based 和 policy-based 结合起来就有了 `Actor-Critic agent`。这一类 agent 把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。
Q: 基于策略迭代和基于价值迭代的强化学习方法有什么区别?
@@ -363,8 +356,7 @@ Learning 和 Planning 是序列决策的两个基本问题。
因为在刚开始的时候强化学习 agent 不知道它采取了某个行为会发生什么,所以它只能通过试错去探索。所以探索就是在试错来理解采取的这个行为到底可不可以得到好的奖励。利用是说我们直接采取已知的可以得到很好奖励的行为。所以这里就面临一个权衡,怎么通过牺牲一些短期的奖励来获得行为的理解。
![](img/1.38.png)
这里我给大家举一些例子来说明探索和利用的定义。
下面举一些探索和利用的例子。
* 以选择餐馆为例,
* 利用:我们直接去你最喜欢的餐馆,因为你去过这个餐馆很多次了,所以你知道这里面的菜都非常可口。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 KiB

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 565 KiB

After

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 829 KiB

After

Width:  |  Height:  |  Size: 721 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 672 KiB

After

Width:  |  Height:  |  Size: 580 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 876 KiB

After

Width:  |  Height:  |  Size: 724 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 KiB

After

Width:  |  Height:  |  Size: 442 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 KiB

After

Width:  |  Height:  |  Size: 178 KiB