强化学习根底篇[3]:DQN、Actor-Critic 具体解说
1.DQN 详解
1.1 DQN 网络概述及其翻新点
在之前的内容中,咱们解说了 Q -learning 和 Sarsa 算法。在这两个算法中,须要用一个 Q 表格来记录不同状态动作对应的价值,即一个大小为 $[状态个数,动作个数]$ 的二维数组。在一些简略的强化学习环境中,比方迷宫游戏中(图 1a),迷宫大小为 4 *4,因而该游戏存在 16 个 state;而悬崖问题(图 1b)的地图大小为 4*12,因而在该问题中状态数量为 48,这些都属于数量较少的状态,所以能够用 Q 表格来记录对应的状态动作价值。但当咱们须要利用强化学习来解决理论问题时,比方解决国际象棋问题或围棋问题,那么环境中就会蕴含 $10^{47}$ 个 state 或 $10^{170}$ 个 state,如此宏大的状态数量曾经很难用 Q 表格来进行存储,更不要说在 3D 仿真环境中,机器人手脚蜿蜒的状态是齐全不可数的。由此能够看到 Q 表格在大状态问题和不可数状态问题时的局限性。同时,在一个强化学习环境中,不是所有的状态都会被常常拜访,其中有些状态的拜访次数很少或简直为零,这就会导致价值预计并不牢靠。
图 1: 不同强化学习环境对应的状态量
为解决上述两个问题,一种解决方案即为 Q 表格参数化,应用深度神经网络拟合动作价值函数 $q_\pi$。参数化能够解决有限状态下的动作价值函数的存储问题,因为算法只需记住一组参数,动作价值函数的具体值可依据这一组参数算出。同时,参数化也有助于缓解因某些状态拜访次数少而导致的估值不准问题。因为对于一个处在间断空间内的状态价值函数,如果要对拜访次数较多的状态小临域内的状态进行价值预计,其预计后果也是有肯定保障的。
然而动作价值函数的参数化也会带来一些新的问题,首先,因为相邻样本来自同一条轨迹,会导致样本间关联性过强,而集中优化关联性过强的样本会导致神经网络解决其余样本时无奈获得较好的后果。举一个例子来阐明这个问题,比方:假如一个 agent 的 action 有上下左右四种抉择,神经网络采纳一条轨迹为 $s_1 \rightarrow right \rightarrow s_2 \rightarrow right \rightarrow s_3 \rightarrow up$ 的训练样本进行训练,而当该网络解决轨迹 $s_1 \rightarrow left \rightarrow s_2 \rightarrow left \rightarrow s_3 \rightarrow down \rightarrow s_4 \rightarrow ?$ 的样本进行预测时,就不会获得很好的成果。另一个问题是,当参数 $\theta$ 被同时用来计算动作价值函数的目标值和预测的 Q 值时,对 $\theta$ 的更新会同时影响这两个值,使得损失函数中的优化指标变得不明确,算法收敛不稳固。
为了解决如上两个问题,Mnih 等人提出了深度 Q 网络 (Deep Q-Network,DQN),其本质上是 Q -learning 算法,但应用深度学习网络拟合 Q 函数,解决了有限状态下的动作价值函数存储问题,同时采纳教训重现(Experience Replay)和固定 Q 指标(Fixed-Q-Target)两个翻新点来解决上述两个问题。
- 教训重现(Experience Replay):应用一个教训池存储多条教训 $s, a, r, s^{‘}$, 再从中随机抽取一批用于训练,很好的解决了样本关联性的问题,同时,因为教训池里的教训能够失去反复利用,也晋升了利用效率。
- 固定 Q 指标(Fixed-Q-Target):复制一个和原来 Q 网络结构一样的 Target Q 网络,用于计算 Q 目标值,这样在原来的 Q 网络中,target Q 就是一个固定的数值,不会再产生优化指标不明确的问题。
1.2. 算法流程
在 DQN 算法中,智能领会在与所处环境 $environment$ 进行交互后,取得一个环境提供的状态 $s_{t}$。接管状态后,智能领会依据深度学习网络预测出在该状态下不同口头 $action$ 对应的 Q 值,并给出一个口头 $a_{t}$,当口头反馈给环境后,环境会给出对应的处分 $r_{t}$、新的状态 $s_{t+1}$,以及是否触发终止条件 $done$。每一次交互实现,DQN 算法都会将 $s_{t}, a_{t}, r_{t}, s_{t+1}, done$ 作为一条教训贮存在教训池中,每次会从教训池中抽取一定量的教训作为输出数据训练神经网络。
DQN 算法流程:
- 初始化教训池,随机初始化 Q 网络;
for episode = 1,M do:
- 重置环境,取得第一个状态;
for t = 1, T do:
- 用 $\epsilon-greedy$ 策略生成一个 action:其中有 $\epsilon$ 的概率会随机抉择一个 action,即为摸索模式;其余状况下,则 $a_{t} = max_{a}Q(s_{t}, a;\theta)$,抉择在 $s_t$ 状态下使得 Q 最大的 action,即为教训模式;
- 依据动作与环境的交互,取得反馈的 reward $r_{t}$、下一个状态 $s_{t+1}$ 和是否触发终止条件 done;
- 将教训 $s_{t}, a_{t}, r_{t}, s_{t+1}, done$ 存入教训池;
从教训池中随机获取一个 minibatch 的教训;
- $Qtarget_{t} = \left\{\begin{matrix} r_{t},\quad if{\,} done \\r_{t} + \gamma max_{a^{‘}}Qtarget(s_{t+1}, a^{‘}; \theta),\quad if{\,}not{\,}done \end{matrix}\right.$
- 依据 $Qpred_{t}$ 和 $Qtarget_{t}$ 求 loss,梯度降落法更新 Q 网络
- end for
- 每隔固定个 episode,更新 Qtarget 网络
- end for
2.Actor-Critic
在 REINFORCE 算法中,每次须要依据一个策略采集一条残缺的轨迹,并计算这条轨迹上的回报。这种采样形式的方差比拟大,学习效率也比拟低。咱们能够借鉴时序差分学习的思维,应用动静布局办法来进步采样的效率,即从状态 $s$ 开始的总回报能够通过以后动作的即时处分 $r(s,a,s’)$ 和下一个状态 $s’$ 的值函数来近似预计。
演员 - 评论家算法 (Actor-Critic Algorithm) 是一种联合策略梯度和时序差分学习的强化学习办法,包含两局部,演员 (Actor) 和评价者(Critic),跟生成反抗网络(GAN)的流程相似:
- 演员 (Actor) 是指策略函数 $\pi_{\theta}(a|s)$,即学习一个策略来失去尽量高的回报。用于生成动作 (Action) 并和环境交互。
- 评论家 (Critic) 是指值函数 $V^{\pi}(s)$,对以后策略的值函数进行预计,即评估演员的好坏。用于评估 Actor 的体现,并领导 Actor 下一阶段的动作。
借助于值函数,演员 - 评论家算法能够进行单步更新参数,不须要等到回合完结才进行更新。
在 Actor-Critic 算法 外面,最出名的办法就是 A3C(Asynchronous Advantage Actor-Critic)。
- 如果去掉 Asynchronous,只有 Advantage Actor-Critic,就叫做
A2C
。 - 如果加了 Asynchronous,变成 Asynchronous Advantage Actor-Critic,就变成
A3C
。
2.1 Actor-Critic
2.1.1 Q-learning
如上图的网络都是为了近似 Q(s,a)函数,有了 Q(s,a),咱们就能够依据 Q(s,a)的值来作为判断根据,作出失当的行为。
Q-learning 算法最次要的一点是:决策的根据是 Q(s,a)的值。即算法的实质是在计算 以后状态 s, 采取某个动作 a 后会取得的将来的处分的冀望, 这个值就是 Q(s,a)。换句话说,咱们能够把这个算法的外围看成一个评论家 (Critic),而这个评论家会对咱们在以后状态 s 下,采取的动作 a 这个决策作出一个评估,评估的后果就是 Q(s,a) 的值。
Q-learning 算法却不怎么适宜解决间断动作空间的问题。因为如果动作空间是间断的,那么用 Q -learning 算法就须要对动作空间离散化,而离散化的后果会导致动作空间的维度十分高,这就使得 Q -learning 算法在理论利用起来很难求得最优值,且计算速度比较慢。
2.1.2 Policy Gradient
Policy Gradient 算法的核心思想是:依据以后状态,间接算出下一个动作是什么或下一个动作的概率分布是什么。即它的输出是以后状态 s, 而输入是具体的某一个动作或者是动作的散布。
咱们能够想像,Policy Gradient 就像一个演员(Actor),它依据某一个状态 s,而后作出某一个动作或者给出动作的散布,而不像 Q -learning 算法那样输入动作的 Q 函数值。
2.1.3 Actor Critic
Actor-Critic 是 Q -learning 和 Policy Gradient 的联合。
为了导出 Actor-Critic 算法,必须先理解 Policy Gradient 算法是如何一步步优化策略的。
如上图所示,最简略的 Policy Gradient 算法要优化的函数如下:
$$L=\sum log \pi_{\theta}(s_{t},a_{t})v_{t}$$
其中 $v_{t}$ 要依据 Monte-Carlo 算法预计,故又能够写成:
$$L=\sum log \pi_{\theta}(s_{t},a_{t})G_{t}$$
然而这个 $G_{t}$ 方差会比拟大,因为 $G_{t}$ 是由多个随机变量失去的,因而,咱们须要寻找缩小方差的方法。
一个办法就是引入一个 baseline 的函数 b,这个 b 会使得 $(G_{t}-b)$ 的冀望不变,然而方差会变小,罕用的 baseline 函数就是 $V(s_{t})$。再来,为了进一步升高 $G_{t}$ 的随机性,咱们用 $E(G_{t})$ 代替 $G_{t}$,这样原式就变成:
$$L=\sum log\pi_{\theta}(s_{t},a_{t})(E(G_{t}-V_{s_{t}}))$$
因为 $E(G_{t}|s_{t},a_{t})=Q(s_{t},a_{t})$, 故进一步变成:
$$L=\sum log \pi_{\theta}(s_{t},a_{t})(Q(s_{t},a_{t}),V(s_{t}))$$
照下面的式子看来,咱们须要两个网络去预计 $Q(s_{t},a_{t})$ 和 $V(s_{t})$,然而思考到贝尔曼方程:
$$Q(s_{t},a_{t})=E(r+\gamma V(s_{t+1}))$$
弃掉冀望:
$$Q(s_{t},a_{t})=r+\gamma V(s_{t+1})$$
在原始的 A3C 论文中试了各种办法,最初做进去就是间接把期望值拿掉最好,这是依据试验得进去的。
最终的式子为:
$$L=\sum log\pi_{\theta}(s_{t},a_{t})(r+\gamma V(s_{t+1})-V(s_{t}))$$
这样只须要一个网络就能够估算出 V 值了,而估算 V 的网络正是咱们在 Q-learning 中做的,所以咱们就把这个网络叫做 Critic。这样就在 Policy Gradient 算法的根底上引进了 Q-learning 算法了
2.2 Actor-Critic 算法流程
评估点基于 TD 误差,Critic 应用神经网络来计算 TD 误差并更新网络参数,Actor 也应用神经网络来更新网络参数
输出:迭代轮数 T,状态特色维度 n,动作集 A,步长 $\alpha$,$\beta$,衰减因子 $\gamma$,摸索率 $\epsilon$,Critic 网络结构和 Actor 网络结构。
输入:Actor 网络参数 $\theta$,Critic 网络参数 $w$
- 随机初始化所有的状态和动作对应的价值 Q;
-
for i from 1 to T,进行迭代:
- 初始化 S 为以后状态序列的第一个状态,拿到其特征向量 $\phi (S)$
- 在 Actor 网络中应用 $\phi (S)$ 作为输出,输入动作 A, 基于动作 A 失去新的状态 S ’, 反馈 R;
- 在 Critic 网络中别离应用 $\phi (S)$,$\phi (S’)$ 作为输出,失去 Q 值输入 V(S),V(S’);
- 计算 TD 误差 $\delta=R+\gamma V(S’)-V(S)$
- 应用均方差损失函数 $\sum (R+\gamma V(S’)-V(S,w))^2$ 作 Critic 网络参数 w 的梯度更新;
- 更新 Actor 网络参数 $\theta$:
$$\theta=\theta+\alpha \nabla_{\theta} log \pi_{\theta}(S_{t},A)\delta $$
对于 Actor 的分值函数 $\nabla_{\theta} log \pi_{\theta}(S_{t},A)$,能够抉择 softmax 或者高斯分值函数。
2.3 Actor-Critic 优缺点
-
长处
- 相比以值函数为核心的算法,Actor – Critic 利用了策略梯度的做法,这能让它在间断动作或者高维动作空间中选取适合的动作,而 Q -learning 做这件事会很艰难甚至瘫痪。、
- 相比单纯策略梯度,Actor – Critic 利用了 Q -learning 或其余策略评估的做法,使得 Actor Critic 能进行单步更新而不是回合更新,比单纯的 Policy Gradient 的效率要高。
-
毛病
- 根本版的 Actor-Critic 算法尽管思路很好,然而难收敛
-
目前改良的比拟好的有两个经典算法:
- DDPG 算法,应用了双 Actor 神经网络和双 Critic 神经网络的办法来改善收敛性。
- A3C 算法,应用了多线程的形式,一个主线程负责更新 Actor 和 Critic 的参数,多个辅线程负责别离和环境交互,失去梯度更新值,汇总更新主线程的参数。而所有的辅线程会定期从主线程更新网络参数。这些辅线程起到了相似 DQN 中教训回放的作用,然而成果更好。
更多文章请关注公重号:汀丶人工智能