This commit is contained in:
qiwang067
2021-05-03 20:17:57 +08:00
parent 8e0c2e5d93
commit 1e5da36547
9 changed files with 22 additions and 18 deletions

View File

@@ -4,10 +4,7 @@
![](img/1.1.png)
* **强化学习讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的环境(environment)里面去极大化它能获得的奖励。**
* 示意图由两部分组成agent 和 environment。
* 在强化学习过程中agent 跟 environment 一直在交互。Agent 在环境里面获取到状态agent 会利用这个状态输出一个动作(action),一个决策。然后这个决策会放到环境之中去,环境会根据 agent 采取的决策输出下一个状态以及当前的这个决策得到的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。
**强化学习讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的环境(environment)里面去极大化它能获得的奖励。** 示意图由两部分组成agent 和 environment。在强化学习过程中agent 跟 environment 一直在交互。Agent 在环境里面获取到状态agent 会利用这个状态输出一个动作(action),一个决策。然后这个决策会放到环境之中去,环境会根据 agent 采取的决策输出下一个状态以及当前的这个决策得到的奖励。Agent 的目的就是为了尽可能多地从环境中获取奖励。
![](img/1.2.png)
@@ -24,7 +21,7 @@
![](img/1.3.png)
在强化学习里面,这两点其实都不满足。举一个 Atari Breakout 游戏的例子,这是一个打砖块的游戏,控制木板,然后把这个球反弹到上面来消除这些砖块。
在强化学习里面,这两点其实都不满足。举一个 Atari Breakout 游戏的例子,这是一个打砖块的游戏,控制木板左右移动把球反弹到上面来消除砖块。
* 在游戏过程中,大家可以发现这个 agent 得到的观测不是个独立同分布的分布,上一帧下一帧其实有非常强的连续性。这就是说,得到的数据是相关的时间序列数据,不满足独立同分布。
* 另外一点,在玩游戏的过程中,你并没有立刻获得反馈,没有告诉你哪个动作是正确动作。比如你现在把这个木板往右移,那么只会使得这个球往上或者往左上去一点,你并不会得到立刻的反馈。所以强化学习这么困难的原因是没有得到很好的反馈,然后你依然希望 agent 在这个环境里面学习。
@@ -196,11 +193,11 @@ POMDP 可以用一个 7 元组描述:$(S,A,T,R,\Omega,O,\gamma)$,其中 $S$
对于一个强化学习 agent它可能有一个或多个如下的组成成分
* 首先 agent 有一个 `策略函数(policy function)`agent 会用这个函数来选取下一步的动作。
* `策略函数(policy function)`agent 会用这个函数来选取下一步的动作。
* 然后它也可能生成一个`价值函数(value function)`我们用价值函数来对当前状态进行估价,它就是说你进入现在这个状态,可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。
* `价值函数(value function)`我们用价值函数来对当前状态进行估价,它就是说你进入现在这个状态,可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。
* 另外一个组成成分是`模型(model)`模型表示了 agent 对这个环境的状态进行了理解,它决定了这个世界是如何进行的。
* `模型(model)`模型表示了 agent 对这个环境的状态进行了理解,它决定了这个世界是如何进行的。
### Policy
@@ -237,12 +234,19 @@ $$
所以你未来可以获得多少的奖励,它的这个期望取决于你当前的状态和当前的行为。这个 Q 函数是强化学习算法里面要学习的一个函数。因为当我们得到这个 Q 函数后,进入某一种状态,它最优的行为就可以通过这个 Q 函数来得到。
### Model
![](img/1.28.png)
第三个组成部分是模型,**模型决定了下一个状态会是什么样的,就是说下一步的状态取决于你当前的状态以及你当前采取的行为。**它由两个部分组成,
* 概率:这个转移状态之间是怎么转移的
* 概率:这个转移状态之间是怎么转移的,如下式所示:
$$
\mathcal{P}_{s s^{\prime}}^{a}=\mathbb{P}\left[S_{t+1}=s^{\prime} \mid S_{t}=s, A_{t}=a\right]
$$
* 奖励函数:当你在当前状态采取了某一个行为,可以得到多大的奖励,如下式所示:
$$
\mathcal{R}_{s}^{a}=\mathbb{E}\left[R_{t+1} \mid S_{t}=s, A_{t}=a\right]
$$
* 奖励函数:当你在当前状态采取了某一个行为,可以得到多大的奖励。
![](img/1.29.png)
@@ -252,9 +256,9 @@ $$
我们来看一个走迷宫的例子。
* 这个例子要求 agent 从 start 开始,然后到达 goal 的位置。
* 这里设定的奖励是每走一步,你就会得到一个负的奖励。
* 这里可以采取的动作是往上下左右走。
* 要求 agent 从 start 开始,然后到达 goal 的位置。
* 每走一步,你就会得到一个负的奖励。
* 可以采取的动作是往上下左右走。
* 当前状态用现在 agent 所在的位置来描述。
![](img/1.31.png)
@@ -295,8 +299,8 @@ A: 对于一个状态转移概率已知的马尔可夫决策过程,我们可
**另外,我们是可以通过 agent 到底有没有学习这个环境模型来分类。**
* 第一种是 `model-based(有模型)` RL agent它通过学习这个状态的转移来采取动作。
* 另外一种是 ` model-free(免模型)` RL agent它没有去直接估计这个状态的转移也没有得到环境的具体转移变量。它通过学习价值函数和策略函数进行决策。Model-free 的模型里面没有一个环境转移的模型。
* `model-based(有模型)` RL agent它通过学习这个状态的转移来采取动作。
* ` model-free(免模型)` RL agent它没有去直接估计这个状态的转移也没有得到环境的具体转移变量。它通过学习价值函数和策略函数进行决策。Model-free 的模型里面没有一个环境转移的模型。
我们可以用马尔可夫决策过程来定义强化学习任务,并表示为四元组 $<S,A,P,R>$,即状态集合、动作集合、状态转移函数和奖励函数。如果这四元组中所有元素均已知,且状态集合和动作集合在有限步数内是有限集,则机器可以对真实环境进行建模,构建一个虚拟世界来模拟真实环境的状态和交互反应。
@@ -450,8 +454,8 @@ for step in range(100):
![](img/1.46.png)
在 OpenAI Gym 里面有很经典的控制类游戏。
* 比如说 Acrobot就是把这个两节铁杖,然后甩了立起来。
* CartPole 是通过控制一个平板,让这个木棍立起来。
* 比如说 Acrobot 就是把两节铁杖甩了立起来。
* CartPole 是通过控制一个平板,让木棍立起来。
* MountainCar 是通过前后移动这个车,让它到达这个旗子的位置。
大家可以点[这个链接](https://gym.openai.com/envs/#classic_control)看一看这些环境。在刚开始测试强化学习的时候,可以选择这些简单环境,因为这些环境可以在一两分钟之内见到一个效果。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 KiB

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 425 KiB

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 725 KiB

After

Width:  |  Height:  |  Size: 553 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 90 KiB