SARSA

SARSA

对于当前策略执行每个(状态→动作→奖励→状态→动作)元组

SARSA 更新状态-动作值函数为:Q(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a))Q(s,a)\leftarrow Q(s,a)+\alpha(r+\gamma Q(s',a')-Q(s,a))

使用 SARSA 的在线策略(on-policy)可控制

对于每个时间步长

  • 评估策略:Q(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a))Q(s,a)\leftarrow Q(s,a)+\alpha(r+\gamma Q(s',a')-Q(s,a))
  • 策略改进:ϵgreedy\epsilon-greedy 方法

算法具体步骤

  1. 初始化 Q(s,a)Q(s,a)

  2. 循环(for each episode)

    • 初始化 S

    • 基于已有的 Q(ϵgreedy\epsilon-greedy)从 S 中选择 A

    • 循环:

      • 选择 A,观察 R 和 S’
      • 基于 Q,从 S’ 中选择 A’
      • Q(s,a)Q(s,a)+α(r+γQ(s,a)Q(s,a))Q(s,a)\leftarrow Q(s,a)+\alpha(r+\gamma Q(s',a')-Q(s,a))
      • SSS\leftarrow S'AAA\leftarrow A'

      当 S 终止

在线策略时序差分控制(on-policy TD control)使用当前策略进行动作采样,即 SARSA 算法中的两个 Action 都是基于当前策略选择的。

Q-Learning

Q-Learning 算法及其收敛性

离线策略学习

什么是离线策略学习

  • 目标策略 π(as)\pi(a|s) 进行值函数评估(Vπ(s)V^\pi(s)Qπ(s,a)Q^\pi(s,a)
  • 行为策略 μ(as)\mu(a|s) 收集数据 {s1,a1,r1,s2,r2,a2,,sT}μ\{s_1,a_1,r_1,s_2,r_2,a_2,\cdots,s_T\}\sim\mu

为什么使用离线策略学习

  • 平衡探索 exploration 和利用 exploitation
  • 通过观察人类或其它智能体学习策略
  • 重用旧策略所产生的经验
  • 遵循探索策略时学习最优策略
  • 遵循一个策略时学习多个策略

Q 学习

  • 学习状态-动作值函数 Q(s,a)RQ(s,a)\in\mathbb R,不直接优化策略

  • 是一种离线策略(off-policy)学习方法

    数据有可能是通过其它策略采样得到的

    Q(st,at)=t=0TγtR(st,at),atμ(st)Q(s_t,a_t)=\sum_{t=0}^T\gamma^tR(s_t,a_t),a_t\sim\mu(s_t)

    • 策略函数 μ(st)μ(st)\mu(\cdot|s_t)\sim\mu(s_t)
    • 动作空间 aAa\sim A
    • 迭代式 Q(st,at)=R(st,at)+γQ(st+1,at+1)Q(s_t,a_t)=R(s_t,a_t)+\gamma Q(s_{t+1},a_{t+1})
  • 无需重要性采样

  • 根据行为策略选择动作 atμ(st)a_t\sim\mu(\cdot|s_t)

  • 根据目标策略选择后续动作 at+1π(st)a_{t+1}'\sim\pi(\cdot|s_t)

    • 目标 Q(st,at)=rt+γQ(st+1,at+1)Q^*(s_t,a_t)=r_t+\gamma Q(s_{t+1},a_{t+1}')
  • 更新 Q(st,at)Q(s_t,a_t) 的值以逼近目标状态-动作值

    Q(st,at)Q(st,at)+α(rt+1+γQ(st+1,at+1)Q(st,at))Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha(r_{t+1}+\gamma Q(s_{t+1},a_{t+1}')-Q(s_t,a_t))

使用 Q 学习的离线策略控制

  • 允许行为策略和目标策略都进行改进

  • 目标策略 π\pi 是关于 Q(s,a)Q(s,a) 的贪心策略

    π(st+1)=argmaxaQ(st+1,a)\pi(s_{t+1})=\arg\max_{a'}Q(s_{t+1},a')

  • 行为策略 μ\mu 是关于 Q(s,a)Q(s,a) 的 ε-greedy 策略

  • Q 学习目标函数可简化为

    rt+1+γQ(st+1,at+1)=rt+1+γQ(st+1,argmaxat+1(st+1,at+1))r_{t+1}+\gamma Q(s_{t+1},a_{t+1}')=r_{t+1}+\gamma Q(s_{t+1},\arg\max_{a_{t+1}'}(s_{t+1},a_{t+1}))

    =rt+1+γmaxat+1Q(st+1,at+1)=r_{t+1}+\gamma\max_{a_{t+1}'}Q(s_{t+1},a_{t+1}')

  • Q 学习更新方式

    Q(st,at)Q(st,at)+α(rt+1+γmaxat+1Q(st+1,at+1)Q(st,at))Q(s_t,a_t)\leftarrow Q(s_t,a_t)+\alpha(r_{t+1}+\gamma\max_{a_{t+1}'}Q(s_{t+1},a_{t+1}')-Q(s_t,a_t))

Q 学习控制算法

状态 s,执行动作 a→观测到奖励 r→转移到下一状态 s’,执行动作 argmaxaQ(s,a)\arg\max_{a'}Q(s',a')

定理:Q 学习控制收敛到最优状态-动作值函数 Q(s,a)Q(s,a)Q(s,a)\rightarrow Q^*(s,a)

Q 学习的收敛性证明

收缩算子 contraction operator

  • Q(s,a)=r(s,a)+γmaxaQ(s,a)Q(s,a)=r(s,a)+\gamma\max_{a'}Q(s',a')
  • 定义 H 算子:HQ=r(s,a)+γEsp(s,a)[maxaQ(s,a)]HQ=r(s,a)+\gamma\mathbb E_{s'\sim p(\cdot|s,a)}[\max_{a'}Q(s',a')]
  • 最优值函数 QQ*HH 的不动点,意味着 Q=HQQ^*=HQ^*

直接从 Q 函数证明

(Hq)(x,a)=yXPa(x,y)[r(x,a,y)+γmaxbAq(y,b)](Hq)(x,a)=\sum_{y\in\mathcal X}P_a(x,y)[r(x,a,y)+\gamma\max_{b\in\mathcal A}q(y,b)]

Hq1Hq2||\bold{H}q_1-\bold{H}q_2||_\infty

=maxx,ayXPa(x,y)[γmaxbAq1(y,b)+γmaxbAq2(y,b)]=\max_{x,a}|\sum_{y\in\mathcal X}P_a(x,y)[\gamma\max_{b\in\mathcal A}q_1(y,b)+\gamma\max_{b\in\mathcal A}q_2(y,b)]|

maxx,aγyXPa(x,y)maxbAq1(y,b)maxbAq2(y,b)\le\max_{x,a}\gamma\sum_{y\in\mathcal X}P_a(x,y)|\max_{b\in\mathcal A}q_1(y,b)-\max_{b\in\mathcal A}q_2(y,b)|

maxx,aγyXPa(x,y)maxz,bq1(z,b)q2(z,b)\le\max_{x,a}\gamma\sum_{y\in\mathcal X}P_a(x,y)\max_{z,b}|q_1(z,b)-q_2(z,b)|

=maxx,aγyXPa(x,y)q1q2=\max_{x,a}\gamma\sum_{y\in\mathcal X}P_a(x,y)||q_1-q_2||_\infty

=γq1q2=\gamma||q_1-q_2||_\infty

可以使用柯西收敛准则证明

第 3 讲 多步自助法

多步时序差分预测

回顾动态规划和时序差分

动态规划需要知道整个 MDP 环境的状态转移和奖励函数,完全反向传播。

时序差分算法基于一步采样去做。

回顾蒙特卡洛方法和时序差分

蒙特卡洛:基于当前 state 采样后面所有步,累积奖励函数

时序差分:只走一步

那么有没有介于时序差分和蒙特卡洛的方法呢?

有,被称之为多步时序差分。

多步时序差分

比如 3-step TD。向前走三步,得到一个累积奖励值来更新

n=1 时,是 TD

1<n<∞ 时,是 n-step TD

n=∞ 时,是蒙特卡洛方法

n 步累计奖励:Gt(n)=Rt+1+γRt+2++γn1Rt+n+γnV(St+n)G_{t}^{(n)}=R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{n-1}R_{t+n}+\gamma^nV(S_{t+n})

n 步时序差分学习:V(St)V(St)+α(Gt(n)V(St))V(S_t)\leftarrow V(S_t)+\alpha(G_t^{(n)}-V(S_t))

平均 n 步累计奖励

可以进一步对不同 n 下的 n 步累计奖励求平均值

例如求 2 步和 3 步时的平均累计奖励 12G(2)+12G(3)\frac{1}{2}G^{(2)}+\frac{1}{2}G^{(3)}

使用平均 n 步累计奖励的 TD(λ) 算法

当 λ = 1 时,相当于蒙特卡洛方法

当 λ = 0 时,相当于单步时序差分

多步 SARSA

n-step 的思想用在控制上,就是多步 SARSA 算法。

使用重要性采样的多步离线学习法

对于状态值函数 V

Vt+n(St)=Vt+n1(St)+αρt:t+n1[Gt:t+nVt+n1(St)]V_{t+n}(S_t)=V_{t+n-1}(S_t)+\alpha\rho_{t:t+n-1}[G_{t:t+n}-V_{t+n-1}(S_t)]

ρt:h=Πk=tmin(h,T1)π(AkSk)b(Aksk)\rho_{t:h}=\Pi_{k=t}^{\min(h,T-1)}\frac{\pi(A_k|S_k)}{b(A_k|s_k)}

对于动作值函数 Q:

Qt+n(St,At)=Qt+n1(St,At)+αρt+1:t+n[Gt:t+nQt+n1(St,At)]Q_{t+n}(S_t,A_t)=Q_{t+n-1}(S_t,A_t)+\alpha\rho_{t+1:t+n}[G_{t:t+n}-Q_{t+n-1}(S_t,A_t)]

ρt:h=Πk=tmin(h,T1)π(AkSk)b(Aksk)\rho_{t:h}=\Pi_{k=t}^{\min(h,T-1)}\frac{\pi(A_k|S_k)}{b(A_k|s_k)}

多步树回溯算法

多步连乘导致方差大,为了解决这一问题,避免重要性采样。可用多步树回溯算法替代。

多步树回溯算法推导