到目前为止,我们分享过的所有值函数计算方法都是以表格的形式出现的,也就是说将值函数表示为状态到实数的映射并以表格的形式记录下来。但是这种方法仅限于具有少量状态和动作的任务。当问题的规模较大时,表格所需的内存和以及计算每个状态的值函数所需的时间开销都是不可支付的,对于一部分状态我们只能获得很少的甚至是零的经验来对其进行更新。因此,基于表格描述的方法不具有较好的泛化能力。接下来我们将要解决的问题就是:如何利用状态空间的有限子集的有限经验,从而对更大的子集产生高效的近似?
事实上,泛化的方法有很多并且可以直接结合到强化学习上来。我们需要的泛化也可以称为函数逼近,因为所需要的训练样本是从值函数本身得到的,我们试图从这些抽取的样本中泛化来构造对整个函数的逼近。函数逼近是监督学习的一个例子,是机器学习、神经网络和模式识别的主要课题。理论上讲,在这些领域研究的方法基本都可以用于强化学习的值函数的逼近。
值函数逼近
这里我们先考虑逼近一个具体策略 \pi
的值函数 v_\pi
。
模型
在这一章,值函数不再被维护在一个 table
中了,而是被参数化成一个向量 \mathbf w\in \mathbb{R}^n
,我们使用
\hat{v}(s, \mathbf{w}) \approx v_{\pi}(s)
表示对每个值函数的逼近。比如:\hat{v}
可能是神经网络计算的结果,\mathbf w
是网络的权重,通过调整网络的权重,任何不同取值范围的函数 \hat{v}
都可以被神经网络表示出来。当然,\hat{v}
也有可能是一个决策树,\mathbf{w}
是其中的分裂节点的参数值。
通常,\mathbf w
中的参数个数 n
要远远少于状态数量,当一个参数发生变化时常常会导致多个状态的值函数发生变化。因此,当一个状态的值函数更新时,这种影响常常会从该状态扩展到其他状态上去。
模型的训练样本
back
-up
back
-up
在前面多次被提到,back
-up
是针对每个状态而言的,它表示该状态的值函数应该更接近某个值,我们用
s\rightarrow v
来表示一个back
-up
,s
表示被 back
-up
的状态,v
表示 back
-up
的值。比如:蒙特卡洛方法中的 back
-up
是 S_t\rightarrow G_t
,TD(0)
方法的back
-up
是 S_t\rightarrow R_{t+1}+\gamma \hat{v}(S_{t+1},\mathbf{w}_t)
。
基于对 back
-up
的理解,我们之前的方法都是借助 back
-up
在当前的值函数上朝着 back
-up
做一些偏移。按照这种理解方式,当训练一个神经网络时,直接使用 back
-up
作为训练样本就非常合理了。
度量指标
大部分监督学习都使用 root-mean-squared\ error
作为训练目标,在我们的值函数逼近模型中,输入是状态的序列化表示,目标输出是状态的值函数,因此对于一个带有参数 \mathbf w
的函数逼近 \hat{v}
,相对应的训练目标如下
RMSE(\mathbf{w}) = \sqrt{\sum_{s\in\mathcal{S}}d(s)[v_\pi(s)-\hat{v}(s,\mathbf{w})]^2},
其中,d:s\rightarrow[0,1],\sum_s d(s)=1
是状态上的一个分布,用来描述每个状态的样本的相对重要性。对于on-policy的方法而言,分布 d
事实上和策略 \pi
具有一致性,也就是在采样时使用的分布可以用在误差的计算。
训练目标
在定义了度量指标后,训练目标就可以简介地通过公式定义为 \mathbf{w}^*
\mathbf{w}^* = \arg\min{\mathbf{w}}.
总结
在本节中,我们介绍了一个框架,该框架可以用于将值函数预测的各种强化学习方法与各种函数逼近方法相结合,使用前者的backup来为后者生成训练示例并以最小化RMSE为目标训练模型。下一次,我们就分享具体的模型训练方法,敬请期待~