From cfb573319b5717431d26d0fec1201f095ea65049 Mon Sep 17 00:00:00 2001 From: Yiyuan Yang Date: Wed, 21 Sep 2022 15:55:51 +0800 Subject: [PATCH] Update chapter4_questions&keywords.md --- docs/chapter4/chapter4_questions&keywords.md | 202 ++++++++++--------- 1 file changed, 110 insertions(+), 92 deletions(-) diff --git a/docs/chapter4/chapter4_questions&keywords.md b/docs/chapter4/chapter4_questions&keywords.md index e1d5786..b2f7f6b 100644 --- a/docs/chapter4/chapter4_questions&keywords.md +++ b/docs/chapter4/chapter4_questions&keywords.md @@ -1,119 +1,137 @@ -# Chapter4 梯度策略 +# 第四章 策略梯度 -## 1 Keywords +## 关键词 -- **policy(策略):** 每一个actor中会有对应的策略,这个策略决定了actor的行为。具体来说,Policy 就是给一个外界的输入,然后它会输出 actor 现在应该要执行的行为。**一般地,我们将policy写成 $\pi$ 。** -- **Return(回报):** 一个回合(Episode)或者试验(Trial)所得到的所有的reward的总和,也被人们称为Total reward。**一般地,我们用 $R$ 来表示它。** -- **Trajectory:** 一个试验中我们将environment 输出的 $s$ 跟 actor 输出的行为 $a$,把这个 $s$ 跟 $a$ 全部串起来形成的集合,我们称为Trajectory,即 $\text { Trajectory } \tau=\left\{s_{1}, a_{1}, s_{2}, a_{2}, \cdots, s_{t}, a_{t}\right\}$。 -- **Reward function:** 根据在某一个 state 采取的某一个 action 决定说现在这个行为可以得到多少的分数,它是一个 function。也就是给一个 $s_1$,$a_1$,它告诉你得到 $r_1$。给它 $s_2$ ,$a_2$,它告诉你得到 $r_2$。 把所有的 $r$ 都加起来,我们就得到了 $R(\tau)$ ,代表某一个 trajectory $\tau$ 的 reward。 -- **Expected reward:** $\bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau)=E_{\tau \sim p_{\theta}(\tau)}[R(\tau)]$。 -- **REINFORCE:** 基于策略梯度的强化学习的经典算法,其采用回合更新的模式。 +- **策略(policy)**:在每一个演员中会有对应的策略,这个策略决定了演员的后续动作。具体来说,策略就是对于外界的输入,输出演员现在应该要执行的动作。一般地,我们将策略写成 $\pi$ 。 -## 2 Questions +- **回报(return)**:一个回合(episode)或者试验(trial)得到的所有奖励的总和,也被人们称为总奖励(total reward)。一般地,我们用 $R$ 来表示它。 -- 如果我们想让机器人自己玩video game, 那么强化学习中三个组成(actor、environment、reward function)部分具体分别是什么? +- **轨迹(trajectory)**:一个试验中我们将环境输出的状态 $s$ 与演员输出的动作 $a$ 全部组合起来形成的集合称为轨迹,即 $\tau=\left\{s_{1}, a_{1}, s_{2}, a_{2}, \cdots, s_{t}, a_{t}\right\}$ 。 - 答:actor 做的事情就是去操控游戏的摇杆, 比如说向左、向右、开火等操作;environment 就是游戏的主机, 负责控制游戏的画面负责控制说,怪物要怎么移动, 你现在要看到什么画面等等;reward function 就是当你做什么事情,发生什么状况的时候,你可以得到多少分数, 比如说杀一只怪兽得到 20 分等等。 +- **奖励函数(reward function)**:用于反映在某一个状态采取某一个动作可以得到的奖励分数,这是一个函数。即给定一个状态-动作对 ($s_1$,$a_1$) ,奖励函数可以输出 $r_1$ 。给定 ($s_2$,$a_2$),它可以输出 $r_2$。 把所有的 $r$ 都加起来,我们就得到了 $R(\tau)$ ,它代表某一个轨迹 $\tau$ 的奖励。 -- 在一个process中,一个具体的trajectory $s_1$,$a_1$, $s_2$ , $a_2$ 出现的概率取决于什么? +- **期望奖励(expected reward)**:$\bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau)=E_{\tau \sim p_{\theta}(\tau)}[R(\tau)]$。 - 答: +- **REINFORCE**:基于策略梯度的强化学习的经典算法,其采用回合更新的模式。 - 1. 一部分是 **environment 的行为**, environment 的 function 它内部的参数或内部的规则长什么样子。 $p(s_{t+1}|s_t,a_t)$这一项代表的是 environment, environment 这一项通常你是无法控制它的,因为那个是人家写好的,或者已经客观存在的。 - 2. 另一部分是 **agent 的行为**,你能控制的是 $p_\theta(a_t|s_t)$。给定一个 $s_t$, actor 要采取什么样的 $a_t$ 会取决于你 actor 的参数 $\theta$, 所以这部分是 actor 可以自己控制的。随着 actor 的行为不同,每个同样的 trajectory, 它就会有不同的出现的概率。 +## 习题 -- 当我们在计算 maximize expected reward时,应该使用什么方法? +**4-1** 如果我们想让机器人自己玩视频游戏,那么强化学习中的3个组成部分(演员、环境、奖励函数)具体分别代表什么? - 答: **gradient ascent(梯度上升)**,因为要让它越大越好,所以是 gradient ascent。Gradient ascent 在 update 参数的时候要加。要进行 gradient ascent,我们先要计算 expected reward $\bar{R}$ 的 gradient 。我们对 $\bar{R}$ 取一个 gradient,这里面只有 $p_{\theta}(\tau)$ 是跟 $\theta$ 有关,所以 gradient 就放在 $p_{\theta}(\tau)$ 这个地方。 +演员做的事情就是操控游戏的摇杆,比如向左、向右、开火等操作;环境就是游戏的主机,负责控制游戏的画面、控制怪物如何移动等;奖励函数就是当执行什么动作、发生什么状况的时候,我们可以得到多少分数,比如击杀一只怪兽得到20分、被对手暴击扣除10分、完成任务得到10分等。 -- 我们应该如何理解梯度策略的公式呢? +**4-2** 在一个过程中,一个具体的轨迹{$s_1 , a_1 , s_2 , a_2$}出现的概率取决于什么? - 答: - $$ - \begin{aligned} - E_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] &\approx \frac{1}{N} \sum_{n=1}^{N} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(\tau^{n}\right) \\ - &=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) - \end{aligned} - $$ - $p_{\theta}(\tau)$ 里面有两项,$p(s_{t+1}|s_t,a_t)$ 来自于 environment,$p_\theta(a_t|s_t)$ 是来自于 agent。 $p(s_{t+1}|s_t,a_t)$ 由环境决定从而与 $\theta$ 无关,因此 $\nabla \log p(s_{t+1}|s_t,a_t) =0 $。因此 $\nabla p_{\theta}(\tau)= - \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)$。 公式的具体推导可见我们的教程。 - - 具体来说: - - * 假设你在 $s_t$ 执行 $a_t$,最后发现 $\tau$ 的 reward 是正的, 那你就要增加这一项的概率,即增加在 $s_t$ 执行 $a_t$ 的概率。 - * 反之,在 $s_t$ 执行 $a_t$ 会导致$\tau$ 的 reward 变成负的, 你就要减少这一项的概率。 - -- 我们可以使用哪些方法来进行gradient ascent的计算? - - 答:用 gradient ascent 来 update 参数,对于原来的参数 $\theta$ ,可以将原始的 $\theta$ 加上更新的 gradient 这一项,再乘以一个 learning rate,learning rate 其实也是要调的,和神经网络一样,我们可以使用 Adam、RMSProp 等优化器对其进行调整。 - -- 我们进行基于梯度策略的优化时的小技巧有哪些? - - 答: - - 1. **Add a baseline:**为了防止所有的reward都大于0,从而导致每一个stage和action的变换,会使得每一项的概率都会上升。所以通常为了解决这个问题,我们把reward 减掉一项叫做 b,这项 b 叫做 baseline。你减掉这项 b 以后,就可以让 $R(\tau^n)-b$ 这一项, 有正有负。 所以如果得到的 total reward $R(\tau^n)$ 大于 b 的话,就让它的概率上升。如果这个 total reward 小于 b,就算它是正的,正的很小也是不好的,你就要让这一项的概率下降。 如果$R(\tau^n)