fix ch9 typos

This commit is contained in:
qiwang067
2020-11-02 21:11:01 +08:00
parent 70c2c0f4de
commit bb3a8bf127

View File

@@ -12,20 +12,24 @@
在 Actor-Critic 算法 里面,最知名的方法就是 `A3C(Asynchronous Advantage Actor-Critic)` 在 Actor-Critic 算法 里面,最知名的方法就是 `A3C(Asynchronous Advantage Actor-Critic)`
* 如果去掉前面这个 Asynchronous只有 `Advantage Actor-Critic`,就叫做 `A2C` * 如果去掉 Asynchronous只有 `Advantage Actor-Critic`,就叫做 `A2C`
* 如果前面加了 Asynchronous变成 Asynchronous Advantage Actor-Critic就变成 A3C。 * 如果加了 Asynchronous变成 `Asynchronous Advantage Actor-Critic`,就变成 `A3C`
### Review: Policy Gradient ### Review: Policy Gradient
![](img/9.1.png) ![](img/9.1.png)
那我们复习一下 policy gradient在 policy gradient我们在 update policy 的参数 $\theta$ 的时候,我们是用了下面这个式子来算出我们的 gradient。 那我们复习一下 policy gradient在 policy gradient我们在 update policy 的参数 $\theta$ 的时候,我们是用了下面这个式子来算出 gradient。
$$ $$
\nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}\left(\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}-b\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) \nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}\left(\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}-b\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right)
$$ $$
这个式子是在说,我们先让 agent 去跟环境互动一下,那我们可以计算出在某一个 state s采取了某一个 action a 的概率 $p_{\theta}(a_t|s_t)$。接下来,我们去计算在某一个 state s 采取了某一个 action a 之后到游戏结束为止accumulated reward 有多大。我们把这些 reward 从时间 t 到时间 T 的 reward 通通加起来,并且会在前面乘一个 discount factor可能设 0.9 或 0.99。我们会减掉一个 baseline b减掉这个值 b 的目的,是希望括号这里面这一项是有正有负的。如果括号里面这一项是正的,我们就要增加在这个 state 采取这个 action 的机率;如果括号里面是负的,我们就要减少在这个 state 采取这个 action 的机率。 这个式子是在说,我们先让 agent 去跟环境互动一下,那我们可以计算出在某一个 state s采取了某一个 action a 的概率 $p_{\theta}(a_t|s_t)$。接下来,我们去计算在某一个 state s 采取了某一个 action a 之后到游戏结束为止accumulated reward 有多大。我们把这些 reward 从时间 t 到时间 T 的 reward 通通加起来,并且会在前面乘一个 discount factor可能设 0.9 或 0.99。我们会减掉一个 baseline b减掉这个值 b 的目的,是希望括号这里面这一项是有正有负的。如果括号里面这一项是正的,我们就要增加在这个 state 采取这个 action 的机率;如果括号里面是负的,我们就要减少在这个 state 采取这个 action 的机率。
我们把用 G 来表示 accumulated reward。但 G 这个值,其实是非常的 unstable 的。因为互动的 process 本身是有随机性的,所以在某一个 state s 采取某一个 action a然后计算 accumulated reward每次算出来的结果都是不一样的所以 G 其实是一个 random variable。给同样的 state s给同样的 action aG 可能有一个固定的 distribution。但我们是采取 sample 的方式,我们在某一个 state s 采取某一个 action a然后玩到底我们看看得到多少的 reward我们就把这个东西当作 G。把 G 想成是一个 random variable 的话,我们实际上是对这个 G 做一些 sample然后拿这些 sample 的结果,去 update 我们的参数。但实际上在某一个 state s 采取某一个 action a接下来会发生什么事它本身是有随机性的。虽然说有个固定的 distribution但它本身是有随机性的而这个 random variable 的 variance 可能会非常大。你在同一个 state 采取同一个 action你最后得到的结果可能会是天差地远的。假设我们可以 sample 足够的次数,在每次 update 参数之前,我们都可以 sample 足够的次数,那其实没有什么问题。但问题就是我们每次做 policy gradient每次 update 参数之前都要做一些 sample这个 sample 的次数其实是不可能太多的,我们只能够做非常少量的 sample。如果你正好 sample 到差的结果,比如说你 sample 到 G = 100sample 到 G = -10那显然你的结果会是很差的。 我们把用 G 来表示 accumulated reward。但 G 这个值,其实是非常不稳定的。因为互动的 process 本身是有随机性的,所以在某一个 state s 采取某一个 action a然后计算 accumulated reward每次算出来的结果都是不一样的所以 G 其实是一个 random variable。给同样的 state s给同样的 action aG 可能有一个固定的 distribution。但我们是采取 sample 的方式,我们在某一个 state s 采取某一个 action a然后玩到底我们看看得到多少的 reward我们就把这个东西当作 G。
把 G 想成是一个 random variable 的话,我们实际上是对这个 G 做一些 sample然后拿这些 sample 的结果,去 update 我们的参数。但实际上在某一个 state s 采取某一个 action a接下来会发生什么事它本身是有随机性的。虽然说有个固定的 distribution但它本身是有随机性的而这个 random variable 的 variance 可能会非常大。你在同一个 state 采取同一个 action你最后得到的结果可能会是天差地远的。
假设我们可以 sample 足够的次数,在每次 update 参数之前,我们都可以 sample 足够的次数,那其实没有什么问题。但问题就是我们每次做 policy gradient每次 update 参数之前都要做一些 sample这个 sample 的次数其实是不可能太多的,我们只能够做非常少量的 sample。如果你正好 sample 到差的结果,比如说你 sample 到 G = 100sample 到 G = -10那显然你的结果会是很差的。
### Review: Q-learning ### Review: Q-learning
@@ -37,9 +41,16 @@ A: 我们在 state s 采取 action a 的时候,直接用一个 network 去估
Q: 怎么拿期望值代替 sample 的值呢? Q: 怎么拿期望值代替 sample 的值呢?
A: 这边就需要引入 value based 的方法。value based 的方法就是 Q-learning。Q-learning 有两种 functions有两种 critics。第一种 critic 我们写作 $V^{\pi}(s)$,它的意思是说,假设 actor 是 $\pi$,拿 $\pi$ 去跟环境做互动,当今天我们看到 state s 的时候,接下来 accumulated reward 的期望值有多少。还有一个 critic 叫做 $Q^{\pi}(s,a)$。$Q^{\pi}(s,a)$ 把 s 跟 a 当作 input它的意思是说在 state s 采取 action a接下来都用 actor $\pi$ 来跟环境进行互动accumulated reward 的期望值是多少。 A: 这边就需要引入 value based 的方法。value based 的方法就是 Q-learning。Q-learning 有两种 functions有两种 critics。
$V^{\pi}$ input soutput 一个 scalar。$Q^{\pi}$ input s然后它会给每一个 a 都 assign 一个 Q value。这个 estimate 的时候,你可以用 TD 也可以用 MC。用 TD 比较稳,用 MC 比较精确 * 第一种 critic 是 $V^{\pi}(s)$,它的意思是说,假设 actor 是 $\pi$,拿 $\pi$ 去跟环境做互动,当我们看到 state s 的时候,接下来 accumulated reward 的期望值有多少
* 还有一个 critic 是 $Q^{\pi}(s,a)$。$Q^{\pi}(s,a)$ 把 s 跟 a 当作 input它的意思是说在 state s 采取 action a接下来都用 actor $\pi$ 来跟环境进行互动accumulated reward 的期望值是多少。
* $V^{\pi}$ input soutput 一个 scalar。
* $Q^{\pi}$ input s然后它会给每一个 a 都 assign 一个 Q value。
* 你可以用 TD 或 MC 来估计。用 TD 比较稳,用 MC 比较精确。
### Actor-Critic ### Actor-Critic
@@ -47,35 +58,42 @@ $V^{\pi}$ input soutput 一个 scalar。$Q^{\pi}$ input s然后它会给
G 的 random variable 的期望值正好就是 Q ,即 G 的 random variable 的期望值正好就是 Q ,即
$$ $$
E\left[G_{t}^{n}\right]=Q^{\pi_{\theta}\left(s_{t}^{n}, a_{t}^{n}\right)} E\left[G_{t}^{n}\right]=Q^{\pi_{\theta}} \left(s_{t}^{n}, a_{t}^{n}\right)
$$ $$
因为这个就是 Q 的定义。Q 的定义就是在某一个 state s采取某一个 action a假设 policy 就是 $\pi$ 的情况下会得到的 accumulated reward 的期望值有多大,而这个东西就是 G 的期望值。为什么会这样,因为这个就是 Q 的定义Q-function 的定义。Accumulated reward 的期望值就是 G 的期望值。所以假设用期望值来代表 $\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}$ 这一项的话,把 Q-function 套在这里就结束了。那我们就可以 Actor 跟 Critic 这两个方法结合起来。 因为这个就是 Q 的定义。Q-function 的定义就是在某一个 state s采取某一个 action a假设 policy 就是 $\pi$ 的情况下会得到的 accumulated reward 的期望值有多大,而这个东西就是 G 的期望值。Accumulated reward 的期望值就是 G 的期望值。所以假设用期望值来代表 $\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}$ 这一项的话,把 Q-function 套在这里就结束了。那我们就可以 Actor 跟 Critic 这两个方法结合起来。
有不同的方法来表示 baseline但一个常见的做法是你用 value function $V^{\pi_{\theta}}\left(s_{t}^{n}\right)$ 来表示 baseline。Value function 的意思是说,假设 policy 是 $\pi$,在某一个 state s 一直 interact 到游戏结束。那你 expected reward 有多大。 $V^{\pi_{\theta}}\left(s_{t}^{n}\right)$ 没有 involve action然后 $ Q^{\pi_{\theta}\left(s_{t}^{n}, a_{t}^{n}\right)}$ 有 involve action。其实 $V^{\pi_{\theta}}\left(s_{t}^{n}\right)$ 会是 $Q^{\pi_{\theta}\left(s_{t}^{n}, a_{t}^{n}\right)}$ 的期望值,所以$Q^{\pi_{\theta}\left(s_{t}^{n}, a_{t}^{n}\right)}-V^{\pi_{\theta}}\left(s_{t}^{n}\right)$ 会有正有负,所以 $\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}-b$ 这一项就会是有正有负的。 有不同的方法来表示 baseline但一个常见的做法是你用 value function $V^{\pi_{\theta}}\left(s_{t}^{n}\right)$ 来表示 baseline。Value function 的意思是说,假设 policy 是 $\pi$,在某一个 state s 一直 interact 到游戏结束expected reward 有多大。 $V^{\pi_{\theta}}\left(s_{t}^{n}\right)$ 没有 involve action$Q^{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)$ 有 involve action。
所以我们就把 policy gradient 里面 $\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}-b$ 这一项换成了 $Q^{\pi_{\theta}\left(s_{t}^{n}, a_{t}^{n}\right)}-V^{\pi_{\theta}}\left(s_{t}^{n}\right)$。 其实 $V^{\pi_{\theta}}\left(s_{t}^{n}\right)$ 会是 $Q^{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)$ 的期望值,所以 $Q^{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)-V^{\pi_{\theta}}\left(s_{t}^{n}\right)$ 会有正有负,所以 $\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}-b$ 这一项就会是有正有负的
所以我们就把 policy gradient 里面 $\sum_{t^{\prime}=t}^{T_{n}} \gamma^{t^{\prime}-t} r_{t^{\prime}}^{n}-b$ 这一项换成了 $Q^{\pi_{\theta}}\left(s_{t}^{n}, a_{t}^{n}\right)-V^{\pi_{\theta}}\left(s_{t}^{n}\right)$。
### Advantage Actor-Critic ### Advantage Actor-Critic
![](img/9.4.png) ![](img/9.4.png)
如果你这么实现的话,有一个缺点是你要 estimate 2 个 networks,而不是一个 network。你要 estimate Q-network你也要 estimate V-network estimate 估测不准的风险就变成两倍。所以我们何不只估测一个 network 就好了呢?事实上在这个 Actor-Critic 方法里面。你可以只估测 V 这个 network你可以用 V 的值来表示 Q 的值,什么意思呢?$Q^{\pi}\left(s_{t}^{n}, a_{t}^{n}\right)$可以写成 $r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)$的期望值,即 如果你这么实现的话,有一个缺点是你要 estimate 2 个 networksQ-network 和 V-network你估测不准的风险就变成两倍。所以我们何不只估测一个 network
事实上在这个 Actor-Critic 方法里面。你可以只估测 V 这个 network你可以用 V 的值来表示 Q 的值,$Q^{\pi}\left(s_{t}^{n}, a_{t}^{n}\right)$ 可以写成 $ r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)$ 的期望值,即
$$ $$
Q^{\pi}\left(s_{t}^{n}, a_{t}^{n}\right)=E\left[r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)\right] Q^{\pi}\left(s_{t}^{n}, a_{t}^{n}\right)=E\left[r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)\right]
$$ $$
你在 state s 采取 action a接下来你会得到 reward r然后跳到 state, $s_{t+1}$但是你会得到什么样的 reward r跳到什么样的 state $s_{t+1}$,它本身是有随机性的。所以要把右边这个式子,取期望值它才会等于 Q-function。但我们现在把期望值这件事情去掉 你在 state s 采取 action a会得到 reward r然后跳到 state $s_{t+1}$但是你会得到什么样的 reward r跳到什么样的 state $s_{t+1}$,它本身是有随机性的。所以要把右边这个式子,取期望值它才会等于 Q-function。但我们现在把期望值这件事情去掉
$$ $$
Q^{\pi}\left(s_{t}^{n}, a_{t}^{n}\right)=r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right) Q^{\pi}\left(s_{t}^{n}, a_{t}^{n}\right)=r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)
$$ $$
我们就可以把 Q-function 用 r + V 取代掉,然后得到下式 我们就可以把 Q-function 用 r + V 取代掉,然后得到下式
$$ $$
r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)-V^{\pi}\left(s_{t}^{n}\right) r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)-V^{\pi}\left(s_{t}^{n}\right)
$$ $$
把这个期望值去掉的好处就是你不需要 estimate Q 了,你只需要 estimate V 就够了。你只要 estimate 一个 network 就够了,你不需要 estimate 2 个 network,你只要 estimate 一个 network 就够了。但这样你就引入了一个随机的东西 r ,它是有随机性的,它是一个 random variable。但是这个 random variable相较于刚才的 accumulated reward G 可能还好,因为它是某一个 step 会得到的 reward而 G 是所有未来会得到的 reward 的总和。G variance 比较大r 虽然也有一些 variance但它的 variance 会比 G 要小。所以把原来 variance 比较大的 G 换成 variance 比较小的 r 也是合理的。如果你觉得把期望值拿掉不靠谱的话,那我就告诉你原始的 A3C paper 试了各式各样的方法,最后做出来就是这个最好这样。当然你可能说,搞不好 estimate Q 跟 V 也都 estimate 很好,那我告诉你就是做实验的时候,最后结果就是这个最好。所以后来大家都用这个。 把这个期望值去掉的好处就是你不需要 estimate Q 了,你只需要 estimate V 就够了,你只要 estimate 一个 network 就够了。但这样你就引入了一个随机的东西 r ,它是有随机性的,它是一个 random variable。但是这个 random variable相较于 accumulated reward G 可能还好,因为它是某一个 step 会得到的 reward而 G 是所有未来会得到的 reward 的总和。G variance 比较大r 虽然也有一些 variance但它的 variance 会比 G 要小。所以把原来 variance 比较大的 G 换成 variance 比较小的 r 也是合理的。
Q: 为什么可以直接把期望值拿掉?
A: 原始的 A3C paper 试了各种方法,最后做出来就是这个最好。当然你可能说,搞不好 estimate Q 和 V也可以 estimate 很好,那我告诉你就是做实验的时候,最后结果就是这个最好,所以后来大家都用这个。
![](img/9.5.png) ![](img/9.5.png)
@@ -85,20 +103,26 @@ $$
$$ $$
\nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}\left(r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)-V^{\pi}\left(s_{t}^{n}\right)\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) \nabla \bar{R}_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}}\left(r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)-V^{\pi}\left(s_{t}^{n}\right)\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right)
$$ $$
然后你有了新的 $\pi$ 以后,再去跟环境互动,再收集新的资料,去 estimate value function。然后再用新的 value function 去 update policy去 update actor。整个 actor-critic 的 algorithm 就是这么运作的。 然后你有了新的 $\pi$ 以后,再去跟环境互动,再收集新的资料,去 estimate value function。然后再用新的 value function 去 update policy去 update actor。
整个 actor-critic 的 algorithm 就是这么运作的。
![](img/9.6.png) ![](img/9.6.png)
实现 Actor-Critic 的时候,有两个一定会用的 tip。 实现 Actor-Critic 的时候,有两个一定会用的 tip。
* 第一个 tip 是说,我们需要 estimate 两个 networkestimate V function另外一个需要 estimate 的 network 是 policy 的 network也就是你的 actor。 V-network input 一个 stateoutput 一个 scalar。然后 actor 这个 network它是 input 一个 stateoutput 就是一个 action 的 distribution假设你的 action 是 discrete不是 continuous 的话,如果是 continuous 的话,它也是一样。如果是 continuous 的话,就只是 output 一个 continuous 的 vector。上图是举的是 discrete 的例子,但 continuous 的 case 其实也是一样的input 一个 state然后他决定你现在要 take 那一个 action。**这两个 networkactor 和 critic 的 input 都是 s所以它们前面几个 layer其实是可以 share 的。**尤其是假设你今天是玩 Atari 游戏input 都是 image。那 input 那个 image 都非常复杂image 很大,通常你前面都会用一些 CNN 来处理,把那些 image 抽象成 high level 的 information。把 pixel level 到 high level information 这件事情,其实对 actor 跟 critic 来说是可以共用的。所以通常你会让 actor 跟 critic 的前面几个 layer 是 shared你会让 actor 跟 critic 的前面几个 layer 共用同一组参数。那这一组参数可能是 CNN。先把 input 的 pixel 变成比较 high level 的信息,然后再给 actor 去决定说它要采取什么样的行为,给这个 critic给 value function 去计算 expected reward * 第一个 tip 是说,我们需要 estimate 两个 networkV function 和 policy 的 network也就是 actor
* V 这个 network input 一个 stateoutput 一个 scalar。
* 第二个 tip 是我们一样需要 exploration 的机制。在做 Actor-Critic 的时候,有一个常见的 exploration 的方法是你会对你的 $\pi$ 的 output 的 distribution 下一个 constrain。这个 constrain 是希望这个 distribution 的 entropy 不要太小,希望这个 distribution 的 entropy 可以大一点,也就是希望不同的 action 它的被采用的机率,平均一点。这样在 testing 的时候,它才会多尝试各种不同的 action才会把这个环境探索的比较好才会得到比较好的结果。这个就是 Advantage Actor-Critic * Actor 这个 network input 一个 stateoutput 就是一个 action 的 distribution假设你的 action 是 discrete不是 continuous 的话,如果是 continuous 的话,它也是一样。如果是 continuous 的话,就只是 output 一个 continuous 的 vector
* 上图是举的是 discrete 的例子,但 continuous case 也是一样的。Input 一个 state然后它决定你现在要 take 那一个 action。**这两个 networkactor 和 critic 的 input 都是 s所以它们前面几个 layer其实是可以 share 的。**
* 尤其是假设你今天是玩 Atari 游戏input 都是 image。Input 的 image 都非常复杂image 很大,通常你前面都会用一些 CNN 来处理,把那些 image 抽象成 high level 的 information。把 pixel level 抽象成 high level information 这件事情,其实对 actor 跟 critic 来说是可以共用的。所以通常你会让 actor 跟 critic 的共享前面几个 layer你会让 actor 跟 critic 的前面几个 layer 共用同一组参数,那这一组参数可能是 CNN 的参数。
* 先把 input 的 pixel 变成比较 high level 的信息,然后再给 actor 去决定说它要采取什么样的行为,给这个 critic给 value function 去计算 expected reward。
* **第二个 tip 是我们一样需要 exploration 的机制。**在做 Actor-Critic 的时候,有一个常见的 exploration 的方法是你会对你的 $\pi$ 的 output 的 distribution 下一个 constrain。这个 constrain 是希望这个 distribution 的 entropy 不要太小,希望这个 distribution 的 entropy 可以大一点,也就是希望不同的 action 它的被采用的机率平均一点。这样在 testing 的时候,它才会多尝试各种不同的 action才会把这个环境探索的比较好才会得到比较好的结果。这个就是 Advantage Actor-Critic。
## A3C ## A3C
![](img/9.7.png) ![](img/9.7.png)
什么是 A3C 呢Reinforcement learning 有一个问题就是它很慢那怎么增加训练的速度呢?这个可以讲到火影忍者就是有一次鸣人说,他想要在一周之内打败晓,所以要加快修行的速度,他老师就教他一个方法,这个方法是说你只要用影分身进行同样修行。那两个一起修行的话呢?经验值累积的速度就会变成2倍,所以,鸣人就开了 1000 个影分身,开始修行了。这个其实就是 Asynchronous(异步的) Advantage Actor-Critic也就是 A3C 这个方法的精神。 什么是 A3C 呢Reinforcement learning 有一个问题就是它很慢那怎么增加训练的速度呢?这个可以讲到火影忍者就是有一次鸣人说,他想要在一周之内打败晓,所以要加快修行的速度,他老师就教他一个方法,这个方法是说你只要用影分身进行同样修行。那两个一起修行的话呢?经验值累积的速度就会变成 2 倍,所以,鸣人就开了 1000 个影分身,开始修行了。这个其实就是 Asynchronous(异步的) Advantage Actor-Critic也就是 A3C 这个方法的精神。
![](img/9.8.png) ![](img/9.8.png)
@@ -117,11 +141,13 @@ A3C 这个方法就是同时开很多个 worker那每一个 worker 其实就
![](img/9.10.png) ![](img/9.10.png)
那我们讲一下它的 algorithm。假设我们 learn 了一个 Q-functionQ-function 就是 input s 跟 aoutput 就是 $Q^{\pi}(s,a)$。那接下来,我们要 learn 一个 actor这个 actor 的工作就是解这个 arg max 的 problem。这个 actor 的工作就是 input 一个 state s希望可以 output 一个 action a。这个 action a 被丢到 Q-function 以后,它可以让 $Q^{\pi}(s,a)$ 的值越大越好。那实际上在 train 的时候,你其实就是把 Q 跟 actor 接起来变成一个比较大的 network。Q 是一个 networkinput s 跟 aoutput 一个 value。Actor 在 training 的时候,它要做的事情就是 input soutput a。把 a 丢到 Q 里面,希望 output 的值越大越好。在 train 的时候会把 Q 跟 actor 接起来,当作是一个大的 network。然后你会 fix 住 Q 的参数,只去调 actor 的参数,就用 gradient ascent 的方法去 maximize Q 的 output。这就是一个 GAN这就是 conditional GAN。Q 就是 discriminator但在 reinforcement learning 就是 criticactor 在 GAN 里面就是 generator其实它们就是同一件事情。 那我们讲一下它的 algorithm。假设我们 learn 了一个 Q-functionQ-function 就是 input s 跟 aoutput 就是 $Q^{\pi}(s,a)$。那接下来,我们要 learn 一个 actor这个 actor 的工作就是解这个 arg max 的 problem。这个 actor 的工作就是 input 一个 state s希望可以 output 一个 action a。这个 action a 被丢到 Q-function 以后,它可以让 $Q^{\pi}(s,a)$ 的值越大越好。
那实际上在 train 的时候,你其实就是把 Q 跟 actor 接起来变成一个比较大的 network。Q 是一个 networkinput s 跟 aoutput 一个 value。Actor 在 training 的时候,它要做的事情就是 input soutput a。把 a 丢到 Q 里面,希望 output 的值越大越好。在 train 的时候会把 Q 跟 actor 接起来,当作是一个大的 network。然后你会 fix 住 Q 的参数,只去调 actor 的参数,就用 gradient ascent 的方法去 maximize Q 的 output。这就是一个 GAN这就是 conditional GAN。Q 就是 discriminator但在 reinforcement learning 就是 criticactor 在 GAN 里面就是 generator其实它们就是同一件事情。
![](img/9.11.png) ![](img/9.11.png)
我们来看一下这个 pathwise derivative policy gradient 的算法。一开始你会有一个 actor $\pi$,它去跟环境互动,然后,你可能会要它去 estimate Q value。estimate 完 Q value 以后,你就把 Q value 固定,只去 learn 一个 actor。假设这个 Q 估得是很准的,它知道在某一个 state 采取什么样的 action会真的得到很大的 value。接下来就 learn 这个 actoractor 在 given s 的时候,它采取了 a可以让最后 Q-function 算出来的 value 越大越好。你用这个 criteria 去 update 你的 actor $\pi$。然后有新的 $\pi$ 再去跟环境做互动,再 estimate Q再得到新的 $\pi$ 去 maximize Q 的 output。本来在 Q-learning 里面,你用得上的技巧,在这边也几乎都用得上,比如说 replay buffer、exploration 等等。 我们来看一下 pathwise derivative policy gradient 的算法。一开始你会有一个 actor $\pi$,它去跟环境互动,然后,你可能会要它去 estimate Q value。estimate 完 Q value 以后,你就把 Q value 固定,只去 learn 一个 actor。假设这个 Q 估得是很准的,它知道在某一个 state 采取什么样的 action会真的得到很大的 value。接下来就 learn 这个 actoractor 在 given s 的时候,它采取了 a可以让最后 Q-function 算出来的 value 越大越好。你用这个 criteria 去 update 你的 actor $\pi$。然后有新的 $\pi$ 再去跟环境做互动,再 estimate Q再得到新的 $\pi$ 去 maximize Q 的 output。本来在 Q-learning 里面,你用得上的技巧,在这边也几乎都用得上,比如说 replay buffer、exploration 等等。
![](img/9.12.png) ![](img/9.12.png)