diff --git a/docs/chapter1/chapter1.md b/docs/chapter1/chapter1.md index c061f19..e057858 100644 --- a/docs/chapter1/chapter1.md +++ b/docs/chapter1/chapter1.md @@ -247,20 +247,33 @@ Policy 决定了这个 agent 的行为,它其实是一个函数,把输入的 ![](img/1.30.png) -这里我们来看一个走迷宫的例子,这个例子要求 agent 从 start 开始,然后到达 goal 的位置。这里设定的奖励是每走一步,你就会得到一个负的奖励。这里可以采取的动作是往上下左右走。当前状态用现在 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 ![](img/1.33.png) **根据强化学习 agent 的不同,我们可以把 agent 进行归类。** -* `基于价值的 agent(value-based agent)`。这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。这个策略是从我们学到的价值函数里面推算出来的。 +* `基于价值的 agent(value-based agent)`。这一类 agent 显式地学习的是价值函数,隐式地学习了它的策略。策略是从我们学到的价值函数里面推算出来的。 * `基于策略的 agent(policy-based agent)`。这一类 agent 直接去学习 policy,就是说你直接给它一个 state,它就会输出这个动作的概率。在这个 policy-based agent 里面并没有去学习它的价值函数。 * 把 value-based 和 policy-based 结合起来就有了 `Actor-Critic agent`。这一类 agent 把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。 @@ -313,7 +326,7 @@ A: 针对是否需要对真实环境建模,强化学习可以分为有模型 ![](img/1.36.png) -把几类模型放到同一个饼图里面。三个组成部分:value function、policy、model。按一个 agent 具不具有三者中的两者或者一者可以把它分成很多类。 +把几类模型放到同一个饼图里面。饼图有三个组成部分:value function、policy、model。按一个 agent 具不具有三者中的两者或者一者可以把它分成很多类。 ## Learning and Planning diff --git a/docs/chapter3/chapter3.md b/docs/chapter3/chapter3.md index c015fee..ddbe495 100644 --- a/docs/chapter3/chapter3.md +++ b/docs/chapter3/chapter3.md @@ -417,16 +417,15 @@ $\varepsilon\text{-greedy}$ 的意思是说,我们有 $1-\varepsilon$ 的概 TD 是给定了一个策略,然后我们去估计它的价值函数。接着我们要考虑怎么用 TD 这个框架来估计 Q-function。 -![](img/3.14.png) +![](img/3.14.png)Sarsa 所作出的改变很简单,就是将原本我们 TD 更新 V 的过程,变成了更新 Q,如下式所示: -Sarsa 跟 TD Prediction 也是类似的,它是直接估计 Q-table。得到这个 Q-table 后,就可以更新这个策略。 - -如上图所示,我们使用时序差分的方式来进行更新,如下式所示: $$ Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left[R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right)-Q\left(S_{t}, A_{t}\right)\right] $$ 这个公式就是说可以拿下一步的 Q 值 $Q(S_{t+_1},A_{t+1})$ 来更新我这一步的 Q 值 $Q(S_t,A_t)$ 。 +Sarsa 是直接估计 Q-table,得到 Q-table 后,就可以更新策略。 + 为了理解这个公式,如上图所示,我们先把 $R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right.)$ 当作是一个目标值,就是 $Q(S_t,A_t)$ 想要去逼近的一个目标值。$R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right.)$ 就是 TD target。 我们想要计算的就是 $Q(S_t,A_t)$ 。因为最开始 Q 值都是随机初始化或者是初始化为零,它需要不断地去逼近它理想中真实的 Q 值(TD target),$R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right)-Q\left(S_{t}, A_{t}\right)$ 就是 TD error。 @@ -496,7 +495,7 @@ Sarsa 是一种 on-policy 策略。Sarsa 优化的是它实际执行的策略, ![](img/Q-learning.png) -Q-learning 的算法有两种 policy:behavior policy 和 target policy。 +Q-learning 有两种 policy:behavior policy 和 target policy。 Target policy $\pi$ 直接在 Q-table 上取 greedy,就取它下一步能得到的所有状态,如下式所示: $$ @@ -544,7 +543,7 @@ Sarsa 是用自己的策略产生了 S,A,R,S',A' 这一条轨迹。然后拿着 **总结一下 on-policy 和 off-policy 的区别。** -* Sarsa 是一个典型的 on-policy 策略,它只用了一个 policy $\pi$ 。如果 policy 采用 $\varepsilon$-greedy 算法的话,它需要兼顾探索,为了兼顾探索和利用,它训练的时候会显得有点胆小怕事。它在解决悬崖问题的时候,会尽可能地离悬崖边上远远的,确保说哪怕自己不小心探索了一点,也还是在安全区域内。此外,因为采用的是 $\varepsilon$-greedy 算法,策略会不断改变($\varepsilon$ 会不断变小),所以策略不稳定。 +* Sarsa 是一个典型的 on-policy 策略,它只用了一个 policy $\pi$ 。如果 policy 采用 $\varepsilon$-greedy 算法的话,它需要兼顾探索,为了兼顾探索和利用,它训练的时候会显得有点胆小。它在解决悬崖问题的时候,会尽可能地离悬崖边上远远的,确保说哪怕自己不小心探索了一点,也还是在安全区域内。此外,因为采用的是 $\varepsilon$-greedy 算法,策略会不断改变($\varepsilon$ 会不断变小),所以策略不稳定。 * Q-learning 是一个典型的 off-policy 的策略,它有两种策略:target policy 和 behavior policy。它分离了目标策略跟行为策略。Q-learning 就可以大胆地用 behavior policy 去探索得到的经验轨迹来去优化目标策略,从而更有可能去探索到最优的策略。Behavior policy 可以采用 $\varepsilon$-greedy 算法,但 target policy 采用的是 greedy 算法,直接根据 behavior policy 采集到的数据来采用最优策略,所以 Q-learning 不需要兼顾探索。 * 比较 Q-learning 和 Sarsa 的更新公式可以发现,Sarsa 并没有选取最大值的 max 操作,因此, * Q-learning 是一个非常激进的算法,希望每一步都获得最大的利益; @@ -556,6 +555,7 @@ Sarsa 是用自己的策略产生了 S,A,R,S',A' 这一条轨迹。然后拿着 ## References +* [强化学习基础 David Silver 笔记](https://zhuanlan.zhihu.com/c_135909947) * [Intro to Reinforcement Learning (强化学习纲要)](https://github.com/zhoubolei/introRL) * [Reinforcement Learning: An Introduction (second edition)](https://book.douban.com/subject/30323890/) * [百面深度学习](https://book.douban.com/subject/35043939/)