机器学习笔记(17.1): Actor-Critic
可能更好的阅读体验 Jeefy's Blog: Actor-Critic
为了解决 High Variance 和 High bias 之间的矛盾,可以把它们结合在一起,利用value based 和 policy based 两类方法各自的优势,还顺带把它们的短板都补上了。于是就有了集大成的 Actor-Critic 类方法。 具体来说,就是构造一个全能型的 agent,既能直接输出策略,又能通过 value function 来实时评价当前策略的好坏。所以我们需要两个网络,一个负责生成策略的 Actor 和一个负责评价策略的 Critic。这就有点类似一个演员在表演,而同时一个评论家在随时纠正他的表现,而且两者都还在不断更新,这种互补式的训练方式会比单独的策略网络或者值函数网络更有效。
├─→ Actor-Critic (A2C/A3C)
│ └── 引入 Critic 网络估计 V(s) 替代 G_t 作为 baseline
│ └── 解决:PG 高方差(你之前问的 baseline 机制在此成熟)
│ └── 问题:需要同时训练 Actor + Critic,步长敏感
没想到吧,AC 框架也有一万种变体
Q-Actor-Critic
on-policy
回顾 REINFORCE 算法 的核心损失:
那么如果说,让 \(G_{\tau, t}\) 由该模型一同计算呢?这不就是 DQN 中的 \(Q\) 网络吗。
所以还需要加上拟合 \(Q\) 的损失:
为什么不直接使用 DQN?如果说动作空间不是离散的,那么我们就没法做:\({\rm softmax}_a Q(s, a)\) 的操作,得到最优的策略。
那既然我们有 \(Q(s, a)\) 了,真的需要这个 Policy Gradient 吗?其实没必要,直接定义:
损失也很简单了。
所以训练流程就是:
- 采样轨迹,更新 \(Q\) 网络(需要引入经验回放,和 DQN 一样,用于减少随时间传播的偏差)
- 利用更新后的 \(Q\) 网络更新 \(actor\) 即可。
https://github.com/datawhalechina/easy-rl/blob/master/notebooks/A2C.ipynb
V-Actor-Critic
对于 Q-Actor-Critic 来说,构建的是 \(Q(s, a)\),能不能直接构建 \(V(s) = {\mathbb E}[Q(s, a)]\) 之类的东西?
那么策略函数就要和 REINFORCE 算法 函数一致了,因为这里没有 \(Q(s, a)\) 的东西来指导下一步的动作了。
但是别忘了我们还有一个问题,方差大,怎么办?减去 baseline 就好了:
为什么可以减少方差但是不引入偏差?(这和归一化有点像啊)
注意到 \(V(s_t)\) 是一个只与 \(s_t\) 相关的一个量,那么引入的损失部分是:
其中:
如果说 \(\pi_\theta\) 关于 \(\theta\),对只有可数个 \(a\) 不可微,且 \(\nabla \pi_\theta\) 关于 \(\theta\) 有界,那么就可以交换 \(\nabla\) 和 \(\int\)。哦,我逝去的淑芬 QwQ

浙公网安备 33010602011771号