Update chapter9_questions&keywords.md

This commit is contained in:
Yiyuan Yang
2022-09-21 16:38:13 +08:00
committed by GitHub
parent 194f92427d
commit 0f3f04b5ed

View File

@@ -1,89 +1,97 @@
# Chapter9 Actor-Critic
# 第九章 演员-评论员算法
## 1 Keywords
## 关键词
- **A2C** Advantage Actor-Critic的缩写一种Actor-Critic法。
- **优势演员-评论员advantage actor-criticA2C算法**:一种改进的演员-评论员actor-critic)算法。
- **A3C** Asynchronous异步的Advantage Actor-Critic的缩写一种改进的Actor-Critic方法,通过异步的操作,进行RL模型训练的加速。
- **Pathwise Derivative Policy Gradient** 其为使用 Q-learning 解 continuous action 的方法,也是一种 Actor-Critic 方法。其会对于actor提供value最大的action而不仅仅是提供某一个action的好坏程度。
- **异步优势演员-评论员asynchronous advantage actor-criticA3C算法**:一种改进的演员-评论员算法,通过异步的操作,实现强化学习模型训练的加速。
## 2 Questions
- 整个Advantage actor-criticA2C算法的工作流程是怎样的
在传统的方法中我们有一个policy $\pi$ 以及一个初始的actor与environment去做互动收集数据以及反馈。通过这些每一步得到的数据与反馈我们就要进一步更新我们的policy $\pi$ 通常我们所使用的方式是policy gradient。但是对于actor-critic方法我们不是直接使用每一步得到的数据和反馈进行policy $\pi$ 的更新,而是使用这些数据进行 estimate value function这里我们通常使用的算法包括前几个chapters重点介绍的TD和MC等算法以及他们的优化算法。接下来我们再基于value function来更新我们的policy公式如下
$$
\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)
$$
其中,上式中的 $r_{t}^{n}+V^{\pi}\left(s_{t+1}^{n}\right)-V^{\pi}\left(s_{t}^{n}\right)$ 我们称为Advantage function我们通过上式得到新的policy后再去与environment进行交互然后再重复我们的estimate value function的操作再用value function来更新我们的policy。以上的整个方法我们称为Advantage Actor-Critic。
- 在实现 Actor-Critic 的时候有哪些我们用到的tips?
答:与我们上一章讲述的东西有关:
1. **estimate 两个 network** 一个是estimate V function另外一个是 policy 的 network也就是你的 actor。 V-network的input 是一个 stateoutput 是一个 scalar。然后 actor 这个 network的input 是一个 stateoutput 是一个 action 的 distribution。这两个 networkactor 和 critic 的 input 都是 s所以它们前面几个 layer其实是可以 share 的。尤其是假设你今天是玩 Atari 游戏input 都是 image。那 input 那个 image 都非常复杂image 很大,通常前面都会用一些 CNN 来处理,把那些 image 抽象成 high level 的 information所以对 actor 跟 critic 来说是可以共用的。我们可以让 actor 跟 critic 的前面几个 layer 共用同一组参数。那这一组参数可能是 CNN。先把 input 的 pixel 变成比较 high level 的信息,然后再给 actor 去决定说它要采取什么样的行为,给这个 critic给 value function 去计算 expected reward。
2. **exploration 机制:** 其目的是对policy $\pi$ 的 output 的分布进行一个限制,从而使得 distribution 的 entropy 不要太小,即希望不同的 action 被采用的机率平均一点。这样在 testing 的时候,它才会多尝试各种不同的 action才会把这个环境探索的比较好才会得到比较好的结果。
- A3CAsynchronous Advantage Actor-Critic在训练是回有很多的worker进行异步的工作最后再讲他们所获得的“结果”再集合到一起。那么其具体的如何运作的呢
A3C一开始会有一个 global network。它们有包含 policy 的部分和 value 的部分,假设它的参数就是 $\theta_1$。对于每一个 worker 都用一张 CPU 训练(举例子说明),第一个 worker 就把 global network 的参数 copy 过来,每一个 worker 工作前都会global network 的参数 copy 过来。然后这个worker就要去跟environment进行交互每一个 actor 去跟environment做互动后就会计算出 gradient并且更新global network的参数。这里要注意的是所有的 actor 都是平行跑的、之间没有交叉。所以每个worker都是在global network“要”了一个参数以后做完就把参数传回去。所以当第一个 worker 做完想要把参数传回去的时候,本来它要的参数是 $\theta_1$,等它要把 gradient 传回去的时候。可能别人已经把原来的参数覆盖掉,变成 $\theta_2$了。但是没有关系,它一样会把这个 gradient 就覆盖过去就是了。
- 对比经典的Q-learning算法我们的Pathwise Derivative Policy Gradient有哪些改进之处
答:
1. 首先,把 $Q(s,a)$ 换成 了 $\pi$,之前是用 $Q(s,a)$ 来决定在 state $s_t$ 产生那一个 action, $a_{t}$ 现在是直接用 $\pi$ 。原先我们需要解 argmax 的问题,现在我们直接训练了一个 actor。这个 actor input $s_t$ 就会告诉我们应该采取哪一个 $a_{t}$。综上,本来 input $s_t$,采取哪一个 $a_t$,是 $Q(s,a)$ 决定的。在 Pathwise Derivative Policy Gradient 里面,我们会直接用 $\pi$ 来决定。
2. 另外,原本是要计算在 $s_{i+1}$ 时对应的 policy 采取的 action a 会得到多少的 Q value那你会采取让 $\hat{Q}$ 最大的那个 action a。现在因为我们不需要再解argmax 的问题。所以现在我们就直接把 $s_{i+1}$ 代入到 policy $\pi$ 里面,直接就会得到在 $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}$ 。但现在因为哪一个 action a 可以让 $\hat{Q}$ 最大这件事情已经被用那个 policy 取代掉了,所以我们要知道哪一个 action a 可以让 $\hat{Q}$ 最大,就直接把那个 state 带到 $\hat{\pi}$ 里面,看它得到哪一个 a就用那一个 a其也就是会让 $\hat{Q}(s,a)$ 的值最大的那个 a 。
3. 还有,之前只要 learn Q现在你多 learn 一个 $\pi$其目的在于maximize Q-function希望你得到的这个 actor它可以让你的 Q-function output 越大越好,这个跟 learn GAN 里面的 generator 的概念类似。
4. 最后,与原来的 Q-function 一样。我们要把 target 的 Q-network 取代掉,你现在也要把 target policy 取代掉。
- **路径衍生策略梯度pathwise derivative policy gradient**一种使用Q学习来求解连续动作的算法也是一种演员-评论员算法。其会对演员提供价值最大的动作,而不仅仅是提供某一个动作的好坏程度。
## 3 Something About Interview
## 习题
- 高冷的面试官请简述一下A3C算法吧另外A3C是on-policy还是off-policy呀
**9-1** 完整的优势演员-评论员算法的工作流程是怎样的
A3C就是异步优势演员-评论家方法Asynchronous Advantage Actor-Critic评论家学习值函数同时有多个actor并行训练并且不时与全局参数同步。A3C旨在用于并行训练是 on-policy 的方法。
在传统的方法中,我们有一个策略 $\pi$ 以及一个初始的演员与环境交互、收集数据以及反馈。通过每一步得到的反馈,我们进一步更新我们的策略 $\pi$ ,通常我们使用的更新方式是策略梯度。但是对于演员-评论员算法,我们不是直接使用每一步得到的数据和反馈进行策略 $\pi$ 的更新,而是使用这些数据和反馈进行价值函数的估计,这里我们通常使用的算法包括时序差分和蒙特卡洛等算法以及基于它们的优化算法。接下来我们再基于价值函数来更新策略,公式如下:
- 高冷的面试官请问Actor - Critic有何优点呢
$$
\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)
$$
答:
其中 $r_{t}^{n}+V_{\pi}\left(s_{t+1}^{n}\right)-V_{\pi}\left(s_{t}^{n}\right)$ 为优势函数。我们通过以上方法得到新的策略后,再与环境交互,然后重复预估价值函数的操作,用价值函数来更新我们的策略。以上的整个方法我们称为优势演员-评论员算法。
- 相比以值函数为中心的算法Actor - Critic应用了策略梯度的做法这能让它在连续动作或者高维动作空间中选取合适的动作而 Q-learning 做这件事会很困难甚至瘫痪。
- 相比单纯策略梯度Actor - Critic应用了Q-learning或其他策略评估的做法使得Actor Critic能进行单步更新而不是回合更新比单纯的Policy Gradient的效率要高。
**9-2** 在实现演员-评论员算法的时候有哪些技巧?
- 高冷的面试官请问A3C算法具体是如何异步更新的
1预估两个网络一个是价值网络另外一个是策略网络。价值网络的输入是一个状态输出是一个标签策略网络的输入是一个状态输出是一个动作的分布。这两个网络中演员和评论员的输入都是状态所以它们前面几层是可以共享的。例如玩雅达利游戏时输入都是图片。输入的图片都非常复杂且比较大通常前期我们都会用一些卷积神经网络来处理这些图片把图片抽象成深层次的特征这些网络对演员与评论员网络来说是可以共用的。我们可以让演员与评论员的前面几层共用同一组参数这一组参数可能是卷积神经网络中的参数。先把输入的像素变成比较高维度的特征信息然后输入演员网络决定要采取什么样的动作评论员网络使用价值函数计算期望奖励。
答:下面是算法大纲:
2探索机制其目的是对策略 $\pi$ 的输出分布进行限制,从而使得分布的熵不要太小,即希望不同的动作被采用的概率平均一些。这样在测试的时候,智能体才会多尝试各种不同的动作,才会对环境进行充分探索,从而得到比较好的结果。
- 定义全局参数 $\theta$ 和 $w$ 以及特定线程参数 $θ′$ 和 $w$。
- 初始化时间步 $t=1$。
- 当 $T<=T_{max}$
- 重置梯度:$dθ=0$ 并且 $dw=0$。
- 将特定于线程的参数与全局参数同步:$θ′=θ$ 以及 $w=w$。
- 令 $t_{start} =t$ 并且随机采样一个初始状态 $s_t$。
-$s_t!=$ 终止状态)并$tt_{start}<=t_{max}$
- 根据当前线程的策略选择当前执行的动作 $a_tπ_{θ′}(a_t|s_t)$,执行动作后接收回报$r_t$然后转移到下一个状态st+1。
- 更新 t 以及 Tt=t+1 并且 T=T+1。
- 初始化保存累积回报估计值的变量
- 对于 $i=t_1,…,t_{start}$
- r←γr+ri这里 r 是 Gi 的蒙特卡洛估计。
- 累积关于参数 θ′的梯度:$dθ←dθ+∇θlogπθ(ai|si)(rVw(si))$;
- 累积关于参数 w 的梯度:$dw←dw+2(rVw(si))∇w(rVw(si))$.
- 分别使用 dθ以及 dw异步更新 θ以及 w。
**9-3** 异步优势演员-评论员算法在训练时有很多的进程进行异步的工作,最后再将他们所获得的“结果”集合到一起。那么其具体是如何运作的呢?
- 高冷的面试官Actor-Critic两者的区别是什么
异步优势演员-评论员算法,即算法一开始会有一个全局网络,其包含策略部分和价值部分。假设它的参数是 $\theta_1$假设对于每一个演员都用一个CPU训练每一个演员工作前都会将全局网络的参数复制进来。然后演员与环境进行交互每一个演员与环境交互后都会计算出梯度并且更新全局网络的参数。这里要注意的是所有的演员都是并行运行的。所以每个演员都是在全局网络复制了参数以后执行完再把参数传回去。所以当第一个演员执行完想要把参数传回去的时候本来它要的参数是 $\theta_1$,等它把梯度传回去的时候,可能原来的参数已经被覆盖,变成 $\theta_2$ 了。
Actor是策略模块输出动作critic是判别器用来计算值函数。
**9-4** 对比经典的Q学习算法路径衍生策略梯度有哪些改进之处
- 高冷的面试官actor-critic框架中的critic起了什么作用
1把 $Q(s,a)$ 换成了 $\pi$。经典的Q学习算法是用 $Q(s,a)$ 来决定在状态 $s_t$ 产生哪一个动作 $a_{t}$ ,路径衍生策略梯度是直接用 $\pi$ 来决定。面对前者,我们需要解决最大值的问题,现在的路径衍生策略梯度直接训练了一个演员网络。其输入状态 $s_t$ 就会告诉我们应该采取哪一个动作 $a_{t}$。综上经典的Q学习算法输入状态 $s_t$,采取哪一个动作 $a_t$ 是 $Q(s,a)$ 决定的,在路径衍生策略梯度里面,我们会直接用 $\pi$ 来决定。
critic表示了对于当前决策好坏的衡量。结合策略模块当critic判别某个动作的选择时有益的策略就更新参数以增大该动作出现的概率反之降低动作出现的概率
2经典的Q学习算法计算在 $s_{i+1}$ 下对应的策略采取的动作 $a$ 得到的Q值我们会采取让 $\hat{Q}$ 最大的动作 $a$。现在的路径衍生策略梯度因为我们不需要再求解决最大化的问题,所以我们直接把状态 $s_{i+1}$ 代入策略 $\pi$ 中,就会得到在状态 $s_{i+1}$ 下哪一个动作会带给我们最大的Q值就执行这个动作。在Q函数中有两个Q网络一个是真正的Q网络另外一个是目标Q网络。实际上在执行时也会有两个演员网络一个真正要学习的演员网络 $\pi$ 和一个目标演员网络 $\hat{\pi}$
- 高冷的面试官简述A3C的优势函数
3经典的Q学习算法只需要学习Q函数路径衍生策略梯度需要多学习一个策略 $\pi$其目的在于最大化Q函数希望得到的演员可以让Q函数的输出尽可能的大这与生成对抗网络里面的生成器的概念类似。
答:$A(s,a)=Q(s,a)-V(s)$是为了解决value-based方法具有高变异性。它代表着与该状态下采取的平均行动相比所取得的进步
4与原来的Q函数一样我们要把目标Q网络取代掉路径衍生策略梯度中也要把目标策略取代掉
- 如果 A(s,a)>0: 梯度被推向了该方向
- 如果 A(s,a)<0: (我们的action比该state下的平均值还差) 梯度被推向了反方
但是这样就需要两套 value function所以可以使用TD error 做估计:$A(s,a)=r+\gamma V(s')-V(s)$。
## 面试题
**9-1** 友善的面试官:请简述一下异步优势演员-评论员算法A3C另外A3C是同策略还是异策略的模型呀
A3C是异步优势演员-评论员算法其中评论员学习价值函数同时有多个演员并行训练并且不时与全局参数同步。A3C旨在并行训练是同策略算法。
**9-2** 友善的面试官:请问演员-评论员算法有何优点呢?
1相比以价值函数为中心的算法演员-评论员算法应用了策略梯度的技巧这能让它在连续动作或者高维动作空间中选取合适的动作而Q学习做这件事会很困难。
2相比单纯策略梯度演员-评论员算法应用了Q学习或其他策略评估的做法使得演员-评论员算法能进行单步更新而不是回合更新,比单纯的策略梯度的效率要高。
**9-3** 友善的面试官:请问异步优势演员-评论员算法具体是如何异步更新的?
下面是异步优势演员-评论员算法的大纲,由于其为异步多线程算法,我们只对其中某一单线程进行分析。
1定义全局参数 $\theta$ 和 $w$ 以及特定线程参数 $\theta'$ 和 $w'$。
2初始化时间步 $t=1$。
3当 $T \leqslant T_{\mathrm{max}}$:
- 重置梯度:$\mathrm{d} \theta = 0$ 并且 $\mathrm{d}w = 0$。
- 将特定于线程的参数与全局参数同步:$\theta' = \theta$ 以及 $w'=w$。
- 令 $t_{\mathrm{start}} =t$ 并且随机采样一个初始状态 $s_t$。
-$s_t!=$ 终止状态)并且$tt_{\mathrm{start}} \leqslant t_{\mathrm{max}}$。
- 根据当前线程的策略选择当前执行的动作 $a_t\sim\pi_{\theta'}(a_t|s_t)$,执行动作后接收奖励 $r_t$ 然后转移到下一个状态 $s_{t+1}$。
- 更新 $t$ 以及 $T$$t=t+1$ 并且 $T=T+1$。
- 初始化保存累积奖励估计值的变量。
- 对于 $i=t_1, \dots ,t_{\mathrm{start}}$:
- $r \gets \gamma r+r_i$;这里的 $r$ 是 $G_i$ 的蒙特卡洛估计。
- 累积关于参数 $\theta'$ 的梯度:$\mathrm{d} \theta \gets \mathrm{d}\theta + \nabla_{\theta'} \mathrm{log} \pi_{\theta'}(a_i|s_i)(rV_{w'}(s_i))$。
- 累积关于参数 $w'$ 的梯度:$\mathrm{d}w \gets \mathrm{d}w+ \mathrm{\partial} (r-V_{w'}(s_i))^2 / \mathrm{\partial} w'$。
- 分别使用 $\mathrm{d}\theta$ 以及 $\mathrm{d}w$ 异步更新 $\theta$ 以及 $w$。
**9-4** 友善的面试官:演员-评论员算法中,演员和评论员两者的区别是什么?
演员是策略模块,输出动作;评论员是判别器,用来计算价值函数。
**9-5** 友善的面试官:演员-评论员算法框架中的评论员起了什么作用?
评论员衡量当前决策的好坏。结合策略模块,当评论员判别某个动作的选择是有益的时候,策略就更新参数以增大该动作出现的概率,反之减小该动作出现的概率。
**9-6** 友善的面试官:简述异步优势演员-评论员算法的优势函数。
优势函数的计算公式为 $A(s,a)=Q(s,a)-V(s)=r+\gamma V(s')-V(s)$ ,其可以定量地表示选择动作 $a$ 的优势。即当动作 $a$ 低于价值函数的平均值的时候,优势函数为负值;反之为正值。其是一个标量,具体来说:
1如果 $A(s,a)>0$ ,梯度被推向正方向;
2如果 $A(s,a)<0$ ,即我们的动作比该状态下的平均值还差,则梯度被推向反方向。
这样就需要两个价值函数,所以可以使用时序差分方法做误差估计:$A(s,a)=r+\gamma V(s')-V(s)$ 。