本章的题目为"on-policy prediction with approximation",之前几章的内容也涉及到了on-policy prediction,这里的不同就在于“估计”。因为前面讲到的内容是根据策略采样轨迹,再基于轨迹得到的奖励,计算价值函数。但这里不再是采用这样的思路,而是估计价值函数,并且估计出来的价值函数不再是以表格的形式存在,而是得到一个参数化的函数形式。形式化表示为 v ^ ( s , w ) ≈ v π ( s ) \hat{v}(s, \mathbf{w}) \approx v_{\pi}(s) v^(s,w)≈vπ(s),其中 v ^ ( s , w ) \hat{v}(s, \mathbf{w}) v^(s,w)表示估计的价值函数, w \mathbf{w} w表示价值函数中的参数。我们要做的就是估计这个参数,使得估计的价值函数接近于目标的价值函数。当然 v ^ \hat{v} v^可以是多种形式,比如:线性函数、神经网络、决策树、最近邻、傅里叶/小波变换等等。通常,参数 w \mathbf{w} w的维度是远小于状态空间大小的。
为什么我们需要估计价值函数呢?
- 状态空间、动作空间离散,但很大的时候,用表格存储价值函数不现实,且查表效率低。
- 状态空间连续时,无法将每个状态的价值都保存在表格中。
基于以上两种情况,我们可以利用函数近似的方式来估计价值。下面给出图示,左边第一张表示一个状态价值估计器,输入是某一个状态,输出是该状态的估计价值, w \mathbf{w} w是函数估计器的参数。第二张图表示动作价值估计器,输入是一个状态-动作对,输出是其对应的动作价值。第三张图是对于一个状态可能发生的所有动作的价值估计,输入是一个状态,输出是该状态所有可能的动作对应的估计价值。
文章目录
1. 价值函数估计
本书中讲到的预测方法都可以描述为估计值函数的更新,也就是对于一个状态,将它的价值向目标价值趋近。形式化表示为: s ↦ u s \mapsto u s↦u。其中 s s s是将要更新价值的状态, u u u是更新的目标。在前面几章介绍的不同方法中,更新的目标也不同,如下:
- 蒙特卡洛(MC): S t ↦ G t S_t \mapsto G_t St↦Gt
- TD(0): S t ↦ R t + 1 + γ v ^ ( S t + 1 , w t ) S_t \mapsto R_{t+1} + \gamma \hat{v}(S_{t+1}, \mathbf{w_t}) St↦Rt+1+γv^(St+1,wt)
- n-step TD: S t ↦ G t : t + n S_t \mapsto G_{t:t+n} St↦Gt:t+n
- 动态规划(DP): s ↦ E π [ R t + 1 + γ v ^ ( S t + 1 , w t ) ∣ S t = s ] s \mapsto \mathbb{E}_{\pi}[R_{t+1} + \gamma \hat{v}(S_{t+1}, \mathbf{w}_t) | S_t = s] s↦Eπ[Rt+1+γv^(St+1,wt)∣St=s]
所以,如果我们拥有充足的训练数据,每条数据包含状态和该状态对应的目标价值,即(s, u)。那么直观的想法,我们就可以使用现有的很多监督学习方法来训练一个价值函数估计器。
当然,我们还需要定义合适的损失函数,通过减小损失,得到更好的参数估计。
2. 预测目标( V E ‾ \overline{VE} VE)
因为要预测的价值是一个实数值,所以很自然的想到可以用均方误差作为损失函数。即:
V E ‾ ( w ) ≐ ∑ s ∈ S μ ( s ) [ v π ( s ) − v ^ ( s , w ) ] 2 \overline{VE} (\mathbf{w}) \doteq \sum_{s \in \mathcal{S}} \mu(s)[v_{\pi}(s) - \hat{v}(s, \mathbf{w})]^2 VE(w)≐s∈S∑μ(s)[vπ(s)−v^(s,w)]2
其中 μ ( s ) \mu(s) μ(s)表示我们对于状态 s s s的价值估计误差有多在意。很多时候 μ ( s ) \mu(s) μ(s)是与访问状态 s s s的次数成正比的。
在eposodic 任务中 μ ( s ) \mu(s) μ(s)的计算方式
对于所有的状态s,
μ ( s ) = η ( s ) ∑ s ′ η ( s ′ ) \mu(s) = \frac{\eta(s)}{\sum_{s'}\eta(s')} μ(s)=∑s′η(s′)η(s)
其中, η ( s ) \eta(s) η(s)表示为:
η ( s ) = h ( s ) + ∑ s ˉ η ( s ˉ ) ∑ a π ( a ∣ s ˉ ) p ( s ∣ s ˉ , a ) \eta(s) = h(s) + \sum_{\bar{s}}\eta(\bar{s})\sum_a \pi(a | \bar{s}) p(s | \bar{s}, a) η(s)=h(s)+sˉ∑η(sˉ)a∑π(a∣sˉ)p(s∣sˉ,a)可以看出, η ( s ) \eta(s) η(s)的计算包括两个部分, h ( s ) h(s) h(s)表示状态 s s s作为起始状态的概率,后面的部分表示的是状态 s s s作为中间状态出现的概率。所以 η ( s ) \eta(s) η(s)表示的是状态 s s s出现的概率。
3. 随机梯度和半梯度方法
随机梯度下降(SGD)是机器学习中常用的优化算法,这里,我们也是用这种思想来优化值函数估计,更新参数。
我们要更新的参数 w \mathbf{w} w是一个固定维度的列向量,表示为: w ≐ ( w 1 , w 2 , ⋯ , w d ) T \mathbf{w} \doteq (w_1, w_2, \cdots, w_d)^\mathrm{T} w≐(w1,w2,⋯,wd)T。并且, v ^ ( s , w ) \hat{v}(s, \mathbf{w}) v^(s,w)对 w \mathbf{w} w是可微的。
利用上一节中的均方误差作为损失函数,我们试图最小化观测到的样本损失。SGD是在每个样本损失计算之后更新参数,参数的更新方向则是梯度下降方向。