深度强化学习(理论篇)—— 从 Critic-only、Actor-only 到 Actor-Critic

来源于 Tangowl 的系列文章 https://blog.csdn.net/lipengcn/article/details/81253033

自己第一篇 paper 就是用 MDP 解决资源优化问题,想来那时写个东西真是艰难啊。 彼时倒没想到这个数学工具,如今会这么火,还衍生了新的领域——强化学习。当然现在研究的内容已有了很大拓展。
这段时间会做个深度强化学习的专题,包括基础理论、最新文献和实践三大部分。


1 概述

1.1 强化学习 v.s. 监督学习

强化学习,与监督学习、无监督学习并列,作为机器学习的三大类。强化学习,研究的是 agent 从与 environment 交互过程进行学习,学习如何作用于 environment,从而可以从 environment 得到最优的激励。这个过程可以描述如下:
[图片上传失败...(image-ae3406-1535181350541)]
即,agent 从 environment 处观察到 state,从而基于某种 policy 做出 action,environment 继而对这种 action 做出反馈 reward 并转移到新的 state,agent 面对新的 state 和之前 policy 得到的 reward,再次给出 action,周而复始,目标就是 reward 某种长期指标最大化。

可见,强化学习的理论框架和监督学习有一定相似性,学习改进的过程,都有一种评价指标,监督学习中是 label,强化学习中是 reward,用来指引 model 的学习,也都有训练样本。
但区别也是巨大的,基本可以概括为:

  • SL 中样本 x 通常要求 IID,而 RL 中显然序列交互过程产生的样本 (s,a) 不满足 IID
  • SL 中 label 是随 x 一起准备好的,而 RL 中的“标签” reward 的产生是滞后于(s,a)的。这就使得 RL 的学习必然是一个序列多步决策问题,同时 action 会影响下一步的 state 和 reward,从而表明目标应是长期激励,这都显著区别于 SL。此外,这个 reward 不像 label 一样能直接指导选择什么样的 action。
  • SL 中样本的产生和训练是个open-loop,准备好样本,完成训练。RL 中样本的产生和训练是个 closed-loop,样本产生,用于训练,应用模型,得到新的样本,继续训练。这就使得 RL 的训练对样本准备要求低了很多。

1.2 强化学习 v.s. 深度学习

前面提到 SL 的缺陷:

  • 样本服从 IID,而很多问题要处理的序列交互过程并不满足 IID 假设
  • 强监督需要的标注样本,是昂贵而稀缺的

RL 恰恰能处理这些缺陷,但也要考虑到 DL 强大的表征能力,因此,DRL 的提出即融合 RL 和 DL 的优势:

  • DL learns the representation
  • RL learns the model

1.3 强化学习

RL 本身也有一些监督学习、无监督学习所没有的特点:

  • exploration-exploitation dilemma,为获得长期激励,要选用已知的好的 action,还要尝试未知的也许更好的 action,这种博弈在其他 ML 方法中未涉及
  • 直接尝试解决目标明确的 agent 与未知的 environment 交互的这个“大”问题,而不是分解为多个子问题

一个 RL 系统可以由四个基本元素描述:a policy, a reward signal, a value function, and, optionally, a model of the environment.

RL 研究的是序列多步决策问题,通常形式建模为 MDP(当然早期也有 multi-bandit)。但凡适合解决 MDP 的算法,都可以称为 RL 算法。了解 Finite MDP 的理论,可以理解现代 RL 的90%。下面主要介绍 MDP 模型,及其几类求解方法。

2 MDP

2.1 Formulation

markov 模型家族有不少熟知角色,可以概括如下:

Markov models 无 action 有 action
state 可见 MC MDP
state 不可见 HMM POMDP

MDP 建立在 markov chain 之上,自然 state transition 仅与上一个 state(可包含 action)有关。

MDP 模型形式化为五元组(T,S,A,P,R),即 epoch,state,action,transition probability, reward。当然,有些教材会把 T 省略,但考虑到 MDP 建模的序列多步决策,而且 T 的不同选择对 S 的定义也有影响,所以习惯上,这里加上 T。 此外,还有基于五元组,衍生的几个概念:

(1)Policy,π,建模了 agent 的 behavior,可分为两类

  • stochastic policy,π:p(a|s) = π(s,a)
  • deterministic policy,π:a = π(s)

(2) Return,g,一个 reward 序列的函数,用来衡量从当前到未来的长期激励。
通常有两种形式:{g_t} = \mathop {\lim }\limits_{K \to \infty } {1 \over K}\sum\limits_{k = 0}^{K - 1} {{r_{t + k + 1}}}g_t = \sum\limits_{k = 0}^\infty {{\lambda ^k}{r_{t+k+1}}} ,其中 0 \le \lambda \le 1。第二种长期折扣总回报用的更多,一是有一定现实意义,二是便于很多数学证明。

MDP 的优化目标是得到一个 π,使得这个 MDP 过程的期望 return 最大,即形式化为:
\max J\left( \pi \right) = \max {\rm E}\left\{ {g|\pi } \right\} 利用长期折扣总回报,可以进一步将 MDP 的目标写为:
J\left( \pi \right) = E\left\{ {\sum\limits_{t = 0}^\infty {{\lambda ^t}{r_t}} \left| {{s_0},{a_0},\pi } \right.} \right\}

这里有些概念需进一步阐述:

  • state 信号通常由预处理系统给出,其构建、学习不在 MDP 算法讨论范围内。其次,不能期望 state 告知 agent 关于 environment 的一切信息,甚至可以做出 action-decision 的一切信息。
  • environment 的 Markov 性,即 state 的 Markov 性,表示联合概率分布 p\left( {{s_{t + 1}},{r_{t + 1}}|{s_t},{a_t}} \right) = p\left( {{s_{t + 1}},{r_{t + 1}}|{s_0},{a_0},{s_1},{a_1}, \cdots ,{s_t},{a_t}} \right)
  • [2] 认为 r_{t+1}s_ta_t 有关,亦可和 s_{t+1} 有关,但不可和 a_{t+1} 有关,一些其他材料也持这种观点。但 [1] 建模 r_{t+1} 仅与 s_ta_t 有关,通常交互序列为 {s_0},{a_0},{r_1},{s_1},{a_1},{r_2}, \cdots ,{r_t},{s_t},{a_t},这种描述方式更简单。下面不刻意区分 r\left( {s,a,s'} \right)r\left( {s,a} \right)
  • policy 是由每个 epoch 上的 decision rule 组成,每个 decision rule 决定了该 epoch 时 sa 的映射。decision rule 的 stochastic 还是 deterministic 决定了 policy 的性质。当所有 epoch 上都选用同一个 decision rule 时也称 policy 为 stationary 的,即通常接触的 MDP (infinite horizon MDP)的研究对象。通常称 stationary deterministic policy 为 pure policy,属于最特殊的 policy 。
  • 定理表明,在追求期望 return 最大化情况下,最优的 policy 一定是 deterministic 的,因此不必考虑 stochastic policy。
  • 下面基本假设 S 和 A 是有限的,即 finite MDP,以避免积分表示。

2.2 Value function

为了期望 return 最大化,这里构造了值函数,用来评估(预测)在当前 state(以及 action)情况下遵循该 π,能获得的期望 return 是多少。即值函数中 policy 确定,J\left( \pi \right) 则以 policy π为变量。以折扣总回报形式的 return 为例,值函数形式化为:

  • state 值函数 : {V^\pi }\left( s \right) = \mathop E\limits_{\pi} \left\{ {\sum\limits_{k = 0}^\infty {{\lambda ^k}{r_{t + k + 1}}} \left| {{s_t} = s} \right.} \right\}

  • state-action 值函数 : {Q^\pi }\left( {s,a} \right) = \mathop E\limits_{\pi} \left\{ {\sum\limits_{k = 0}^\infty {{\lambda ^k}{r_{t + k + 1}}} \left| {{s_t} = s,{a_t} = a } \right.} \right\}

显然两者存在简单的转化关系:
{Q^\pi }\left( {s,a} \right) = \sum\limits_{s'} {p\left( {s'|s,a} \right)\left( {r\left( {s,a,s'} \right) + {V^\pi }\left( {s'} \right)} \right)} {V^\pi }\left( s \right) = \sum\limits_a {\pi \left( {a|s} \right){Q^\pi }\left( {s,a} \right)}

值函数可以利用 experiences 进行估计,也可以利用参数化的方式来进行参数估计。后面会具体介绍。
利用值函数内含的迭代关系,可以构造为下列形式,即 Bellman 方程组:
{V^\pi }\left( s \right) = \mathop E\limits_{\pi}\left\{ {r\left( {s,a,s'} \right) + \lambda {V^\pi }\left( {s'} \right)} \right\} = \sum\limits_a {\pi \left( {a|s} \right)} \sum\limits_{s'} {p\left( {s'|s,a} \right)\left\{ {r\left( {s,a,s'} \right) + \lambda {V^\pi }\left( {s'} \right)} \right\}} {Q^\pi }\left( {s,a} \right) = \mathop E\limits_{\pi}\left\{ {r\left( {s,a,s'} \right) + \lambda {Q^\pi }\left( {s',a'} \right)} \right\} = \sum\limits_{s'} {p\left( {s'|s,a} \right)\left\{ {r\left( {s,a,s'} \right) + \lambda {V^\pi }\left( {s'} \right)} \right\}}

2.3 Optimal policy

值函数定义了各种 policy 的偏序,即 \pi \ge \pi ' 当且仅当对于任意 state 有 {V^\pi }\left( s \right) \ge {V^{\pi '}}\left( s \right)。因此,最优 policy 即对应让该 policy 的值函数最大的 policy。

利用上面 Bellman 方程组,很容易得到 optimal value func:
{V^*}\left( s \right) = \mathop {\max }\limits_\pi {V^\pi }\left( s \right) = \mathop {\max }\limits_a \mathop {{\rm{ }}E}\limits_{s'} \left\{ {r\left( {s,a,s'} \right) + \lambda {V^*}\left( {s'} \right)} \right\} = \mathop {\max }\limits_a \sum\limits_{s'} {p\left( {s'|s,a} \right)\left\{ {r\left( {s,a,s'} \right) + \lambda {V^*}\left( {s'} \right)} \right\}} {Q^*}\left( {s,a} \right) = \mathop {\max }\limits_\pi {Q^\pi }\left( {s,a} \right) = \mathop {{\rm{ }}E}\limits_{s'} \left\{ {r\left( {s,a,s'} \right) + \mathop {\max }\limits_{a'} \lambda {Q^*}\left( {s',a'} \right)} \right\} = \sum\limits_{s'} {p\left( {s'|s,a} \right)\left\{ {r\left( {s,a,s'} \right) + \mathop {\max }\limits_{a'} \lambda {Q^*}\left( {s',a'} \right)} \right\}} 下面是一个比较直观的示意图
[图片上传失败...(image-5cfe92-1535181350541)]

一旦有了最优值函数,就很简单确定 optimal policy 了,即对于任意 state,选使得值函数最大的 action 即可。任何关于最优值函数的贪心 policy 都算最优 policy。

貌似,只要显式解决了 Bellman Optimality Equation 就找到了 optimal policy。但这个方法仅仅是理论,基本行不通,除非至少满足以下假设:

  • 能对 environment 精确建模
  • 足够的巨大计算资源
  • 满足 Markov 性

显然,实际中,这三个假设很难满足,通常不可能直接解上述 Bellman Optimality Equation 来得到 optimal policy,都是用一些近似方法来求解 Bellman Optimality Equation。

2.4 MDP 优化方法

利用 MDP 对问题建完模,求解 J\left( \pi \right) 的最优化,直观思路是直接从 J\left( \pi \right) 下手,将其看成普通的参数优化问题,利用 SGD 类方法求解;或者从上面引导出的 Bellman Optimality Equation 入手,不停迭代逼近最优值函数。根据这两种不同思路,可以将解决方法归类为三种:

  • critic-only 类,学习 value func,不涉及参数化的 policy
  • actor-only 类,学习参数化的 policy,不涉及 value func
  • actor-critic 类,将 value func 与参数化 policy 结合

where ‘actor’ is a reference to the learned policy, and ‘critic’ refers to the learned value function, usually a state value function.

3 Critic-only 类方法

该类方法的思路基本都是,先想办法评估当前值函数,然后针对当前值函数遍历 action 得到当前最优 policy,然后继续估计采用该最优 policy 的值函数,循环往复。
该类方法还可以分为 model-based 类和 model-free 类:

  • 前一种利用 model 的 P 和 R 来计算值函数,以 DP-based 类方法,RMax 方法为主
  • 后一种处理现实中往往 P 和 R 未知的情况,并不对 model 进行建模学习,包括 MC-based 方法和 TD-based 方法

prediction v.s. control

Prediction or evaluation problem, is that of estimating the value function for a given policy π.
Control problem , is that of finding an optimal policy.

无论是否基于 model,critic-only 类方法都可以看作以下范式:先进行 Prediction,然后进行 Control。
主要区别在于处理 prediction problem 的方法。而 Control problem 都是采用 greedy-search 方法。

3.1 DP-based methods

该类方法属于 model-based 类,即已知 P 和 R 可以用来计算 value func,主要依靠 Bellman optimality equations。

policy iteration

第一种思路是,首先根据当前 policy,计算 value func 来对当前 policy 进行评估,然后基于这个 value func 来 greedy search 最好的 action 从而更新 policy,循环往复。总结为两步:

  • predict: 这里称 policy evaluation,根据 policy 计算 value func
    {V^\pi }\left( s \right) = \sum\limits_a {\pi \left( {a|s} \right)} \sum\limits_{s'} {p\left( {s'|s,a} \right)\left\{ {r\left( {s,a,s'} \right) + \lambda {V^\pi }\left( {s'} \right)} \right\}} 只要 λ<1 或者在π下存在最终结束状态,那么 {V^\pi }\left( s \right) 就存在且唯一。上面实际是 |S| 个联立的方程,不存在时序概念。通常值函数的计算利用迭代逼近,即 iterative policy evaluation {V_{k+1}^\pi }\left( s \right) = \sum\limits_a {\pi \left( {a|s} \right)} \sum\limits_{s'} {p\left( {s'|s,a} \right)\left\{ {r\left( {s,a,s'} \right) + \lambda {V_k^\pi }\left( {s'} \right)} \right\}}
  • control: 这里称 policy improvment,针对 state-action value func 遍历 action 得到当前最优 policy 来更新 policy (由 Bellman optimality equations,知道 {V^*}\left( s \right) = \mathop {\max }\limits_a {{Q^*}\left( s,a \right)}),自然下面更新也是对 |S| 个 state 都进行
    \pi '\left( s \right) = \mathop {\arg \max }\limits_a {Q^\pi }\left( {s,a} \right)
  • 循环往复,直至 value func 收敛

该思路称为 policy iteration 算法,算法效率还算高,除非已经收敛到最优 policy,否则 policy 的每次 improvement 都是严格提升的。

value iteration

第二种思路是,上面 policy evaluation 过程由于迭代计算值函数,每次都要扫描 S,迭代过程理论上趋于无穷才收敛,如果等到 policy evaluation 收敛才进行 policy improvement,显然是很耗时的。事实上,policy iteration 中的 policy evaluation 进行裁剪(减少迭代计算次数)并不会影响算法的收敛性,极端情况就是 policy evaluation 时仅进行一次迭代计算,就进行 policy improvement,这种方式称为 value iteration 算法
{V_{k+1}^{\pi}}\left( s \right) = \mathop {\max }\limits_a \sum\limits_{s'} {p\left( {s'|s,a} \right)\left\{ {r\left( {s,a,s'} \right) + \lambda {V_{k}^{\pi} }\left( {s'} \right)} \right\}} 或者 {Q_{k+1}^{\pi}}\left( {s,a} \right) = \sum\limits_{s'} {p\left( {s'|s,a} \right)\left\{ {r\left( {s,a,s'} \right) + \mathop {\max }\limits_{a'} \lambda {Q_{k}^{\pi}}\left( {s',a'} \right)} \right\}}

generalized policy iteration

对比上面两种算法,可见 Policy iteration 多次迭代 Bellman equation 直到收敛,而 Value iteration 仅仅迭代一次 Bellman equation(实际上利用的 Bellman optimality equation 作为更新规则)区别主要在于 policy evaluation 和 policy improvement 两个环节的交织方式。
两者本质上的区别是数值分析中的 explicit method 和 implicit method 的区别,explicit 方法收敛慢、稳定性差,但 implicit method 要解方程。如果方程没有解析解,解这个方程本身又要用数值迭代方式。

介于两者之间的就是 generalized policy iteration,即多次迭代来进行 policy evaluation 然后 policy improvement。这种阐述方式基本是大多 RL 算法的范式。
有趣的是,policy evaluation 然后 policy improvement 两个环节可以看做既竞争又合作。竞争说的是,它们引导的方向相反。policy improvement 中的 greedy-search 会让 value func 偏离新的 policy,而 policy evaluation 中追求 value func 与 policy 一致会使得 policy 对于 value func 不再 greedy。但从长期来看,这两个环节会交错合作来找到那个唯一的联合解,即最优 policy 和最优 value func。

维度灾难

该类方法很大一个局限就是算法的复杂度,寻找到最优 policy 的复杂度是 O\left( {\left| S \right|\left| A \right|} \right),看着只是 S 和 A 个数的线性关系,但通常我们谈论的算法复杂度不是用状态空间的中值的个数而是状态空间的维数,那么上面的复杂度实际应该是状态空间和动作空间的指数阶,这就是 Bellman 提出的维度灾难。
但 DP-based methods 要比穷搜和线性规划好上不少,在当前计算力下,解决拥有百万状态的 MDP,DP-based methods 也是没问题的。

3.2 RMax method

针对无模型情况,有两种思路,一种是想办法还原出 P 和 R 即还原出 MDP model,然后再在这个 model 上进行策略优化,这还是属于 model-based 思路;另一种是不还原直接优化,即 model-free 思路。
RMax 即属于前一种思路,MC-based 和 TD-based 属于后一种。

RMax 方法,利用随机游走,通过计数这个简单的回归模型来还原 MDP。但仅还原 MDP 的抽样复杂度就是 O\left( {\left| S \right|^2\left| A \right|} \right) 级别,所以人们通常关注 model-free 类方法。这里就不介绍 RMax 了。

3.3 MC-based method

model-free 类方法,整体流程和前面 DP-based 类似,也是先进行 predict,然后利用 greedy-search 来解决 control。

MC-based 方法不需要前面 DP-based 类方法中 P 和 R 的先验,仅需要 experiences —— agent 与 env 的交互序列(s,a,r),即不需知道 model 的真实分布,只需要 model 的真实分布的采样。
算法思路也很简单,利用采样平均值来替代 value func 中的期望值,实质就是使用统计学的方法来取代 Bellman 方法。计算方法还是分两步:

  • predict:从初始 state-action 出发,以某种 policy 进行采样,执行该 policy 进行 T 步得到对应轨迹,针对轨迹中每一对 (s_t, a_t),记录其后的总回报作为对应 state-action 的一次采样值,多次采样得到多条轨迹后将每对 (s_t, a_t) 的所有 value func 进行 mean 即为该 (s_t, a_t) 值函数的估计值。
  • control:仍用 greedy-search 法。
这里写图片描述

注意上面 Q 和 V 不再像 DP-based methods 中那样通用。在有 model 时,即使只有 V 也可以利用下一个状态的信息得到 Q 从而决定 policy,但当没有 model 时,仅 V 不足够得到 Q 从而没法指导 policy 更新。因此,MC-based 中 predict 的是 Q 而非 V。

MC-based 方法中 (s_t, a_t) 的估计是独立于其他 (s_t, a_t) 的,因此有一个好处就是可以仅关注感兴趣的 (s_t, a_t) ,即仅产生从 (s_t, a_t) 出发的轨迹。

first-visit v.s. every-visit

记对(s,a)的一次 visit 为一条轨迹中(s,a)的一次出现。first-visit MC-based method 即在 policy evaluation 时仅利用轨迹中第一次出现(s,a)后的总回报为采样值,而 first-visit MC-based method 即在 policy evaluation 时利用轨迹中每次出现(s,a)后的总回报为采样值。
前者更经典些,研究的更多些,后者则比较好拓展到后面要介绍的 function approximation 和 eligibility traces。
无论哪种,随着轨迹中对(s,a)的 visit 趋于无穷,MC-based policy evaluation 都会收敛到估计的值函数。

Incremental mean 原理

上面算法中倒数第五行所在的 for 循环实现了值函数的 batch update, 类似于(加了 one-visit) {Q^\pi }\left( {s,a} \right) = {1 \over m}\sum\limits_{i = 1}^m {r\left( {trajector{y_i}} \right)}
利用 Incremental mean 原理:{\mu _k} = {1 \over k}\sum\limits_{i = 1}^k {{x_i}} = {1 \over k}\left( {{x_k} + \sum\limits_{i = 1}^{k - 1} {{x_i}} } \right) = {1 \over k}\left( {{x_k} + \left( {k - 1} \right){\mu _{k - 1}}} \right) = {\mu _{k - 1}} + {1 \over k}\left( {{x_k} - {\mu _{k - 1}}} \right),可以将其变成 incremental update 形式,{Q^\pi }\left( {s,a} \right) \leftarrow {Q^\pi }\left( {s,a} \right) + \alpha \left( {R - {Q^\pi }\left( {s,a} \right)} \right),其中{R - {Q^\pi }\left( {s,a} \right)} 部分称为 MC error。注意 R 不是 r。则算法流程如
[图片上传失败...(image-346a0e-1535181350541)]

exploration-exploitation dilemma

有个问题需要思考下,可能很多(s,a)都不会出现在轨迹中从而没法估计其值函数,尤其当 greedy-search 得到了 deterministic policy,那么岂不是每次轨迹都是一样的?
这就涉及一个经典问题,exploration-exploitation dilemma。常用的处理方法是采用 ε-greedy search,即在 control/探索 时,以 1-ε 选择当下最好的 policy 实现 exploitation,以 ε 进行随机选择实现 exploration。

on/off policy

引入一个概念,在探索和学习阶段,如果采用同一个 policy,即为 on policy,不同则为 off policy。

上面 MC-based method 就是为了探索所以 behave π-ε,但在学习时也使用 π-ε,而实际上我们要学习的应是不带探索的 π,即探索用 π-ε,学习用 π,即 off policy。
通常把 off policy 中用来探索空间(生成轨迹)的 policy 称为 behavior policy,把用来学习(evaluation & improvement)为了达到最优的 policy 称为 target policy。事实上,这种思路不仅用在 MC-based method 中。
由于 behaviour policy 和 target policy 不相关,这种方法方差也较大,比较不容易收敛。但是 off-policy 更强大,更通用。比如,可以使用 off-policy 从人类专家或者传统的控制算法来学习一个增强学习模型。

Importance Sampling

回到 MC-based method 的 off policy 机制,这里面临一个问题,从 π-ε 中采样和 π 是有区别的,一个需要满足的基本假设是 coverage assumption,即 every action taken under π is also taken, at least occasionally, under π-ε。
几乎所有的 off policy 都使用 Importance Sampling 技术,从而可以根据某分布(behaviour policy)的样本来估计另一分布(target policy)的某个期望值(Q)。

比如我们想获得 p 分布中 f 的均值,但 p 分布的样本 x 并不好生成,利用 Importance Sampling,可以引入另一个更方便生成样本的分布 q,从而将问题转化为求 g(x) = f(x){{p(x)} \over {q(x)}} = f(x)w(x)q(x) 分布下的期望,其中 w(x) = {{p(x)} \over {q(x)}} 称为 importance weight,具体如下式:
[图片上传失败...(image-1b9dcc-1535181350541)]
具体到 MC-based method,π 对应分布 p,π-ε 对应分布 q,因此在计算 R 时每个来自 π-ε 的样本都要乘上一个 importance weight,其构造方式多样,通常为轨迹在 target policy 和 behavior policy 下的相对概率。算法流程如下
[图片上传失败...(image-983152-1535181350541)]

3.4 TD-based methods

TD-based methods 结合了 DP-based 方法和 MC-based 方法的思想,即像 MC-based 一样不需要建模可以从 experiences 中直接学习,也像 DP-based 一样基于其他已经学习到的估计来更新估计( 即 bootstrap)。通常认为,TD-based methods 是 RL 的精华与核心。

MC-based method 好理解,但有个严重缺陷,就是一定要跑完所有 epoches 得到整个轨迹以后,才能更新模型,效率很低。即在 MC-based 的 evaluation 过程中,{Q^\pi }\left( {s_t, a_t} \right) \leftarrow {Q^\pi }\left( {s_t,a_t} \right) + \alpha \left( {R_t - {Q^\pi }\left( {s_t,a_t} \right)} \right),必须要等到这个 trajectory 结束,才能得到 R_t,才能对 Q 进行 incremental upgrade。
考虑到 {R_t} = \sum\limits_{k = 0}^\infty {{\lambda ^k}{r_{t + k + 1}}} = {r_{t + 1}} + \lambda \sum\limits_{k = 0}^\infty {{\lambda ^k}{r_{t + k + 2}}} = {r_{t + 1}} + \lambda Q\left( {{s_{t + 1},a_{t+1}}} \right),可见 TD-based 可以只等一个 epoch,在下一个时刻就利用观察到的 r 和估计的值函数进行一次有效更新,即
{Q^\pi }\left( {{s_t,a_t}} \right) \leftarrow {Q^\pi }\left( {{s_t,a_t}} \right) + \alpha \left( {{r_{t + 1}} + \lambda {Q^\pi }\left( {{s_{t + 1},a_{t + 1}}} \right) - {Q^\pi }\left( {{s_t,a_t}} \right)} \right)

可见,MC-based 更新的目标是R_t,而 TD-based 更新的目标是{{r_{t + 1}} + \lambda {Q^\pi }\left( {{s_{t + 1},a_{t + 1}}} \right)}。TD error 虽然是 t 时刻 V 的误差,但由于依赖 t+1 时刻的 reward 和 state-action pair,所以在 t+1 时刻才可用。

由于每个 epoch 即可更新一次,所以 TD-based 方法很大一个好处就是可以 on-line 执行。
虽然目前没有理论证明,但实践表明 TD-based 相较 MC-based 收敛的更快一些。

SARSA v.s. Q-learning

把上面 TD-based 的估计方式应用起来,就能得到具体的 RL 算法,下面介绍的 SARSA 就是 on-policy TD-based method,Q-learning 就是 off-policy TD-based method。
[图片上传失败...(image-54c566-1535181350541)]
[图片上传失败...(image-8df92e-1535181350541)]
仔细观察,可以发现 Q-learning 中 evaluation 的更新也可以写作:
Q\left( {{s_t},{a_t}} \right) \leftarrow Q\left( {{s_t},{a_t}} \right) + \alpha \left( {{r_{t + 1}} + \lambda \mathop {\max }\limits_{{a_{t + 1}}} Q\left( {{s_{t + 1}},{a_{t + 1}}} \right) - Q\left( {{s_t},{a_t}} \right)} \right),即相当于把 policy iteration 改为 value iteration。

n-step return

之前列出的算法称为 one-step TD-based method。也可以取 TD-based method 和 MC-based method 两者之间,即利用 n epoches 信息来更新对值函数的估计,对于 n-step return 有
R_t^n = \sum\limits_{i = 0}^n {{\lambda ^{k - 1}}{r_{t + i}}} + {\lambda ^n}Q\left( {{s_{t + n},a_{t + n}}} \right)

很简单,有 n-step TD-based methods
{Q^\pi }\left( {{s_t},a_t} \right) \leftarrow {Q^\pi }\left( {{s_t,a_t}} \right) + \alpha \left( {R_t^n - {Q^\pi }\left( {{s_t,a_t}} \right)} \right)

eligibility trace

几乎所有 TD-based methods 都可以结合 eligibility trace 机制,从而更高效地实现。

(该节待补充)

虽然利用 n-step return,也统一了 TD-based 和 MC-based,但相对原始。当 TD-based 结合了 eligibility trace,相当于将原来的方法拓展到一个频谱上,一端是 one-step TD-based(λ=0),一端是 MC-based(λ=1),更完美的统一了 TD-based 和 MC-based。

3.5 Value function approximation

上面所有提到的算法都属于 tabular representation,即值函数是通过一个 lookup table 来表示的,如每个 state 都有对应的 V(s),每个 state-action 都有对应的 Q(s,a)。这种表示自然有难以回避的问题:对于大规模问题(state 空间巨大,state-action 空间巨大)的内存耗费难以接受,学习所有的值函数速度也难以接受。

在有限计算资源情况下,处理大规模 MDP 问题,就需要这里要讲的 approximation solution。准确来说,就是使用监督学习的思想,构建一个函数逼近模型,在已经见过的那部分 state or state-action 空间上构建一个函数逼近的值函数,然后泛化到未知的数据。 可以表达为:\hat V\left( {s,\theta } \right) \approx {V^\pi }\left( s \right) or \hat Q\left( {s,a,\theta } \right) \approx {Q^\pi }\left( {s,a} \right)
函数 \hat V 是参数 θ 的可微函数,可以用线性函数、MLP、决策树,就像监督学习中,参数 θ 的维度远远小于状态的数量,因此改变参数的一个权重可以改变很多 state 的估值,从而一个 state 更新后,其带来的变化会影响很多其他 state 的估值,即产生了泛化。关于训练方法则需要一种适合于不稳定、不独立分布数据的。

假设用 \hat V\left( {s,\theta } \right) 来逼近 {V^\pi }\left( {s} \right),记均方误差为 J\left( \theta \right) = {E_{s \sim \pi }}\left[ {{{\left( {{V^\pi }\left( {s} \right) - \hat V\left( {s,\theta } \right)} \right)}^2}} \right],很容易得到 SGD 的更新公式为:\Delta {\theta _t} = \alpha \left( {{V^\pi }\left( {s} \right) - \hat V\left( {s,\theta } \right)} \right){\nabla _\theta }\hat V\left( {s,\theta } \right)

会像前面提到 MC-based 和 TD-based evaluation 时更新公式分别为:
{V^\pi }\left( {s_t} \right) \leftarrow {V^\pi }\left( {s_t} \right) + \alpha \left( {R_t - {V^\pi }\left( {s_t} \right)} \right) {V^\pi }\left( {{s_t}} \right) \leftarrow {V^\pi }\left( {{s_t}} \right) + \alpha \left( {{r_{t + 1}} + \lambda {V^\pi }\left( {{s_{t + 1}}} \right) - {V^\pi }\left( {{s_t}} \right)} \right)
可以认为 R_t{r_{t + 1}} + \lambda {V^\pi }\left( {{s_{t + 1}}} \right) 分别为 target, {V^\pi } 即 model。
因此,MC-based 和 TD-based 在利用函数逼近时的更新公式分别变为
\Delta {\theta _t} = \alpha \left( {R_t - \hat V\left( {s,\theta } \right)} \right){\nabla _\theta }\hat V\left( {s,\theta } \right) \Delta {\theta _t} = \alpha \left( {{r_{t + 1}} + \lambda {V^\pi }\left( {{s_{t + 1}}} \right) - \hat V\left( {s,\theta } \right)} \right){\nabla _\theta }\hat V\left( {s,\theta } \right)

总结下利用函数逼近的大致流程就是:

  • 先随机初始化一个 policy,然后使用MC-based or TD-based 的方法来调整 θ 得到 approximation 的值函数;
  • 基于该 approximation 的 值函数,进行 policy improvement;
  • 然后循环迭代。

即,value function approximation 只做 policy evaluation(predict) 部分,policy improvement(control) 部分还需要单独的策略,比如 ε-greedy。

4 Actor-only 类方法

前面介绍到的 Critic-only 类方法,从 DP/MC/TD 到 Value function approximation,关注的是 state 空间的 scaling 问题,那么 action 空间 如何 scaling 呢?面对高维或者连续的 action 空间,critic-only 以来的 greedy-search 方法自然是难以应付了。
此外,基于值函数的方法,存在 policy degradation 现象,这就表明对于次优的 policy 来说,更好的值函数并不对应更好的 policy,因此,前面这种利用优化值函数间接优化 policy 的思路并不完美。

Actor-only 类方法,即直接通过参数化的 policy 学习 \max J\left( \pi_\theta \right)\pi_\theta 的学习过程可能仍涉及到值函数,但值函数并不是再用来选择 action 的。这就是个典型的优化问题了,许多数学工具可以应用。
先看下梯度上升 {\theta _{k + 1}} = {\theta _k} + \alpha {\nabla _\theta }J\left( {{\theta _k}} \right),需要 policy gradient {\nabla _\theta }J\left( \theta \right) = {{\partial J} \over {\partial {\pi _\theta }}}{{\partial {\pi _\theta }} \over {\partial \theta }}。那么如何计算 policy gradient 呢?通常有两个方向:

  • Finite-difference methods
  • Likelihood ratio methods

4.1 Finite-difference methods

非常简单粗糙,就是对参数产生小的扰动,用 J\left( \pi_\theta \right) 的变化率来估计其导数,如下 {{\partial J\left( \theta \right)} \over {\partial {\theta _i}}} \approx {{J\left( {\theta + \varepsilon {\mu _k}} \right) - J\left( \theta \right)} \over \varepsilon }

方法虽然很简单,但可以用,即使 policy 是不可导的。但显然噪声太大,效率也较低。

4.2 Likelihood ratio methods

显然上面的方法并不常用,这里介绍 Likelihood ratio methods,也称为 REINFORCE 算法。

policy gradient theorem

很重要一个定理,也称为 stochastic policy gradient 公式,后面会提到 deterministic policy gradient公式。
\nabla_\theta J\left( \theta \right) = \mathop E\limits_{s \sim {\rho ^\pi },a \sim {\pi _\theta }} \left[ {{Q^\pi }\left( {s,a} \right){\nabla _\theta }\pi \left( {a|s,\theta } \right)} \right]
这里加个 logarithm trick,即可将 SPG 公式变为:
\nabla_\theta J\left( \theta \right) = \mathop {{\rm{ }}E}\limits_{s\sim {\rho ^\pi },a\sim {\pi _\theta }} \left[ {{Q^\pi }\left( {s,a} \right){\nabla _\theta }\log \left( {\pi \left( {a|s,\theta } \right)} \right)} \right]

下面问题就是如何得到上面 SPG,这里仍然使用了抽样平均逼近期望的方式,即 MC-based 方式。
从轨迹产生的角度,利用 likelihood ratios 计算 policy gradient 为:
{\nabla _\theta }J\left( \theta \right) = \mathop E\limits_{trajectory} \left[ {{J^{traj}}\sum\limits_{t = 0}^T {{\nabla _\theta }\log \left( {\pi \left( {{a_t}|{s_t},\theta } \right)} \right)} } \right]
可以直接将上面的 trajectory return 换为值函数,即为
{\nabla _\theta }J\left( \theta \right) = \mathop E\limits_{trajectory} \left[ {\sum\limits_{t = 0}^T {{Q^\pi }\left( {{s_t},{a_t}} \right){\nabla _\theta }\log \left( {\pi \left( {{a_t}|{s_t},\theta } \right)} \right)} } \right]

baseline

再来看下上面用到的 SPG 公式,其表征当值函数越大的 action 越努力提高它出现的概率。但有时某个 state 对应的每个 action 的值函数都为正,即所有的 PG 都为正,此时每个 action 出现的概率都会提高,这会大幅减缓学习速度,并增大 PG 的方差,因此需要对 SPG 公式中的值函数进行某种标准化来降低方差。

通常,实践中,会在 J^{traj} 或者 {Q^\pi }\left( {{s_t},{a_t}} \right) 中减去一个 baseline,用来降低方差,加快学习。
以值函数为例,baseline 用来给值函数作比较用,可以使不随 action 变化的任意函数,即
{\nabla _\theta }J\left( \theta \right) = \mathop {{\rm{ }}E}\limits_{trajectory} \left[ {\sum\limits_{t = 0}^T {\left( {{Q^\pi }\left( {{s_t},{a_t}} \right) - b\left( {{s_t}} \right)} \right){\nabla _\theta }\log \left( {\pi \left( {{a_t}|{s_t},\theta } \right)} \right)} } \right]
此时,更新参数时,值函数超过 baseline 的 action 对应的概率才会提高,理论证明这可以降低 PG 的方差。
实践中,通常选取值函数的一个期望估计作为 baseline。

实际上,这种思路已经类似 Actor-Critic 体系了。

5 Actor-Critic 类方法

首先来回顾下前面介绍到的 Critic-only 类方法、Actor-only 类方法:

  • critic-only 虽然方差低,但无法处理连续 A 域
  • actor-only 能处理连续 A 域,但高方差

AC 类方法,旨在结合两者优点,使用参数化的 actor 来产生 action,使用 critic 的低方差的梯度估计来支撑 actor。
简答来说,policy 网络是 actor,进行action-selection,value 网络是 critic,通过值函数来评价 actor 网络所选动作的好坏
[图片上传失败...(image-d2b749-1535181350541)]
如此以来,critic 利用值函数方法来更好地评估策略,能给 actor 一个更好的梯度估计值,能改善局部优化的问题。 actor 则避免了值函数中低效的值估计过程,同时也能应对连续 A 域。

bootstrap

这里用到的 bootstrap, 指 DP-based、TD-based 中,用某个估计值来更新估计值的思想。DP-based 中,用下一个状态的值函数估计值来估计这个状态的值函数。TD-based 中,部分基于其他状态的估计来更新估计值。而 MC-based 关于各个值函数的估计是独立的,换言之,该状态的值函数估计并不依赖于其他状态的估计,因此,没有利用 bootstrap。
通过 bootstrap,可以引入偏差,以及对函数逼近效果的渐进依赖。这可以降低方差、加快学习速度。

那么就可以看出,虽然 REINFORCE + baseline 方法通过 policy 和 值函数来一起学习,但并不能称为 AC 类,因为值函数只在那里用作 baseline 来更新状态,而非用作 bootstrap。如此以来,REINFORCE + baseline 是无偏的,并将渐进收敛于局部最小值,但又会像所有的 MC-based method 那样,由于高方差而学习很慢,且难以在线运行。
所以 AC 架构中,actor 通常选用 TD-based methods。

具体的算法,这里就不介绍了,在下一篇的文献篇会具体介绍,简单的比如 REINFORCE + baseline 中用 对抗函数做 baseline 即可。

6 references

[1] Reinforcement Learning: An Introduction, second edition, Richard S. Sutton, Andrew G. Barto, Francis Bach.
[2] Markov Decision Processes: Discrete Stochastic Dynamic Programming, Martin L. Puterman.
[3] Introduction to Deep Reinforcement Learning From Theory to Applications, Siyi LI. (slides)
[4] 强化学习, 俞扬. (slides)
[5] 难以一一列举的博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,069评论 4 358
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,212评论 1 287
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 105,912评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,424评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,741评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,194评论 1 206
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,553评论 2 307
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,289评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,923评论 1 237
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,251评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,775评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,144评论 2 249
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,698评论 3 228
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,936评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,658评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,214评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,159评论 2 258

推荐阅读更多精彩内容

  • 一. 增强学习简介 1.1 什么是增强学习? 机器学习的算法可以分为三类:监督学习,非监督学习和增强学习。 增强学...
    阿阿阿阿毛阅读 30,800评论 0 25
  • 环境 Environment,个体 Agent,状态 State,奖励 Reward 在强化学习中最重要的两个概念...
    拓季阅读 2,158评论 0 2
  • 强化学习 元素:actor(我们可以控制,决策我们的行为),Env,Reward(我们不能控制环境)主要方法:mo...
    fada_away阅读 18,998评论 0 14
  • 也许你和我一样正走在路上,路即此刻,此刻通向永恒。
    平明寻白羽阅读 152评论 0 2
  • 组合数据类型 上篇已经主要介绍了列表list和集合set 列表list 集合set 1. 组合数据类型——元组(t...
    杰罗尼莫030阅读 483评论 0 0