fix some typos
This commit is contained in:
@@ -2,8 +2,22 @@
|
||||
|
||||
## Actor-Critic
|
||||
|
||||
在 REINFORCE 算法中,每次需要根据一个策略采集一条完整的轨迹,并计算这条轨迹上的回报。这种采样方式的方差比较大,学习效率也比较低。我们可以借鉴时序差分学习的思想,使用动态规划方法来提高采样的效率,即从状态 $s$ 开始的总回报可以通过当前动作的即时奖励 $r(s,a,s')$ 和下一个状态 $s'$ 的值函数来近似估计。
|
||||
|
||||
`演员-评论员算法(Actor-Critic Algorithm)`是一种结合`策略梯度`和`时序差分学习`的强化学习方法,其中:
|
||||
|
||||
* 演员(Actor)是指策略函数 $\pi_{\theta}(a|s)$,即学习一个策略来得到尽量高的回报。
|
||||
* 评论员(Critic)是指值函数 $V^{\pi}(s)$,对当前策略的值函数进行估计,即评估演员的好坏。
|
||||
* 借助于值函数,演员-评论员算法可以进行单步更新参数,不需要等到回合结束才进行更新。
|
||||
|
||||
在 Actor-Critic 算法 里面,最知名的方法就是 `A3C(Asynchronous Advantage Actor-Critic)`。
|
||||
|
||||
* 如果去掉前面这个 Asynchronous,只有 `Advantage Actor-Critic`,就叫做 `A2C`。
|
||||
* 如果前面加了 Asynchronous,变成 Asynchronous Advantage Actor-Critic,就变成 A3C。
|
||||
|
||||
### Review: Policy Gradient
|
||||
|
||||

|
||||
在 `Actor-Critic` 里面,最知名的方法就是 `A3C(Asynchronous Advantage Actor-Critic)`。如果去掉前面这个 Asynchronous,只有 `Advantage Actor-Critic`,就叫做 `A2C`。如果前面加了 Asynchronous,变成 Asynchronous Advantage Actor-Critic,就变成 A3C。
|
||||
|
||||
那我们复习一下 policy gradient,在 policy gradient,我们在 update policy 的参数 $\theta$ 的时候,我们是用了下面这个式子来算出我们的 gradient。
|
||||
$$
|
||||
@@ -13,13 +27,21 @@ $$
|
||||
|
||||
我们把用 G 来表示 accumulated reward。但 G 这个值,其实是非常的 unstable 的。因为互动的 process 本身是有随机性的,所以在某一个 state s 采取某一个 action a,然后计算 accumulated reward,每次算出来的结果都是不一样的,所以 G 其实是一个 random variable。给同样的 state s,给同样的 action a,G 可能有一个固定的 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 = 100,sample 到 G = -10,那显然你的结果会是很差的。
|
||||
|
||||
### Review: Q-learning
|
||||
|
||||

|
||||
|
||||
能不能让这整个 training process 变得比较 stable 一点,能不能够直接估测 G 这个 random variable 的期望值?我们在 state s 采取 action a 的时候,直接用一个 network 去估测在 state s 采取 action a 的时候,G 的期望值。如果这件事情是可行的,那之后 training 的时候,就用期望值来代替 sample 的值,这样会让 training 变得比较 stable。
|
||||
Q: 能不能让整个 training process 变得比较稳定一点,能不能够直接估测 G 这个 random variable 的期望值?
|
||||
|
||||
怎么拿期望值代替 sample 的值呢?这边就需要引入 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: 我们在 state s 采取 action a 的时候,直接用一个 network 去估测在 state s 采取 action a 的时候,G 的期望值。如果这件事情是可行的,那之后 training 的时候,就用期望值来代替 sample 的值,这样会让 training 变得比较稳定。
|
||||
|
||||
$V^{\pi}$ input s,output 一个 scalar。$Q^{\pi}$ input s,然后它会给每一个 a 都 assign 一个 Q value。这个 estimate 的时候,你可以用 TD 也可以用 MC。用TD 比较稳,用 MC 比较精确。
|
||||
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 的期望值是多少。
|
||||
|
||||
$V^{\pi}$ input s,output 一个 scalar。$Q^{\pi}$ input s,然后它会给每一个 a 都 assign 一个 Q value。这个 estimate 的时候,你可以用 TD 也可以用 MC。用 TD 比较稳,用 MC 比较精确。
|
||||
|
||||
### Actor-Critic
|
||||
|
||||

|
||||
|
||||
@@ -34,9 +56,11 @@ $$
|
||||
|
||||
所以我们就把 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
|
||||
|
||||

|
||||
|
||||
如果你这么实现的话,有一个缺点是,你要 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 个 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)$的期望值,即
|
||||
|
||||
$$
|
||||
Q^{\pi}\left(s_{t}^{n}, a_{t}^{n}\right)=E\left[r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)\right]
|
||||
@@ -85,8 +109,9 @@ A3C 这个方法就是同时开很多个 worker,那每一个 worker 其实就
|
||||
## Pathwise Derivative Policy Gradient
|
||||

|
||||
|
||||
讲完 A3C 之后,我们要讲另外一个方法叫做 `Pathwise Derivative Policy Gradient`,这个方法很神奇,它可以想成是 Q-learning 解 continuous action 的一种特别的方法。那它也可以想成是一种特别的 Actor-Critic 的方法。
|
||||
用棋灵王来比喻的话,阿光是一个 actor,佐为是一个 critic。阿光落某一子以后呢,如果佐为是一般的 Actor-Critic,他会告诉他说这时候不应该下小马步飞,他会告诉你,你现在采取的这一步算出来的 value 到底是好还是不好,但这样就结束了,他只告诉你说好还是不好。因为一般的这个 Actor-Critic 里面那个 critic 就是 input state 或 input state 跟 action 的 pair,然后给你一个 value 就结束了。所以对 actor 来说,它只知道它做的这个行为到底是好还是不好。但如果是在pathwise derivative policy gradient 里面,这个 critic 会直接告诉 actor 说采取什么样的 action 才是好的。所以今天佐为不只是告诉阿光说,这个时候不要下小马步飞,同时还告诉阿光说这个时候应该要下大马步飞,所以这个就是Pathwise Derivative Policy Gradient 中的 critic。critic 会直接告诉 actor 做什么样的 action 才可以得到比较大的 value。
|
||||
讲完 A3C 之后,我们要讲另外一个方法叫做 `Pathwise Derivative Policy Gradient`。这个方法很神奇,它可以看成是 Q-learning 解 continuous action 的一种特别的方法,也可以看成是一种特别的 Actor-Critic 的方法。
|
||||
|
||||
用棋灵王来比喻的话,阿光是一个 actor,佐为是一个 critic。阿光落某一子以后呢,如果佐为是一般的 Actor-Critic,他会告诉他说这时候不应该下小马步飞,他会告诉你,你现在采取的这一步算出来的 value 到底是好还是不好,但这样就结束了,他只告诉你说好还是不好。因为一般的这个 Actor-Critic 里面那个 critic 就是 input state 或 input state 跟 action 的 pair,然后给你一个 value 就结束了。所以对 actor 来说,它只知道它做的这个行为到底是好还是不好。但如果是在pathwise derivative policy gradient 里面,这个 critic 会直接告诉 actor 说采取什么样的 action 才是好的。所以今天佐为不只是告诉阿光说,这个时候不要下小马步飞,同时还告诉阿光说这个时候应该要下大马步飞,所以这个就是Pathwise Derivative Policy Gradient 中的 critic。critic 会直接告诉 actor 做什么样的 action 才可以得到比较大的 value。
|
||||
|
||||
从 Q-learning 的观点来看,Q-learning 的一个问题是你没有办法在用 Q-learning 的时候,考虑 continuous vector。其实也不是完全没办法,就是比较麻烦,比较没有 general solution,我们怎么解这个 optimization problem 呢?我们用一个 actor 来解这个 optimization 的 problem。本来在 Q-learning 里面,如果是一个 continuous action,我们要解这个 optimization problem。但是现在这个 optimization problem 由 actor 来解,我们假设 actor 就是一个 solver,这个 solver 的工作就是给你 state, s,然后它就去解解告诉我们说,哪一个 action 可以给我们最大的 Q value,这是从另外一个观点来看 pathwise derivative policy gradient 这件事情。这个说法,你有没有觉得非常的熟悉呢?我们在讲 GAN 的时候,不是也讲过一个说法。我们 learn 一个 discriminator,它是要 evaluate 东西好不好,discriminator 要自己生成东西,非常的困难,那怎么办?因为要解一个 arg max 的 problem 非常的困难,所以用 generator 来生,所以今天的概念其实是一样的。Q 就是那个 discriminator,要根据这个 discriminator 决定 action 非常困难,怎么办?另外 learn 一个 network 来解这个 optimization problem,这个东西就是 actor。所以,两个不同的观点是同一件事,从两个不同的观点来看,一个观点是说,我们可以对原来的 Q-learning 加以改进,怎么改进呢?我们 learn 一个 actor 来决定 action 以解决 arg max 不好解的问题。或是另外一个观点是,原来的 actor-critic 的问题是 critic 并没有给 actor 足够的信息,它只告诉它好或不好,没有告诉它说什么样叫好,那现在有新的方法可以直接告诉 actor 说,什么样叫做好。
|
||||
|
||||
@@ -104,7 +129,7 @@ A3C 这个方法就是同时开很多个 worker,那每一个 worker 其实就
|
||||
|
||||

|
||||
|
||||
接下来我们把它改成 Pathwise Derivative Policy Gradient,这边就是只要做四个改变就好。
|
||||
接下来我们把 Q-learning 改成 Pathwise Derivative Policy Gradient,这边需要做四个改变。
|
||||
|
||||
* 第一个改变是,你要把 Q 换成 $\pi$,本来是用 Q 来决定在 state $s_t$ 产生那一个 action, $a_{t}$ 现在是直接用 $\pi$ 。我们不用再解 arg max 的 problem 了,我们直接 learn 了一个 actor。这个 actor input $s_t$ 就会告诉我们应该采取哪一个 $a_{t}$。所以本来 input $s_t$,采取哪一个 $a_t$,是 Q 决定的。在 Pathwise Derivative Policy Gradient 里面,我们会直接用 $\pi$ 来决定,这是第一个改变。
|
||||
* 第二个改变是,本来这个地方是要计算在 $s_{i+1}$,根据你的 policy 采取某一个 action a 会得到多少的 Q value。那你会采取让 $\hat{Q}$ 最大的那个 action a。那现在因为我们其实不好解这个 arg max 的 problem,所以 arg max problem,其实现在就是由 policy $\pi$ 来解了,所以我们就直接把 $s_{i+1}$ 代到 policy $\pi$ 里面,你就会知道说 given $s_{i+1}$ ,哪一个 action 会给我们最大的 Q value,那你在这边就会 take 那一个 action。在 Q-function 里面,有两个 Q network,一个是真正的 Q network,另外一个是 target Q network。那实际上你在 implement 这个 algorithm 的时候,你也会有两个 actor,你会有一个真正要 learn 的 actor $\pi$,你会有一个 target actor $\hat{\pi}$ 。这个原理就跟为什么要有 target Q network 一样,我们在算 target value 的时候,我们并不希望它一直的变动,所以我们会有一个 target 的 actor 和一个 target 的 Q-function,它们平常的参数就是固定住的,这样可以让你的这个 target 的 value 不会一直地变化。所以本来到底是要用哪一个 action a,你会看说哪一个 action a 可以让 $\hat{Q}$ 最大。但现在因为哪一个 action a 可以让 $\hat{Q}$ 最大这件事情已经被用那个 policy 取代掉了,所以我们要知道哪一个 action a 可以让 $\hat{Q}$ 最大,就直接把那个 state 带到 $\hat{\pi}$ 里面,看它得到哪一个 a,就用那一个 a,那一个 a 就是会让 $\hat{Q}(s,a)$ 的值最大的那个 a 。其实跟原来的这个 Q-learning 也是没什么不同,只是原来你要解 arg max 的地方,通通都用 policy 取代掉了,那这个是第二个不同。
|
||||
@@ -114,4 +139,13 @@ A3C 这个方法就是同时开很多个 worker,那每一个 worker 其实就
|
||||
## Connection with GAN
|
||||

|
||||
|
||||
其实 GAN 跟 Actor-Critic 的方法是非常类似的。这边就不细讲,你可以去找到一篇 paper 叫做 `Connecting Generative Adversarial Network and Actor-Critic Methods`。知道 GAN 跟 Actor-Critic 非常像有什么帮助呢?一个很大的帮助就是 GAN 跟 Actor-Critic 都是以难 train 而闻名的。所以在文献上就会收集各式各样的方法,告诉你说怎么样可以把 GAN train 起来。怎么样可以把 Actor-Critic train 起来。但是因为做 GAN 跟 Actor-Critic 的人是两群人,所以这篇 paper 里面就列出说在 GAN 上面有哪些技术是有人做过的,在 Actor-Critic 上面,有哪些技术是有人做过的。也许在 GAN 上面有试过的技术,你可以试着 apply 在 Actor-Critic 上,在 Actor-Critic 上面做过的技术,你可以试着 apply 在 GAN 上面,看看是否 work。
|
||||
其实 GAN 跟 Actor-Critic 的方法是非常类似的。这边就不细讲,你可以去找到一篇 paper 叫做 `Connecting Generative Adversarial Network and Actor-Critic Methods`。
|
||||
|
||||
Q: 知道 GAN 跟 Actor-Critic 非常像有什么帮助呢?
|
||||
|
||||
A: 一个很大的帮助就是 GAN 跟 Actor-Critic 都是以难 train 而闻名的。所以在文献上就会收集各式各样的方法,告诉你说怎么样可以把 GAN train 起来。怎么样可以把 Actor-Critic train 起来。但是因为做 GAN 跟 Actor-Critic 的人是两群人,所以这篇 paper 里面就列出说在 GAN 上面有哪些技术是有人做过的,在 Actor-Critic 上面,有哪些技术是有人做过的。也许在 GAN 上面有试过的技术,你可以试着 apply 在 Actor-Critic 上,在 Actor-Critic 上面做过的技术,你可以试着 apply 在 GAN 上面,看看是否 work。
|
||||
|
||||
## References
|
||||
|
||||
* [神经网络与深度学习](https://nndl.github.io/)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user