fix some typos

This commit is contained in:
qiwang067
2020-08-14 22:40:50 +08:00
parent 80fa147e85
commit 0056c24559

View File

@@ -37,7 +37,7 @@ $$
![](img/5.3.png)
Important sampling 有一些 issue。虽然理论上你可以把 p 换成任何的 q。但是在实现上 p 和 q 不能差太多。差太多的话,会有一些问题。什么样的问题呢?
Important 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]
@@ -68,22 +68,24 @@ $\operatorname{Var}_{x \sim p}[f(x)]$ 和 $\operatorname{Var}_{x \sim q}\left[f(
现在要做的事情就是把 importance sampling 用在 off-policy 的 case。把 on-policy training 的algorithm 改成 off-policy training 的 algorithm。怎么改呢之前我们是拿 $\theta$ 这个policy 去跟环境做互动sample 出trajectory $\tau$,然后计算$R(\tau) \nabla \log p_{\theta}(\tau)$。
现在我们不用$\theta$ 去跟环境做互动,假设有另外一个 policy $\theta'$它就是另外一个actor。它的工作是他要去做demonstration$\theta'$ 的工作是要去示范给$\theta$ 看。它去跟环境做互动,告诉 $\theta$ 说,它跟环境做互动会发生什么事。然后,借此来训练$\theta$。我们要训练的是$\theta$ $\theta'$ 只是负责做 demo负责跟环境做互动。
现在我们不用$\theta$ 去跟环境做互动,假设有另外一个 policy $\theta'$它就是另外一个actor。它的工作是他要去做demonstration$\theta'$ 的工作是要去示范给$\theta$ 看。它去跟环境做互动,告诉 $\theta$ 说,它跟环境做互动会发生什么事。然后,借此来训练$\theta$。我们要训练的是 $\theta$ $\theta'$ 只是负责做 demo负责跟环境做互动。
我们现在的$\tau$ 是从 $\theta'$ sample 出来的,是拿 $\theta'$ 去跟环境做互动。所以sample 出来的 $\tau$ 是从 $\theta'$ sample 出来的这两个distribution 不一样。但没有关系,假设你本来是从 p 做sample但你发现你不能够从 p 做sample所以我们不拿$\theta$ 去跟环境做互动。你可以把 p 换 q然后在后面这边补上一个 importance weight。现在的状况就是一样把 $\theta$ 换成 $\theta'$ 后要补上一个importance weight $\frac{p_{\theta}(\tau)}{p_{\theta^{\prime}}(\tau)}$。这个 importance weight 就是某一个 trajectory $\tau$ 用 $\theta$ 算出来的概率除以这个 trajectory $\tau$,用$\theta'$ 算出来的概率。这一项是很重要的因为今天你要learn 的是actor $\theta$ 和 $\theta'$ 是不太一样的。$\theta'$ 会见到的情形跟 $\theta$ 见到的情形不见得是一样的,所以中间要做一个修正的项。
我们现在的 $\tau$ 是从 $\theta'$ sample 出来的,是拿 $\theta'$ 去跟环境做互动。所以 sample 出来的 $\tau$ 是从 $\theta'$ sample 出来的这两个distribution 不一样。但没有关系,假设你本来是从 p 做 sample但你发现你不能够从 p 做sample所以我们不拿$\theta$ 去跟环境做互动。你可以把 p 换 q然后在后面这边补上一个 importance weight。现在的状况就是一样把 $\theta$ 换成 $\theta'$ 后要补上一个importance weight $\frac{p_{\theta}(\tau)}{p_{\theta^{\prime}}(\tau)}$。这个 importance weight 就是某一个 trajectory $\tau$ 用 $\theta$ 算出来的概率除以这个 trajectory $\tau$,用 $\theta'$ 算出来的概率。这一项是很重要的,因为今天你要 learn 的是 actor $\theta$ 和 $\theta'$ 是不太一样的。$\theta'$ 会见到的情形跟 $\theta$ 见到的情形不见得是一样的,所以中间要做一个修正的项。
现在的data 不是从$\theta$ sample 出来,是从 $\theta'$ sample 出来的。从$\theta$ 换成$\theta'$ 有什么好处呢?因为现在跟环境做互动是$\theta'$ 而不是$\theta$。所以 sample 出来的东西跟 $\theta$ 本身是没有关系的。所以你就可以让 $\theta'$ 做互动 sample 一大堆的data$\theta$ 可以update 参数很多次。然后一直到 $\theta$ train 到一定的程度update 很多次以后,$\theta'$ 再重新去做sample这就是on-policy 换成off-policy 的妙用。
Q: 现在的 data 是从 $\theta'$ sample 出来的,从 $\theta$ 换成 $\theta'$ 有什么好处呢?
A: 因为现在跟环境做互动是 $\theta'$ 而不是 $\theta$。所以 sample 出来的东西跟 $\theta$ 本身是没有关系的。所以你就可以让 $\theta'$ 做互动 sample 一大堆的data$\theta$ 可以update 参数很多次。然后一直到 $\theta$ train 到一定的程度update 很多次以后,$\theta'$ 再重新去做 sample这就是 on-policy 换成 off-policy 的妙用。
![](img/5.6.png)
实际在做 policy gradient 的时候,我们并不是给整个 trajectory $\tau$ 都一样的分数而是每一个state-action 的pair 会分开来计算。实际上 update gradient 的时候,我们的式子是长这样子的。
实际在做 policy gradient 的时候,我们并不是给整个 trajectory $\tau$ 都一样的分数,而是每一个 state-action 的 pair 会分开来计算。实际上 update gradient 的时候,我们的式子是长这样子的。
$$
=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta}}\left[A^{\theta}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right]
$$
我们用 $\theta$ 这个actor 去sample 出$s_t$ 跟$a_t$sample 出state 跟action 的pair我们会计算这个state 跟action pair 它的advantage 就是它有多好。$A^{\theta}\left(s_{t}, a_{t}\right)$就是 accumulated 的 reward 减掉 bias这一项就是估测出来的。它要估测的是在state $s_t$ 采取action $a_t$ 是好的,还是不好的。那接下来后面会乘上$\nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)$,也就是说如果$A^{\theta}\left(s_{t}, a_{t}\right)$是正的,就要增加概率, 如果是负的,就要减少概率。
我们用 $\theta$ 这个 actor 去 sample 出 $s_t$ 跟 $a_t$sample 出 state 跟 action 的 pair我们会计算这个 state 跟 action pair 它的 advantage 就是它有多好。$A^{\theta}\left(s_{t}, a_{t}\right)$就是 accumulated 的 reward 减掉 bias这一项就是估测出来的。它要估测的是 state $s_t$ 采取 action $a_t$ 是好的,还是不好的。那接下来后面会乘上$\nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)$,也就是说如果$A^{\theta}\left(s_{t}, a_{t}\right)$是正的,就要增加概率, 如果是负的,就要减少概率。
那现在用了 importance sampling 的技术把 on-policy 变成 off-policy就从 $\theta$ 变成 $\theta'$。所以现在$s_t$、$a_t$ 是$\theta'$ 另外一个actor 跟环境互动以后所 sample 到的data。 但是拿来训练要调整参数是 model $\theta$。因为 $\theta'$ 跟 $\theta$ 是不同的model所以你要做一个修正的项。这项修正的项就是用 importance sampling 的技术,把$s_t$、$a_t$ 用 $\theta$ sample 出来的概率除掉$s_t$、$a_t$ 用 $\theta'$ sample 出来的概率。
那现在用了 importance sampling 的技术把 on-policy 变成 off-policy就从 $\theta$ 变成 $\theta'$。所以现在$s_t$、$a_t$ 是$\theta'$ 另外一个actor 跟环境互动以后所 sample 到的data。 但是拿来训练要调整参数是 model $\theta$。因为 $\theta'$ 跟 $\theta$ 是不同的 model所以你要做一个修正的项。这项修正的项就是用 importance sampling 的技术,把 $s_t$、$a_t$ 用 $\theta$ sample 出来的概率除掉$s_t$、$a_t$ 用 $\theta'$ sample 出来的概率。
$$
=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{P_{\theta}\left(s_{t}, a_{t}\right)}{P_{\theta^{\prime}}\left(s_{t}, a_{t}\right)} A^{\theta}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right]
@@ -106,7 +108,7 @@ $$
然后这边需要做一件事情是,假设 model 是 $\theta$ 的时候,你看到$s_t$ 的概率,跟 model 是$\theta'$ 的时候,你看到$s_t$ 的概率是差不多的,即$p_{\theta}(s_t)=p_{\theta'}(s_t)$。因为它们是一样的,所以你可以把它删掉,即
$$
=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] \quad(1)
=E_{\left(s_{t}, a_{t}\right) \sim \pi_{\theta^{\prime}}}\left[\frac{p_{\theta}\left(a_{t} | s_{t}\right)}{p_{\theta^{\prime}}\left(a_{t} | s_{t}\right)} A^{\theta^{\prime}}\left(s_{t}, a_{t}\right) \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)\right] \tag{1}
$$
为什么可以假设它是差不多的。举例来说会看到什么state 往往跟你会采取什么样的action 是没有太大的关系的。比如说你玩不同的 Atari 的游戏,其实你看到的游戏画面都是差不多的,所以也许不同的 $\theta$ 对 $s_t$ 是没有影响的。但是有一个更直觉的理由就是这一项到时候真的要你算,你会算吗?因为想想看这项要怎么算,这一项你还要说我有一个参数$\theta$,然后拿$\theta$ 去跟环境做互动,算$s_t$ 出现的概率,这个你根本很难算。尤其是你如果 input 是image 的话, 同样的 $s_t$ 根本就不会出现第二次。你根本没有办法估这一项, 所以干脆就无视这个问题。
@@ -168,7 +170,7 @@ KL divergence 到底指的是什么?这边我是直接把 KL divergence 当做
![](img/5.9.png)
在PPO 的paper 里面还有一个 `adaptive KL divergence`,这边会遇到一个问题就是 $\beta$ 要设多少它就跟那个regularization 一样。regularization 前面也要乘一个weight所以这个 KL divergence 前面也要乘一个 weight但 $\beta$ 要设多少呢?所以有个动态调整 $\beta$ 的方法。在这个方法里面呢,你先设一个 KL divergence你可以接受的最大值。然后假设你发现说你 optimize 完这个式子以后KL divergence 的项太大,那就代表说后面这个 penalize 的 term 没有发挥作用,那就把 $\beta$ 调大。那另外你定一个 KL divergence 的最小值。如果发现 optimize 完上面这个式子以后KL divergence 比最小值还要小,那代表后面这一项的效果太强了,你怕他只弄后面这一项,那 $\theta$ 跟 $\theta^k$ 都一样,这不是你要的,所以你这个时候你叫要减少 $\beta$。所以 $\beta$ 是可以动态调整的。这个叫做 adaptive KL penalty。
PPO 的 paper 里面还有一个 `adaptive KL divergence`,这边会遇到一个问题就是 $\beta$ 要设多少它就跟那个regularization 一样。regularization 前面也要乘一个weight所以这个 KL divergence 前面也要乘一个 weight但 $\beta$ 要设多少呢?所以有个动态调整 $\beta$ 的方法。在这个方法里面呢,你先设一个 KL divergence你可以接受的最大值。然后假设你发现说你 optimize 完这个式子以后KL divergence 的项太大,那就代表说后面这个 penalize 的 term 没有发挥作用,那就把 $\beta$ 调大。那另外你定一个 KL divergence 的最小值。如果发现 optimize 完上面这个式子以后KL divergence 比最小值还要小,那代表后面这一项的效果太强了,你怕他只弄后面这一项,那 $\theta$ 跟 $\theta^k$ 都一样,这不是你要的,所以你这个时候你叫要减少 $\beta$。所以 $\beta$ 是可以动态调整的。这个叫做 adaptive KL penalty。
![](img/5.10.png)