强化学习笔记(5)—— 无模型(model-free)control问题


1. 引入

1.1 回顾model-based control问题

1.1.1 policy iteration 算法

  • 算法流程:反复迭代执行以下两步,直到V收敛为止
    1. policy evaluation:迭代计算Bellman公式至收敛
      在这里插入图片描述

    2. policy improve:根据 π \pi π计算 q q q,再对每个s贪心地找到使 q π i ( s , a ) q^{\pi_i}(s,a) qπi(s,a)最大的a来更新 π ( s ) \pi(s) π(s)
      在这里插入图片描述

  • 常使用DP方法实现这个迭代

1.1.2 value iteration 算法

  • 算法流程:
    1. 使用MDP的Bellman optimal公式反复迭代计算至收敛,求出 V ∗ V^* V
      在这里插入图片描述

    2. 利用 V ∗ V^* V重构 q ∗ q^* q,从而对每个s贪心地找出动作a,得 π ∗ \pi^* π
      在这里插入图片描述

  • 常使用DP方法实现第一步的迭代

1.1.3 小结

  • 在MDP已知的情况下,Agent已经知道了环境的状态转移P和状态奖励R,即全观测(fully observable)。 这时Agent不需要再探索环境,直接利用P和R迭代求 V ∗ V^* V π ∗ \pi^* π 即可 (上面红色的部分都是),就好像玩游戏开了透视挂一样
    在这里插入图片描述
  • 但在对于很多问题,MDP要么未知,要么虽然已知但因为过于庞大/复杂而无法使用 (如电子游戏、无人机控制…)这些情况下状态太多,转移太复杂,没法给出P和R,也就无法进行iteration计算
  • 这时就可以考虑使用model-free的强化学习方法

1.2 model-free RL

  1. 无模型强化学习通过和环境进行交互来解决问题
    在这里插入图片描述

  2. Agent不能直接获取状态转移矩阵P和奖励函数R

  3. Agent的每次交互过程,会采集一条轨迹(Trajectories/episodes),Agent要收集大量的轨迹,然后从中获取信息,改进策略,以求获得更多的奖励

  4. 一条轨迹是一个 “状态、动作、奖励” 序列,如
    { S 1 , A 1 , R 2 , S 2 , A 2 , . . . S t , A t , R t + 1 , . . . R T , S T } \{S_1,A_1,R_2,S_2,A_2,...S_t,A_t,R_{t+1},...R_T,S_T\} {S1,A1,R2,S2,A2,...St,At,Rt+1,...RT,ST}

  5. model-free RL的两种常用方法

    1. 蒙特卡罗方法(MC):Monte Carlo Method
    2. TD学习方法 (TD) :Temporal Difference Learning

2. 解决问题的框架

  • 在真正开始讨论model-free control之前,先从宏观的角度补充一些内容。

2.1 广义策略迭代(GPI)

  • 我们可以将上面Model-based control中的policy iteration算法推广到一个解control问题的更一般形式

  • 先看policy iteration,这个算法包括两个相互作用的流程

    1. 策略评估:使得价值函数V和当前策略 π \pi π 匹配
    2. 策略提升:根据当前价值贪心地更新策略 π \pi π
  • policy iteration中这两个流程交替进行,每个流程都在另一个开始前完成。但这不是必须的,可以在两次策略提升之间只进行一次策略评估而不是一直迭代到收敛;在一些异步DP方法中,评估和改进以更细的粒度交替进行(比如可能某次评估中只有一个状态的价值进行了更新)。但是不管怎么样,只要两个流程持续更新所有状态,最后的结果都是相同的

  • 我们定义广义策略迭代 (GPI):指代让策略评估和策略提升交替进行相互改进的一般思路,不限制这两个流程的粒度和其他细节

  • 几乎所有的RL方法都可以被描述为GPI,即几乎所有方法都包含明确定义的策略和价值函数,如下所示
    在这里插入图片描述
    策略总是基于特定的价值函数进行改进,价值函数也始终会向相应的真实价值函数收敛。显然,当评估流程和改进流程都稳定下来不在变化时,价值函数和策略函数必定是最优的。当稳定到最优 V ∗ V^* V π ∗ \pi^* π 时,价值函数一定和当前策略一致;策略一定对当前价值函数是贪心策略。因此,只有当一个策略发现它对自己的评估价值函数是贪心策略时,两个流程才能稳定下来,这意味着Bellman Optimal等式成立,这个策略和价值函数一定是最优的

  • 可以将GPI的流程看成竞争与合作。虽然两个流程朝着相反的反向前进(让策略对价值函数贪心通常会使价值函数与当前策略不不匹配;使价值函数与策略一致通常会使策略不再贪心),但从长远看,这两个流程会相互作用以找到一个联合解决方案:最优价值 V ∗ V^* V和最优策略 π ∗ \pi^* π
    在这里插入图片描述
    可以把每个流程看成二维空间中的一条线,代表对于其目标的解决方案。每个流程都把 V V V π \pi π推向其中一条线,由于这两条线不是正交的,所以两个目标间会产生相互作用。直接冲向某个目标会导致某种程度上偏离另一个目标,然而整体流程的结果最终会更接近最优的总目标。在GPI中,我们也可以让每次走的步子小一点,部分地实现其中一个目标。无论是哪种情况,尽管没有直接优化总目标,但策略评估和策略提升两个流程结合在一起,就可以最终达到最优的总目标

2.2 同轨策略方法和离轨策略方法

  1. 引入

    • 在model-free方法中,为了评估(prediction)或优化(control)策略 π \pi π ,我们常常用 π \pi π 和环境交互得到episode,再用episode评估和改进 π \pi π,然后再用 π \pi π 交互得episode,再评估改进,直到收敛为止。这里用于生成episode的策略和被评估优化的策略都是 π \pi π ,这类方法被称为 “同轨策略方法”

    • 所有 “同轨策略方法” 在解control问题时都面临一个困境:它们希望学到的策略 π \pi π 可以使随后agent的行为是最优的,但为了在生成episode时探索所有动作(以保证找到最优动作), π \pi π 不能是一个确定性策略,换句话说,它需要试探非最优动作(其实这个就是同轨方法预测q(s,a)时的保持试探问题)。

    • 如何在保持试探的同时学习最优策略?“同轨策略方法” 其实是一种妥协 —— 它学习的策略不会100%给出最优动作,而是在大概率给出最优动作的同时,以小概率试探非最优动作。除非随着学习过程不断减小试探的概率,否则不能学到确定性的最优策略

    • 更直接的方法是使用两个策略

      1. 目标策略target policy:一般是确定性策略,用来学习并成为最优策略,记为 π \pi π
      2. 行动策略behavior policy:一般是不确定性策略,更有试探性,用于生成供agent学习的episode样本,记为 b b b

      在这种情况下,我们用另一个已知的策略 b b b 来生成episode,并用这些来自 b b b 的episode评估和改进 π \pi π,可以看作学习的数据 “离开” 了待学习的策略,因此整个过程被称为离轨策略学习(off-policy)。

  2. 定义

    1. 同轨策略(on-policy)方法:这类方法中,“生成episode的策略” 和 “用于实际决策的待评估改进的策略” 是相同的
    2. 离轨策略(off-policy)方法:这类方法中,“生成episode的策略” 和 “用于实际决策的待评估改进的策略” 是不同的,即生成的数据 “离开” 了待优化的策略所决定的决策序列轨迹。
  3. 相比于同轨策略方法

    1. 离轨策略方法的数据来自一个不同的策略,所以其方差更大,收敛更慢;
    2. 离轨策略方法更强大、更通用,同轨策略可以看做离轨策略方法的特例。它常用于学习非学习型控制器或人类专家生成的数据

3. 回顾prediction问题

3.1 同轨策略下 q(s,a) 的MC/TD prediction

  • 这是下面4.1节5.1节的前置内容。请看 强化学习笔记(4)—— 无模型(model-free)prediction问题 (α-MC方法、TD方法)中第4节

  • 核心方法:计算MC errorTD error,通过非稳定(或稳定)的增量式方法进行迭代更新,如下:
    M C : Q ( S t , A t ) = Q ( S t , A t ) + α ( G t − Q ( S t , A t ) ) T D ( 0 ) : Q ( S t , A t ) = Q ( S t , A t ) + α [ ( R t + 1 + γ Q ( S t + 1 , A t + 1 ) ) − Q ( S t , A t ) ] \begin{aligned} MC:Q(S_t,A_t) &= Q(S_t,A_t) +\alpha(G_t-Q(S_t,A_t)) \\ TD(0):Q(S_t,A_t) &= Q(S_t,A_t) +\alpha[(R_{t+1} + \gamma Q(S_{t+1},A_{t+1}) )-Q(S_t,A_t)] \end{aligned} MCQ(St,At)TD(0)Q(St,At)=Q(St,At)+α(GtQ(St,At))=Q(St,At)+α[(Rt+1+γQ(St+1,At+1))Q(St,At)]

  • 重点关注解决 “保持试探” 问题的两个方法

    1. 试探性出发
    2. 只考虑所有(s,a)二元组都有非零概率被选中的策略

    使用这两个方式解决 “保持试探” 问题,对应了基于同轨策略方法MC Control的两类方法

3.2 离轨策略下 q(s,a) 的MC prediction

  • 为了说明离轨策略方法中的一些重要概念,补充在离轨情况下进行prediction的方法,这也是下面4.2节的前置内容。
  • 假设现有固定且已知的目标策略 π \pi π 和行动策略 b b b,我们要使用策略 b b b 生成的若干episode数据来预测 v π v_{\pi} vπ q π q_{\pi} qπ

3.2.1 覆盖假设(coverage)

  • 要用 b 生成的轨迹预测 π \pi π,必须保证 π \pi π 下的每个动作都至少偶尔能在b下发生。形式化说,对于任意 π ( a ∣ s ) > 0 \pi(a|s)>0 π(as)>0,要求有 b ( a ∣ s ) > 0 b(a|s)>0 b(as)>0
  • 根据这个假设
    1. 在与 π \pi π不同的状态中,b一定是随机的(即对于相同状态每次给出的动作随机);
    2. 另一方面, π \pi π 可能是确定性的(即对于相同状态每次给出的动作相同)。事实上,在control问题中往往如此,我们通常会把目标策略 π \pi π定义为一个固定性策略(如贪心),而行为策略更有试探性(如 ϵ \epsilon ϵ-贪心),这样我们最终可以学习到一个确定性的最优策略 π ∗ \pi^* π
  • 说明一点,在同轨策略下,“保持试探” 是一个非常重要的问题,就像引入部分提到的,我们必须保证所有(s,a)二元组的价值都能被评估,这样才能通过简单的贪心得到可靠的 π ∗ \pi^* π。而在离轨策略下,只要选择更有试探性的行为策略 b b b 就可以解决这个问题。

3.2.2 重要度采样

  • 重要度采样:这是一种在给定来自其他分布的样本下,估计某种分布期望值的通用方法。几乎所有离轨策略方法都采用了重要度采样
  • 重要度采样比:在离轨策略prediction中,我们需要目标策略下的return期望 E π [ G t ∣ S t = s ] \mathbb{E}_{\pi}[G_t|S_t=s] Eπ[GtSt=s],但由于episode来自行动策略b,我们只能获得 E b [ G t ∣ S t = s ] \mathbb{E}_b[G_t|S_t=s] Eb[GtSt=s],由于两种策略的动作分布不同,这显然是不准确的。不过,我们可以根据每个episode在目标策略和行动策略中出现的概率比例(相对概率)对其return进行加权调整,这样就可以获得目标策略下的return期望了。这个用于调整的相对概率就是重要度采样比
    1. 给定一个起始状态 S t S_t St,其后续动作状态轨迹 A t , S t + 1 , A t + 1 , . . . , S T A_t,S_{t+1},A_{t+1},...,S_T At,St+1,At+1,...,ST在策略 π \pi π 下发生的概率是
      在这里插入图片描述
      这里 p p p 是环境MDP中的状态转移矩阵。
    2. 完全类似的,可以得到这个轨迹在策略 b 下出现的概率。将两个概率做比,即得目标策略和行为策略从t时刻到T-1时刻的重要度采样比 ρ t : T − 1 \rho_{t:T-1} ρt:T1
      在这里插入图片描述
      可见,我们未知的状态转移矩阵p被约分了,最终的重要度采样比仅仅和两个策略及episode序列有关,而与MDP的动态特性无关。
    3. 利用重要度采样比调整return的期望,即可预测 π \pi π 的状态价值
      v π ( s ) = E [ ρ t : T − 1 G t ∣ S t = s ] v_{\pi}(s) = \mathbb{E}[\rho_{t:T-1}G_t|S_t=s] vπ(s)=E[ρt:T1GtSt=s]

3.2.3 基于离轨策略方法的MC prediction

  1. 定义:为了方便起见,进行以下定义

    1. 使用策略 b b b 生成的若干episode数据来预测 v π ( s ) v_{\pi}(s) vπ(s)

    2. 对时刻进行编号时,即使时跨过episode的便捷,编号也递增(即若某一个episode在时刻t=100结束于某个状态,则下一个episode起始于t=101),这样我们就可以用唯一的时刻编号指定特定episode中的特定时刻。

    3. 定义 τ ( s ) \tau(s) τ(s)为所有访问过状态s的时刻的集合

      1. 对于每次访问型方法, τ ( s ) \tau(s) τ(s) 中包括所有访问过s的时刻
      2. 对于首次访问型方法, τ ( s ) \tau(s) τ(s) 中仅包括在episode中首次访问s的时刻
    4. 定义 T ( t ) T(t) T(t) 来表示在时刻t后的首次终止时刻,即 t 所在episode的终止时刻

    5. G t G_t Gt 表示在t之后达到 T ( t ) T(t) T(t) 时的return值,所以 { G t } t ∈ τ ( s ) \{G_t\}_{t \in \tau(s)} {Gt}tτ(s)就是状态s对应的回报值, { ρ t : T ( t ) − 1 } t ∈ τ ( s ) \{\rho_{t:T(t)-1}\}_{t \in \tau(s)} {ρt:T(t)1}tτ(s) 是相应的重要度采样比

  2. 思路:要预测 v π ( s ) v_{\pi}(s) vπ(s),一般有两种方法

    1. 普通重要度采样根据重要度采样比来调整回报值,并对结果进行算术平均
      V ( s ) = ∑ t ∈ τ ( s ) ρ t : T ( t ) − 1 G t ∣ τ ( s ) ∣ V(s) = \frac{\sum_{t \in \tau(s)}\rho_{t:T(t)-1}G_t}{|\tau(s)|} V(s)=τ(s)tτ(s)ρt:T(t)1Gt

    2. 加权重要度采样:根据重要度采样比来调整回报值,对结果进行加权平均。这里如果分母为0,则V(s)的定义也为0
      V ( s ) = ∑ t ∈ τ ( s ) ρ t : T ( t ) − 1 G t ∑ t ∈ τ ( s ) ρ t : T ( t ) − 1 V(s) = \frac{\sum_{t \in \tau(s)}\rho_{t:T(t)-1}G_t}{\sum_{t \in \tau(s)}\rho_{t:T(t)-1}} V(s)=tτ(s)ρt:T(t)1tτ(s)ρt:T(t)1Gt

    要对比这两种方法,可以考虑在首次访问情况下,访问单独一个episode后获取的估计值

    1. 加权重要度采样中,比例系数(重要度采样比)被约分,所以估计值就等于这个episode中观测到的回报值,而与重要度采样比无关。考虑到这个值是仅有的观测结果,所以这是一个合理的估计,但它的期望是 v b ( s ) v_b(s) vb(s)而不是 v π ( s ) v_{\pi}(s) vπ(s)在统计学意义上看这个估计是有偏的
    2. 普通重要度采样中,算数平均得到的结果在期望上总是 v π ( s ) v_{\pi}(s) vπ(s)这个估计是无偏的,但是其值可能变得很极端。比如假设重要度采样比为10,这意味着观测到的episode在 π \pi π 下发生的概率比 b b b 下高10倍,计算出的 V ( s ) V(s) V(s)也会是观测值的10倍。

    在数学上,两种方法的差异可以用方差和偏差来表示

    1. 加权重要度采样,估计值是有偏的,但方差可以收敛到0
    2. 普通重要度采样,估计值是无偏的,但方差是无界的(因为重要度采样比的方差是无界的)
  3. 增量式实现

    1. 对于普通重要度采样,先把每个episode获取的return乘一个权重 W t W_t Wt(如 W t = ρ t : T ( t ) − 1 W_t = \rho_{t:T(t)-1} Wt=ρt:T(t)1),再求算数平均,直接用普通的增量式实现即可,如
      Q n + 1 ( S t , A t ) ← Q n ( S t , A t ) + 1 n ( W t G t ( S t , A t ) − Q n ( S t , A t ) ) V n + 1 ( S t ) ← V n ( S t ) + 1 n ( W t G t ( S t ) − V n ( S t ) ) \begin{aligned} Q_{n+1}(S_t,A_t) &\leftarrow Q_n(S_t,A_t) + \frac{1}{n}(W_tG_t(S_t,A_t) - Q_n(S_t,A_t)) \\ V_{n+1}(S_t) & \leftarrow V_n(S_t) + \frac{1}{n}(W_tG_t(S_t) - V_n(S_t) ) \end{aligned} Qn+1(St,At)Vn+1(St)Qn(St,At)+n1(WtGt(St,At)Qn(St,At))Vn(St)+n1(WtGt(St)Vn(St))
    2. 对于加权重要度采样,需要一个略微不同的增量式方法。假设有一个回报序列 G 1 , G 2 , . . . , G n − 1 G_1,G_2,...,G_{n-1} G1,G2,...,Gn1,它们都从相同状态开始,且每个回报对应一个权重 W i W_i Wi(如 W i = ρ t : T ( t ) − 1 W_i = \rho_{t:T(t)-1} Wi=ρt:T(t)1),我们希望得到的估计是
      Q n + 1 ( S t , A t ) ← ∑ k = 1 n − 1 W k G k ( S t , A t ) ∑ k = 1 n − 1 W k , n ≥ 2 V n ( S t ) ← ∑ k = 1 n − 1 W k G k ( S t ) ∑ k = 1 n − 1 W k , n ≥ 2 \begin{aligned} Q_{n+1}(S_t,A_t) &\leftarrow \frac{\sum_{k=1}^{n-1}W_kG_k(S_t,A_t)}{\sum_{k=1}^{n-1}W_k},n \ge 2 \\ V_n(S_t) &\leftarrow \frac{\sum_{k=1}^{n-1}W_kG_k(S_t)}{\sum_{k=1}^{n-1}W_k},n \ge 2 \end{aligned} Qn+1(St,At)Vn(St)k=1n1Wkk=1n1WkGk(St,At)n2k=1n1Wkk=1n1WkGk(St)n2
      当获取一个新的回报值 G t G_t Gt时,通过以下方法更新 V ( s ) V(s) V(s) Q ( s , a ) Q(s,a) Q(s,a)同理
      C n + 1 = C n + W n + 1 , n ≥ 0 V n + 1 ( S t ) = V n + W n C n [ G n ( S t ) − V n ( S t ) ] , n ≥ 1 \begin{aligned} C_{n+1} &= C_n + W_{n+1}, n \ge 0 \\ V_{n+1}(S_t) &= V_n + \frac{W_n}{C_n}[G_n(S_t) - V_n(S_t)], n \ge 1 \end{aligned} Cn+1Vn+1(St)=Cn+Wn+1,n0=Vn+CnWn[Gn(St)Vn(St)],n1
      其中 C n = ∑ k = 1 n − 1 W k C_n=\sum_{k=1}^{n-1}W_k Cn=k=1n1Wk代表前n个回报权值的累加和,定义 C 0 = 0 C_0 = 0 C0=0 V 1 V_1 V1是任意的,不需要特别指定
  4. 伪代码:
    在这里插入图片描述
    说明:

    1. 这是一个每次访问型MC算法
    2. 使用了加权重要度采样,由W代表相应G的重要度采样比,在反向循环的过程中不断连乘
    3. 这个框架是离轨的,但若使用相同的目标策略和行为策略,即可转换为同轨策略(这时 π = b \pi = b π=b,W始终为1)
    4. 若出现W=0的情况(最后一行),下一轮迭代时修正量 [ G − Q ( S t , A t ) ] [G-Q(S_t,A_t)] [GQ(St,At)]乘上的系数就是0,不能起到修正作用,所以这个动作及之前的轨迹都不再考虑,退出内层for循环即可
      其实,W=0意味着 π ( A t ∣ S t ) = 0 \pi(A_t|S_t) = 0 π(AtSt)=0即在这一步状态 S t S_t St下执行的动作 A t A_t At与目标策略 π \pi π不符。这并不是说对 Q ( S t , A t ) Q(S_t,A_t) Q(St,At)的修正有问题,仅仅意味着策略 b b b 选择的这个这个动作在策略 π \pi π下不会发生,这进而导致此 ( S t , A t ) (S_t,A_t) (St,At)及之前的这部分episode在 π \pi π下出现的概率为0,没有意义再用它修正Q(s,a)
      举个例子,现在要从北京朝阳公园去上海人民公园,策略 π \pi π 是全程开车去;策略 b b b 是先开车到首都机场,然后做坐飞机到虹桥机场,再从机场开车到人民公园。MC prediction更新时从后向前反向计算一段episode的回报,必须保证来自b的这段episode可能在 π \pi π下发生。从虹桥机场到人民公园一路都是开车走的,可能在 π \pi π下发生;而在首都机场时坐飞机这个动作不可能在 π \pi π下发生,因此从 ( 首 都 机 场 , 坐 飞 机 ) (首都机场,坐飞机) (,)这个二元组开始,之前的任意轨迹都不能在 π \pi π下发生了。体现在伪代码中,就是我们用虹桥机场到人民公园的回报估计了 Q ( 首 都 机 场 , 坐 飞 机 ) Q(首都机场,坐飞机) Q(,),但不能再估计其之前的任何二元组价值。

4. Monte-Carlo Method(MC)Control

  • MC control的基本框架是GPI,不过在策略评估部分使用同轨或离轨的MC方法实现

4.1 基于同轨策略方法的MC control方法

4.1.1 使用试探性出发假设

4.1.1.1 方法1:MC版Policy iteration

  1. 思想:从model-based control中经典Policy iteration算法入手,通过使用MC方法实现策略评估,把它改造成MC版本。这种方法任意策略 π 0 \pi_0 π0开始交替进行完整的策略评估和策略提升,最终得到最优的策略 π ∗ \pi^* π和价值 V ∗ V^* V

  2. 两个假设

    1. 我们观测到无限多的episode
    2. 这些episode保证试探性出发,确保可以评估所有(s,a)二元组的价值
  3. 流程:迭代执行以下两步,直到 Q ( s , a ) Q(s,a) Q(s,a) 收敛到 q ∗ q^* q 为止。最后在 q ∗ q^* q上贪心得 π ∗ \pi^* π

    1. 策略评估:使用上面3.1节的方法: Q ( S t , A t ) ← Q ( S t , A t ) + α ( G t − Q ( S t , A t ) ) Q(S_t,A_t) \leftarrow Q(S_t,A_t) + \alpha(G_t-Q(S_t,A_t)) Q(St,At)Q(St,At)+α(GtQ(St,At)),每轮更新Q(s,a)。这里要多轮迭代直到收敛至 q ( S t , A t ) q(S_t,A_t) q(St,At) 为止
    2. 策略提升:在当前 q ( S t , A t ) q(S_t,A_t) q(St,At)贪心地选择动作,即 π ( s ) = arg max ⁡ a q ( s , a ) \pi(s) = \argmax_a q(s,a) π(s)=aargmaxq(s,a)
  4. 收敛性:根据策略改进定理(见 强化学习笔记(3)—— MDP中的prediction和control问题中 2.3.1.3 节),可以保证每一轮策略提升得到的策略一定更好,整个流程最终一定会收敛到最优

  5. 说明:这里提出了两个很强的假设来保证算法收敛,但这也使得此方法实用性很差

4.1.1.2 方法2:蒙特卡洛ES

  1. 思想:去掉MC版Policy iteration中 “可以观测到无穷多episode” 这个假设

  2. 分析:事实上,不只MC版Policy iteration,即使是原版model-based情况下使用DP的Policy iteration,在做prediction的时候也有这个无限多episode假设。有两个方法可以放宽它

    1. 想方设法在每次策略评估中对 q π k q_{\pi k} qπk做出尽量好的逼近。这需要做一些假设并定义一些测度,来分析逼近误差的幅度和出现概率的上下界,算出保证逼近效果所需的迭代步数(episode数量)。这种方法可以保证收敛到令人满意的水平,但是在实际使用中,即使问题规模很小,这种方法也往往需要有大量的episode用于计算
    2. 不再要求每轮策略改进前进行完整的策略评估。在每一个评估步骤中,我们让价值函数逼近 q π k q_{\pi k} qπk,但是并不需要它经过足够多轮迭代直到收敛,这正是GPI中的思想。这种思想的一种极端形式是model-based情况下的value iteration,它在相邻的两次策略提升间只进行了一次策略评估;value iteration的 “就地更新” 版本则更极端:在单个状态中交替进行策略改进与评估。
  3. 流程:使用第二种方法放宽假设,并且结合MC的特点,我们逐episode进行策略评估和提升。每采集一个episode执行如下两步,直到收敛为止

    1. 部分略评估:使用观测到的回报进行一轮策略评估(仅对此episode访问到的所有(s,a)二元组的价值进行一次更新)
    2. 策略提升:对于此episode访问到的每一个状态s,在Q(s,a)上贪心地选择动作

    这种方法就称为 基于试探性出发的MC方法,简称 蒙特卡洛ES

  4. 伪代码
    在这里插入图片描述
    说明:

    1. 总体上使用了GPI思想
    2. 使用了同轨策略,用于生成episode的策略和用于改进的策略是相同的
    3. prediction部分使用了首次访问型MC算法,把Unless那行判断去掉可以改成每次访问型,差别不大
    4. 使用 “试探性出发” ,即代码中Choose那行,选择所有可能的 (s,a)二元组 作为起始状态
    5. 这个伪代码的效率不高,对于每一个(s,a)二元组都要维护一个列表存储所有的return G t G_t Gt可以把均值计算优化为非稳定的增量式实现 Q ( S t , A t ) ← Q ( S t , A t ) + α ( G t − Q ( S t , A t ) ) Q(S_t,A_t) \leftarrow Q(S_t,A_t) + \alpha(G_t - Q(S_t,A_t)) Q(St,At)Q(St,At)+α(GtQ(St,At))
  5. 收敛性: 蒙特卡洛ES方法一定可以收敛到最优策略。因为假如真的收敛到次优,其价值函数一定会收敛到这个次优策略对应的价值函数,而这时对Q(s,a)贪心肯定可以找到更好的策略,只有策略和价值都最优时才能保持稳定收敛。虽然这一点还没有严格的数学证明,我们认为这是RL种最重要的开放问题之一

4.1.2 方法3:不使用试探性出发假设

  1. 思想:去掉MC版Policy iteration中 “试探性出发” 这个假设

  2. 分析:

    1. “试探性出发” 假设存在的意义是要解决 “保持试探” 问题(保证所有(s,a)二元组都有非零概率被选中),如果使用其他方式解决这个问题,就能避免试探性出发假设。回顾3.1节,唯一的一般性解决方案是 Agent必须能持续不断地选择所有可能的动作,这时我们的策略一般是 “软性” 的
    2. 软性策略/不确定性策略对于任意 s ∈ S s \in S sS a ∈ A ( s ) a \in A(s) aA(s),都有 π ( a ∣ s ) > 0 \pi(a|s) > 0 π(as)>0。这个策略每次面对状态s时可能做出不同的动作,但随着不断迭代,最终会逐渐逼近一个确定性的策略。这可以保证所有(s,a)二元组都有非零概率被选中
    3. ϵ \epsilon ϵ-软性策略:这是一种特殊的软性策略,要求对于任意 ϵ \epsilon ϵ>0、任意 s ∈ S s \in S sS a ∈ A ( s ) a \in A(s) aA(s),都有 π ( a ∣ s ) ≥ ϵ ∣ A ( s ) ∣ \pi(a|s) \ge \frac{\epsilon}{|A(s)|} π(as)A(s)ϵ
  3. ϵ \epsilon ϵ-贪心策略:在绝大多数情况下(1- ϵ \epsilon ϵ的概率)贪心地选择使Q(s,a)最大的动作,但同时以一个较小的概率 ϵ \epsilon ϵ 随机选择一个动作。不妨把使用贪心动作称作 利用,使用随机动作称作 探索,则对于最优动作而言,利用阶段有1的概率被选中,探索阶段有 1 ∣ A ( s ) ∣ \frac{1}{|A(s)|} A(s)1的概率被选中;对于非最优动作,仅在探索阶段有 1 ∣ A ( s ) ∣ \frac{1}{|A(s)|} A(s)1的概率被选中。即

    1. 对于1个贪心动作,被选中的概率为 ϵ × 1 ∣ A ( s ) ∣ + ( 1 − ϵ ) × 1 = 1 − ϵ + ϵ ∣ A ( s ) ∣ \epsilon \times \frac{1}{|A(s)|} + (1-\epsilon) \times 1= 1-\epsilon+ \frac{\epsilon}{|A(s)|} ϵ×A(s)1+(1ϵ)×1=1ϵ+A(s)ϵ
    2. 对其他 ∣ A ( s ) ∣ − 1 |A(s)|-1 A(s)1个非贪心动作,被选中的概率为 ϵ × 1 ∣ A ( s ) ∣ + ( 1 − ϵ ) × 0 = ϵ ∣ A ( s ) ∣ \epsilon \times \frac{1}{|A(s)|} +(1-\epsilon) \times 0= \frac{\epsilon}{|A(s)|} ϵ×A(s)1+(1ϵ)×0=A(s)ϵ
    3. 规范一点,可以写成
      在这里插入图片描述

    这是一种简单的 “ ϵ \epsilon ϵ-软性策略”,在所有 “ ϵ \epsilon ϵ-软性策略”中,这在某种程度上是最接近贪心策略的

  4. 伪代码
    在这里插入图片描述
    说明:

    1. 总体上使用了GPI思想
    2. 使用了同轨策略,用于生成episode的策略和用于改进的策略是相同的
    3. prediction部分使用了首次访问型MC算法,把Unless那行判断去掉可以改成每次访问型,差别不大
    4. 判断 A ∗ A^* A时,若有多个a可以使Q(s,a)为相等的最大值,则从中随机选一个作为 A ∗ A^* A
    5. 这个伪代码的效率不高,对于每一个(s,a)二元组都要维护一个列表存储所有的return G t G_t Gt可以把均值计算优化为非稳定的增量式实现 Q ( S t , A t ) ← Q ( S t , A t ) + α ( G t − Q ( S t , A t ) ) Q(S_t,A_t) \leftarrow Q(S_t,A_t) + \alpha(G_t - Q(S_t,A_t)) Q(St,At)Q(St,At)+α(GtQ(St,At))
  5. 收敛性:假设 π \pi π 是一个 ϵ \epsilon ϵ-贪心策略,评估它得到 q π q_{\pi} qπ,再在 q π q_{\pi} qπ上进行 ϵ \epsilon ϵ贪心得到新策略 π ′ \pi' π。则对于任意 s ∈ S s \in S sS,有 q π ( s , π ′ ( s ) ) = ∑ a π ′ ( a ∣ s ) q π ( s , a ) = ϵ ∣ A ( s ) ∣ ∑ a q π ( s , a ) + ( 1 − ϵ ) max ⁡ a q π ( s , a ) ≥ ϵ ∣ A ( s ) ∣ ∑ a q π ( s , a ) + ( 1 − ϵ ) ∑ a π ( a ∣ s ) − ϵ ∣ A ( s ) ∣ 1 − ϵ q π ( s , a ) = ϵ ∣ A ( s ) ∣ ∑ a q π ( s , a ) − ϵ ∣ A ( s ) ∣ ∑ a q π ( s , a ) + ∑ a π ( a ∣ s ) q π ( s , a ) = ∑ a π ( a ∣ s ) q π ( s , a ) = v π ( s ) \begin{aligned} q_{\pi}(s,\pi'(s)) &= \sum_a \pi'(a|s)q_{\pi}(s,a) \\ &=\frac{\epsilon}{|A(s)|} \sum_a q_{\pi}(s,a) + (1-\epsilon)\max_a q_{\pi}(s,a) \\ &\ge \frac{\epsilon}{|A(s)|} \sum_aq_{\pi}(s,a) + (1-\epsilon) \sum_a \frac{\pi(a|s)-\frac{\epsilon}{|A(s)|}}{1-\epsilon} q_{\pi}(s,a) \\ &=\frac{\epsilon}{|A(s)|} \sum_aq_{\pi}(s,a) - \frac{\epsilon}{|A(s)|} \sum_aq_{\pi}(s,a) + \sum_a \pi(a|s) q_{\pi}(s,a) \\ &= \sum_a \pi(a|s) q_{\pi}(s,a) \\ &=v_{\pi}(s) \end{aligned} qπ(s,π(s))=aπ(as)qπ(s,a)=A(s)ϵaqπ(s,a)+(1ϵ)amaxqπ(s,a)A(s)ϵaqπ(s,a)+(1ϵ)a1ϵπ(as)A(s)ϵqπ(s,a)=A(s)ϵaqπ(s,a)A(s)ϵaqπ(s,a)+aπ(as)qπ(s,a)=aπ(as)qπ(s,a)=vπ(s)

    1. 这里第二个等号,前半部分是以 ϵ \epsilon ϵ 概率进行探索所获得的收益,其中包含1个最优动作 A ∗ = max ⁡ a q π ( s , a ) A^* = \max_a q_{\pi}(s,a) A=maxaqπ(s,a),后半部分是以 ( ϵ \epsilon ϵ-1) 的概率去利用这个 A ∗ A^* A所获得的收益

    2. 第三行的不等号,其实是把利用阶段获取的收益(后半部分)进行了修改

      1. 不等号左边是 “(以1的概率)“利用” 最优动作能获得的收益
      2. 不等号右边是 “(以 π ( a ∣ s ) − ϵ ∣ A ( s ) ∣ 1 − ϵ \frac{\pi(a|s) - \frac{\epsilon}{|A(s)|}}{1-\epsilon} 1ϵπ(as)A(s)ϵ的概率)“利用” 任意动作能获得的收益的期望”。这里其实是个条件概率,分号上面是 “利用且选择a的概率”,分号下面是 “利用的概率”,于是除法的结果就是 “在利用时选择a的概率”,即:
        P ( 选 择 a ∣ 处 于 利 用 阶 段 ) = P ( 在 利 用 阶 段 选 择 a ) P ( 处 于 利 用 阶 段 ) = P ( 选 择 a ) − P ( 在 探 索 阶 段 选 择 a ) P ( 处 于 利 用 阶 段 ) = π ( a ∣ s ) − ϵ ∣ A ( s ) ∣ 1 − ϵ \begin{aligned} P(选择a|处于利用阶段) &= \frac{P(在利用阶段选择a)}{P(处于利用阶段)} \\ &= \frac{P(选择a) - P(在探索阶段选择a)}{P(处于利用阶段)} \\ &= \frac{\pi(a|s) - \frac{\epsilon}{|A(s)|}}{1-\epsilon} \end{aligned} P(a)=P()P(a)=P()P(a)P(a)=1ϵπ(as)A(s)ϵ

      因为我们定义最优动作获取的收益是最多的,所以最优动作的收益一定不少于所有动作的平均收益,这个不等号肯定成立

    3. 我们推出了 q π ( s , π ′ ( s ) ) ≥ v π ( s ) q_{\pi}(s,\pi'(s)) \ge v_{\pi}(s) qπ(s,π(s))vπ(s),根据策略改进定理(见 强化学习笔记(3)—— MDP中的prediction和control问题中 2.3.1.3 节),可以保证 v π ′ ( s ) ≥ v π ( s ) v_{\pi'}(s) \ge v_{\pi}(s) vπ(s)vπ(s),即每一轮策略提升得到的策略一定更好,整个流程最终一定会收敛到最优。

4.2 方法4:基于离轨策略方法的MC control方法

  1. 思想:基于GPI框架,使用离轨策略方法。目标策略 π \pi π 设定为在Q上的贪心策略;行动策略可以是任意策略,但为了保持试探,把行为策略 b b b 设定为一个 “ ϵ \epsilon ϵ软性” 策略
  2. 伪代码
    在这里插入图片描述
    说明:
    1. 这里使用了类似上面prediction的增量式实现,优化Q函数,并以此为基础贪心得到目标策略 π \pi π
    2. 使用了加权重要度采样,由W代表相应G的重要度采样比,在反向循环的过程中不断连乘 。由于目标策略 π \pi π是贪心策略,贪心得到的动作a必有 π ( a ∣ S t ) = 1 \pi(a|S_t) = 1 π(aSt)=1,最后一行更新重要度采样比时,乘数分子写1即可
    3. A t ≠ π ( S t ) A_t \neq \pi(S_t) At=π(St),这是说这一步得到的回报与目标策略不符,和3.2.3节中的分析相同,这个这个动作之前(含此动作)的轨迹都不再考虑,退出内层for循环
    4. 一个潜在的问题是,这种方法只从episode的尾部开始学习。如果非贪婪的动作很常见,就会有很多由于 A t ≠ π ( S t ) A_t \neq \pi(S_t) At=π(St)提前退出的情况,学习就会很慢,特别是对于那些在很长的episode中较早出现的状态更是如此。处理这个问题最重要的方法可能是时序差分学习(TD),下面将会介绍

4.3 小结

  • 本节综合讨论了MC control的若干方法,它们都使用GPI框架,要求满足的假设从强到弱、实用性和通用性从弱到强
    1. MC版Policy iteration(同轨):完全仿照model-based情况下的control方法policy iteration,只是把价值评估部分改用MC方法实现。它有两个很强的假设:“观测到无穷episode” 和 “保证试探性出发”
    2. 蒙特卡洛ES(同轨):在MC版Policy iteration基础上,放宽 “观测到无穷episode” 这个假设。利用GPI的思想,每获得一个episode就对其覆盖的状态进行一次部分策略评估和提升,直到收敛为止。
    3. 没有试探性出发假设的MC control方法(同轨):在蒙特卡洛ES的基础上,再放宽 “保证试探性出发” 这个假设。通过把策略从 “贪心” 改为 “ ϵ \epsilon ϵ-贪心” ,从而在优化策略的同时保持试探。
    4. 基于离轨策略方法的MC control方法(离轨):如果只是使用 “ ϵ \epsilon ϵ-贪心” 策略,不能收敛到最优,因为总有 ϵ \epsilon ϵ的概率会随机选择动作(除非在训练中逐步减小 ϵ \epsilon ϵ,比如令 ϵ = 1 t \epsilon = \frac{1}{t} ϵ=t1)。但若使用离轨策略方法,这个问题便迎刃而解,这时我们可以使用更有试探性的行为策略(如 ϵ \epsilon ϵ-贪心)来训练一个固定的目标策略(如贪心)。不仅如此,行为策略还可以来自其他非学习型算法或人类专家,这使离轨方法更加强大和通用。注意策略评估时要使用 “重要度采样比” 修正分布偏差。
  • 关系图
    在这里插入图片描述

5. Temporal-Difference Learning (TD) Control

  • TD control的基本框架是GPI,不过在策略评估部分使用同轨或离轨的TD方法实现

5.1 方法1:Sarsa(同轨)

5.1.1 Sarsa prediction

  1. 思想:sarsa prediction其实就是3.1节提到的 “同轨策略下 q(s,a) 的TD prediction” 方法。对于如下每一幕episode
    在这里插入图片描述
    对于episode中每个二元组 ( S t , A t ) (S_t,A_t) (St,At) ,观测环境转移 ( S t , A t ) → P ( R t + 1 , S t + 1 ) (S_t,A_t) \stackrel{P}{\to} (R_{t+1},S_{t+1}) (St,At)P(Rt+1,St+1) 得到下一时刻状态 S t + 1 S_{t+1} St+1,再用同轨策略 π \pi π 获得下一时刻动作 S t + 1 → π A t + 1 S_{t+1} \stackrel{\pi}{\to} A_{t+1} St+1πAt+1,然后基于二元组 ( S t + 1 , A t + 1 ) (S_{t+1},A_{t+1}) (St+1,At+1) 的当前价值估计 Q ( S t + 1 , A t + 1 ) Q(S_{t+1},A_{t+1}) Q(St+1,At+1),通过稳定(或非稳定)增量式方法进行迭代更新二元组 ( S t , A t ) (S_t,A_t) (St,At) 价值(若状态是终止状态,对应的Q函数值为0)。这个过程简单说就是要多往前看一步,Q函数递推更新公式如下:
    Q ( S t , A t ) = { Q ( S t , A t ) + α [ ( R t + 1 + γ Q ( S t + 1 , A t + 1 ) ) − Q ( S t , A t ) ] , S t 不 是 终 止 状 态 0 , S t 是 终 止 状 态 Q(S_t,A_t) =\left\{ \begin{aligned} & Q(S_t,A_t) +\alpha[(R_{t+1} + \gamma Q(S_{t+1},A_{t+1}) )-Q(S_t,A_t)] &,S_t不是终止状态 \\ & 0 & ,S_t是终止状态 \end{aligned} \right. Q(St,At)={Q(St,At)+α[(Rt+1+γQ(St+1,At+1))Q(St,At)]0,St,St
    更新规则用到了五元组 ( S t , A t , R t + 1 , S t + 1 , A t + 1 ) (S_t,A_t,R_{t+1},S_{t+1},A_{t+1}) (St,At,Rt+1,St+1,At+1) 中的所有元素,这正是 “Sarsa” 这个名称的由来。

  2. 回溯图:可以看到,每一次更新Q函数, S t → A t S_t \to A_t StAt S t + 1 → A t + 1 S_{t+1} \to A_{t+1} St+1At+1使用了两次试探性策略 π \pi π
    在这里插入图片描述

5.1.2 Sarsa control

  1. 思想:

    1. 基于sarsa prediction方法设计一个基于同轨策略方法的control算法是简单而直接的。我们持续地对策略 π \pi π进行sarsa prediction以得到其动作价值函数 q π q_{\pi} qπ,并在每一轮迭代中基于 q π q_{\pi} qπ朝着贪心方向优化 π \pi π
    2. TD target = R t + 1 + γ Q ( S t + 1 , A t + 1 ) R_{t+1} + \gamma Q(S_{t+1},A_{t+1}) Rt+1+γQ(St+1,At+1)
    3. 和上面讨论MC时一样,这里也会遇到 “保持试探” 问题。我们可以采用 “ ϵ \epsilon ϵ-贪心” 或 “ ϵ \epsilon ϵ-软性” 策略 π \pi π
  2. 收敛性:只要保证所有 (s,a) 二元组都能被无限多次访问到,control过程就能收敛。如果让试探概率 ϵ \epsilon ϵ 在评估过程中逐渐递减(比如让 ϵ = 1 t \epsilon = \frac{1}{t} ϵ=t1),sarsa就能以1的概率收敛到最优的策略和价值函数

  3. 伪代码
    在这里插入图片描述

  4. 示例(有风的网格世界)

    • 本例子出自 Richard S.Sutton 《Reinforce Learning》 第二版
    • 如下图所示,这是一个有起始状态和目标状态的网格世界环境。相比标准的网格世界有一点不同:网格中间部分存在一个向上的风。agent可以执行的动作有四种,即向上下左右移动一格,但在中间区域,agent执行动作后达到的位置会被 “风” 向上吹一点。风的强度因列而异,在每一列下面给出,代表着移到此列时会被吹上去的格子数。这是一个不折扣的分幕式任务( γ = 1 \gamma = 1 γ=1)。在达到目标状态之前, 每一步会得到固定收益-1
      在这里插入图片描述
    • 图中的曲线展现了在这个任务中使用 “ ϵ \epsilon ϵ-贪心的Sarsa Control” 的任务结果。横轴是逐episode累计的agent总步数,纵轴是agent成功到达目标的总次数(即完成任务的episode数目),其中 ϵ = 0.1 \epsilon=0.1 ϵ=0.1 α = 0.5 \alpha=0.5 α=0.5
    • 如图所示,随着时间推移,目标达成得越来越快。当8000步时,贪心策略已经达到最优很久了(图中的蓝色线给出了一个最优解的轨迹,步数最小值为15步)。由于使用“ ϵ \epsilon ϵ-贪心” 策略以保持试探,最终完成任务的平均步数比最优多了两步,稳定在17步左右。
    • 需要注意的是,不能在这个任务上简单地使用MC方法,因为不是所有策略都能保证episode终止,如果一个episode陷入循环,那么下一幕任务永远不会开始;Sarsa这种 “step by step” 的方法则没有这种问题

5.2 方法2:Q-learning(离轨)

  1. 思想:

    1. Q-learning使用对最优动作价值 q ∗ q_* q的直接近似来学习 Q ( S t , A t ) Q(S_t,A_t) Q(St,At),它是一种离轨方法
      1. 使用试探性behavior policy b b b(可以是随机策略,一般用 ϵ \epsilon ϵ-贪心)来保持试探
      2. 使用贪心算法作为确定性的target policy π \pi π
      3. 这是一种value-based方法,显式学习最佳动作价值函数 q ∗ q_* q π ∗ \pi_* π q ∗ q_* q隐式表示(基于 q ∗ q_* q做一遍贪心)
    2. TD target = R t + 1 + γ max ⁡ a Q ( S t + 1 , a ) R_{t+1}+\gamma \max_aQ(S_{t+1},a) Rt+1+γmaxaQ(St+1,a),Q函数更新方式如下:
      Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ max ⁡ a Q ( S t + 1 , a ) − Q ( S t , A t ) ] Q(S_t,A_t) \leftarrow Q(S_t,A_t) + \alpha[R_{t+1}+\gamma \max_aQ(S_{t+1},a)-Q(S_t,A_t)] Q(St,At)Q(St,At)+α[Rt+1+γamaxQ(St+1,a)Q(St,At)]
      这里的 max ⁡ a \max_a maxa 就是目标策略贪心的体现
    3. 需要注意的是,由于Q-learning是value-based方法,在线学习过程中,始终采用试探性的行动策略 b b b 和环境交互,如果Q函数收敛后不进行一步离线贪心得 π ∗ \pi_* π 的操作,就无法用 π ∗ \pi_* π 和环境交互来获得最大奖励,除非在学习过程中逐步减小试探概率至0,这样行动策略 b b b 也会收敛到 π ∗ \pi_* π
  2. 回溯图:可以看到,相比Sarsa,Q-learning在 S t → A t S_t \to A_t StAt 使用了试探性行动策略 b b b,在 S t + 1 → a S_{t+1} \to a St+1a 使用了贪心目标策略 π \pi π
    在这里插入图片描述

  3. 收敛性:只要保证所有 (s,a) 二元组都能被无限多次访问到,状态动作价值函数Q就能以1的概率收敛到 q ∗ q_* q如果使行动策略 b b b 的试探概率 ϵ \epsilon ϵ 在评估过程中逐渐递减(比如让 ϵ = 1 t \epsilon = \frac{1}{t} ϵ=t1), b b b 也能在在线学习过程中以1的概率收敛到最优策略 π ∗ \pi_* π

  4. 伪代码:
    在这里插入图片描述
    说明:

    1. 这里Loop循环中第一句Choose A时使用的是试探性的行动策略 b b b,这里选中的动作也是agent真实执行的动作
    2. 在更新Q函数值时通过 max ⁡ a \max_a maxa 贪心选中的动作a不会实际执行,只是用它的动作状态价值来更新Q
  5. 对比Sarsa和Q-learning(示例:在悬崖边行走)

    • 本例子出自 Richard S.Sutton 《Reinforce Learning》 第二版
    • 考虑下图所示的网格世界
      在这里插入图片描述
      这是一个标准的不折扣( γ = 1 \gamma = 1 γ=1)分幕式任务。它包含起点和目标状态,可以执行上下左右这些标准动作。下面灰色部分是悬崖,掉下悬崖会获得-100的奖励,同时把agent送回起点,其他转移得到的每步收益为-1。
    • 下图显示了使用 ϵ \epsilon ϵ-贪心方法( ϵ = 0.1 \epsilon = 0.1 ϵ=0.1)来选择动作时,Sarsa和Q-learning方法的表现。
      在这里插入图片描述
      1. 训练一小段时间后,由于TD target中的贪心选择,Q-learning学得了最优的动作状态价值 q ∗ q_* q(即图中红线),但由于behavior policy的试探性,在执行此策略时agent有可能掉入悬崖,使得在线性能下降,平均收益在 -50 左右
      2. 与之相比,Sarsa会多向前看一步,掉下悬崖的情况会被考虑,这使得悬崖边位置的价值下降,由于掉下悬崖的负奖励相对移动的负奖励太大,所以agent会尽量远离悬崖,最终找到了最安全策略(即图中蓝线)。虽然Sarsa没有找到最优动作状态价值 q ∗ q_* q,但其在线性能反而超过学得 q ∗ q_* q 的Q-learning,平均收益在 -25 左右。
      3. 如果使 ϵ \epsilon ϵ 逐步减小,那么两种方法都会渐进地收敛到最优 q ∗ q_* q π ∗ \pi_* π,对于Q-learning,也可以考虑在收敛后再离线地在 q ∗ q_* q 上做一次贪心以得到最优策略
    1. 总结:
      1. Q-learning的 TD target = R t + 1 + γ max ⁡ a Q ( S t + 1 , a ) R_{t+1}+\gamma \max_aQ(S_{t+1},a) Rt+1+γmaxaQ(St+1,a)与生成轨迹的策略无关,离轨的行为策略 b b b 只决定哪些(s,a)二元组会被更新,因此在满足收敛条件的前提下一定能学得最佳动作价值函数 q ∗ q_* q。在线学习过程中,Q-learning离轨地学得 q ∗ q_* q,但并没有直接学到 π ∗ \pi_* π,由于一直使用试探性的行为策略 b b b 和环境交互,无法获得最优表现。
      2. Sarsa的 TD target = R t + 1 + γ Q ( S t + 1 , A t + 1 ) R_{t+1} + \gamma Q(S_{t+1},A_{t+1}) Rt+1+γQ(St+1,At+1)中用到了轨迹中由同轨策略 π \pi π 选出的 A t + 1 A_{t+1} At+1,其Q函数更新过程(学习过程)和其轨迹的生成过程相互影响,可能无法学出最佳动作价值函数 q ∗ q_* q,但在在线学习时会学得某种前瞻性。
      3. 假设以贪心的方法选择动作,那么此刻Q-learning的behavior policy和target policy完全一致,等价于使用贪心策略的Sarsa方法,会做出完全相同的动作和价值更新。这种情况下不能保持试探,会陷入局部最优。

5.3 方法3:期望Sarsa(同轨或离轨)

  1. 思想:

    1. 期望Sarsa是一种与Q-learning十分类似的方法,只是把其中的取下一时刻Q最大值的贪心过程改成了取期望
    2. TD target = R t + 1 + γ E [ Q ( S t + 1 , A t + 1 ) ∣ S t + 1 ] R_{t+1}+\gamma \mathbb{E}[Q(S_{t+1},A_{t+1}) | S_{t+1}] Rt+1+γE[Q(St+1,At+1)St+1],Q函数更新方式如下:
      Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ E [ Q ( S t + 1 , A t + 1 ) ∣ S t + 1 ] − Q ( S t , A t ) ] ← Q ( S t , A t ) + α [ R t + 1 + γ ∑ a π ( a ∣ S t + 1 ) Q ( S t + 1 , a ) − Q ( S t , A t ) ] \begin{aligned} Q(S_t,A_t) & \leftarrow Q(S_t,A_t) + \alpha[R_{t+1}+\gamma \mathbb{E}[Q(S_{t+1},A_{t+1}) | S_{t+1}]-Q(S_t,A_t)] \\ & \leftarrow Q(S_t,A_t) + \alpha[R_{t+1}+\gamma \sum_a \pi(a|S_{t+1})Q(S_{t+1},a)-Q(S_t,A_t)] \end{aligned} Q(St,At)Q(St,At)+α[Rt+1+γE[Q(St+1,At+1)St+1]Q(St,At)]Q(St,At)+α[Rt+1+γaπ(aSt+1)Q(St+1,a)Q(St,At)]
    3. 给定下一个状态 S t + 1 S_{t+1} St+1,这个算法会确定地向期望意义上的Sarsa算法所决定的方向上移动,因此此算法被叫做期望Sarsa
    4. 期望Sarsa可以和Sarsa一样基于同轨方法实现,也可以和Q-learning一样基于离轨方法实现
  2. 回溯图: S t → A t S_t \to A_t StAt 使用同轨策略 π \pi π 还是离轨策略 b b b 决定了期望Sarsa是同轨还是离轨
    在这里插入图片描述

  3. 对比期望Sarsa、sarsa、Q-learning(示例:在悬崖边行走):

    1. 还是使用上面 “在悬崖边行走” 这个任务
    2. 下图给出了三种方法随着学习率 α \alpha α 提升,其长期性能(Asymptotic Performance)和短期性能(Interim Performance)的变化。
      在这里插入图片描述
      1. 随着 α \alpha α的增大,三种方法的短期性能都明显上升,这是因为动作价值函数Q更加靠近最近的经验。
      2. 这个例子中,所有状态的转移都是确定的,随机性仅来自于策略。本质上每个动作状态价值 Q ( S t , A t ) Q(S_t,A_t) Q(St,At) 都是由 R t + 1 + γ E [ Q ( S t + 1 , A t + 1 ) ∣ S t + 1 ] R_{t+1}+\gamma \mathbb{E}[Q(S_{t+1},A_{t+1}) | S_{t+1}] Rt+1+γE[Q(St+1,At+1)St+1] 决定的。
        1. 对于Q-learning和期望Sarsa(这里是同轨的),其Q函数更新过程中都考虑到所有相邻状态,因此 α \alpha α 的变化不会影响长期性能。
        2. 对于Sarsa,它在每次更新Q函数时只考虑了一种相邻状态,其需要通过大量尝试来逼近这个期望(有点像MC方法);而且Sarsa是同轨方法,对动作状态价值的不准确估计会影响后续的动作选择。这两个因素导致Sarsa的长期性能严重下降。
      3. 无论长期还是短期奖励,无论学习率如何,期望Sarsa的性能都显著高于Sarsa 和 Q-learning,除了增加少许复杂度以外,期望Sarsa应该完全优于这两种更加知名的TD control方法。
  4. 假设在基于离轨方法实现期望Sarsa时,目标策略 π \pi π 选择贪心策略,行动策略 b b b 选择一个试探性策略,这时 E [ Q ( S t + 1 , A t + 1 ) ∣ S t + 1 ] = max ⁡ a Q ( S t + 1 , a ) \mathbb{E}[Q(S_{t+1},A_{t+1}) | S_{t+1}] = \max_aQ(S_{t+1},a) E[Q(St+1,At+1)St+1]=maxaQ(St+1,a) ,期望Sarsa就退化为Q-learning。可以说期望Sarsa推广了Q-learning,Q-learning是期望Sarsa的一种特例

5.4 方法4:双学习(同轨或离轨)

5.4.1 最大化偏差

  1. 大部分TD control算法都包含 最大化操作,比如Q-learning中目标策略 max ⁡ a Q ( S t + 1 , a ) \max_aQ(S_{t+1},a) maxaQ(St+1,a) 的贪心操作,或是sarsa中的 ϵ \epsilon ϵ-贪心操作
  2. 在估计值的基础上进行最大化操作也可以被看作隐式地对最大值进行估计,这会带来一个显著的正偏差。 举例来说,假设状态s下可以选择多个动作a,所有二元组 (s,a) 的真实价值 q(s,a) 都为0。在估计状态动作价值时,估计值 Q(s,a) 是不确定的,可能大于0也可能小于0,但由于我们的最大化操作,往往会选出偏大的估计,这就产生了正偏差。
  3. 最大化偏差会损害TD算法的性能
    • 本例子出自 Richard S.Sutton 《Reinforce Learning》 第二版
    • 考虑下图所示的简单MDP
      在这里插入图片描述
      这个MDP有A和B两个非终止节点。每幕从A开始并随机向左或右前进,如图所示,以向右开始的轨迹return为0;以向左开始的轨迹return服从均值-0.1方差1.0的正态分布。 在已知MDP的Model-based情况下,可以轻易看出从A开始向左的收益均值为-0.1,而向右是0,所以我们的策略应该完全不选择向左。
    1. 使用Q-learning算法进行学习,行动策略使用 ϵ \epsilon ϵ-贪心,设置 ϵ = 0.1 , α = 0.1 , γ = 1 \epsilon=0.1,\alpha = 0.1,\gamma = 1 ϵ=0.1,α=0.1,γ=1。结果如折线图红线所示,Q-learning在开始阶段选择向左的概率远高于向右,且向左的概率会一直显著地高于5%(即使用 ϵ = 0.1 \epsilon=0.1 ϵ=0.1的概率随机试探引起的最低的向左运动概率)
    2. 造成这个问题的本质是确定价值最大的动作估计价值这两个过程使用了相同的样本(多幕序列),用Q-learning的Q函数更新公式计算 Q ( A , 向 左 ) Q(A,向左) Q(A,)时,带入参数值有
      Q ( A , 向 左 ) ← Q ( A , 向 左 ) + 0.1 × [ 0 + 1 × max ⁡ a Q ( B , a ) − Q ( A , 向 左 ) ] Q(A,向左) \leftarrow Q(A,向左) + 0.1\times[0 +1\times \max_aQ(B,a)-Q(A,向左)] Q(A,)Q(A,)+0.1×[0+1×amaxQ(B,a)Q(A,)]
      1. 确定价值最大动作:每轮更新时, max ⁡ a Q ( B , a ) , a ∈ N ( − 0.1 , 1 ) \max_a Q(B,a),a \in \mathcal{N}(-0.1,1) maxaQ(B,a),aN(0.1,1) 这个操作,会使B到左边终态的每一个可能路线进行一次 N ( − 0.1 , 1 ) \mathcal{N}(-0.1,1) N(0.1,1) 上的采样作为奖励(也是 Q ( B , a ) Q(B,a) Q(B,a)),一旦某个采样结果为正奖赏,这里的最大化操作就会选出一个具有正价值的二元组 ( B , a ) (B,a) (B,a)
      2. 估计价值:直接使用 max ⁡ a Q ( B , a ) \max_a Q(B,a) maxaQ(B,a) 估计 Q ( A , 向 左 ) Q(A,向左) Q(A,) 时,导致最大化操作得到的早期正价值进一步转移到 Q ( A , 向 左 ) Q(A,向左) Q(A,) 上,使得学习过程初期倾向于选择向左。
      3. 随着学习过程进行,确定价值最大动作时大量的正态分布采样给出大量负价值的 ( B , a ) (B,a) (B,a),逐渐修正 Q ( A , 向 左 ) Q(A,向左) Q(A,) 为负,选择向左走的概率随之降低。
    3. 使用下面介绍的双学习可以有效解决最大化偏差问题,折线图绿线给出了双Q学习的动作情况

5.4.2 双学习

  1. 分析

    • 分析上面的问题后,可以发现问题的本质在于:最大化操作选出的动作 a a a,其状态动作价值 Q ( S t + 1 , a ) Q(S_{t+1},a) Q(St+1,a) 是真实状态动作价值 q ( S t + 1 , A t + 1 ) q(S_{t+1},A_{t+1}) q(St+1,At+1) 的一个有偏估计(偏大),又由于确定价值最大的动作估计价值这两个过程使用了相同的样本(多幕序列),导致依赖 Q ( S t + 1 , a ) Q(S_{t+1},a) Q(St+1,a) 进行计算的 Q ( S t , A t ) Q(S_t,A_t) Q(St,At) 也成为有偏估计。
    • 最大化操作带来的估计偏差是不可避免的,想要得到无偏的Q函数,只能考虑防止估计偏差从 Q ( S t + 1 , a ) Q(S_{t+1},a) Q(St+1,a) 传递到 Q ( S t , A t ) Q(S_t,A_t) Q(St,At),双Q学习是一种可行的方法
  2. 思想:

    1. 将样本分为两个集合,并用它们学习两个独立的、对真实价值 q ( a ) q(a) q(a) 的估计 Q 1 ( a ) Q_1(a) Q1(a) Q 2 ( a ) Q_2(a) Q2(a)
    2. 使用其中一个估计 Q 1 ( a ) Q_1(a) Q1(a) 来确定最大动作 A ∗ = arg max ⁡ a Q 1 ( a ) A^* = \argmax_aQ_1(a) A=aargmaxQ1(a),再用另一个 Q 2 Q_2 Q2 来计算其价值的估计 Q 2 ( A ∗ ) = Q 2 ( arg max ⁡ a Q 1 ( a ) ) Q_2(A^*) = Q_2(\argmax_aQ_1(a)) Q2(A)=Q2(aargmaxQ1(a)),由于 E [ Q 2 ( A ∗ ) ] = q ( A ∗ ) \mathbb{E}[Q_2(A^*)] = q(A^*) E[Q2(A)]=q(A),因此这个估计是无偏的。同理还可以得到另一个无偏估计 Q 1 ( arg max ⁡ a Q 2 ( a ) ) Q_1(\argmax_aQ_2(a)) Q1(aargmaxQ2(a))。虽然这里一共学习了两个估计值,但是对每个样本集合只更新一个估计值。双Q学习需要双倍的内存,但每步无需额外的计算量
    3. 双学习的思想可以自然地推广到那些为完备MDP设计的算法中,例如双Q学习双sarsa学习双期望sarsa学习。以双Q学习为例,所有时刻被一分为二,以一半一半的概率执行以下两个更新
      Q 1 ( S t , A t ) ← Q 1 ( S t , A t ) + α [ R t + 1 + γ Q 2 ( S t + 1 , arg max ⁡ a Q 1 ( S t + 1 , a ) ) − Q 1 ( S t , A t ) ] Q 2 ( S t , A t ) ← Q 2 ( S t , A t ) + α [ R t + 1 + γ Q 1 ( S t + 1 , arg max ⁡ a Q 2 ( S t + 1 , a ) ) − Q 2 ( S t , A t ) ] Q_1(S_t,A_t) \leftarrow Q_1(S_t,A_t) + \alpha[R_{t+1}+\gamma Q_2(S_{t+1},\argmax_aQ_1(S_{t+1},a))-Q_1(S_t,A_t)] \\ Q_2(S_t,A_t) \leftarrow Q_2(S_t,A_t) + \alpha[R_{t+1}+\gamma Q_1(S_{t+1},\argmax_aQ_2(S_{t+1},a))-Q_2(S_t,A_t)] Q1(St,At)Q1(St,At)+α[Rt+1+γQ2(St+1,aargmaxQ1(St+1,a))Q1(St,At)]Q2(St,At)Q2(St,At)+α[Rt+1+γQ1(St+1,aargmaxQ2(St+1,a))Q2(St,At)]
    4. 双学习中两个近似函数的地位是完全相同的,两种动作价值的估计值都可以在行为策略中使用。比如双Q学习的行为策略可以基于两个Q函数的均值或和进行 ϵ \epsilon ϵ-贪心
  3. 伪代码(双Q学习)
    在这里插入图片描述

5.5 小结

  • 本节综合讨论了TD control的若干方法,它们都使用GPI框架。在prediction阶段,我们也会遇到MC Control中的 “保持试探” 问题,根据prediction时使用的是同轨还是离轨方法,可以把TD control方法分成同轨和离轨两类。

    1. Sarsa(同轨):使用同轨的 ϵ \epsilon ϵ-贪心” 策略 π \pi π 保持试探;更新时用 π \pi π 往前看两步
    2. Q-learning(离轨):使用试探性的 ϵ \epsilon ϵ-贪心” 策略作为行动策略 b b b 保持试探,使用确定性贪心策略 π \pi π 作为目标策略。是一种value based方法
    3. 期望Sarsa(同轨或离轨):使用试探性的 ϵ \epsilon ϵ-贪心” 策略作为行动策略保持试探,目标策略可以和行动一致也可不一致,依赖下一步状态价值的期望进行更新
    4. 双学习(同轨或离轨):为了消除最大化偏差而使用的一种技巧,可以用来扩展各种为完备MDP设计的算法。以上三种算法都可以扩展到双学习版本
  • 回溯图对比
    在这里插入图片描述

  • 扩展方向

    1. 本节介绍的几种TD方法都属于:单步表格型无模型的TD方法。它们的的共同特性是可以用在线地用相对少的计算量处理经验,都用TD error驱动
    2. 这些TD方法可以在以上三个角度扩展,单步形式可以扩展到n步形式(和MC相联系);无模型可以扩展到包含环境的形式(与规划和动态规划联系);表格型可以扩展到函数近似(和深度学习神经网络联系)。以后的文章再深入分析
    3. 本节仅在强化学习背景下探讨TD方法,但TD方法实际上是用于学习如何在动态系统中做出长期预测的一般方法。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页