【强化学习理论基础-通用】(30)从零开始白话给你讲[数学原理]:值函数近似,离散空间到连续空间的转换,曲线拟合

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

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

回顾: 到目前为止,对于时序差分(Temporal-Difference) 已经有了较深的理解,但是前面的一系列算法如 TD-SV、Sarsa、Expected Sarsa、 n-step Sarsa 以及 Q-learning 都是基于离散系统进行推导的,该篇博客开始将开始新的旅程,切入到连续系统的分析。

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

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

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

一、前言

通过前面一系列博客,已经对 TD-SV、Sarsa、Expected Sarsa、 n-step Sarsa 以及 Q-learning 进行了比较详细的分析与推导,他们除了都是策略价值评估( p o l i c y \color{purple}policy policy e v a l i a t i o n \color{purple}evaliation evaliation)之外,还有另外一个共同点,那就是整个推导与应用都是建立在离散系统基础上。这里所谓的离散,主要指的是状态 s s s,与动作 a a a,比如前面的迷宫游戏,规则定义如下:

动作: 共五个动作,上(a1)、下(a2)、左(a3)、右(a4)、保持原地不动(a5)。
奖励: 进入黄色(禁止forbidden区域)=-10、进入白色可通行(passable)区域=0、到达终点(target)蓝色区域=1。
特殊: 若触碰边界(boundary),奖励为=-1,如在最上边依旧往上走,不过机器人状态(位置保持不变)

首先来说只有 5 5 5 个动作可选,动作并不是连续的,比如说动作 a 1 a_1 a1 a 2 a_2 a2 之间并没有 a 1.1 a_{1.1} a1.1, a 1.119 a_{1.119} a1.119 这样的过度动作。状态也是类似,比如说共 5 x 5 = 25 5\text{x}5=25 5x5=25 个位置状态,可以处于 S = { s 1 ,   s 2 ,   ⋯   ,   s 25 } S=\{s_1,~s_2,~\cdots,~s_{25}\} S={s1, s2, , s25} 中任意一个状态,但是不能处于任意两者的中间状态,比如说 s 5.5 s_{5.5} s5.5。总的来说,就是观测(状态)空间 与 动作空间都是离散的,这种情况其实可以使用表格方式来表示一个价值评估策略 q π q_{\pi} qπ:

在这里插入图片描述
列表示状态,行表示动作,任意 状态-动作 对都存在与之对应的价值 q π ( s i , a j ) q_{\pi}(s_i,a_j) qπ(si,aj) i , j i,j i,j 分别为具体的行列。容易想到的是,为了能够获取每个状态下每个动作对应的价值 q π ( s i , a j ) q_{\pi}(s_i,a_j) qπ(si,aj),在编程的时候需要构建一个与上类似的表格存储每个 状态-动作 对的价值。前面讲解分析的价值评估算法,每次迭代优化时,都是对上表中一个格子对应的 q π ( s i , a j ) q_{\pi}(s_i,a_j) qπ(si,aj) 进行优化。

对于这种离散空间首先面临的一个问题是,离散维度或离散数量较多时,需要大量数据存储空间。这里的维度指类似于 s , a s,a s,a,如上表格为是一个二维表格,则说明数据空间的维度是 2 2 2 维的。离散数量指单个维度数据下,有多少数量量,比如上表格一行共 5 5 5 个动作,则表示动作空间中的动作数量为 5 5 5

问题1: 前面的迷宫例子中,首先只有状态与动作这两个维度,另外每个维度下数据量也不大。但是在某些情况或者工况下,维度与各个维度的数据量可能都非常多,要知道 2 维以平方增加数据量,3 维则以立方增加数量,依次类推。总而言之,在维度或维度数据数量较大时,硬件可能无法进行存储

问题2: 以这种表格的方式进行存储,通常来说,只适用于离散空间,而不适用于连续空间。就拿四足机器狗来说,假设其状态包含3维位置,3为姿态,这两个状态量都是连续的,另外真实世界时间线也是连续的, 没有办法把每时每刻的数据都存储起来

二、直线拟合

上述两个问题其实可以转换为一个问题:如何使用较小的存储空间,存储大量或者无限的数据。值得确认的一点是,有得必有失去,竟然想用较小的存储空间,存储大量或者无限的数据,那么总得舍弃点什么,毕竟鱼与熊掌不可兼得,这里舍弃的就是精度。具体是怎么回事,下面是一个曲线拟合的例子。

为简单理解核心概念,这里使用状态价值评估,隐藏动作这个维度,即一维的表格即可存储所有状态价值。状态与状态价值的关系可以使用散点图表示出来:
在这里插入图片描述

图一(离散状态)

上图横轴表示状态,纵轴表示转态对应的价值,描述这样一个散点图,有多少个状态则有多少个数据。这里假设状态空间数量量为 ∣ S ∣ |S| S,则需要存储 ∣ S ∣ |S| S 个数据。为了减少数据存储量,可以使用一条直线去代替上面的离散点,如下所示: 在这里插入图片描述
图二(直线拟合)

对于上面的直线 k s + b ks+b ks+b 暂时先忽略这条直线(红色)是怎么来的,后面会有相关内容对其进行讲解。不用多说,直线 k s + b ks+b ks+b 中的 k k k 表示斜率, s s s 为自变量状态, b b b 表示 s = 0 s=0 s=0 状态价值。那么显然,描述这样的一条直线,只需要存储 k k k b b b 两个值即可。但是在强化学习中,描述这样的直线以及曲线会有一个相对统一的形式,就拿直线来说: v ^ ( s , w ) = a s + b = [ s , 1 ] ⏟ ϕ T ( s ) [ a b ] ⏟ w = ϕ T ( s ) w (01) \color{blue} \tag{01} \hat{v}(s, w)=a s+b=\underbrace{[s, 1]}_{\phi^{T}(s)} \underbrace{\left[\begin{array}{l} a \\ b \end{array}\right]}_{w}=\phi^{T}(s) w v^(s,w)=as+b=ϕT(s) [s,1]w [ab]=ϕT(s)w(01)上式主要通过向量的方式来描述直线,首先使用 v ^ \hat{v} v^ 表示对价值的估计,其与真值 v v v 是不一样的。其把输入数据 s s s 与 参数 a , b a,b a,b 分开来看待,故转换成了两个限量: ϕ T ( s ) = [ s ,   1 ]              w T = [ a ,   b ] (02) \color{green} \tag{02} \phi^{T}(s)=[s,~1]~~~~~~~~~~~~w^T=[a,~b] ϕT(s)=[s, 1]            wT=[a, b](02) 实际编程或者应用过程中,只需要存储数据 w w w 即可,称呼其为参数向量( parameter vector \color{purple} \text{parameter vector} parameter vector),有了 parameter vector 之后,任意转态与之集合都能够计算出其对应的状态价值 v ^ \hat{v} v^,对于状态来说其也会表示成向量的形式,称呼为特征向量( feature vector \color{purple} \text{feature vector} feature vector),符号为 ϕ \phi ϕ,如 ϕ ( s ) \phi(s) ϕ(s) 表示关于 s s s 的 feature vector。该示例比较简单, v ^ \hat{v} v^ w w w 是一个线性关系。实用这种拟合的方式,主要有如下优点:

优点 1 : \color{blue} 优点1: 优点1 使用较小的存储空间,存储大量或者无限的信息。

优点 2 : \color{blue} 优点2: 优点2 且适用于连续空间,特别是观测与连续时间序列相关时。

缺点: \color{red} 缺点: 缺点: 显然,通过上诉方式,使用一条直线代替散点图大大降低了需要存储的数据量,但是这样随着而来的问题就是精度不够。就拿上图来说,已经是比较理想的示例,离散点基本在直线的周围波动,但是实际情况多数为曲线,若在多维情况下则为曲面。哪怕上图这种理想情况都存在误差,就拿 s 1 s_1 s1 状态来说,其价值 k s 1 + b ks_1+b ks1+b 并不完全等于 v ( s 1 ) v(s_1) v(s1)

三、曲线拟合

有的朋友可能想到,既然直线拟合效果不好,那么可以考虑曲线拟合,参数会多一些,但是相对于大量的状态价值存储来说应该还是要好上很多的。下面再来看看多项式曲线拟合的例子,比如说构建下面这样一个二阶曲线:
v ^ ( s , w ) = a s 2 + b s + c = [ s 2 , s , 1 ] ⏟ ϕ T ( s ) [ a b c ] ⏟ w = ϕ T ( s ) w (03) \color{blue} \tag{03} \hat{v}(s, w)=a s^{2}+b s+c=\underbrace{\left[s^{2}, s, 1\right]}_{\phi^{T}(s)} \underbrace{\left[\begin{array}{l} a \\ b \\ c \end{array}\right]}_{w}=\phi^{T}(s) w v^(s,w)=as2+bs+c=ϕT(s) [s2,s,1]w abc =ϕT(s)w(03)其实就是构建一个 a x 2 + b x + c ax^2+bx+c ax2+bx+c 这样一个二次曲线,自变量 x x x 替换成状态 s s s 即可,上式构建的参数向量( parameter vector \color{purple} \text{parameter vector} parameter vector) 与 特征向量( feature vector \color{purple} \text{feature vector} feature vector) 如下所示:
ϕ T ( s ) = [ s 2 ,   s ,   1 ]              w T = [   a ,   b ,   c ] (04) \color{green} \tag{04} \phi^{T}(s)=[s^2,~s,~1]~~~~~~~~~~~~w^T=[~a,~b,~c] ϕT(s)=[s2, s, 1]            wT=[ a, b, c](04) 此时可以提看到两个向量的维数都增加了。 w w w 的增加要意味着需要存储更多的值,相应其拟合的精度会得到提高。主函数 v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 相对 w w w 来说依旧为一线性函数吗,现对于 s s s 来说,其是一个非线性函数,也就是说非线性都被归纳到 feature vector 之中。若是使用神经网络,主函数 v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 相对 w w w 来说则是一个非线性函数。

当然,可以继续增加 w w w 的维度,使得 v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 为更加高阶的多项式。总的来说这种拟合方式称呼为 值函数近似 \color{purple} \text{值函数近似} 值函数近似 (value function  \color{purple} \text{(value function } (value function  approximate) \color{purple} \text{approximate)} approximate) ,有一个函数的值 v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 去近似 v ( s ) {v}(s) v(s),目的为:
v ^ ( s , w ) ≈ v π ( s ) ,         w ∈ R m (05) \color{green} \tag{05} \hat{v}(s, w) \approx v_{\pi}(s),~~~~~~~w \in \mathbb{R}^{m} v^(s,w)vπ(s),       wRm(05)其中 m m m 表示参数 w w w 的维度,该值越大,通常来说拟合效果越好,不过需要存储的参数也越多,该值与实际情况以及算法的设计相关,并不可一概而论。但是一般来说 m < ∣ S ∣ m < |S| m<S,都则就失去了值函数近似的意义,因为并不能节省存储(内存)空间。

四、泛化能力

除 [使用较小的存储空间,存储大量或者无限的信息,以及适用于连续空间,特别是观测与连续时间序列相关时] 这两个有点,还有一个比较特别的实用的有点是,值函数近似具备一定泛化能力,比如说存在如下近似曲线 v ^ ( s , w ) \hat{v}(s, w) v^(s,w)
在这里插入图片描述

图三(曲线拟合)

红色曲线就是 v ^ ( s , w ) \hat{v}(s, w) v^(s,w),可以看出该拟合效果还是有点差强人意,不过这是拟合迭代中间过程,而非最终拟合效果。其中紫色的散点表示最优值,也就是说曲线与散点之间的差值越小越好。假设此时收集到的轨迹数据中对 s 3 s_3 s3 状态进行了访问,那么曲线拟合过程中会调整 s 3 s_3 s3 状态对应的价值,大致如下所示:

在这里插入图片描述

图四(泛化能力)

其中蓝色曲线表示相关状态调整后的结果, v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 对于 s 3 s_3 s3 状态的拟合效果更加好好了,这是意料之内的情况。但是认真观察上图,状态 s 2 , s 3 , s 4 , s 5 s_2,s_3,s_4,s_5 s2,s3,s4,s5 相应近似价值 v ^ ( s , w ) \hat{v}(s, w) v^(s,w) 都得到了调整。

这就是 值函数近似 \color{purple} \text{值函数近似} 值函数近似 (value function  \color{purple} \text{(value function } (value function  approximate) \color{purple} \text{approximate)} approximate) 泛化能力的体现,即时没有被范围到的状态也能被优化的到,值得一提的是,这种泛化能提并非百分百都是朝着正确的方向。比如减少 s 3 s_3 s3 状态价值近似误差,可能会导致 s 6 s_6 s6 状态价值近似误差增大,不过总的来说总体误差是减少的。且后续访问到, s 6 s_6 s6 状态时,必然使其朝正确方向改进。

有的朋友可能还担心,若是一个状态量从来没有被访问过,然后被附近被访问过的状态量带偏了怎么办?首先来说,通常情况下相近状态的状态价值不会相差很离谱,即时有也属于个别情况。另外就是,尽然重来没有访问过,实际应用过程中,是无法判断其是否被带偏出现负优化。

总的来说,这种泛化能力就是在对被访问的状态拟度进行优化时,会传播到其附近的状态,也得到一定的优化,不过距离该状态越远被影响概率越低,甚至没有影响。且能够对从来没有访问过的状态价值进行一定程度上的优化与改善。

五、总结

通过上面的分析,了解到 值函数近似 \color{purple} \text{值函数近似} 值函数近似 (value function  \color{purple} \text{(value function } (value function  approximate) \color{purple} \text{approximate)} approximate)代替表格方式进行存储的优势,虽然在一定程度上会降低精确度,但依旧利大于弊,主要有如下两个有点:

优点1: 使用较小的存储空间,存储大量或者无限的信息,以及适用于连续空间,特别是观测与连续时间序列相关时。
优点2: 具备一定泛化能力,在对被访问的状态拟度进行优化时,会传播到其附近的状态,也得到一定的优化。
个人看来,值函数近似就是空间与精度之间进行衡量取舍的算法,参数存储越多,占用内存空间越大,精度越高;参数存储越少,占用内存空间越少,但是精度可能不达标。具体如何取舍还得根据实际情况而定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

江南才尽,年少无知!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值