【强化学习理论基础-通用】(32)从零开始白话给你讲[数学原理]:值函数近似,目标函数 与 linear function approximation

若需观看机器人系列相关博客,请劳驾至:【足式机器人无死角系列之-【强化学习基础-通用】、【仿真及训练环境】、【强化学习】:isaac-gym 与 isaac-lab 从零开始

郑重声明:该系列博客为本人 ( W e n h a i Z h u ) 独家私有 , 禁止转载与抄袭 , 首次举报有谢 , 若有需请私信授权! \color{red}郑重声明:该系列博客为本人(WenhaiZhu)独家私有,禁止转载与抄袭,首次举报有谢,若有需请私信授权! 郑重声明:该系列博客为本人(WenhaiZhu)独家私有,禁止转载与抄袭,首次举报有谢,若有需请私信授权!

回顾: 上一篇博客中介绍了如何对应一个值函数近似的优化目标,原理比较简单,就是使得每个状态价值与真值的误差最小过。且介绍了两种优化目标,主要区别在于求期望的方式,可以选择均匀平均或者加权平均的方式。不过并没有推导或讲解目标函数的优化过程,当然,这也是该篇博客的目的。

本系列博客链接为: {\color{blue}本系列博客链接为:} 本系列博客链接为:【强化学习理论基础-通用】(01)从零开始白话给你讲,简单推导公式,深刻理解,一眼万年!:https://blog.youkuaiyun.com/weixin_43013761/article/details/143168169

本博客编写于: 20250112 ,台式机为 u b u n t u 20.04 , 3090 G e F o r c e R T X 显存 24 G { \color{purple} 本博客编写于:20250112,台式机为 ubuntu 20.04,3090 GeForce RTX 显存24G} 本博客编写于:20250112,台式机为ubuntu20.043090GeForceRTX显存24G:与你现在的代码,或者环境等存在一定差异也在情理之中,故切勿认为该系列博客绝对正确,且百密必有一疏,若发现错误处,恳请各位读者直接指出,本人会尽快进行整改,尽量使得后面的读者少踩坑,评论部分我会进行记录与感谢,只有这样,该系列博客才能成为精品,这里先拜谢各位朋友了。

文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证,请备注 强化学习 。 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证,请备注\color{red} 强化学习}。 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX官方认证,请备注强化学习

一、前言

上一篇博客中详细介绍了如何定义值函数近似的优化目标,不过列举的例子比较简单,从一维的状态出发,使得其对应状态价值评估的误差最小化。后续会拓展到多维情况,从一维切入能够更好的领悟算法的要点。先不讨论目标函数具体采用一致分布(uniform distribution),还是稳定分布(stationary distribution),看其宏观上的统一形式:
J ( w ) = 1 2 E [ ( v π ( S ) − v ^ ( S , w ) ) 2 ] (01) \color{red} \tag{01} J(w)=\frac{1}{2}\mathbb{E}\left[\left(v_{\pi}(S)-\hat{v}(S, w)\right)^{2}\right] J(w)=21E[(vπ(S)v^(S,w))2](01)其对应于上一篇博客(02)式,应该有一种熟悉的味道,在梯度下降相关系列博客中,有对这种二次型目标函数进行讲解,比如说:比如:【强化学习理论基础-通用】(20)从零开始白话给你讲[数学原理]:随机梯度下降系列:BGD、SGD、MBGD,深入探讨与对比。其中推导过程,以及上一篇博客通过 uniform distribution(一致分布) 建立的目标函数: J ( w ) = 1 2 ∗ 1 ∣ S ∣ ∑ s ∈ S ( v π ( s ) − v ^ ( s , w ) ) 2 (02) \color{green} \tag{02} J(w)=\frac{1}{2}*\frac{1}{|\mathcal{S}|} \sum_{s \in \mathcal{S}}\left(v_{\pi}(s)-\hat{v}(s, w)\right)^{2} J(w)=21S1sS(vπ(s)v^(s,w))2(02) 以及 stationary distribution(稳态分布) 介绍的
J ( w ) = 1 2 ∗ ∑ s ∈ S d π ( s ) ( v π ( s ) − v ^ ( s , w ) ) 2 (03) \color{green} \tag{03} J(w)=\frac{1}{2}*\sum_{s \in \mathcal{S}} d_{\pi}(s)\left(v_{\pi}(s)-\hat{v}(s, w)\right)^{2} J(w)=21sSdπ(s)(vπ(s)v^(s,w))2(03)其都是(01)式的具体化,下面的推导先不看这些具体细节,即从(01)式开始推导。总的来说接下来的目的就是最小化使得(01)式。

二、期望梯度

熟悉前面梯度下降系列博客的朋友,应该明确知道,最小化一个(01)式这样的目标函数,其等价于最优小化(趋近于0)其一阶梯度,需要注意的是,因为优化的参数为 w w w,所以该梯度也是相对于 w w w。推导过程如下: ∇ w J ( w ) = ∇ w 1 2 E [ ( v π ( S ) − v ^ ( S , w ) ) 2 ] = 1 2 E [ ∇ w ( v π ( S ) − v ^ ( S , w ) ) 2 ] = 1 2 E [ 2 ∗ ( v π ( S ) − v ^ ( S , w ) ) ( − ∇ w v ^ ( S , w ) ) ] = − E [ ( v π ( S ) − v ^ ( S , w ) ) ∇ w v ^ ( S , w ) ] (04) \color{green} \tag{04} \begin{aligned} \nabla_{w} J(w) & =\nabla_{w} \frac{1}{2}\mathbb{E}\left[\left(v_{\pi}(S)-\hat{v}(S, w)\right)^{2}\right] \\ & =\frac{1}{2}\mathbb{E}\left[\nabla_{w}\left(v_{\pi}(S)-\hat{v}(S, w)\right)^{2}\right] \\ & = \frac{1}{2}\mathbb{E}\left[2*\left(v_{\pi}(S)-\hat{v}(S, w)\right)\left(-\nabla_{w} \hat{v}(S, w)\right)\right] \\ & =- \mathbb{E}\left[\left(v_{\pi}(S)-\hat{v}(S, w)\right) \nabla_{w} \hat{v}(S, w)\right] \end{aligned} wJ(w)=w21E[(vπ(S)v^(S,w))2]=21E[w(vπ(S)v^(S,w))2]=21E[2(vπ(S)v^(S,w))(wv^(S,w))]=E[(vπ(S)v^(S,w))wv^(S,w)](04)没有啥特别的,把期望看成一个累加形式,在根据梯度的加法运算,所以梯度符号 ∇ w \nabla_{w} w 可以提到期望 E \mathbb{E} E 的内部。总来的说,把期望简单看成累加形式,符号与 2 2 2 同样可以提到期望 E \mathbb{E} E 的外边来。到这里为止,一阶梯度初步已经求解,接下来的目标就是如何最小化该梯度。

最小化上面的这种带随机变量期望的形式,根据梯度下降算法,或者说罗宾逊-蒙罗算法(Robbins-Monro algorithm):【强化学习理论基础-通用】(17)从零开始白话给你讲[数学原理]:随机近似(Stochastic Approximation),罗宾逊-蒙罗算法(Robbins-Monro algorithm),构建迭代优化等式如下:
w t + 1 = w t + α t ( v π ( s t ) − v ^ ( s t , w t ) ) ∇ w v ^ ( s t , w t ) (05) \color{green} \tag{05} w_{t+1}=w_{t}+\alpha_{t}\left(v_{\pi}\left(s_{t}\right)-\hat{v}\left(s_{t}, w_{t}\right)\right) \nabla_{w} \hat{v}\left(s_{t}, w_{t}\right) wt+1=wt+αt(vπ(st)v^(st,wt))wv^(st,wt)(05)其中 s t s_t st 来自于 S S S 的采样, α t \alpha_{t} αt 就是学习率,但是现在还有一个问题,那就是上式中 v π ( s ) v_{\pi}(s) vπ(s),其表示真值,或者说期望所求的结果, 即上式再实际过程中无法完成迭代,还需继续推导。

三、真值替换

1.蒙特卡洛(MC)

为使得(05)式再实际应用过程不受限于 v π ( s ) v_{\pi}(s) vπ(s),可以有多种方式来带着他。再说如何代替他之前,先来说一下 v π ( s ) v_{\pi}(s) vπ(s) 是什么,理想情况下应当如下所示:
v π ( s ) = E [ G t ∣ s ] (06) \color{green} \tag{06} v_{\pi}(s)=\mathbb{E}[G_t|s] vπ(s)=E[Gts](06)这就是状态价值的标准定义,但是显然,该期望同样是没有办法直接求得,但是可以退而求其次,使用一条轨迹的随机采样结果来代替,即:
v π ( s ) = g t = r t + 1 + γ r t + 2 + γ 2 r t + 3 + ⋯ (07) \color{green} \tag{07} v_{\pi}(s)=g_t=r_{t+1}+\gamma r_{t+2}+\gamma^2 r_{t+3}+\cdots vπ(s)=gt=rt+1+γrt+2+γ2rt+3+(07) 其实这就蒙特卡洛(MC) 算法。 有的朋友可能会有疑问,这样使用随机采样代替期望行吗?当然是可以的,只要采集轨迹经验数据的条数够多即可,其实在前面的博客 【强化学习理论基础-通用】(26)从零开始白话给你讲[数学原理]:时序差分(Temporal-Difference) n-step Sarsa,极端体现(MC-蒙特卡洛) [六、MC-蒙特卡洛联系] 部分有详细说这个问题,有兴趣的朋友可以再认真回顾一下。把上式带入到(05)式可得: w t + 1 = w t + α t ( g t − v ^ ( s t , w t ) ) ∇ w v ^ ( s t , w t ) (08) \color{red} \tag{08} w_{t+1}=w_{t}+\alpha_{t}\left(g_{t}-\hat{v}\left(s_{t}, w_{t}\right)\right) \nabla_{w} \hat{v}\left(s_{t}, w_{t}\right) wt+1=wt+αt(gtv^(st,wt))wv^(st,wt)(08)

2.时序差分(TD)

虽然通过上述方式,只要经验轨迹条数足够则可以代替 v π ( s ) v_{\pi}(s) vπ(s)。但是这个要求还是有点强,且在有些情况下是不适用的。本质上来说就是蒙特卡洛(MC)算法的缺点,比如:

目标: 如果生命周期 episode_length 无限长,但是每次收集到的轨迹(Tracking,Roollout)经验数据是有限的,这个时候应该如何评估每个状态的价值,或者说策略价值。

这个时候容易想到的就是时序差分(Temporal-Difference) 一系列算法,其很好解决了上述问题。因为目前主要以状态价值为主进行讲解,所以先忽略基于动作价值Sarsa 系列算法。总的来说差不多这么个意思:想求得理想状态下 v π ( s ) v_{\pi}(s) vπ(s),但是目前的数据是有限的,采样到的数据只有 s t s_{t} st 以及 s t + 1 s_{t+1} st+1。然后假设现有值函数近似功能的 v ^ ( s t , w t ) \hat{v}\left(s_{t}, w_{t}\right) v^(st,wt),其 w w w 已知,也就是只要给予 v ^ \hat{v} v^ 任意状态 s s s 其都能估算出对应的状态价值(虽然不一定精确),那么可得:
v ^ ( s t ) = v ^ ( s t , w t )                 v ^ ( s t + 1 ) = v ^ ( s t + 1 , w t ) (09) \color{green} \tag{09}\hat{v}(s_t)=\hat{v}\left(s_{t}, w_{t}\right)~~~~~~~~~~~~~~~\hat{v}(s_{t+1})=\hat{v}\left(s_{t+1}, w_{t}\right) v^(st)=v^(st,wt)               v^(st+1)=v^(st+1,wt)(09)具体细节可以参考前面的博客:添加链接描述【强化学习理论基础-通用】(22)从零开始白话给你讲[数学原理]:时序差分(Temporal-Difference) - state values(基础版本) 之 公式推导,那么可以使用: r k + 1 + γ v k ( s t + 1 ) (10) \color{green} \tag{10}r_{k+1}+\gamma v_{k}\left(s_{t+1}\right) rk+1+γvk(st+1)(10)代替 v π ( s ) v_{\pi}(s) vπ(s),把(9)(10)式带入到(05)是可得:
w t + 1 = w t + α t [ r t + 1 + γ v ^ ( s t + 1 , w t ) − v ^ ( s t , w t ) ] ∇ w v ^ ( s t , w t ) (11) \color{red} \tag{11} w_{t+1}=w_{t}+\alpha_{t}\left[r_{t+1}+\gamma \hat{v}\left(s_{t+1}, w_{t}\right)-\hat{v}\left(s_{t}, w_{t}\right)\right] \nabla_{w} \hat{v}\left(s_{t}, w_{t}\right) wt+1=wt+αt[rt+1+γv^(st+1,wt)v^(st,wt)]wv^(st,wt)(11)

3.思路总结

上述两个方式都是为了最小化梯度 ∇ w J ( w ) = − E [ ( v π ( S ) − v ^ ( S , w ) ) ∇ w v ^ ( S , w ) ] \nabla_{w} J(w) = - \mathbb{E}\left[\left(v_{\pi}(S)-\hat{v}(S, w)\right) \nabla_{w} \hat{v}(S, w)\right] wJ(w)=E[(vπ(S)v^(S,w))wv^(S,w)],其等价于求解 v π ( S ) v_{\pi}(S) vπ(S),只不过因为期望的原因,通过随机采样的方式使其最小化。上(08)(11)可与博客 【强化学习理论基础-通用】(22)从零开始白话给你讲[数学原理]:时序差分(Temporal-Difference) - state values(基础版本) 之 公式推导 中(41)式进行对比,如下:
v ^ k + 1 ( s t ) = v ^ k ( s t ) − α t ( s t ) [ v ^ k ( s t ) − [ r t + 1 + γ v ^ k ( s t + 1 ) ] ] (12) \color{blue} \tag{12} \hat v_{k+1}\left(s_{t}\right) =\hat v_{k}\left(s_{t}\right) \color{blue} - \alpha_{t}\left(s_{t}\right)\left[\hat v_{k}\left(s_{t}\right){\color{red} -} \left[r_{t+1}+\gamma \hat v_{k}\left(s_{t+1}\right)\right]\right] v^k+1(st)=v^k(st)αt(st)[v^k(st)[rt+1+γv^k(st+1)]](12)为方便对比,把原本 v v v 替换成 v ^ \hat v v^,表预测或估计,另外上式中的符号可以提到外边,那么与(11)对比,两等式右边可以说只相差一个: ∇ w v ^ ( s t , w t ) (13) \color{purple} \tag{13} \nabla_{w} \hat{v}\left(s_{t}, w_{t}\right) wv^(st,wt)(13)这个也比较好理解,要从优化的目标参数来考虑。(11)式优化的是值函数的参数 w w w,而(12)类似于只接优化值函数的结果,如果是神经网络就等价于优化神经网络的输出结果。也就是说,他们的目标函数相同,但是前者是对 w w w 求梯度,而后者是对 v ^ \hat v v^ 求梯度。在根据 w w w v ^ \hat v v^ 的关系表示为 ∇ w v ^ ( s t , w t ) \nabla_{w} \hat{v}\left(s_{t}, w_{t}\right) wv^(st,wt),结合梯度链式法则,易知(11)式比(12)式会多一个 ∇ w v ^ ( s t , w t ) \nabla_{w} \hat{v}\left(s_{t}, w_{t}\right) wv^(st,wt)

直白的说,就是目标函数为 1 2 E [ ( v π ( S ) − v ^ ( S , w ) ) 2 ] \frac{1}{2}\mathbb{E}\left[\left(v_{\pi}(S)-\hat{v}(S, w)\right)^{2}\right] 21E[(vπ(S)v^(S,w))2],若是想优化 v ^ ( S , w ) \hat{v}(S, w) v^(S,w) 这个整体就对这个整体求导,若是想对 v ^ ( S , w ) \hat{v}(S, w) v^(S,w) w w w 进行优化,则通过链式法则对 w w w 求导,求导节后就是后者多乘一个 ∇ w v ^ ( s t , w t ) \color{purple} \nabla_{w} \hat{v}\left(s_{t}, w_{t}\right) wv^(st,wt)。编程对应的伪代码如下,较为简单,这里就不做详细介绍了:
在这里插入图片描述

图一

注意上图中的字样 In the general case \color{purple} \text{In the general case} In the general case,也就是说普遍情况下都是这样更新参数的,但是在一些特殊情况可以选择其他的形式。这也是接下来要谈论的。

四、额外拓展

通过上面的介绍,基本上来说关于 状态 \color{purple} \text{状态} 状态 价值估计相应的值函数近似优化过程可以说是完成了。按计划应该讲解 行为 \color{purple} \text{行为} 行为 价值估计相应的值函数近似优化。不过在这之前,还有其他的一些细节需要讨论,顺便加深对知识点的理解。

1.was widely used before

深度学习没有流行之前,被广泛使用的一种方式是,把 v ^ ( s , w ) \hat v(s,w) v^(s,w) 构建成一个线性形式,需要注意的是,这里所谓的线性是针对于需要优化的参数 w w w 而言,该算法称呼为 linear function approximation \color{purple} \text{linear function approximation} linear function approximation (线性函数近似) 是 linear function approximation(值函数近似)的一种特殊情况。

依据前面博客 【强化学习理论基础-通用】(30)从零开始白话给你讲[数学原理]:值函数近似,离散空间到连续空间的转换,曲线拟合 构建值函数的方式,可得:
v ^ ( s , w ) = ϕ T ( s ) w \hat{v}(s, w)=\phi^{T}(s) w v^(s,w)=ϕT(s)w熟悉梯度或偏导的朋友应该知道,上式若是对 s s s 求导,则把 w w w 看做常数,若是对 w w w 求导数,则需要把 s s s 看做参数,因为迭代优化过程中只对参数 w w w 进行调整,所以只需要对 w w w 求导即可。

前面的博客中,把 ϕ T ( s ) \phi^{T}(s) ϕT(s) 称呼为特征向量( feature vector \color{purple} \text{feature vector} feature vector), w w w 称呼为参数向量( parameter vector \color{purple} \text{parameter vector} parameter vector)。若是 w w w 为一个线性(最高幂次项为 1 1 1)向量,那么上式的对 w w w 求梯度就等价 ϕ T ( s ) \phi^{T}(s) ϕT(s)。那么剩下的问题就是 ϕ T ( s ) \phi^{T}(s) ϕT(s) 应该如何去选取,常见的形式为多项式。且前面值函数近似,曲线拟合的博客中也给出了例子。

2.widely used nowadays

现在被广泛使用的方式,就是通过深度学习中的神经网络去拟合函数 v ( s , w ) {v}(s, w) v(s,w),该神经网络j假设为 f ^ \hat f f^,其参数为 w w w,那么该网络可以记为 f ^ ( w ) \hat f(w) f^(w),不过其与 v ^ \hat{v} v^ 一样可以输入一个状态 s s s,获对该状态估算的状态价值,故:
v ^ ( s , w ) = f ^ ( s , w ) \hat{v}(s, w)=\hat f(s, w) v^(s,w)=f^(s,w)其实都是一回事,无论非线性的 v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 或者非线性神经网络 f ^ ( s , w ) \hat f(s, w) f^(s,w) 都可以统一使用 v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 表示,广义上都是对状态价值 v ( s , w ) {v}(s, w) v(s,w) 的拟合。

五、线性更新

回到前面 [三、真值替换] 中 [3.思路总结] 部分给出的伪代码示例,有提到上述只是描述 In the general case \color{purple} \text{In the general case} In the general case 这一种情况,也就是说线性与非线性其都适用,即 was widely used before 与 widely used nowadays 都可以使用同样的迭代更新公式: w t + 1 = w t + α t [ r t + 1 + γ v ^ ( s t + 1 , w t ) − v ^ ( s t , w t ) ] ∇ w v ^ ( s t , w t ) (14) \color{green} \tag{14} w_{t+1}=w_{t}+\alpha_{t}\left[r_{t+1}+\gamma \hat{v}\left(s_{t+1}, w_{t}\right)-\hat{v}\left(s_{t}, w_{t}\right)\right] \nabla_{w} \hat{v}\left(s_{t}, w_{t}\right) wt+1=wt+αt[rt+1+γv^(st+1,wt)v^(st,wt)]wv^(st,wt)(14) 若为 linear function approximation(线性函数近似),即上式中:
v ^ ( s , w ) = ϕ T ( s ) w (15) \color{green} \tag{15} \hat{v}(s, w)=\phi^{T}(s) w v^(s,w)=ϕT(s)w(15)相对于 w w w 为线性(把 ϕ T ( s ) \phi^{T}(s) ϕT(s) 看做一个常数),那么可得:
∇ w v ^ ( s , w ) = ϕ ( s ) (16) \color{green} \tag{16} \nabla_{w} \hat{v}(s, w)=\phi(s) wv^(s,w)=ϕ(s)(16)把上(15)(16)式带入到(14)式可得: w t + 1 = w t + α t [ r t + 1 + γ ϕ T ( s t + 1 ) w t − ϕ T ( s t ) w t ] ϕ ( s t ) (17) \color{red} \tag{17} w_{t+1}=w_{t}+\alpha_{t}\left[r_{t+1}+\gamma \phi^{T}\left(s_{t+1}\right) w_{t}-\phi^{T}\left(s_{t}\right) w_{t}\right] \phi\left(s_{t}\right) wt+1=wt+αt[rt+1+γϕT(st+1)wtϕT(st)wt]ϕ(st)(17)故 图一 伪代码完整形式应当为:
在这里插入图片描述

图二

该算法称呼为 TD-linear,或者 linear function approximation, 属于差分算法,只不过是线性的。当然这里所谓的线性说是相对于参数向量 w w w 而样,其特征向量 ϕ T ( s ) \phi^{T}(s) ϕT(s) 依旧可以是非线性的。该算法相对于神经网络最大的劣势,就是需要选取合适的特征向量( feature vector \color{purple} \text{feature vector} feature vector),而神经网络则没有这个需求。

六、总结:

总的来说,linear function approximation 虽然现在没有神经网络那样流行,但是曾经也是风靡一时,被普遍使用的算法,优劣势如下所示:

劣势: \color{red}劣势: 劣势: 特征向量( feature vector \color{purple} \text{feature vector} feature vector)选取会直接影响到 linear function approximation 算法的结果。导致需要对问题有很好的理解,才有可能选取到合适的特征向量,注意这里说的是有可能,也就是说有时会即使对问题有很好的理解,但是依旧无法选取或者设计出较好较鲁棒的特征向量,这也是其被神经网络取代的原因。

优点: \color{red}优点: 优点: linear function approximation 算法本身也有一些优点,首先来说其理论性质很好被分析,而不像神经网络类似一个黑盒,很难对其最理论分析。在过去无论工程界还是学术界,对于 linear function approximation 的研究非常多,也十分透彻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南才尽,年少无知!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值