函数近似方法
有模型数值迭代算法、回合更新算法和时序差分更新算法,在每次更新价值函数时都只更新某个状态(或状态动作对)下的价值估计。但是,在有些任务中,状态和动作的数目非常大,甚至可能是无穷大,这时,不可能对所有的状态(或状态动作对)逐一进行更新。函数近似方法用参数化的模型来近似整个状态价值函数(或动作价值函数),并在每次学习时更新整个函数。这样,那些没有被访问过的状态(或状态动作对)的价值估计也能得到更新。本章将介绍函数近似方法的一般理论,包括策略评估和最优策略求解的一般理论。再介绍两种最常见的近似函数:线性函数和人工神经网络。后者将深度学习和强化学习相结合,称为深度Q学习,是第一个深度强化学习算法,也是目前的热门算法。
函数近似原理
本文介绍用函数近似(function approximation)方法来估计给定策略π的状态价值函数 v π v_\pi vπ或动作价值函数 q π q_\pi qπ。要评估状态价值,我们可以用一个参数为w的函数v(s;w)(s∈ S \mathcal{S} S)来近似状态价值;要评估动作价值,我们可以用一个参数为w的函数q(s,a;w)(s∈ S \mathcal{S} S ,a∈ A \mathcal{A} A(s))来近似动作价值。在动作集有限的情况下,还可以用一个矢量函数q(s;w)=(q(s,a;w):a∈ A \mathcal{A} A )(s∈ S \mathcal{S} S )来近似动作价值。矢量函数q(s;w)的每一个元素对应着一个动作,而整个矢量函数除参数外只用状态作为输入。这里的函数v(s;w)(s∈ S \mathcal{S} S )、q(s,a;w)(s∈ S \mathcal{S} S ,a∈ A \mathcal{A} A)、q(s;w)(s∈ S \mathcal{S} S)形式不限,可以是线性函数,也可以是神经网络。但是,它们的形式需要事先给定,在学习过程中只更新参数w。一旦参数w完全确定,价值估计就完全给定。所以,本节将介绍如何更新参数w。更新参数的方法既可以用于策略价值评估,也可以用于最优策略求解。
随机梯度下降
本节来看同策回合更新价值估计。将同策回合更新价值估计与函数近似方法相结合,可以得到函数近似回合更新价值估计算法(算法6-1)。这个算法与第4章中回合更新算法的区别就是在价值更新时更新的对象是函数参数,而不是每个状态或状态动作对的价值估计。
算法1 随机梯度下降函数近似评估策略的价值
1.(初始化)任意初始化参数w。
2.逐回合执行以下操作。
2.1 (采样)用环境和策略π生成轨迹样本S0,A0,R1,S1,A1,R2,…,ST-1,AT-1,RT,ST。
2.2 (初始化回报)G←0。
2.3 (逐步更新)对t←T-1,T-2,…,0,执行以下步骤:
2.3.1 (更新回报)G←γG+Rt+1。
2.3.2 (更新价值)若评估的是动作价值则更新w以减小[G-q(St,At;w)]^2(如
w←w+α[G-q(St,At;w)]▽q(St,At;w));若评估的是状态价值则更新w以减小[G-v(
St;w)]2(如w←w+α[G-v(St;w)]▽v(St;w))。
如果我们用算法6-1评估动作价值,则更新参数时应当试图减小每一步的回报估计Gt和动作价值估计q(St,At;w)的差别。所以,可以定义每一步损失为 [ G t − q ( S t , A t ; w ) ] 2 [Gt-q(St,At;w)]^2 [Gt−q(St,At;w)]2,而整个回合的损失为 ∑ t = 0 T [ G t − q ( S t , A t ; w ) ] 2 \sum_{t=0}^T [G_t-q(S_t,A_t;w)]^2 ∑t=0T[Gt−q(St,At;w)]2。如果我们沿着 ∑ t = 0 T [ G t − q ( S t , A t ; w ) ] 2 \sum_{t=0}^T [G_t-q(S_t,A_t;w)]^2 ∑t=0T[Gt−q(St,At;w)]2对w的梯度的反方向更新策略参数w,就有机会减小损失。这样的方法称为随机梯度下降(stochastic gradient-descent,SGD)算法。对于能够支持自动梯度计算的软件包,往往自带根据损失函数更新参数的功能。如果不使用现成的参数更新软件包,也可以自己计算得到q(St,At;w)的梯▽q(St,At;w),然后利用下式进行更新:
对于状态价值函数,也有类似的分析。定义每一步的损失为[Gt-v(St;w)]2,整个回合的损失为 ∑ t = 0 T [ G t − v ( S t ; w ) ] 2 \sum_{t=0}^T [G_t-v(S_t;w)]^2 ∑t=0T[Gt−v(St;w)]2。可以在自动梯度计算并更新参数的软件包中定义这个损失来更新参数w,也可以用下式更新:
相应的回合更新策略评估算法与算法1类似,此处从略。
将策略改进引入随机梯度下降评估策略,就能实现随机梯度下降最优策略求解。算法2给出了随机梯度下降最优策略求解的算法。它与回合更新最优策略求解算法的区别也仅仅在于迭代的过程中不是直接修改价值估计,而是更新价值参数w。
算法6-2 随机梯度下降求最优策略
1.(初始化)任意初始化参数w。
2.逐回合执行以下操作。
2.1 (采样)用环境和当前动作价值估计q(·,·;w)导出的策略(如ε柔性策略)生成轨迹样本S0,A0,R1,S1,A1,R2,…,ST-1,AT-1,RT,ST。
2.2 (初始化回报)G←0。
2.3 (逐步更新)对t←T-1,T-2,…,0,执行以下步骤:
2.3.1 (更新回报)G←γG+ R t + 1 R_{t+1} Rt+1;
2.3.2 (更新动作价值函数)更新参数w以减小 [ G − q ( S t , A t ; w ) ] 2 [G-q(St,At;w)]^2 [G−q(St,At;w)]2(如w←w+α[G-q(St,At;w)]▽q(St,At;w))。
半梯度下降
动态规划和时序差分学习都用了“自益”来估计回报,回报的估计值与w有关,是存在偏差的。例如,对于单步更新时序差分估计的动作价值函数,回报的估计为