Merge branch 'master' of github.com:datawhalechina/leedeeprl-notes
This commit is contained in:
@@ -20,3 +20,31 @@
|
|||||||
- 要输出离散动作的话,最后的output的激活函数使用 softmax 就可以实现。其可以保证输出是的动作概率,而且所有的动作概率加和为 1。
|
- 要输出离散动作的话,最后的output的激活函数使用 softmax 就可以实现。其可以保证输出是的动作概率,而且所有的动作概率加和为 1。
|
||||||
- 要输出连续的动作的话,可以在输出层这里加一层 tanh激活函数。其作用可以把输出限制到 [-1,1] 之间。我们拿到这个输出后,就可以根据实际动作的一个范围再做一下缩放,然后再输出给环境。比如神经网络输出一个浮点数是 2.8,然后经过 tanh 之后,它就可以被限制在 [-1,1] 之间,它输出 0.99。然后假设说小车的一个速度的那个动作范围是 [-2,2] 之间,那我们就按比例从 [-1,1] 扩放到 [-2,2],0.99 乘 2,最终输出的就是1.98,作为小车的速度或者说推小车的力输出给环境。
|
- 要输出连续的动作的话,可以在输出层这里加一层 tanh激活函数。其作用可以把输出限制到 [-1,1] 之间。我们拿到这个输出后,就可以根据实际动作的一个范围再做一下缩放,然后再输出给环境。比如神经网络输出一个浮点数是 2.8,然后经过 tanh 之后,它就可以被限制在 [-1,1] 之间,它输出 0.99。然后假设说小车的一个速度的那个动作范围是 [-2,2] 之间,那我们就按比例从 [-1,1] 扩放到 [-2,2],0.99 乘 2,最终输出的就是1.98,作为小车的速度或者说推小车的力输出给环境。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 3 Something About Interview
|
||||||
|
|
||||||
|
- 高冷的面试官:请简述一下DDPG算法?
|
||||||
|
|
||||||
|
答:深度确定性策略梯度(Deep Deterministic Policy Gradient,简称 DDPG) 使用 Actor Critic 结构,但是输出的不是行为的概率,,而是具体的行为,用于连续动作的预测。优化的目的是为了将DQN扩展到连续的动作空间。另外,其字如其名:
|
||||||
|
|
||||||
|
- Deep 是因为用了神经网络;
|
||||||
|
- Deterministic 表示 DDPG 输出的是一个确定性的动作,可以用于连续动作的一个环境;
|
||||||
|
- Policy Gradient 代表的是它用到的是策略网络。REINFORCE 算法每隔一个 episode 就更新一次,但 DDPG 网络是每个 step 都会更新一次 policy 网络,也就是说它是一个单步更新的 policy 网络。
|
||||||
|
|
||||||
|
- 高冷的面试官:你好,请问DDPG是on-policy还是off-policy,原因是什么呀?
|
||||||
|
|
||||||
|
答:off-policy。解释方法一,DDPG是优化的DQN,其使用了经验回放,所以为off-policy方法;解释方法二,因为DDPG为了保证一定的探索,对于输出动作加了一定的噪音,也就是说行为策略不再是优化的策略。
|
||||||
|
|
||||||
|
- 高冷的面试官:你是否了解过D4PG算法呢?描述一下吧。
|
||||||
|
|
||||||
|
答:分布的分布式DDPG(Distributed Distributional DDPG ,简称 D4PG),相对于DDPG其优化部分为:
|
||||||
|
|
||||||
|
- 分布式 critic: 不再只估计Q值的期望值,而是去估计期望Q值的分布, 即将期望Q值作为一个随机变量来进行估计。
|
||||||
|
- N步累计回报: 当计算TD误差时,D4PG计算的是N步的TD目标值而不仅仅只有一步,这样就可以考虑未来更多步骤的回报。
|
||||||
|
- 多个分布式并行actor:D4PG使用K个独立的演员并行收集训练样本并存储到同一个replay buffer中。
|
||||||
|
- 优先经验回放(Prioritized Experience Replay,PER):使用一个非均匀概率 $\pi$ 从replay buffer中采样。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,3 +36,54 @@
|
|||||||
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 。
|
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 的概念类似。
|
3. 还有,之前只要 learn Q,现在你多 learn 一个 $\pi$,其目的在于maximize Q-function,希望你得到的这个 actor,它可以让你的 Q-function output 越大越好,这个跟 learn GAN 里面的 generator 的概念类似。
|
||||||
4. 最后,与原来的 Q-function 一样。我们要把 target 的 Q-network 取代掉,你现在也要把 target policy 取代掉。
|
4. 最后,与原来的 Q-function 一样。我们要把 target 的 Q-network 取代掉,你现在也要把 target policy 取代掉。
|
||||||
|
|
||||||
|
|
||||||
|
## 3 Something About Interview
|
||||||
|
|
||||||
|
- 高冷的面试官:请简述一下A3C算法吧,另外A3C是on-policy还是off-policy呀?
|
||||||
|
|
||||||
|
答:A3C就是异步优势演员-评论家方法(Asynchronous Advantage Actor-Critic):评论家学习值函数,同时有多个actor并行训练并且不时与全局参数同步。A3C旨在用于并行训练,是 on-policy 的方法。
|
||||||
|
|
||||||
|
- 高冷的面试官:请问Actor - Critic有何优点呢?
|
||||||
|
|
||||||
|
答:
|
||||||
|
|
||||||
|
- 相比以值函数为中心的算法,Actor - Critic应用了策略梯度的做法,这能让它在连续动作或者高维动作空间中选取合适的动作,而 Q-learning 做这件事会很困难甚至瘫痪。
|
||||||
|
- 相比单纯策略梯度,Actor - Critic应用了Q-learning或其他策略评估的做法,使得Actor Critic能进行单步更新而不是回合更新,比单纯的Policy Gradient的效率要高。
|
||||||
|
|
||||||
|
- 高冷的面试官:请问A3C算法具体是如何异步更新的?
|
||||||
|
|
||||||
|
答:下面是算法大纲:
|
||||||
|
|
||||||
|
- 定义全局参数 $\theta$ 和 $w$ 以及特定线程参数 $θ′$ 和 $w′$。
|
||||||
|
- 初始化时间步 $t=1$。
|
||||||
|
- 当 $T<=T_{max}$:
|
||||||
|
- 重置梯度:$dθ=0$ 并且 $dw=0$。
|
||||||
|
- 将特定于线程的参数与全局参数同步:$θ′=θ$ 以及 $w′=w$。
|
||||||
|
- 令 $t_{start} =t$ 并且随机采样一个初始状态 $s_t$。
|
||||||
|
- 当 ($s_t!=$ 终止状态)并$t−t_{start}<=t_{max}$:
|
||||||
|
- 根据当前线程的策略选择当前执行的动作 $a_t∼π_{θ′}(a_t|s_t)$,执行动作后接收回报$r_t$然后转移到下一个状态st+1。
|
||||||
|
- 更新 t 以及 T:t=t+1 并且 T=T+1。
|
||||||
|
- 初始化保存累积回报估计值的变量
|
||||||
|
- 对于 $i=t_1,…,t_{start}$:
|
||||||
|
- r←γr+ri;这里 r 是 Gi 的蒙特卡洛估计。
|
||||||
|
- 累积关于参数 θ′的梯度:$dθ←dθ+∇θ′logπθ′(ai|si)(r−Vw′(si))$;
|
||||||
|
- 累积关于参数 w′ 的梯度:$dw←dw+2(r−Vw′(si))∇w′(r−Vw′(si))$.
|
||||||
|
- 分别使用 dθ以及 dw异步更新 θ以及 w。
|
||||||
|
|
||||||
|
- 高冷的面试官:Actor-Critic两者的区别是什么?
|
||||||
|
|
||||||
|
答:Actor是策略模块,输出动作;critic是判别器,用来计算值函数。
|
||||||
|
|
||||||
|
- 高冷的面试官:actor-critic框架中的critic起了什么作用?
|
||||||
|
|
||||||
|
答:critic表示了对于当前决策好坏的衡量。结合策略模块,当critic判别某个动作的选择时有益的,策略就更新参数以增大该动作出现的概率,反之降低动作出现的概率。
|
||||||
|
|
||||||
|
- 高冷的面试官:简述A3C的优势函数?
|
||||||
|
|
||||||
|
答:$A(s,a)=Q(s,a)-V(s)$是为了解决value-based方法具有高变异性。它代表着与该状态下采取的平均行动相比所取得的进步。
|
||||||
|
|
||||||
|
- 如果 A(s,a)>0: 梯度被推向了该方向
|
||||||
|
- 如果 A(s,a)<0: (我们的action比该state下的平均值还差) 梯度被推向了反方
|
||||||
|
|
||||||
|
但是这样就需要两套 value function,所以可以使用TD error 做估计:$A(s,a)=r+\gamma V(s')-V(s)$。
|
||||||
|
|||||||
Reference in New Issue
Block a user