强化学习基础知识笔记[5] - 值函数逼近

参考资料
[1] 强化学习入门 第五讲 值函数逼近
本文主要是对该资料学习的笔记,并且加入了一些自己的想法,如有错误欢迎指出。

强化学习的分类

aaa

无模型强化学习 - 理论

强化学习的核心问题

强化学习的核心问题为:

  1. 策略评估部分:值函数、状态-行为值函数的估计问题!
  2. 策略改善部分:给定值函数下, π ( a ∣ s ) \pi(a|s) π(as)的选取问题!

回报函数、值函数定义

累计回报函数
G t = R t + 1 + γ R t + 2 + . . . = ∑ k = 0 ∞ γ k R t + k + 1 (1.1) G_t = R_{t+1} + \gamma R_{t+2} + ... = \sum^{\infty}_{k=0} \gamma ^{k}R_{t+k+1} \tag{1.1} Gt=Rt+1+γRt+2+...=k=0γkRt+k+1(1.1)
状态值函数
v π ( s ) = E π [ G t ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] (1.2) v_\pi (s) = E_\pi[G_t] = E_\pi \left[ \sum^{\infty}_{k=0} \gamma ^{k}R_{t+k+1} | S_t = s \right] \tag{1.2} vπ(s)=Eπ[Gt]=Eπ[k=0γkRt+k+1St=s](1.2)
行为值函数
q π ( s , a ) = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] (1.3) q_\pi (s,a) = E_\pi \left[ \sum^{\infty}_{k=0} \gamma ^{k}R_{t+k+1} | S_t = s , A_t = a \right] \tag{1.3} qπ(s,a)=Eπ[k=0γkRt+k+1St=s,At=a](1.3)
状态值函数和行为值函数的定义是在策略 π \pi π下各次实现中累计回报函数的数学期望。

动态规划方法值函数:
V ( s t ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ′ P s s ′ a V ( s ′ ) ) (1.4) V (s_t) = \sum_{a \in A} \pi(a|s)\left( R^a_s + \gamma\sum_{s'} P^{a}_{ss'}V(s') \right) \tag{1.4} V(st)=aAπ(as)(Rsa+γsPssaV(s))(1.4)
动态规划方法值函数的计算用到了后继状态的值函数,利用bootstrapping方法,即用后继状态的值函数估计当前值函数。此时期望值由模型提供。

蒙特卡罗方法值函数:
V ( s t ) = V ( s t ) + α ( G t − V ( s t ) ) (1.5) V (s_t) = V (s_t) + \alpha(G_t-V(s_t)) \tag{1.5} V(st)=V(st)+α(GtV(st))(1.5)
蒙特卡罗方法利用经验平均估计状态的值函数,即利用多次历史实验中该状态的平均累计回报函数来逼近期望。

时间差分方法值函数:
V ( S t ) ← V ( S t ) + α ( R t + 1 + γ V ( S t + 1 ) − V ( S t ) ) (1.6) V(S_t) \leftarrow V(S_t) + \alpha(R_{t+1} + \gamma V(S_{t+1}) - V(S_t)) \tag{1.6} V(St)V(St)+α(Rt+1+γV(St+1)V(St))(1.6)

值函数逼近

之前介绍方法都是基于表格的强化学习,其维数为状态的个数,算法更新的是表格中具体状态下值函数的值。
在状态空间很大或者状态连续时无法使用网格进行表示,此时需要用到值函数逼近的方法逼近值函数。
本节中学习的是参数化值函数逼近
其中参数化的意思是:

  • 在线性逼近时值函数由一组函数(基函数)和一组参数组成,记为 v ( s , θ ) v(s,\theta) v(s,θ),更新的过程为更新参数向量 θ \theta θ的值;
  • 在非线性逼近时值函数一般由神经网络表示。

值函数的形式

首先在此给出线性逼近时的基函数表达式,这样后面看问题更加具体。
常用的基函数组:

  • 多项式基函数
    ( 1 , s 1 , s 2 , s 1 2 , s 2 2 , ⋯   ) (1, s_1, s_2, s_1^2, s_2^2, \dotsb) (1,s1,s2,s12,s22,)
  • 傅里叶基函数
    ϕ i ( s ) = c o s ( i π s ) , s ∈ [ 0 , 1 ] \phi_{i}(s)=cos(i\pi s),s\in[0,1] ϕi(s)=cos(iπs),s[0,1]
  • 径向基函数
    ϕ i ( s ) = e x p ( − ∣ ∣ s − c i ∣ ∣ 2 2 δ i 2 ) \phi_{i}(s)=exp(-\frac{||s-c_i||^2}{2\delta_i^2}) ϕi(s)=exp(2δi2sci2)

此时值函数的表达式为:
v ^ ( s , θ ) = θ T ϕ ( s ) (2) \hat{v}(s,\theta) = \theta^{T}\phi(s) \tag{2} v^(s,θ)=θTϕ(s)(2)

其中:

  • θ T \theta^{T} θT为参数向量,n维
  • ϕ ( s ) \phi(s) ϕ(s)为基函数组,n维

逼近过程

值函数的逼近是一个监督学习的过程,其输入数据为 s t s_t st,即当前的状态;相应的标签为 U t U_t Ut。其中, U t U_t Ut在蒙特卡罗方法中为 G t G_t Gt,在时间差分法中为 r + γ Q ( s ′ , a ′ ) r+\gamma Q(s^{'},a^{'}) r+γQ(s,a),在TD(λ)中为 G t λ G^{\lambda}_t Gtλ
训练目标为:
a r g m i n θ ( q ( s , a ) − q ^ ( s , a , θ ) ) 2 (3) argmin_{\theta}(q(s,a)-\hat{q}(s,a,\theta))^2 \tag{3} argminθ(q(s,a)q^(s,a,θ))2(3)

需要说明的是,不同于表格型强化学习只更新当前状态 s t s_t st处的值函数,值函数逼近法在更新参数时会导致所有状态下值函数的改变!

值函数具体的更新方法有增量式学习和批方法。

增量式学习:随机梯度下降

在该方法下的参数随机梯度更新公式为:
θ t + 1 = θ t + α [ U t − v ^ ( s t , θ t ) ] ∇ θ v ^ ( s t , θ ) (3.1) \theta_{t+1}=\theta_{t}+\alpha[U_t-\hat{v}(s_t,\theta_{t})]\nabla_{\theta}\hat{v}(s_t,\theta) \tag{3.1} θt+1=θt+α[Utv^(st,θt)]θv^(st,θ)(3.1)

其中:

  • θ t + 1 \theta_{t+1} θt+1 θ t \theta_{t} θt均为n维向量;
  • ∇ θ v ^ ( s t , θ ) \nabla_{\theta}\hat{v}(s_t,\theta) θv^(st,θ)为对 v ^ ( s t , θ ) \hat{v}(s_t,\theta) v^(st,θ)求关于 θ \theta θ的梯度,此时 s t s_t st为确定值;
  • α \alpha α为学习率,需要设定较小的值。

关于 α \alpha α较小取值的解释:逼近的值函数并不需要在各状态下都能达到最精确的值,而是要在整体上平衡所有不同状态的误差,因此需要较小的值。

对于蒙特卡罗方法,需要按照策略产生多组数据(从起始状态到最终状态的完整过程),然后根据各组数据迭代更新值函数参数。假设一组数据为 < s 1 , G 1 > , < s 2 , G 2 > , < s 3 , G 3 > … <s_1,G_1>,<s_2,G_2>,<s_3,G_3>\dotsc <s1,G1>,<s2,G2>,<s3,G3>,此时需要按照下述公式更新值函数:
Δ θ = α ( G t − v ^ ( s t , θ ) ) ∇ θ v ^ ( s t , θ ) (3.2) \Delta \theta = \alpha(G_t-\hat{v}(s_t,\theta))\nabla_{\theta}\hat{v}(s_t,\theta) \tag{3.2} Δθ=α(Gtv^(st,θ))θv^(st,θ)(3.2)

算法描述为:

对于时间差分法,由于TD(0)方法中 U t = R t + 1 + γ v ^ ( s t + 1 , θ ) U_t = R_{t+1} + \gamma \hat{v}(s_{t+1},\theta) Ut=Rt+1+γv^(st+1,θ),目标值函数与估计的值函数均含θ。如果只考虑估计的值函数中θ,则该方法为半梯度法。此时的θ更新公式为:
θ t + 1 = θ t + α [ R + γ v ^ ( s t + 1 , θ ) − v ^ ( s t , θ t ) ] ∇ θ v ^ ( s t , θ ) ) (3.3) \theta_{t+1}=\theta_{t}+\alpha[R + \gamma \hat{v}(s_{t+1},\theta)-\hat{v}(s_t,\theta_{t})]\nabla_{\theta}\hat{v}(s_t,\theta)) \tag{3.3} θt+1=θt+α[R+γv^(st+1,θ)v^(st,θt)]θv^(st,θ))(3.3)

基于半梯度的TD(0)算法描述为:

疑问:

  • 公式3.3的中间出现了 θ \theta θ。但没明确说明这是哪个时刻的。我的理解是 θ t \theta_{t} θt,因为计算完 θ t + 1 \theta_{t+1} θt+1之前只能使用旧值。

基于半梯度的Sarsa算法描述为:

总结一下几种方法的θ更新公式:
请添加图片描述

批方法

批的方法计算复杂,效率更高。
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值