fix ch1 typos

This commit is contained in:
qiwang067
2020-09-06 10:38:16 +08:00
parent 52cf9b5548
commit f49a1f863e

View File

@@ -3,7 +3,7 @@
## Reinforcement Learning
![](img/1.1.png)
强化学习讨论的问题是一个 agent 怎么在一个复杂不确定的环境里面去极大化它能获得的这个奖励。示意图由两部分组成agent 和 environment。在强化学习过程中agent 跟 environment 一直在交互。Agent 在环境里面获取到状态agent 会利用这个状态输出一个 action一个决策。然后这个决策会放到环境之中去环境会通过这个 agent 采取的决策输出下一个状态以及当前的这个决策得到的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。
强化学习讨论的问题是一个 agent 怎么在一个复杂不确定的环境里面去极大化它能获得的奖励。示意图由两部分组成agent 和 environment。在强化学习过程中agent 跟 environment 一直在交互。Agent 在环境里面获取到状态agent 会利用这个状态输出一个 action一个决策。然后这个决策会放到环境之中去环境会通过这个 agent 采取的决策输出下一个状态以及当前的这个决策得到的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。
![](img/1.2.png)
@@ -16,7 +16,7 @@
在强化学习里面,这两点其实都不满足。举一个 Atari Breakout 游戏的例子,这是一个打砖块的游戏,控制木板,然后把这个球反弹到上面来消除这些砖块。
* 在游戏过程中,大家可以发现这个 agent,这个 learner 得到的观测不是个 i.i.d 的分布,上一帧下一帧其实有非常强的这个连续性。
* 在游戏过程中,大家可以发现这个 agent 得到的观测不是个 i.i.d 的分布,上一帧下一帧其实有非常强的连续性。
* 另外一点,在玩游戏的过程中,你并没有立刻获得这个反馈。比如你现在把这个木板往右移,那么只会使得这个球往上或者往左上去一点,你并不会得到立刻的反馈。所以强化学习这么困难的原因是没有得到很好的反馈,然后你依然希望这个 agent 在这个环境里面学习。
![](img/1.4.png)
@@ -32,7 +32,7 @@
* 首先强化学习输入的序列的数据并不是像 supervised learning 里面这些样本都是独立的。
* 另外一点是 learner 并没有被告诉你每一步正确的行为应该是什么。Learner 不得不自己去发现哪些行为可以使得它最后得到这个奖励,只能通过不停地尝试来发现最有利的 action。
* 这里还有一点是 agent 获得自己能力的过程中,其实是通过不断地试错(trial-and-error exploration)。Exploration 和 exploitation 是强化学习里面非常核心的一个问题。Exploration 是说你会去尝试一些新的行为这些新的行为有可能会使你得到更高的奖励也有可能使你一无所有。Exploitation 说的是你就是就采取你已知的可以获得最大奖励的行为,你就重复执行这个 action 就可以了,因为你已经知道可以获得一定的奖励。因此,我们需要在 exploration 和 exploitation 之间取得一个权衡,这也是在这个监督学习里面没有的情况。
* 这里还有一点是 agent 获得自己能力的过程中,其实是通过不断地试错(trial-and-error exploration)。Exploration 和 exploitation 是强化学习里面非常核心的一个问题。Exploration 是说你会去尝试一些新的行为这些新的行为有可能会使你得到更高的奖励也有可能使你一无所有。Exploitation 说的是你就是就采取你已知的可以获得最大奖励的行为,你就重复执行这个 action 就可以了,因为你已经知道可以获得一定的奖励。因此,我们需要在 exploration 和 exploitation 之间取得一个权衡,这也是在监督学习里面没有的情况。
* 在强化学习过程中,没有非常强的 supervisor只有一个`奖励信号(reward signal)`就是环境会在很久以后告诉你之前你采取的行为到底是不是有效的。Agent 在这个强化学习里面学习的话就非常困难,因为你没有得到即时反馈。当你采取一个行为过后,如果是监督学习,你就立刻可以获得一个指引,就说你现在做出了一个错误的决定,那么正确的决定应该是谁。而在强化学习里面,环境可能会告诉你这个行为是错误的,但是它并没有告诉你正确的行为是什么。而且更困难的是,它可能是在一两分钟过后告诉你错误,它再告诉你之前的行为到底行不行。所以这也是强化学习和监督学习不同的地方。
@@ -111,7 +111,7 @@
### Agent and Environment
![](img/1.18.png)
接下来我们讲`序列决策(Sequential Decision Making)过程`。强化学习研究的问题是 agent 跟环境交互,上图左边画的是一个 agentagent 一直在跟环境进行交互。这个 agent 把它输出的动作给环境,然后环境取得这个动作过后,会进行到下一步,然后会把下一步的观测跟它上一步是否得到奖励返还给 agent。通过这样的交互过程,然后会产生很多观测agent 就是为了从这些观测之中学到能极大化奖励的策略。
接下来我们讲`序列决策(Sequential Decision Making)过程`。强化学习研究的问题是 agent 跟环境交互,上图左边画的是一个 agentagent 一直在跟环境进行交互。这个 agent 把它输出的动作给环境,环境取得这个动作过后,会进行到下一步,然后会把下一步的观测跟它上一步是否得到奖励返还给 agent。通过这样的交互过程会产生很多观测agent 就是为了从这些观测之中学到能极大化奖励的策略。
### Reward
@@ -169,7 +169,7 @@ POMDP 可以用一个 7 元组描述:$(S,A,T,R,\Omega,O,\gamma)$,其中 $S$
* 然后它也可能生成一个`价值函数(value function)`。我们用价值函数来对当前状态进行估价,它就是说你进入现在这个状态,可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。
* 另外一个组成成分是模型(model)。模型表示了 agent 对这个环境的状态进行了理解,它决定了这个世界是如何进行的。
* 另外一个组成成分是`模型(model)`。模型表示了 agent 对这个环境的状态进行了理解,它决定了这个世界是如何进行的。
### Policy
@@ -192,15 +192,17 @@ Policy 就是决定了这个 agent 的行为,它其实是一个函数,把输
### Value Function
![](img/1.27.png)
**价值函数是一个折扣的未来奖励的加和**,就是你通过进行某一种行为,然后你未来得到多大的奖励。这个价值函数里面其实有一个 discount factor。我们希望尽可能在短的时间里面得到尽可能多的奖励。如果我们说十天过后我给你100块钱跟我现在给你100块钱你肯定更希望我现在就给你100块钱因为你可以把这100块钱存在银行里面你就会有一些利息。所以我们就通过把这个 `discount factor` 放到价值函数的定义里面,后面得到的奖励价值函数的定义其实是一个期望。
**价值函数是一个折扣的未来奖励的加和**,就是你通过进行某一种行为,然后你未来得到多大的奖励。
这里有一个 $\mathbb{E}_{\pi}$ 的期望,这里有个小角标是 $\pi$ 函数,这个 $\pi$ 函数就是说在我们已知某一个 policy function 的时候,到底可以得到多少的奖励,所以这个价值函数就是把我们后面未来得到的奖励
价值函数里面有一个 discount factor。我们希望尽可能在短的时间里面得到尽可能多的奖励。如果我们说十天过后我给你 100 块钱,跟我现在给你 100 块钱,你肯定更希望我现在就给你 100 块钱,因为你可以把这 100 块钱存在银行里面,你就会有一些利息。所以我们就通过把这个 `discount factor` 放到价值函数的定义里面,后面得到的奖励价值函数的定义其实是一个期望
对于这个奖励函数,我们另外还有一个 Q 函数。Q 函数里面包含两个变量:状态和动作。所以你未来可以获得多少的奖励,它的这个期望取决于你当前的状态和当前的行为。这个 Q 函数是强化学习算法在学习的一个函数。因为当我们得到这个Q 函数的过后,我们进入某一种状态,它最优的行为其实就可以通过这个 Q 函数来得到
这里有一个 $\mathbb{E}_{\pi}$ 的期望,这里有个小角标是 $\pi$ 函数,这个 $\pi$ 函数就是说在我们已知某一个 policy function 的时候,到底可以得到多少的奖励
对于这个奖励函数,我们另外还有一个 Q 函数。Q 函数里面包含两个变量:状态和动作。所以你未来可以获得多少的奖励,它的这个期望取决于你当前的状态和当前的行为。这个 Q 函数是强化学习算法在学习的一个函数。因为当我们得到这个 Q 函数的过后,进入某一种状态,它最优的行为其实就可以通过这个 Q 函数来得到。
### Model
![](img/1.28.png)
第三个组成部分是模型,**模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。**它由两个部分组成,一个是 Probability它这个转移状态之间是怎么转移的。另外是这个奖励函数当你在当前状态采取了某一个行为可以得到多大的奖励。
第三个组成部分是模型,**模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。**它由两个部分组成,一个是 probability它这个转移状态之间是怎么转移的。另外是这个奖励函数当你在当前状态采取了某一个行为可以得到多大的奖励。
![](img/1.29.png)
@@ -208,7 +210,7 @@ Policy 就是决定了这个 agent 的行为,它其实是一个函数,把输
![](img/1.30.png)
这里我们来看一个走迷宫的例子,这个例子要求这个 agent 从 start 开始,然后到达 goal 的位置。这里设定的奖励是每走一步,你就会得到一个负的奖励。这里可以采取的动作是往上下左右走。当前状态用现在 agent 所在的位置来描述。
这里我们来看一个走迷宫的例子,这个例子要求 agent 从 start 开始,然后到达 goal 的位置。这里设定的奖励是每走一步,你就会得到一个负的奖励。这里可以采取的动作是往上下左右走。当前状态用现在 agent 所在的位置来描述。
![](img/1.31.png)
我们可以用不同的强化学习算法来解这个环境,如果我们采取的是 Policy-based RL。当我们学习好了这个环境过后在每一个状态我们就会得到一个最佳的行为。比如说现在在第一格开始的时候我们知道它最佳行为是往右走然后第二格的时候得到的最佳策略是往上走第三格是往右走。通过这个最佳的策略我们就可以最快地到达终点。
@@ -284,7 +286,7 @@ A: 针对是否需要对真实环境建模,强化学习可以分为有模型
* Exploration 是说我们怎么去探索这个环境。通过尝试不同的行为,然后可以得到一个最佳的策略,得到最大奖励的策略。
* Exploitation 是说我们现在不去尝试新的东西,就采取已知的可以得到很大奖励的行为。
* Exploitation 是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。
因为在刚开始的时候强化学习 agent 不知道它采取了某个行为会发生什么,所以它只能通过试错去探索。所以 Exploration 就是在试错来理解采取的这个行为到底可不可以得到好的奖励。Exploitation 是说我们直接采取已知的可以得到很好奖励的行为。所以这里就面临一个 trade-off怎么通过牺牲一些短期的 reward 来获得行为的理解。
@@ -292,19 +294,19 @@ A: 针对是否需要对真实环境建模,强化学习可以分为有模型
这里我给大家举一些例子来说明 Exploration 和 Exploitation 的定义。
* 以选择餐馆为例,
* Exploitation 的意思是说我们直接去你最喜欢的餐馆,因为你去过这个餐馆去过很多次了,所以你知道这里面的菜都非常可口。
* Exploration 是说你把手机拿出来,你直接搜索一个新的餐馆,然后去尝试它到底好不好吃。这里的结果就是有可能这新的餐馆非常不满意,那么你就这个钱就浪费了。
* Exploitation 是说我们直接去你最喜欢的餐馆,因为你去过这个餐馆很多次了,所以你知道这里面的菜都非常可口。
* Exploration 是说你把手机拿出来,你直接搜索一个新的餐馆,然后去尝试它到底好不好吃。这里的结果就是有可能这新的餐馆非常不满意,你就这个钱就浪费了。
* 以做广告为例,
* Exploitation 就是说我们直接可以采取最优的这个广告策略。
* Exploitation 就是说我们直接采取最优的这个广告策略。
* Exploration 就是说我们换一种广告方式,然后看这个新的广告策略到底可不可以得到奖励。
* 以挖油为例,
* Exploitation 就是说我们直接在已知的地方挖油。那么我们就可以确保可以挖到油。
* Exploration 就是说我们在一个新的一个地方挖油,就有很大的概率,你可能不能发现任何油,但也可能有比较小的概率可以发现一个非常大的一个油田。
* Exploitation 就是说我们直接在已知的地方挖油我们就可以确保挖到油。
* Exploration 就是说我们在一个新的地方挖油,就有很大的概率,你可能不能发现任何油,但也可能有比较小的概率可以发现一个非常大的油田。
* 以玩游戏为例,
* Exploitation 就是说你总是采取某一种策略。比如说,你可能打街霸,你采取的策略可能是蹲在角落,然后一直触脚。这个策略很可能可以奏效,但可能遇到特定的对手就失效。
* Exploration 就是说你可能尝试一些新的一些招式,有可能你会发出大招来,这样就可能一招毙命。
* Exploitation 就是说你总是采取某一种策略。比如说,你可能打街霸,你采取的策略可能是蹲在角落,然后一直触脚。这个策略很可能可以奏效,但可能遇到特定的对手就失效。
* Exploration 就是说你可能尝试一些新的招式,有可能你会发出大招来,这样就可能一招毙命。
@@ -324,7 +326,7 @@ A: 针对是否需要对真实环境建模,强化学习可以分为有模型
![](img/1.42.png)
[ OpenAI](https://openai.com/) 是一个非盈利的人工智能研究公司。Open AI 公布了非常多的学习资源以及这个算法资源,他们之所以叫 Open AI就是他们把所有开发的这些算法都 open source 出来。
[ OpenAI](https://openai.com/) 是一个非盈利的人工智能研究公司。Open AI 公布了非常多的学习资源以及这个算法资源,他们之所以叫 Open AI就是他们把所有开发的算法都 open source 出来。
### Gym
@@ -384,7 +386,7 @@ env.close() # 关闭环境
当你执行这段代码时,可能会很失望,因为机器人会完全无视那根本该立起来的杆子,驾驶着小车朝某个方向一通跑,直到不见踪影。这是因为我们还没开始训练机器人。
Gym 中的小游戏,大部分都可以用一个普通的实数或者向量来充当动作。打印 `env.action_space.sample()` 的返回值,能看到输出为1或者0。
Gym 中的小游戏,大部分都可以用一个普通的实数或者向量来充当动作。打印 `env.action_space.sample()` 的返回值,能看到输出为 1 或者 0。
`env.action_space.sample()`的含义是在该游戏的所有动作空间里随机选择一个作为输出。在这个例子中意思就是动作只有两个0 和 1一左一右。
@@ -418,7 +420,7 @@ env.close()
......
```
从输出可以看出这是一个四维的Observation。在其他游戏中会有维度很多的情况。
从输出可以看出这是一个四维的 Observation。在其他游戏中会有维度很多的情况。
`env.step()`完成了一个完整的 $S \to A \to R \to S'$ 过程。我们只要不断观测这样的过程,并让机器在其中用相应的算法完成训练,就能得到一个高质量的强化学习模型。
@@ -433,7 +435,7 @@ print(envs_ids)
每个环境都定义了自己的观测空间和动作空间。环境 env 的观测空间用`env.observation_space`表示,动作空间用 `env.action_space `表示。观测空间和动作空间既可以是离散空间(即取值是有限个离散的值),也可以是连续空间(即取值是连续的)。在 Gym 库中,离散空间一般用`gym.spaces.Discrete`类表示,连续空间用`gym.spaces.Box`类表示。
例如,环境`'MountainCar-v0'`的观测空间是`Box(2,)`,表示观测可以用 2 个float值表示环境`'MountainCar-v0'`的动作空间是`Dicrete(3)`,表示动作取值自`{0,1,2}`。对于离散空间,`gym.spaces.Discrete`类实例的成员 n 表示有几个可能的取值;对于连续空间,`Box`类实例的成员 low 和 high 表示每个浮点数的取值范围。
例如,环境`'MountainCar-v0'`的观测空间是`Box(2,)`,表示观测可以用 2 个 float 值表示;环境`'MountainCar-v0'`的动作空间是`Dicrete(3)`,表示动作取值自`{0,1,2}`。对于离散空间,`gym.spaces.Discrete`类实例的成员 n 表示有几个可能的取值;对于连续空间,`Box`类实例的成员 low 和 high 表示每个浮点数的取值范围。
### MountainCar-v0 Example