强化学习Reinforcement Learning

Reinforcement Learning

原书及资料: http://incompleteideas.net/book/the-book-2nd.html

传统人工智能领域的三大学派:

  • 以逻辑推断和贝叶斯学习为代表的符号主义学派
  • 以神经网络为代表的联结主义学派
  • 以控制论和强化学习为代表的行为主义学派

导论(Introduction)

Point: MDP、(s, a, r)、policy、value

强化学习两个最重要最显著的特征:试错、延迟收益

强化学习使用马尔可夫决策过程(Markov Decision Process, MDP)的形式化框架,使用状态(state)、动作(action)和收益(reward)定义智能体与环境的交互过程。

  • 有监督学习:从外部监督者提供的带标注训练集中学习(识别手写数字)
  • 无监督学习:寻找未标注数据中的隐含结构
  • 强化学习:未必有label/目的是最大化收益信号而不是隐含结构

“试探-开发”困境:智能体必须开发已有的经验来获取收益,同时也要进行试探,使得未来可以获得更好的动作选择空间(如何权衡?)

强化学习从一个完整的、交互式的、目标导向的智能体出发,而不是仅仅关注孤立的子问题

强化学习与其他工程和科学学科之间有实质性的、富有成果的互动(运筹学、控制论、心理学、神经科学)

强化学习要素:

  • 智能体、环境
  • 策略:环境状态到动作的映射(state->action)。(核心)
  • 收益信号(s, a):每一步(step)中,环境对于智能体在上个环境状态下采取的动作给出即时收益(reward)。(改变策略的主要基础)
  • 价值函数(s):从某个环境状态开始,对将来累计的总收益的期望。(次要基础)
  • 模型(可选):对环境的反应模式的模拟(允许对外部环境的行为进行推断)。(用作规划)

强化学习方法分类:

  • value-based: 对价值函数进行建模和估计,以此为依据制定策略(DQN)
  • policy-based: 对策略函数直接进行建模和估计,优化策略函数使反馈最大化(PG)
  • model-based(对应于model-free): 对环境的运作机制建模,然后进行规划
  • value-based + policy-based: AC、A2C、A3C

表格型求解方法(Tabular Solution Methods)

平衡试探和开发:ε-greedy、UCB(问题:难处理非平稳、难处理大的状态空间)、gradient(偏好函数)

有限马尔可夫决策过程(Finite Markov Decision Process)

Point: Markov性, episode, reward(\(G, R\)), policy(\(\pi\)), Bellman Equation, \(v_\pi(s)\), \(q_\pi(s,a)\), \(v_*(s)\), \(q_*(s,a)\)

  • 智能体\(agent\)
  • 环境\(environment\)
  • 状态\(state\)
  • 动作\(action\)
  • 收益\(reward\)

img

序列:\(S_0, A_0, R_1, S_1, A_1, R_2, S_2, A_2, R_3,...\)

马尔可夫性:状态包括过去智能体与环境交互的方方面面的信息,并且这些信息会对未来产生一定影响

状态\(s\)下采取动作\(a\)转到状态\(s'\)且获得收益\(r\)的概率:\(p(s',r|s,a) \doteq Pr\{S_t=s',R_t=r|S_{t-1}=s,A_{t-1}=a\}\)

目标:最大化智能体接收到的标量信号(收益)累积和的概率期望值(最大化期望回报)

(episode):一次完整的交互过程,例如一盘游戏、一局棋等

强化学习问题据此可以分为两类:分幕式任务、持续性任务

回报:关于收益序列的函数,eg: \(G_t \doteq R_{t+1}+R_{t+2}+...+R_T\)(\(T\)为幕终时刻,持续性任务中\(T=\infty\))

折后回报:上述式子在\(T=\infty\)时很容易趋于无穷:所以引入折扣系数\(\gamma\)(\(0 \leqslant \gamma \leqslant 1\)),\(G_t \doteq R_{t+1}+ \gamma R_{t+2}+ \gamma^2 R_{t+3}...\)=>\(G_t = R_{t+1} + \gamma G_{t+1}\)

分幕式任务和持续性任务可以统一表示

策略:从状态到每个动作的选择概率之间的映射\(\pi(a|s)\)

价值函数:状态价值函数//动作价值函数:\(v_\pi(s) \doteq E_\pi[G_t|S_t=s]\)//\(q_\pi(s,a)=E_\pi[G_t|S_t=s,A_t=a]\)

贝尔曼方程(状态价值和后继状态价值之间的关系):\(v_\pi(s)=\Sigma_a\pi(a|s)\Sigma_{s',r}p(s',r|s,a) · [r+\gamma v_\pi(s')]\)——起始状态的价值一定等于后继状态的折扣期望值加上对应的收益的期望值

img

最优策略(optimal policy):\(\pi_*\)是最优策略当且仅当\(\forall \pi, \forall s \in S, v_{\pi_*}(s) \geqslant v_\pi(s)\)

最优状态价值函数\(v_*(s) \doteq \max_\pi v_\pi(s)\)

最优动作价值函数\(q_*(s,a) \doteq \max_\pi q_\pi(s,a)\)

贝尔曼最优方程:

\(v_*(s)=\max_a\Sigma_{s',r}p(s',r|s,a) · [r+\gamma v_\pi(s')]\)

\(q_*(s,a)=\Sigma_{s',r}p(s',r|s,a) · [r+\gamma \max_{a'} q_*(s',a')]\)

img

动态规划DP

Point: Evaluation/Prediction, Improvement, Iteration, GPI

在给定一个用马尔可夫决策过程(MDP)描述的完备环境模型的情况下,动态规划(Dynamic Programming, DP)可以计算其最优策略(问题:要求完备的环境模型、计算复杂度高)

How:将贝尔曼方程转化成为近似逼近理想价值函数的递归更新公式

策略评估/预测(Policy Evaluation/Prediction)

迭代方程(贝尔曼方程的近似):\(v_{k+1}(s)=\Sigma_a\pi(a|s)\Sigma_{s',r}p(s',r|s,a) · [r+\gamma v_k(s')]\)——\(\{v_k\}\)\(k->\infty\)时会收敛到\(v_\pi\)

期望更新、双数组传统更新(收敛慢)/单数组就地更新(自举,收敛快)

策略改进(Policy Improvement)

根据原策略的价值函数执行贪心算法,构造一个更好策略

策略改进定理:\(\forall s \in S, q_\pi(s, \pi'(s)) \geqslant v_\pi(s)\),则称策略\(\pi'\)相比于\(\pi\)一样好或者更好

策略迭代(Policy Iteration)

img

img

价值迭代(Value Iteration)

频繁的策略评估太耗时,需要提前截断

在一次遍历后即刻停止策略评估(对每个状态进行一次更新)

\(v_{k+1}(s) \doteq \max_a \Sigma_{s',r}p(s',r|s,a) · [r+\gamma v_k(s')]\)

img

异步动态规划(Asynchronous Dynamic Programming)

使用任意可用的状态值,以任意顺序来更新状态值

就地迭代,不需要对整个状态集进行遍历

广义策略迭代(Generalized Policy Iteration, GPI)

img

DP收敛速度比理论上的最坏情况要快,实际上效率很高。对于很大状态空间的问题,使用异步DP或GPI的变种。

蒙特卡洛方法MC

Point: learning method, episode, Monte Carlo Prediction, Monte Carlo Control, MCES, on-policy, off-policy, Importance Sampling, Incremental Implementation

优点:

  • 无需拥有完备的环境知识
  • 可以使用数据仿真或采样模型
  • 可以聚焦于状态的一个小的子集
  • Markov性不成立时性能损失较小

DP从MDP的知识中计算价值函数,MC从MDP采样样本的经验回报中学习价值函数(平均样本回报)

蒙特卡洛算法是逐幕做出改进的(离线,而非在线)

术语“蒙特卡洛”泛指任何包含大量随机成分的估计方法,这里特指那些对完整的回报取平均的算法

蒙特卡洛预测(Monte Carlo Prediction/Evaluation)

根据经验进行估计:对所有经过状态\(s\)之后产生的回报进行平均

首次访问型/每次访问型MC算法(只关注第一次访问/关注所有的访问)

img

img

MC对每个状态的估计是独立的,完全不依赖于对其他状态的估计(不自举)

蒙特卡洛控制(Monte Carlo Control)

思想:GPI

\(exploring \quad starts//on-policy/off-policy\)(确保每个“状态-动作”二元组都能被访问到)

试探性出发(exploring starts)

img

How to improve: 在当前动作价值函数上贪心地选择动作:\(\pi(s) \doteq argmax_aq(s,a)\)——通过\(q_{\pi_k}\)\(\pi_k\)改进为\(\pi_{k+1}\)(满足策略改进定理)

一种可行的方法是:逐幕交替进行Evaluation和Improvement,即在每一幕结束后,使用观测到的回报进行评估,然后在该幕序列访问到的每个状态上进行策略改进:

img

该伪代码效率不高,实际上仅需维护一个平均值和一个统计量,然后增量式地更新即可

同轨策略(on-policy)

行动策略和目标策略相同,eg: MCES

on-policy中,策略一般是软性(soft)的,即\(\forall s \in S、 a \in A(s), \pi(a|s) > 0\)(否则无法确保每个“状态-动作”二元组都能被访问到)——eg: \(\varepsilon-greedy\)(\(\pi(a|s) \geqslant \varepsilon/|A(s)|\))

一种可行的方法是:对于任意一个\(\varepsilon-soft\)策略\(\pi\),根据\(q_\pi\)生成的任意一个\(\varepsilon-greedy\)策略保证优于或等于\(\pi\)

img

离轨策略(off-policy)

行动策略\(b\)和目标策略\(\pi\)不同:目标策略用来学习并成为最优策略,行动策略更具有试探性——学习所用的数据离开了待学习的目标策略(方差大收敛慢,但更强大更通用)

覆盖假设:要求\(\pi\)下发生的每个动作都能在\(b\)下发生,即\(\forall \pi(a|s)>0, b(a|s)>0\)

重要度采样(在给定来自其他分布的样本的条件下,估计某种分布的期望值的通用方法):重要度采样比\(\rho_{t:T-1} \doteq \Pi_{k=t}^{T-1}\pi(A_k|S_k)p(S_{k+1}|S_k,A_k)/\Pi_{k=t}^{T-1}b(A_k|S_k)p(S_{k+1}|S_k,A_k) = \Pi_{k=t}^{T-1}\pi(A_k|S_k)/b(A_k|S_k)\)(只与策略和样本序列数据相关,与MDP的动态特性无关)

  • 普通重要度采样:\(V(s) \doteq \Sigma_{t \in \Upsilon(s)}\rho_{t:T(t)-1}G_t/|\Upsilon(s)|\)(无偏估计,方差无界)
  • 加权重要度采样(偏好):\(V(s) \doteq \Sigma_{t \in \Upsilon(s)}\rho_{t:T(t)-1}G_t/\Sigma_{t \in \Upsilon(s)}\rho_{t:T(t)-1}\)(有偏估计,方差能收敛到零)
  • \(\Upsilon(s)\)表示访问过状态\(s\)的时刻集合,\(T(t)\)表示时刻\(t\)后的首次终止,\(G_t\)表示t之后到达\(T(t)\)时的回报值
增量式实现(采用加权重要度采样的离轨策略方法)

每个\(G_i\)对应一个随机权重\(W_i\)(eg: \(W_i=\rho_{t:T-1}\))

\(V_n \doteq \Sigma_{k=1}^{n-1}W_kG_k/\Sigma_{k=1}^{n-1}W_k\)

为了能不断跟踪\(V_n\)的变化,必须为每一个状态维护前\(n\)个回报对应的权值的累加和\(C_n\)

  • \(V_{n+1} \doteq V_n + W_n/C_n[G_n-V_n]\)
  • \(C_{n+1} \doteq C_n + W_{n+1}\)

\(新估计值 \leftarrow 旧估计值 + 步长 \times (目标 - 旧估计值)\)

img

img

时序差分TD(0)

Point: Temporal Difference, TD Prediction, TD Control, (Expected) Sarsa(0), Q-learning, Double Q-learning

TD相较于MC的优点:无须等待交互的最终结果(采用自举)

可以使用不超过\(|S|\)的内存,通过在训练集上反复计算来逼近最优答案(适用于状态空间巨大的任务)

时序差分预测(TD Prediction)

MC方法必须等到一幕的末尾,TD(0)/单步TD方法只需要等到下一个时刻即可

\(V(S_t) \leftarrow V(S_t) + \alpha \times [R_{t+1} + \gamma V(S_{t+1}) - V(S_t)]\)

TD误差:\(\delta_t \doteq R_{t+1} + \gamma V(S_{t+1}) - V(S_t)\)

img

img

时序差分控制(TD Control)

Sarsa(0)(on-policy)

\(Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \times [R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t)]\)

img

img

Q-learning(off-policy)

采用对\(q_*\)的直接近似作为学习目标

\(Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \times [R_{t+1} + \gamma \max_a Q(S_{t+1}, a) - Q(S_t, A_t)]\)

img

img

Expected Sarsa(0)(off-policy)

Q-learning是期望Sarsa的一种特例,期望Sarsa在性能上完全优于Sarsa和Q-learning

\(Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \times [R_{t+1} + \gamma E[Q(S_{t+1}, A_{t+1})|S_{t+1}] - Q(S_t, A_t)] \leftarrow Q(S_t, A_t) + \alpha \times [R_{t+1} + \gamma \Sigma_a \pi(a|S_{t+1})Q(S_{t+1}, a) - Q(S_t, A_t)]\)

img

Double Q-learning

最大化偏差:隐式地对最大值进行估计,产生显著的正偏差(会损害TD的性能)

将样本划分为两个集合,学习两个独立的估计\(Q_1、Q_2\),一个确定价值最大的动作,一个估计它的价值。eg: 确定动作:\(A^*=argmax_a Q_1(a)\),确定价值:\(Q_2(A^*)=Q_2(argmax_a Q_1(a))\)

\(Q_1(S_t, A_t) \leftarrow Q_1(S_t, A_t) + \alpha \times [R_{t+1} + \gamma Q_2(S_{t+1}, argmax_a Q_1(S_{t+1}, a)) - Q_1(S_t, A_t)]\)

img

需要两倍的内存,但每步无需额外的计算量

n步自举(n-step Bootstrapping)

Point: TD(n) Prediction, Sarsa(n), n-step off-policy, n-step \(Q(\sigma)\)

优点:

  • MC和TD(0)是TD(n)的极端情况,中间方法的性能更好
  • 可以解决TD(0)更新时刻的不灵活问题(自举法需要在一个较长的时间段内进行才能有更好的效果)

n步时序差分预测(TD(n) Prediction)

  • MC:根据从某一状态到终止状态的收益序列更新

  • TD(0):根据即时收益和后继状态的价值估计值更新

  • TD(n):根据多个中间时刻的收益和执行n步后状态的价值估计值更新

  • MC: \(G_t \doteq R_{t+1}+\gamma R_{t+2}+...+\gamma^{T-t-1}R_T\)

  • TD(0): \(G_{t:t+1} \doteq R_{t+1}+\gamma V_t(S_{t+1})\)

  • TD(n): \(G_{t:t+n} \doteq R_{t+1}+\gamma R_{t+2}+...+\gamma^{n-1}R_{t+n}+ \gamma^n V_{t+n-1}(S_{t+n})\)

状态在时刻t的n步回报,只能在时刻t+n才能得到(若\(t+n>T\),则会在时刻T得到)

\(V_{t+n}(S_t) \doteq V_{t+n-1}(S_t)+\alpha[G_{t:t+n}-V_{t+n-1}(S_t)]\)

img

img

n步Sarsa(Sarsa(n))

将s替换为(s,a)——V(s)\(\rightarrow\)Q(s,a)

\(G_{t:t+n} \doteq R_{t+1}+\gamma R_{t+2}+...+\gamma^{n-1}R_{t+n}+ \gamma^n Q_{t+n-1}(S_{t+n},A_{t+n})\)

\(Q_{t+n}(S_t,A_t) \doteq Q_{t+n-1}(S_t,A_t)+\alpha[G_{t:t+n}-Q_{t+n-1}(S_t,A_t)]\)

img

img

n步off-policy

使用重要度采样

\(Q_{t+n}(S_t,A_t) \doteq 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)]\)

\(\rho\): 重要度采样率——Q确定了动作,所以起点和终点比TD(n)晚一步(基于后继动作计算\(\rho\))

img

使用树回溯

树回溯:更新来源于整个树的动作价值的估计,而不是仅来源于沿途的收益

\(G_{t:t+n} \doteq R_{t+1}+\gamma \Sigma_{a \neq A_{t+1}}\pi(a|S_{t+1})Q_{t+n-1}(S_{t+1},a) + \gamma \pi(A_{t+1}|S_{t+1})G_{t+1:t+n}\)

\(Q_{t+n}(S_t,A_t) \doteq Q_{t+n-1}(S_t,A_t)+\alpha[G_{t:t+n}-Q_{t+n-1}(S_t,A_t)]\)

img

img

n步\(Q(\sigma)\)

统一(Expected) Sarsa(n)、Tree Backup(n)的算法

img

\(\sigma=1\)表示进行采样操作,\(\sigma=0\)表示不采样

\(G_{t:h} \doteq R_{t+1} + \gamma(\sigma _{t+1}\rho_{t+1}+(1-\sigma_{t+1})\pi(A_{t+1}|S_{t+1}))(G_{t+1:h}-Q_{h-1}(S_{t+1},A_{t+1})) + \gamma \overline{V}_{h-1}(S_{t+1})\)

\(Q_{t+n}(S_t,A_t) \doteq Q_{t+n-1}(S_t,A_t)+\alpha[G_{t:t+n}-Q_{t+n-1}(S_t,A_t)]\)

img

规划和学习

Point: planning, learning, Dyna-Q, RTDP, Heuristic search, MCTS

  • DP、Heuristic search: 基于模型(分布模型/样本模型)的强化学习方法——规划(状态空间规划(本书)/方案空间规划(进化算法、偏序规划等))
  • MC、TD: 无模型的强化学习——学习

img

Dyna-Q

对于规划智能体来说,经验可以用来进行直接强化学习/模型学习(间接强化学习)

img

规划方法(基于模型):随机采样单步表格型Q规划方法
img
直接强化学习方法:单步表格型Q学习方法(Q-learning)

img

img

试探:试图改善模型的动作/开发:以当前模型的最优方式执行动作
当真实环境变得比以前更好时,Dyna-Q很可能只能计算出次优策略
可以采用启发式方法(eg: Dyna-Q+)——鼓励测试长期未出现过的动作

优先遍历

把更新重点放在最有用的地:一些转移只是将智能体从一个零值状态转移到另一个零值状态
反向聚焦:从任意的价值发生变化的状态进行反向工作,然后逐步更新其前导状态的价值
优先级遍历:带优先级的反向聚焦,维护一个优先队列

img

局限:虽然有效分配了计算量,但仍是期望更新(在随机环境中会浪费大量计算来处理低概率的转移)——小范围回溯or采样更新

期望更新与采样更新

分类:

  1. 更新的状态价值还是动作价值?
  2. 最优策略还是给定策略?
  3. 期望更新还是采样更新?

img

期望更新:计算精确、计算量大
采样更新:有采样误差、计算复杂度低

实时动态规划(RTDP)

属于异步DP:更新顺序由真实或模拟轨迹中状态倍访问的顺序决定的

最优部分策略:策略对于相关状态是最优的,对于不相关状态则可以指定任意的甚至是未定义的动作

img

决策时规划:在遇到每个新状态之后才开始并完成规划(后位状态)——适用于不需要快速响应的应用程序(eg: 下棋)

对于遇到的每个状态,建立一个树结构,该结构包含了后面各种可能的延续。将近似价值函数应用于叶子节点,然后以根状态向当前状态回溯更新。——关注当前状态,内存和计算资源高度聚焦于当前决策

eg: 深度优先的启发式搜索

img

蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)

预演算法(rollout):对每一个当前状态以及一个给定的预演策略做出估计,用于改进预演策略的性能而不是找到最优策略(模拟许多从当前状态开始,运行到终止状态的轨迹)——属于决策时规划算法

通过累计蒙特卡洛模拟得到的价值估计来不停地将模拟导向高收益轨迹

核心思想:通过扩展模拟轨迹中获得较高评估值的片段,对从当前状态出发的多个模拟轨迹不断地聚焦和选择

步骤:

  1. 选择:从根节点开始,使用基于树边缘的动作价值的树策略遍历这棵树来挑选一个叶子节点
  2. 扩展:在某些循环中,针对选定的叶子节点找到采取非试探性动作可以到达的节点,将一个或多个这样的节点加为该叶子节点的子节点
  3. 模拟:根据预演策略选择动作进行整幕的轨迹模拟。得到的结果是一个蒙特卡洛实验,其中动作首先由树策略选取,而到了树外则由预演策略选取
  4. 回溯:模拟整幕轨迹得到的回报值向上回传,对树策略所遍历的树边缘上的动作价值进行更新或初始化。丢弃所有预演策略在树外部访问到的状态和动作的值

img

MCTS避免了估计一个全局的动作价值函数,同时使用过去的经验来引导试探过程

Ⅰ总结

通用思想:

  1. 估计价值函数
  2. 沿着真实或模拟的状态轨迹回溯更新
  3. 采用广义策略迭代(GPI)

img

采样更新or期望更新/自举or不自举/on-policy or off-policy

表格型近似求解方法(Approximate Solution Methods)

任意大的状态空间,无法找到最优的策略或最优价值函数,转而使用有限的计算资源找到一个比较好的近似解。

泛化:如何将状态空间中一个有限子集的经验进行推广来很好地近似一个大得多的子集——函数逼近(Function Approximation——一种有监督学习的例子,是机器学习、人工神经网络、模式识别和统计曲线拟合的基础方法)

基于函数逼近的同轨策略预测

使用同轨策略数据来估计状态价值函数,此时近似的价值函数是一个具有权值向量$\vec{w} \in \R^d \(的参数化函数——\)\hat{v}(s,\vec{w}) \approx v_\pi(s)$

可以解决部分观测问题——智能体无法观测到完整状态的情况,但无法根据过往的部分观测记忆来对状态表达进行补充

价值函数逼近(Value-function Approximation)

本书中所有预测方法都可以表示为对一个待估计的价值函数的更新,这种更新使得某个特定状态下的价值移向该状态下的更新目标——\(s \mapsto u\) eg: \(S_t \mapsto G_t\)\(S_t \mapsto G_{t:t+n}\)

将每一次更新解释为一个理想的“输入-输出”范例样本,学习拟合“输入-输出”样例的机器学习方法叫做有监督学习,当输出\(u\)为数字时该过程称为函数逼近

并不是所有函数逼近方法都适用于强化学习

  1. 能够在线学习(有些方法基于静态训练集)
  2. 能够处理非平稳目标函数(有些方法难以处理非平稳性)

预测目标(\(\overline{VE}\))

在函数逼近中,一个状态的更新会影响其他状态,而且不可能让所有状态的价值函数完全正确。并且一个状态的估计价值越准确就意味着别的状态的估计价值变得不那么准确,因此引入分布\(\mu(s) \geqslant 0, \Sigma_s\mu(s) = 1\)来表示对状态\(s\)的误差的重视程度——这里称其为同轨策略分布

均方价值误差\(\overline{VE}(\vec{w}) \doteq \Sigma_{s \in S}\mu(s)[v_\pi(s) - \hat{v}(s,\vec{w})]^2\)

分类(严格分开讨论!):

  • 持续性任务:同轨策略分布是\(\pi\)下的平稳分布
  • 分幕式任务:同轨策略分布与幕的初始状态有关img

最理想的目标:找到全局最优的权值向量\(\vec{w}^*\),满足\(\forall \vec{w}, \overline{VE}(\vec{w}^*) \leqslant \overline{VE}(\vec{w})\)
退而求其次:局部最优,即对于\(\vec{w}^*\)附近的所有向量\(\vec{w}\),满足上述不等式

后面主要关注基于梯度的函数逼近方法,特别是线性梯度下降法

随机梯度和半梯度方法(Stochastic-gradient and Semi-gradient Methods)

下面研究用于价值函数预测的基于随机梯度下降(SGD)的函数逼近方法。SGD是应用最为广泛的函数逼近方法之一,并且特别适用于在线强化学习

权值向量:由固定实数组成的列向量\(\vec{w} \doteq (w_1, w_2, ..., w_d)^T\)

随机梯度方法(SGD):对于时刻\(t\)观察到的一个新样本\(S_t \mapsto v_\pi(S_t)\),将权值向量朝着能够减小这个样本的误差的方向移动一点点(此处假设我们试图最小化\(\overline{VE}, w_t\)在整个时刻中都按比例向样本的平方误差的负梯度移动,这是误差下降最快速的方向):

\(\vec{w}_{t+1} \doteq \vec{w}_t - \frac{1}{2} \alpha \nabla[v_\pi(S_t) - \hat{v}(S_t,\vec{w}_t)]^2 = \vec{w}_t + \alpha[v_\pi(S_t) - \hat{v}(S_t,\vec{w}_t)]\nabla \hat{v}(S_t,\vec{w}_t)\)

其中\(\nabla f(\vec{w}) \doteq (\frac{\partial f(\vec{w})}{\partial w_1}, \frac{\partial f(\vec{w})}{\partial w_2}, ..., \frac{\partial f(\vec{w})}{\partial w_d})^T\)——\(f\)关于\(\vec{w}\)的梯度

为何随机?更新依赖于一个随机选择的样本

更一般的情况:观察到\(S_t \mapsto U_t\)(区别在于目标输出\(U_t\)不是真实的价值\(v_\pi(S_t)\),而是它的一个随机近似),此时可以用\(U_t\)近似取代\(v_\pi(S_t)\)

\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha[U_t - \hat{v}(S_t,\vec{w}_t)]\nabla \hat{v}(S_t,\vec{w}_t)\)

如果\(U_t\)是一个无偏估计——\(E[U_t|S_t=s]=v_\pi(S_t)\),并且步长\(\alpha\)满足随机近似条件的情况下,\(\vec{w}_t\)一定收敛到一个局部最优解

img

MC方法中\(G_t\)就是满足条件的无偏估计,但采用自举的TD(n)和DP的更新目标是有偏的,无法实现真正的梯度下降法,它只考虑了改变权值向量对估计的影响,忽略了其对目标的影响,只包含了一部分梯度——半梯度

半梯度(自举法)方法:优点:学习速度快、支持持续地在线地学习//缺点:不像梯度方法那样稳健地收敛

img

状态聚合是一种简单形式的泛化函数逼近,状态被分成不同组,每个组对应一个估计值。状态的价值估计就是所在组对应的分量,当状态被更新时,只有这个对应分量被单独更新。

线性方法

函数逼近最重要的特殊情况之一——\(\hat{v}(·,\vec{w})\)是权值向量\(\vec{w}\)的线性函数

对应于每个状态\(s\),存在一个和\(\vec{w}\)相同维度的实向量\(\vec{x}(s) \doteq (x_1(s), x_2(s), ..., x_d(s))^T\),线性近似的状态价值函数可以写作\(\vec{w}\)\(\vec{x}(s)\)的内积:\(\hat{v}(s,\vec{w}) \doteq \vec{w}^T\vec{x}(s) \doteq \Sigma_{i=1}^dw_ix_i(s)\)——称近似价值函数是依据权值线性的

显然根据梯度的定义,我们有\(\nabla \hat{v}(s,\vec{w}) = \vec{x}(s)\)
因此通用SGD可简化为\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha[U_t - \hat{v}(S_t,\vec{w}_t)]\vec{x}(s)\)

向量\(\vec{x}(s)\)表示\(s\)的特征向量。\(\vec{x}(s)\)的每一个分量\(x_i(s)\)是一个函数\(x_i(s): S \rightarrow \R\)。我们所说的一个特征就是一个完整的函数,状态\(s\)对应的函数值称作\(s\)的特征。对于线性方法,特征被称作基函数,因为它们构成了可能的近似函数集合的线性基

在线性情况下,函数只存在一个最优值(或者在一些退化的情况下,有若干同样好的最优值),因此保证收敛到或接近局部最优值的任何方法,也都自动地保证收敛到或接近全局最优值。

eg: 半梯度TD(0)——需要证明

\(\vec{w}_{t+1} \doteq \vec{w}_t+\alpha(R_{t+1}+\gamma \vec{w}_t^T \vec{x}_{t+1}-\vec{w}_t^T \vec{x}_t)\vec{x}_t = \vec{w}_t+\alpha(R_{t+1}\vec{x}_t-\vec{x}_t(\vec{x}_t-\gamma \vec{x}_{t+1})^T\vec{w}_t)\)

稳定状态下,下一个更新的权值向量的期望可以写作\(E[\vec{w}_{t+1}|\vec{w}_t] = \vec{w}_t + \alpha(\vec{b} - \vec{A}\vec{w}_t)\)——其中\(\vec{b} \doteq E[R_{t+1}\vec{x}_t] \in \R^d, \vec{A} \doteq E[\vec{x}_t(\vec{x}_t - \gamma \vec{x}_{t+1})^T] \in \R^d \times \R^d\)

显然,若收敛,则需要满足\(\vec{b} - \vec{A}\vec{w}_{TD} = \vec{0}\),即最终会收敛于\(\vec{w}_{TD} \doteq \vec{A}^{-1}\vec{b}\)——TD不动点

可以证明线性半梯度TD(0)就收敛到这个点上。

证明过程见教材P204~205

\(\overline{VE}(\vec{w}_{TD}) \leqslant \frac{1}{1-\gamma} \min_w\overline{VE}(\vec{w})\)——TD法的渐近误差不超过使用MC方法能得到的最小可能误差的\(\frac{1}{1-\gamma}\)倍。而\(\gamma\)常常接近于1,所以这个扩展因子可能相当大,所以TD方法在渐近性能上有很大的潜在损失(但TD方法的方差很小,收敛速度更快,需要权衡利弊)

线性方法的特征构造

线性形式的局限性:无法表示特征之间的相互作用

如何选取适合于任务的特征?特征应该提取状态空间中最通用的信息——将先验知识加入强化学习系统

多项式基

与插值与回归问题类似

\(k\)维状态空间

img

eg: \(\vec{x}(s) = (1, s_1, s_2, s_1s_2, s_1^2, s_2^2, s_1s_2^2, s_1^2s_2, s_1^2s_2^2)\)——\(k=2, n=2, \dim(\vec{x}) = (n+1)^k\)

高阶多项式基可以更精确地近似,但特征数量呈指数级增长,通常需要选择一个子集来进行函数逼近

傅立叶基

傅立叶级数将周期函数表示为正弦和余弦基函数的加权和

只要有足够的基函数,就能够精确地近似任意函数

将周期\(\tau\)设置为感兴趣区间长度的两倍,关注半区间\([0, \tau/2]\)上的近似值,可以仅仅用余(正)弦基函数来表示任何偶(奇)函数

eg: 一维\(n\)阶傅立叶余弦基由\(n+1\)个特征构成:\(x_i(s) = \cos(i\pi s), s \in [0, 1]\)——$\tau = 2, \(半\)\tau\(区间\)[0, 1]$

img

多维情况下:

img
img

\(\vec{c}\)中的任意零都表示特征在该维上是常数

img

建议对于每个特征\(x_i\),将步长参数设置为\(\alpha_i = \alpha / \sqrt{(c_1^i)^2 + ... + (c_k^i)^2}\)(若\(c_j^i=0\),则令\(\alpha_i = \alpha\)

傅立叶特征在不连续性方面存在问题,除非包含非常高频的基函数,否则很难避免不连续点周围的“波动”问题

优点:

  1. 可以通过设置\(\vec{c}^i\)向量来描述状态变量之间的相互作用,以及通过限制向量\(\vec{c}^j\)的值来近似去除那些被认为是噪音的高频成分
  2. 在整个状态空间上几乎是非零的,表征了状态的全局特性,但使得表征局部特性比较困难
粗编码

考虑状态集在连续二维空间上的一个任务,一种表征方式是将特征表示为如下图所示的状态空间中的圆。如果状态在圆内,那么对于的特征为1并称作出席;否则特征为0并称作缺席——二值特征

img

这种表示状态重叠性质的特征(不一定是圆或者二值,统称为感受野)被称为粗编码

如果训练一个状态(空间中的一个点),那么所有与整个状态相交的圆的权值将受到影响——泛化

泛化程度受感受野的多种因素影响:

img

最终可达到的敏锐度更多地由特征的数量控制,而不是感受野的大小与形状

瓦片编码

适用于多维连续空间的粗编码,灵活、计算高效、对于现代的时序数字计算机来说是最为使用的特征表达方式

在瓦片编码中,特征的感受野组成了状态空间中的一系列划分。每个划分被称为一个覆盖,划分中的每一个元素被称为一个瓦片

img

任何状态在每一时刻激活的特征的总数是相同的,每个覆盖中有且只有一个特征被激活,所以特征的总数总是等于覆盖的个数。选择步长\(\alpha = \frac{1}{n}\)

如何选择覆盖的偏移?采用非对称偏移

如果用\(w\)表示瓦片的宽度,\(n\)表示覆盖的数量,那么\(\frac{w}{n}\)是一个基本单位,真正偏移量=位移向量*该基本单位。为保证较好的泛化能力,推荐使用由较小的奇数组成的位移向量

在选择覆盖策略时,需要挑选覆盖的个数以及瓦片的形状,这决定了渐近近似的分辨率或细度。瓦片和覆盖的形状未必是网格状,可以是任意的,例如方形表示在各个维度上均匀地泛化、长条纹可以促进这个方向的泛化、斜条纹可以促进对角线方向上的泛化,也可以使用多个不同覆盖(一些横条,一些竖条,一些正方形)

img

可以使用哈希来减小内存——伪随机地将一个大覆盖分解成一组小得多的瓦片的集合

覆盖的选择决定了泛化能力

径向基函数

径向基函数(radial basis function, RBF)是粗编码在连续特征中的自然推广。每个特征不再是非0即1,而可以是区间\([0, 1]\)中的任何值,反映特征出席的程度

一个典型的径向基函数特征\(x_i\),有一个高斯(钟形)响应\(x_i(s)\),其值只取决于状态\(s\)和特征的中心状态\(c_i\)的距离,并于特征的宽度\(\sigma_i\)相关:\(x_i(s) \doteq \exp(-\frac{||s-c_i||^2}{2\sigma_i^2})\)

优点:可以生成光滑且可微的近似函数(大多数情况下并没有任何实际意义,带来大量额外的计算复杂度以及性能下降)

RBF网络

手动选择步长参数

满足随机近似条件的步长可以保证收敛,但会使学习变得很缓慢

对于表格型方法,如果设置\(\alpha = \frac{1}{\tau}\),那么一个状态的表格型估计将在大约\(\tau\)次经验之后接近它的目标均值,且更近的目标的影响更大

对于一般的函数逼近,没有一个清晰的“状态的经验数量”的概念。但在线性函数逼近的情况下,一个好的粗略经验法则是将线性SGD的步长参数设置为\(\alpha \doteq (\tau E[\vec{x}^T \vec{x}])^{-1}\)——这里\(\vec{x}\)是从SGD的输入向量的分布中选取的一个随机特征向量。这种方法在特征向量的长度变化不大时特别有效。在理想情况下,\(\vec{x}^T \vec{x}\)为常数

非线性函数逼近:人工神经网络

人工神经网络(artificial neural networks, ANN)被广泛应用于非线性函数逼近

eg: 前向神经网络

img

ANN的计算单元一般是半线性的,它首先求输入信号的加权和,然后再对结果应用非线性函数(激活函数,一般是S型函数,eg: sigmoid函数),最后得到单元的输出。

隐层中如果包含足够多数量的sigmoid激活单元,则该ANN可以在网络输入空间的一个紧凑区域内以任意精度逼近任意的连续函数

如此,训练ANN的隐层就成为对于给定问题自动发现特征的一种方法,它不需要人工设计的特征,可以直接自动获得分层表示的特征——SGD、TD、PG

在训练ANN时,都需要估计每一个权值的变化如何影响网络的整体性能,即在当前权值下估计目标函数对每个权值的偏导。梯度是所有这些偏导组成的向量

如何最有效求包含隐层的ANN的梯度?——反向传播算法

如何解决过拟合?——交叉验证、正则化、参数共享、随机丢弃

如何使DNN更容易训练?——批量块归一化、深度残差学习

eg: 深度卷积网络

img

最小二乘时序差分(Least-Squares TD)

TD不动点:\(\vec{w}_{TD} = \vec{A}^{-1}\vec{b}\),其中\(\vec{b} \doteq E[R_{t+1}\vec{x}_t] \in \R^d, \vec{A} \doteq E[\vec{x}_t(\vec{x}_t - \gamma \vec{x}_{t+1})^T] \in \R^d \times \R^d\)

LSTD通过对\(\vec{A}、\vec{b}\)的估计,直接计算TD不动点,而不是迭代地求解

\(\hat{\vec{A}}_t \doteq \Sigma_{k=0}^{t-1}\vec{x}_t(\vec{x}_t - \gamma \vec{x}_{t+1})^T + \epsilon \vec{I}\)

\(\hat{\vec{b}}_t \doteq \Sigma_{k=0}^{t-1}R_{t+1}\vec{x}_t\)

\(\vec{w}_t \doteq \hat{\vec{A}}_t^{-1} \hat{\vec{b}}_t\)

上式是线性TD(0)算法的数据效率最高的一种形式,但复杂度也更高。半梯度TD(0)要求的内存和每步的计算复杂度:\(\Omicron(d)\)//在使用增量式算法实现时,因为\(\hat{\vec{A}}_t\)的更新涉及外积的计算,计算复杂度:\(\Omicron(d^2)\),空间复杂度:\(\Omicron(d^2)\)

\(\hat{\vec{A}}_t^{-1}\)的计算也可以使用增量式更新,使得复杂度从 \(\Omicron(d^3)\) 降到\(\Omicron(d^2)\)\(\hat{\vec{A}}_t^{-1} = (\hat{\vec{A}}_{t-1} + \vec{x}_{t-1}(\vec{x}_{t-1} - \gamma \vec{x}_t)^T)^{-1} = \hat{\vec{A}}_{t-1}^{-1} - \frac{\hat{\vec{A}}_{t-1}^{-1}\vec{x}_{t-1}(\vec{x}_{t-1} - \gamma \vec{x}_t)^T\hat{\vec{A}}_{t-1}^{-1}}{1+(\vec{x}_{t-1} - \gamma \vec{x}_t)^T\hat{\vec{A}}_{t-1}^{-1}\vec{x}_{t-1}}\)

img

不需要设置步长(这意味着LSTD没有遗忘机制),但需要设置参数\(\epsilon\)

基于记忆的函数逼近

属于非参数化方法

仅仅在记忆中保存看到过的训练样本而不更新任何参数,每当需要指导查询状态的价值估计时,就从记忆中检索查找出一组样本,然后使用这些样本来计算查询状态的估计值(拖延学习——处理训练样本被推迟到了系统被查询的时候)

局部学习——仅仅使用查询某个状态的相邻的状态来估计其价值函数的近似值

eg: 最近邻居法——简单地在记忆中找到与查询状态最相近的实例,并且将该最近邻样本的价值返回作为查询状态的价值近似

避免全局估计,可以有效解决维度灾难

基于核函数的函数逼近

基于记忆的方法都会给数据库中的样本分配权值,分配权值的函数我们称为核函数

兴趣值和强调值

某些场景中,我们对某些状态比对其他状态更感兴趣

非负随机标量变量\(I_t\):兴趣值,表示在\(t\)时刻有多大兴趣要精确估计一个状态的价值

另一个非负随机标量变量\(M_t\):强调值,可以由兴趣值递归地确定:\(M_t = I_t + \gamma^nM_{t-n}\)

eg: \(\vec{w}_{t+n} \doteq \vec{w}_{t+n-1} + \alpha M_t[G_{t:t+n} - \hat{v}(S_t,\vec{w}_{t+n-1})]\nabla\hat{v}(S_t,\vec{w}_{t+n-1})\)

基于函数逼近的同轨策略控制

\(\hat{q}(s,a,\vec{w}) \approx q_*(s,a)\)

半梯度TD(0) \(\rightarrow\) 半梯度Sarsa

我们发现在持续性任务的情况下,一旦有了真正的函数逼近,就必须放弃折扣并将控制问题的定义转换为一个新的“平均收益”的形式,有一种新的“差分”价值函数

分幕式半梯度控制

样本\(S_t \mapsto U_t\) \(\rightarrow\) \(S_t, A_t \mapsto U_t\)

动作价值函数预测的梯度下降更新:

  • 一般形式:\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha[U_t - \hat{q}(S_t,A_t,\vec{w}_t)]\nabla \hat{q}(S_t,A_t,\vec{w}_t)\)
  • 分幕式半梯度单步Sarsa:\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha[R_{t+1} + \gamma \hat{q}(S_{t+1},A_{t+1},\vec{w}_t) - \hat{q}(S_t,A_t,\vec{w}_t)]\nabla \hat{q}(S_t,A_t,\vec{w}_t)\)

img

半梯度n步Sarsa

\(G_{t:t+n} \doteq R_{t+1} + \gamma R_{t+2} + ... + \gamma^{n-1}R_{t+n} + \gamma^n \hat{q}(S_{t+n},A_{t+n},\vec{w}_{t+n-1})\)

\(\vec{w}_{t+n} \doteq \vec{w}_{t+n-1} + \alpha[G_{t:t+n} - \hat{q}(S_t,A_t,\vec{w}_{t+n-1})]\nabla \hat{q}(S_t,A_t,\vec{w}_{t+n-1})\)

img

平均收益:持续性任务中的新的问题设定

三种经典的MDP的目标设定:

  • 分幕式设定
  • 折扣设定
  • 平均收益设定

平均收益:\(r(\pi) \doteq \lim_{h \rightarrow \infty} \frac{1}{h} \Sigma_{t=1}^h E[R_t | S_0,A_{0:t-1} \sim \pi] = \lim_{t \rightarrow \infty} E[R_t | S_0,A_{0:t-1} \sim \pi] = \Sigma_s \mu_\pi(s) \Sigma_a \pi(a|s) \Sigma_{s',r}p(s',r|s,a)r\)

平均收益设定中,回报是根据即时收益和平均收益的差来定义的:\(G_t \doteq R_{t+1} - r(\pi) + R_{t+2} - r(\pi) + R_{t+3} - r(\pi) + ...\)——差分回报,对应价值函数称为差分价值函数

img

对于两类TD误差也有对应的差分形式:

\(\delta_t \doteq R_{t+1} - \bar{R}_{t+1} + \hat{v}(S_{t+1}, \vec{w}_t) - \hat{v}(S_t, \vec{w}_t)\)

\(\delta_t \doteq R_{t+1} - \bar{R}_{t+1} + \hat{q}(S_{t+1}, A_{t+1}, \vec{w}_t) - \hat{q}(S_t, A_t, \vec{w}_t)\)

因此,更新公式为:\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha \delta_t \nabla \hat{q}(S_t, A_t, \vec{w}_t)\)

img

折扣设定对函数逼近来说是有问题的,因此用平均收益设定来替换它

差分半梯度n步Sarsa

差分形式的n步回报:\(G_{t:t+n} \doteq R_{t+1} - \bar{R}_{t+1} + R_{t+2} - \bar{R}_{t+2} + ... + R_{t+n} - \bar{R}_{t+n} + \hat{q}(S_{t+n}, A_{t+n}, \vec{w}_{t+n-1})\)其中\(\bar{R}\)是对\(r(\pi)\)的估计

因此,n步TD误差:\(\delta_t \doteq G_{t:t+n} - \hat{q}(S_t, A_t, \vec{w})\)

更新公式仍使用常规的半梯度Sarsa更新公式

img

资格迹(Eligibility Traces)

提供具有明显计算优势的更优雅的算法机制——一个短时记忆向量,资格迹\(\vec{z}_t \in \R^d\),以及与之相对的长时权重向量\(\vec{w}_t \in \R^d\):当参数\(\vec{w}_t\)的一个分量参与计算并产生一个估计值时,对应的\(\vec{z}_t\)的分量会骤然升高,然后逐渐衰减。在迹归零前,如果发现了非零的时序差分误差,那么相应的\(\vec{w}_t\)的分量就可以得到学习。迹衰减参数\(\lambda \in [0,1]\)决定了迹的衰减率(MC: \(\lambda = 1\)//TD(0): \(\lambda = 0\)

前向视图:状态价值的更新基于该状态的若干后继时刻发生的事件——困难

资格迹的后向视图:使用当前的TD误差并用资格迹往回看那些已访问过的状态,能够得到几乎一样的更新——简单

img

img

\(\lambda\)-回报

一次有效的更新除了以任意的\(n\)步回报为目标之外,也可以用不同\(n\)的平均\(n\)步回报作为更新目标(eg: \(\frac{1}{2}G_{t:t+2} + \frac{1}{2}G_{t:t+4}\))——只要满足权重都为正数且和为1即可

将简单的更新平均而组成的更新被称为复合更新,复合更新的回溯图包括了每个组成部分的单独的回溯图,并在上方画一道水平线,下方注明每个组成部分的权重。

复合更新只能在它组成部分中最长的那个更新完成后完成

\(\lambda\)-回报:\(G_t^\lambda \doteq (1-\lambda)\Sigma_{n=1}^\infty \lambda^{n-1}G_{t:t+n}\)

也可以将终止状态之后的计算项独立出来(终止状态后的所有后续\(n\)步回报等于\(G_t\)):\(G_t^\lambda \doteq (1-\lambda)\Sigma_{n=1}^{T-t-1} \lambda^{n-1}G_{t:t+n} + \lambda^{T-t-1}G_t\)

img

离线\(\lambda\)-回报算法(使用\(\lambda\)-回报作为目标):

\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha [G_t^\lambda - \hat{v}(S_t, \vec{w}_t)]\nabla\hat{v}(S_t, \vec{w}_t)\)

TD(\(\lambda\))

TD(\(\lambda\))是强化学习中最古老、使用最广泛的算法之一,它是第一个使用资格迹展示了更理论化的前向视图更易于计算的后向视图之间关系的算法

通过三种方式改进了离线\(\lambda\)-回报算法:

  1. 在一幕序列的每一步更新权重向量而不仅仅在结束时才更新(离线\(\rightarrow\)在线)
  2. 将计算平均分配在整个时间轴上而不仅仅是幕的结尾
  3. 适用于持续性任务而不仅仅是分幕式任务
  • 通过函数逼近,资格迹\(\vec{z}_t \in \R^d\)是一个和权值向量\(\vec{w}_t\)同维度的向量。权值向量是一个长期的记忆,在整个系统的生命周期中进行积累;而资格迹是一个短期记忆,持续时间通常少于一幕的长度。
  • 资格迹辅助整个学习过程,它们唯一的作用是影响权值向量,而权值向量决定了估计值

在TD(\(\lambda\))中,资格迹(积累迹)向量被初始化为零,然后在每一步累加价值函数的梯度,并以\(\gamma\lambda\)衰减:

\(\vec{z}_{-1} \doteq \vec{0}\)

\(\vec{z}_t \doteq \gamma\lambda\vec{z}_{t-1} + \nabla\hat{v}(S_t, \vec{w}_t)\)

资格迹追踪了对最近的状态评估值做出了或正或负贡献的权值向量的分量,这里的“最近”由\(\gamma\lambda\)来定义。当一个强化事件出现时,我们认为这些贡献“痕迹”展示了权值向量的对应分量有多少“资格”可以接收学习过程引起的变化。

TD误差:\(\delta_t \doteq R_{t+1} + \gamma\hat{v}(S_{t+1}, \vec{w}_t) - \hat{v}(S_t, \vec{w}_t)\)

更新公式:\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha\delta_t\vec{z}_t\)

img

TD(\(\lambda\))在时间上往回看。每个时刻计算当前的TD误差,并根据之前状态对当前资格迹的贡献来分配它。

\(\overline{VE}(\vec{w}_\infty) \leqslant \frac{1-\gamma\lambda}{1-\gamma} \min_w\overline{VE}(\vec{w})\)——对于一个带折扣的持续性任务,渐近误差不会超过\(\frac{1-\gamma\lambda}{1-\gamma}\)乘上最小的可能误差

n-步截断\(\lambda\)-回报方法

离线\(\lambda\)-回报算法直到幕末尾才得知\(\lambda\)-回报,在持续性任务中,需要对其进行截断(缺少的真实收益用估计值代替)

截断\(\lambda\)-回报(假定数据最远只能到达未来的某个视界h):\(G_{t:h}^\lambda \doteq (1-\lambda)\Sigma_{n=1}^{h-t-1}\lambda^{n-1}G_{t:t+n} + \lambda^{h-t-1}G_{t:h}\)

截断TD(\(\lambda\))//TTD(\(\lambda\))更新公式:\(\vec{w}_{t+n} \doteq \vec{w}_{t+n-1} + \alpha [G_{t:t+n}^\lambda - \hat{v}(S_t, \vec{w}_{t+n-1})]\nabla\hat{v}(S_t, \vec{w}_{t+n-1})\)

与n-步时序差分算法一样,最初n-1个时刻不进行更新,另外有n-1次更新在幕终止后进行

img

高效率的实现依赖于k步\(\lambda\)-回报可以写为:\(G_{t:t+k}^\lambda = \hat{v}(S_t, \vec{w}_{t-1}) + \Sigma_{i=t}^{t+k-1}(\gamma\lambda)^{i-t}\delta_i'\)——其中\(\delta_i' \doteq R_{t+1} + \gamma\hat{v}(S_{t+1}, \vec{w}_t) - \hat{v}(S_t, \vec{w}_{t-1})\)

选择截断参数n时需要折中考虑,需要以增加复杂性为代价——在每一步收集到新的数据增量的同时,回到当前幕的开始并重做所有的更新。由于获得了新的数据,因此新的更新会比原来的更好。换言之,更新总是朝向一个n-步截断\(\lambda\)-回报目标,但是每次都使用新的视界。每一次遍历当前幕时,都可以使用一个稍长一点的视界来得到一个稍好一点的结果——在线\(\lambda\)-回报算法(计算十分复杂)

真实的在线TD(\(\lambda\))

在线\(\lambda\)-回报算法的权重向量序列可以被组织成一个三角形:

img

在每个时刻中产生三角形的一行,只有对角线上的权重向量\(\vec{w}_t^t\)是真正需要的——需要找到一个通过前一个值计算\(\vec{w}_t^t\)的紧凑有效方式

更新公式:\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha \delta_t \vec{z}_t + \alpha(\vec{w}_t^T \vec{x}_t - \vec{w}_{t-1}^T \vec{x}_t)(\vec{z}_t-\vec{x}_t)\)——其中TD误差:\(\delta_t \doteq R_{t+1} + \gamma\hat{v}(S_{t+1}, \vec{w}_t) - \hat{v}(S_t, \vec{w}_t)\), 荷兰迹(上文提到的被称为积累迹):\(\vec{z}_t \doteq \gamma \lambda \vec{z}_{t-1} + (1-\alpha\gamma\lambda\vec{z}_{t-1}^T\vec{x}_t)\vec{x}_t\)

img

真实的在线TD(\(\lambda\))算法的内存需求与常规的TD(\(\lambda\))相同,然而每一步的计算量增加了约50%(在资格迹的更新中多出一个内积),总体上,每一步的计算复杂度仍然是\(\Omicron(d)\),与TD(\(\lambda\))相同。

Sarsa(\(\lambda\))

\(G_{t:t+n} \doteq R_{t+1} + \gamma R_{t+2} + ... + \gamma^{n-1}R_{t+n} + \gamma^n \hat{q}(S_{t+n},A_{t+n},\vec{w}_{t+n-1})\)

\(G_{t}^\lambda \doteq (1-\lambda)\Sigma_{n=1}^{T-t-1}\lambda^{n-1}G_{t:t+n} + \lambda^{T-t-1}G_{t}\)//\(G_{t:h}^\lambda \doteq (1-\lambda)\Sigma_{n=1}^{h-t-1}\lambda^{n-1}G_{t:t+n} + \lambda^{h-t-1}G_{t:h}\)

\(\vec{w}_{t+1} \doteq \vec{w}_{t} + \alpha [G_{t}^\lambda - \hat{q}(S_t, A_t, \vec{w}_{t})]\nabla\hat{q}(S_t, A_t, \vec{w}_{t})\)——其中\(G_t^\lambda \doteq G_{t:\infty}^\lambda\)

依然可以用\(\vec{w}_{t+1} \doteq \vec{w}_t + \alpha \delta_t \vec{z}_t\)表示,其中:

\(\delta_i \doteq R_{t+1} + \gamma\hat{q}(S_{t+1}, A_{t+1}, \vec{w}_t) - \hat{q}(S_t, A_t, \vec{w}_{t-1})\)

\(\vec{z}_{-1} \doteq \vec{0}\)

\(\vec{z}_t \doteq \gamma\lambda\vec{z}_{t-1} + \nabla\hat{q}(S_t, A_t, \vec{w}_t)\)

img

img

同样的,会有如下的真实在线Sarsa(\(\lambda\))算法:

img

变量\(\lambda\)\(\gamma\)

为了用更一般化的形式表述最终的算法,需要将自举法和折扣的常数系数推广到依赖于状态和动作的函数,也就是说每个时刻会有一个不同的\(\lambda\)和一个不同的\(\gamma\),用\(\lambda_t\)\(\gamma_t\)来表示

\(\lambda: S \times A \rightarrow [0,1]\)是状态和动作到单位区间的函数映射,且\(\lambda_t \doteq \lambda(S_t,A_t)\)

\(\gamma: S \rightarrow [0,1]\)是状态到单位区间的函数映射,且\(\gamma_t \doteq \gamma(S_t)\)

终止函数\(\gamma\)改变了回报值:\(G_t \doteq R_{t+1} + \gamma_{t+1}G_{t+1} = R_{t+1} + \gamma_{t+1}R_{t+2} + \gamma_{t+1}\gamma_{t+2}R_{t+3} + ... = \Sigma_{k=t}^\infty R_{k+1}\Pi_{i=t+1}^k \gamma_i\)——为保证和有限,要求\(\Pi_{k=t}^\infty \gamma_k = 0\)

新的基于状态的\(\lambda\)-回报值可以被递归地写为:\(G_t^{\lambda s} \doteq R_{t+1} + \gamma_{t+1}((1-\lambda_{t+1}) \hat{v}(S_{t+1}, \vec{w}_t) + \lambda_{t+1}G_{t+1}^{\lambda s})\)

基于动作的\(\lambda\)-回报值可以被写为:

Sarsa:\(G_t^{\lambda a} \doteq R_{t+1} + \gamma_{t+1}((1-\lambda_{t+1}) \hat{q}(S_{t+1}, A_{t+1}, \vec{w}_t) + \lambda_{t+1}G_{t+1}^{\lambda a})\)

期望Sarsa:\(G_t^{\lambda a} \doteq R_{t+1} + \gamma_{t+1}((1-\lambda_{t+1}) \overline{V}_t(S_{t+1}) + \lambda_{t+1}G_{t+1}^{\lambda a})\)——其中\(\overline{V}_t(s) \doteq \Sigma_a \pi(a|s)\hat{q}(s, a, \vec{w}_t)\)

带有控制变量的离轨策略资格迹

引入重要度采样\(\rho_t = \frac{\pi(A_t|S_t)}{b(A_t|S_t)}\)

状态价值函数

img

img

img

img

img

动作价值函数

img

img

img

img

从Watkins的Q(\(\lambda\))到树回溯TB(\(\lambda\))

img

img

img

img

img

策略梯度(Policy Gradient)

直接学习参数化的策略,动作选择不再直接依赖于价值函数

价值函数仍然可以用于学习策略的函数,但对于动作选择而言不再必需

用记号\(\vec{\theta} \in \R^{d'}\)表示策略的参数向量——因此把在\(t\)时刻、状态\(s\)和参数\(\vec{\theta}\)下选择动作\(a\)的概率记为\(\pi(a|s,\vec{\theta}) = \Pr\{A_t=a|S_t=s,\vec{\theta}_t = \vec{\theta}\}\)

\(\vec{\theta}_{t+1} = \vec{\theta}_t + \alpha \hat{\nabla J(\vec{\theta}_t)}\)

同时学习策略和价值函数的方法一般被称为Actor-Critic方法

策略梯度定理

\(\nabla J(\vec{\theta}) \propto \Sigma_s \mu(s) \Sigma_a q_\pi(s,a) \nabla \pi(a|s,\vec{\theta})\)

REINFORCE: 蒙特卡洛策略梯度

img

带有基线的REINFORCE

img

AC方法

img

img

持续性问题的策略梯度

img

posted @ 2023-06-21 08:35  kirin-dev  阅读(89)  评论(0编辑  收藏  举报