From 43fd017f0ad42a7cb6e3b3d8c1e9727d54c1253a Mon Sep 17 00:00:00 2001 From: qiwang067 Date: Fri, 11 Sep 2020 21:47:21 +0800 Subject: [PATCH] fix some typos --- docs/chapter1/chapter1.md | 20 ++++++++++---------- docs/chapter5/chapter5.md | 12 ++++++------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/chapter1/chapter1.md b/docs/chapter1/chapter1.md index 5fdca2e..2f87a49 100644 --- a/docs/chapter1/chapter1.md +++ b/docs/chapter1/chapter1.md @@ -116,7 +116,7 @@ ### Reward ![](img/1.19.png) -奖励是由环境给的一个反馈信号,这个信号指定了这个 agent 在某一步采取了某个策略是否得到奖励。强化学习的目的就是为了极大化 agent 可以获得的奖励,这个 agent 在这个环境里面存在的目的就是为了极大它的期望积累的奖励。 +**奖励是由环境给的一个反馈信号**,这个信号指定了这个 agent 在某一步采取了某个策略是否得到奖励。强化学习的目的就是为了极大化 agent 可以获得的奖励,agent 在这个环境里面存在的目的就是为了极大它的期望积累的奖励。 ![](img/1.20.png) @@ -131,7 +131,7 @@ ![](img/1.21.png) -在一个强化学习环境里面,agent 的目的就是为了选取一系列的动作来极大化它的奖励。所以这些采取的措施必须有长期的影响,但在这个过程里面,它的奖励其实是被延迟了,就是说你现在采取的某一步决策可能要等到时间很久过后才知道这一步到底产生了什么样的影响。这里一个示意图就是我们玩这个 Atari 的 Pong 这个游戏,你可能只有到最后游戏结束过后,才知道这个球到底有没有击打过去。中间你采取的 up 或 down 行为,并不会直接产生奖励。强化学习里面一个重要的课题就是近期奖励和远期奖励的一个 trade-off。怎么让 agent 取得更多的长期奖励是强化学习的问题。 +在一个强化学习环境里面,agent 的目的就是为了选取一系列的动作来极大化它的奖励,所以这些采取的措施必须有长期的影响。但在这个过程里面,它的奖励其实是被延迟了,就是说你现在采取的某一步决策可能要等到时间很久过后才知道这一步到底产生了什么样的影响。这里一个示意图就是我们玩这个 Atari 的 Pong 这个游戏,你可能只有到最后游戏结束过后,才知道这个球到底有没有击打过去。中间你采取的 up 或 down 行为,并不会直接产生奖励。强化学习里面一个重要的课题就是近期奖励和远期奖励的一个 trade-off。怎么让 agent 取得更多的长期奖励是强化学习的问题。 ![](img/1.22.png) 在跟环境的交互过程中,agent 会获得很多观测。在每一个观测会采取一个动作,它也会得到一个奖励。Agent 在采取当前动作的时候会依赖于它之前得到的这个历史,所以你可以把整个游戏的状态看成关于这个历史的函数。 @@ -176,7 +176,7 @@ POMDP 可以用一个 7 元组描述:$(S,A,T,R,\Omega,O,\gamma)$,其中 $S$ ![](img/1.26.png) 我们深入看这三个组成成分的一些细节。 -Policy 就是决定了这个 agent 的行为,它其实是一个函数,把输入的状态变成行为。这里有两种 policy: +Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的状态变成行为。这里有两种 policy: * 一种是 `stochastic policy(随机性策略)`,它就是 $\pi$ 函数 $\pi(a | s)=P\left[A_{t}=a | S_{t}=s\right]$ 。当你输入一个状态 $s$ 的时候,输出是一个概率。这个概率就是你所有行为的一个概率,然后你可以进一步对这个概率分布进行采样,得到真实的你采取的行为。比如说这个概率可能是有 70% 的概率往左,30% 的概率往右,那么你通过采样就可以得到一个 action。 @@ -213,10 +213,10 @@ Policy 就是决定了这个 agent 的行为,它其实是一个函数,把输 这里我们来看一个走迷宫的例子,这个例子要求 agent 从 start 开始,然后到达 goal 的位置。这里设定的奖励是每走一步,你就会得到一个负的奖励。这里可以采取的动作是往上下左右走。当前状态用现在 agent 所在的位置来描述。 ![](img/1.31.png) -我们可以用不同的强化学习算法来解这个环境,如果我们采取的是 Policy-based RL。当我们学习好了这个环境过后,在每一个状态,我们就会得到一个最佳的行为。比如说现在在第一格开始的时候,我们知道它最佳行为是往右走,然后第二格的时候,得到的最佳策略是往上走,第三格是往右走。通过这个最佳的策略,我们就可以最快地到达终点。 +我们可以用不同的强化学习算法来解这个环境,如果我们采取的是 `Policy-based RL`,当我们学习好了这个环境过后,在每一个状态,我们就会得到一个最佳的行为。比如说现在在第一格开始的时候,我们知道它最佳行为是往右走,然后第二格的时候,得到的最佳策略是往上走,第三格是往右走。通过这个最佳的策略,我们就可以最快地到达终点。 ![](img/1.32.png) -如果换成 Value-based RL 这个算法,利用价值函数来作为导向,我们就会得到另外一种表征。这里就表征了你每一个状态会返回一个价值,比如说你在 start 位置的时候,你的价值是 -16,因为你最快可以 16 步到达终点。因为每走一步会减一,所以你这里的价值是 -16。当我们快接近最后终点的时候,它的这个数字变得越来越大。在拐角的时候,比如要现在在第二格 -15。然后 agent 会看上下,它看到上面值变大了,变成 -14 了,它下面是 -16,那么这个 agent 肯定就会采取一个往上走的策略。所以通过这个学习的值的不同,我们可以抽取出现在最佳的策略。 +如果换成 `value-based RL` 这个算法,利用价值函数来作为导向,我们就会得到另外一种表征。这里就表征了你每一个状态会返回一个价值,比如说你在 start 位置的时候,价值是 -16,因为你最快可以 16 步到达终点。因为每走一步会减一,所以你这里的价值是 -16。当我们快接近最后终点的时候,这个数字变得越来越大。在拐角的时候,比如要现在在第二格 -15。然后 agent 会看上下,它看到上面值变大了,变成 -14 了,它下面是 -16,那么这个 agent 肯定就会采取一个往上走的策略。所以通过这个学习的值的不同,我们可以抽取出现在最佳的策略。 ## Types of RL Agents @@ -225,7 +225,7 @@ Policy 就是决定了这个 agent 的行为,它其实是一个函数,把输 * 基于价值函数的 agent。这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。因为这个策略是从我们学到的价值函数里面推算出来的。 * 基于策略的 agent,它直接去学习 policy,就是说你直接给它一个 state,它就会输出这个动作的概率。在这个 policy-based agent 里面并没有去学习它的价值函数。 -* 另外还有一种 agent 是把这两者结合。把 value-based 和 policy-based 结合起来就有了 `Actor-Critic agent`。这一类 agent 就把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。 +* 另外还有一种 agent 是把这两者结合,把 value-based 和 policy-based 结合起来就有了 `Actor-Critic agent`。这一类 agent 就把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。 Q: 基于策略迭代和基于价值迭代的强化学习方法有什么区别? @@ -251,7 +251,7 @@ A: 对于一个状态转移概率已知的马尔可夫决策过程,我们可 上图是有模型强化学习的流程图。 -然而在实际应用中,智能体并不是那么容易就能知晓MDP中的所有元素的。通常情况下,状态转移函数和奖励函数很难估计,甚至连环境中的状态都可能是未知的,这时就需要采用免模型学习。免模型学习没有对真实环境进行建模,智能体只能在真实环境中通过一定的策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新行为策略,这样反复迭代直到学习到最优策略。 +然而在实际应用中,智能体并不是那么容易就能知晓 MDP 中的所有元素的。通常情况下,状态转移函数和奖励函数很难估计,甚至连环境中的状态都可能是未知的,这时就需要采用免模型学习。免模型学习没有对真实环境进行建模,智能体只能在真实环境中通过一定的策略来执行动作,等待奖励和状态迁移,然后根据这些反馈信息来更新行为策略,这样反复迭代直到学习到最优策略。 Q: 有模型强化学习和免模型强化学习有什么区别? @@ -284,7 +284,7 @@ A: 针对是否需要对真实环境建模,强化学习可以分为有模型 ![](img/1.37.png) 在强化学习里面,Exploration 和 Exploitation 是两个很核心的问题。 -* Exploration 是说我们怎么去探索这个环境。通过尝试不同的行为,然后可以得到一个最佳的策略,得到最大奖励的策略。 +* Exploration 是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。 * Exploitation 是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。 @@ -312,13 +312,13 @@ A: 针对是否需要对真实环境建模,强化学习可以分为有模型 ## Experiment with Reinforcement Learning ![](img/1.39.png) -接下来进入一个实践环节。强化学习是一个理论跟实践结合的机器学习分支,需要去推导很多算法公式。然后去理解它算法背后的一些数学原理。另外一方面,上机实践通过实现算法,然后在很多实验环境里面去探索这个算法是不是可以得到预期效果也是一个非常重要的过程。 +接下来进入一个实践环节。强化学习是一个理论跟实践结合的机器学习分支,需要去推导很多算法公式。然后去理解它算法背后的一些数学原理。另外一方面,上机实践通过实现算法,在很多实验环境里面去探索这个算法是不是可以得到预期效果也是一个非常重要的过程。 ![](img/1.40.png) -我会在网页上面公布一些代码,会利用 Python编程,也会利用到深度学习的一些包,主要是用 PyTorch 为主,然后在[这个链接](https://github.com/cuhkrlcourse/RLexample)里面,我其实已经公布了一些 RL 相关的代码。 +我会在网页上面公布一些代码,会利用 Python 和深度学习的一些包(主要是用 PyTorch 为主),然后在[这个链接](https://github.com/cuhkrlcourse/RLexample)里面,我其实已经公布了一些 RL 相关的代码。 ![](img/1.41.png) diff --git a/docs/chapter5/chapter5.md b/docs/chapter5/chapter5.md index 51f40ad..9037165 100644 --- a/docs/chapter5/chapter5.md +++ b/docs/chapter5/chapter5.md @@ -24,7 +24,7 @@ $$ ![](img/5.2.png) -具体怎么做呢?这边就需要介绍 `important sampling` 的概念。假设你有一个 function $f(x)$,你要计算从 p 这个 distribution sample $x$,再把 $x$ 带到 $f$ 里面,得到 $f(x)$。你要该怎么计算这个 $f(x)$ 的期望值?假设你不能对 p 这个distribution 做积分的话,那你可以从 p 这个 distribution 去 sample 一些 data $x^i$。把 $x^i$ 代到 $f(x)$ 里面,然后取它的平均值,就可以近似 $f(x)$ 的期望值。 +具体怎么做呢?这边就需要介绍 `importance sampling` 的概念。假设你有一个 function $f(x)$,你要计算从 p 这个 distribution sample $x$,再把 $x$ 带到 $f$ 里面,得到 $f(x)$。你要该怎么计算这个 $f(x)$ 的期望值?假设你不能对 p 这个distribution 做积分的话,那你可以从 p 这个 distribution 去 sample 一些 data $x^i$。把 $x^i$ 代到 $f(x)$ 里面,然后取它的平均值,就可以近似 $f(x)$ 的期望值。 现在有另外一个问题,我们没有办法从 p 这个 distribution 里面 sample data。假设我们不能从 p sample data,只能从另外一个 distribution q 去 sample data,q 可以是任何 distribution。我们不能够从 p 去 sample data,但可以从 q 去 sample $x$。我们从 q 去 sample $x^i$ 的话就不能直接套下面的式子。 $$ @@ -34,18 +34,18 @@ $$ $$ \int f(x) p(x) d x=\int f(x) \frac{p(x)}{q(x)} q(x) d x=E_{x \sim q}[f(x){\frac{p(x)}{q(x)}}] $$ -我们就可以写成对 q 里面所 sample 出来的 x 取期望值。我们从 q 里面 sample x,然后再去计算$f(x) \frac{p(x)}{q(x)}$,再去取期望值。所以就算我们不能从 p 里面去 sample data,只要能够从 q 里面去 sample data,然后代入上式,你就可以计算从 p 这个 distribution sample x 代入 f 以后所算出来的期望值。 +我们就可以写成对 q 里面所 sample 出来的 x 取期望值。我们从 q 里面 sample x,然后再去计算 $f(x) \frac{p(x)}{q(x)}$,再去取期望值。所以就算我们不能从 p 里面去 sample data,只要能够从 q 里面去 sample data,然后代入上式,你就可以计算从 p 这个 distribution sample $x$ 代入 $f$ 以后所算出来的期望值。 -这边是从 q 做 sample,所以从 q 里 sample 出来的每一笔data,你需要乘上一个 weight 来修正这两个 distribution 的差异,weight 就是 $\frac{p(x)}{q(x)}$。$q(x)$ 可以是任何 distribution,唯一的限制就是 $q(x)$ 的概率是 0 的时候,$p(x)$ 的概率不为 0,不然这样会没有定义。假设 $q(x)$ 的概率是 0 的时候,$p(x)$ 的概率也都是 0 的话,那这样 $p(x)$ 除以 $q(x)$是有定义的。所以这个时候你就可以 apply important sampling 这个技巧。你就可以从 p 做 sample 换成从 q 做 sample。 +这边是从 q 做 sample,所以从 q 里 sample 出来的每一笔 data,你需要乘上一个 weight 来修正这两个 distribution 的差异,weight 就是 $\frac{p(x)}{q(x)}$。$q(x)$ 可以是任何 distribution,唯一的限制就是 $q(x)$ 的概率是 0 的时候,$p(x)$ 的概率不为 0,不然这样会没有定义。假设 $q(x)$ 的概率是 0 的时候,$p(x)$ 的概率也都是 0 的话,那这样 $p(x)$ 除以 $q(x)$是有定义的。所以这个时候你就可以 apply importance sampling 这个技巧。你就可以从 p 做 sample 换成从 q 做 sample。 ![](img/5.3.png) -Important sampling 有一些 issue。虽然理论上你可以把 p 换成任何的 q。但是在实现上, p 和 q 不能差太多。差太多的话,会有一些问题。什么样的问题呢? +Importance sampling 有一些 issue。虽然理论上你可以把 p 换成任何的 q。但是在实现上, p 和 q 不能差太多。差太多的话,会有一些问题。什么样的问题呢? $$ E_{x \sim p}[f(x)]=E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] $$ -虽然上式成立。但上式左边是 $f(x)$ 的期望值,它的 distribution 是 p,上式右边是 $f(x) \frac{p(x)}{q(x)}$ 的期望值,它的distribution 是 q。如果不是算期望值,而是算 variance 的话。这两个 variance 是不一样的。两个 random variable 的 mean 一样,并不代表它的 variance 一样。 +虽然上式成立。但上式左边是 $f(x)$ 的期望值,它的 distribution 是 p,上式右边是 $f(x) \frac{p(x)}{q(x)}$ 的期望值,它的 distribution 是 q。如果不是算期望值,而是算 variance 的话。这两个 variance 是不一样的。两个 random variable 的 mean 一样,并不代表它的 variance 一样。 我们可以代一下方差的公式: $$ @@ -216,7 +216,7 @@ $$ ![](img/5.13.png) 如果 A 小于0 的话,取最小的以后,就得到红色的这一条线。 -这一个式子虽然看起来有点复杂,implement 起来是蛮简单的,因为这个式子想要做的事情就是希望 $p_{\theta}(a_{t} | s_{t})$ 跟$p_{\theta^k}(a_{t} | s_{t})$,也就是你拿来做 demonstration 的那个model, 跟你实际上 learn 的 model,在optimize 以后不要差距太大。那你要怎么让它做到不要差距太大呢? +这一个式子虽然看起来有点复杂,实现起来是蛮简单的,因为这个式子想要做的事情就是希望 $p_{\theta}(a_{t} | s_{t})$ 跟$p_{\theta^k}(a_{t} | s_{t})$,也就是你拿来做 demonstration 的那个model, 跟你实际上 learn 的 model,在 optimize 以后不要差距太大。那你要怎么让它做到不要差距太大呢? 如果 A 大于 0,也就是某一个 state-action 的pair 是好的。那我们希望增加这个 state-action pair 的概率。也就是说,我们想要让 $p_{\theta}(a_{t} | s_{t})$ 越大越好,但它跟 $p_{\theta^k}(a_{t} | s_{t})$ 的比值不可以超过 $1+\varepsilon$。如果超过 $1+\varepsilon$ 的话,就没有 benefit 了。红色的线就是我们的 objective function,我们希望 objective 越大越好,我们希望 $p_{\theta}(a_{t} | s_{t})$ 越大越好。但是$\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{k}}\left(a_{t} | s_{t}\right)}$只要大过 $1+\varepsilon$,就没有 benefit 了。