【强化学习理论基础-通用】(28)从零开始白话给你讲[数学原理]:时序差分算法 --> Q-learning 伪代码(on-policy 与 off-policy),示例对比说明

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

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

回顾: 上一篇博客中,对 Q-learning 进行了介绍,其与 Sarsa 算法的差别很小,只是迭代过程中目标不一样。但是他们在数学层面解决的问题确实不一样的,Sarsa 本质上来说是解决基于动作价值的贝尔曼公式,Q-learning 算法解决的是基于动作价值的贝尔曼最优公式。Q-learning 中的 Q所指的就是动作价值,直白的说,其就是学习动作价值最高的那个策略。

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

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

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

一、前言

通过上一篇博客,可以知道 Q-learning 中的 Q所指的就是动作价值,直白的说,其就是学习动作价值最高的那个策略。且给出了其数学形式如下所示:
q t + 1 ( s t , a t ) = q t ( s t , a t ) − α t ( s t , a t ) [ q t ( s t , a t ) − ( r t + 1 + γ max ⁡ a ∈ A ( s t + 1 ) q t ( s t + 1 , a ) ) ] q t + 1 ( s , a ) = q t ( s , a ) ,  for all  ( s , a ) ≠ ( s t , a t ) (01) \color{red} \tag{01} \begin{aligned} q_{t+1}\left(s_{t}, a_{t}\right) & =q_{t}\left(s_{t}, a_{t}\right)-\alpha_{t}\left(s_{t}, a_{t}\right)\left[q_{t}\left(s_{t}, a_{t}\right)-{\color{blue} \left(r_{t+1}+\gamma \max _{a \in \mathcal{A}\left(s_{t+1}\right)} q_{t}\left(s_{t+1}, a\right)\right)}\right] \\ q_{t+1}(s, a) & =q_{t}(s, a), \quad \text { for all }(s, a) \neq\left(s_{t}, a_{t}\right) \end{aligned} qt+1(st,at)qt+1(s,a)=qt(st,at)αt(st,at)[qt(st,at)(rt+1+γaA(st+1)maxqt(st+1,a))]=qt(s,a), for all (s,a)=(st,at)(01)需要注意到上式中的 max ⁡ a ∈ A ( s t + 1 ) q t ( s t + 1 , a ) \max _{a \in \mathcal{A}\left(s_{t+1}\right)} q_{t}\left(s_{t+1}, a\right) maxaA(st+1)qt(st+1,a) 只需要知道最大动作的价值是多少,而不需要知道其对应的动作具体是哪一个。另外在上一篇博客博客中有提到,根据编程或者方式不一样,可以实现 on-policy 与 off-policy。关于两者的区别这里就不做详细介绍了,

1.on-policy 图示

上一篇博客中针对前者绘画了图示,这里先粘贴一下,后面也会使用到。
在这里插入图片描述

图一(on-policy)

2.off-policy 图示

该篇会对 off-policy 策略进行讲解,本人也画以一副图示,这里先粘贴出来,用来回顾使用:
在这里插入图片描述

图二(off-policy)

3.引导

虽然通过上一篇博客 on-policy 与 off-policy 有了一定鉴别能力,但是都是基于理论上的一些判断,并没有所谓的代码实践,为了深刻理解 on-policy 与 off-policy 的出别,下面使用 Q-learning 分别实现这两者策略,以形成鲜明对比。

二、on-policy

1.基本理念

首先使用 Q-learning 算法实现 on-policy 策略,在前面学习中已经知道单纯的 MC(蒙特卡洛)、Sarsa 以及 Q-learning 算法是无法实现 on-policy 或者 off-policy。需要与动作决策策略 π \pi π 进行搭配使用。因为实现 on-policy,所以值需要一个动作决策策略 π \pi π 即可,其会负责 behavior 与环境进行交互,同时还负责 target 进行部署决策,所以 策略 π \pi π 会对自身进行优化与改善。

策略 π \pi π 对自身进行进行优化的方案,到目前为止接触过两种,分别为 Epsilon Greedy 或者 Greedy。不过因为 on-policy 中,与环境交互生成经验数据的 behavior 以及优化改进的 target 决策策略都是同一个,也就是说接下来的示例代码中只能选择 Epsilon Greedy 与 Greedy 中的一个。Greedy 每次进行策略优化时,会把动作状态价值最高的动作执行概率设置为 1 1 1,故探索性较低,需要在特定的条件下使用该算法才能达到最好效果,比如说,能够从任意状态出发,且能够访问所有的 状态-动作 对,不过这种条件的约束太强,通常不易达到。所以下面的示例中,使用 Epsilon Greedy 算法与 Q-learning 进行搭配,首先来看伪代码逻辑,如下所示:

2.伪代码

在这里插入图片描述

3.代码分析(基本条件)

因为这里动作价值评估的算法使用 Q-learning,其底层原理与 Sarsa 一直,依旧为 罗宾逊-蒙罗算法(Robbins-Monro algorithm)。为保证该算法的基本运转,所以迭代过程 α = α t \alpha=\alpha_t α=αt 应当满足 ∑ k = 1 ∞ α t 2 < ∞  and  ∑ t = 1 ∞ α t = ∞ \sum_{k=1}^{\infty} \alpha_{t}^{2}<\infty \text { and } \sum_{t=1}^{\infty} \alpha_{t}=\infty k=1αt2< and t=1αt=。所以初始要求 α > 0 \alpha>0 α>0。该部分内容细节请参考博客随机梯度下降系列博客,如:【强化学习理论基础-通用】(17)从零开始白话给你讲[数学原理]:随机近似(Stochastic Approximation),罗宾逊-蒙罗算法(Robbins-Monro algorithm)

代码中可以看到,其还要求 ϵ ∈ ( 0 , 1 ) \epsilon \in (0,1) ϵ(0,1),这是 Epsilon Greedy 算法(策略)的参数,该值约接近于 1 1 1,则决策结果的探索性越强,该值约接近于 0 0 0,探索能力越弱,拟合能力越强,若是为 0 0 0,其等价于 Greedy 算法。为 0 0 0 时,但是若不从所有 状态-动作 对出发一次,则容易陷入局部最优解,不适用于从特定状态出发或开始的场景。该部分详细内容可参考博客:【强化学习理论基础-通用】(15)从零开始白话给你讲[数学原理]:蒙特卡洛(MC Epsilon Greedy),探索与收敛的平衡之道

罗宾逊-蒙罗算法(Robbins-Monro algorithm)是可以从任意初始值出发,然后通过迭代优化趋向于最优解。所以 Q-learning 算法,即(01)式中,需要为所有的 状态-行为对(s,a) 设定一个初始行为价值 q 0 ( s , a ) q_0(s,a) q0(s,a)。如果是神经网络,直白的说就是进行参数初始化即可。另外,策略 π \pi π 的优化过程是由动作价值 q 0 ( s , a ) q_0(s,a) q0(s,a) 驱动的。

目的: \color{red}目的: 目的: 学习一条最优路径,将智能体从初始状态引导到目标状态(比如说终点,获得大量或最高奖励)。

4.代码分析(环境交互与价值更新)

每次循环,或者说每个 episode(回合) 过程。其首先判断当前的状态 s t s_t st 是否为目标(终点)状态,如果到达终点说明该回合结束,开始下一个 episode 迭代,否着在该回合内一直进行循环迭代。

每个 t t t 时刻,都会做类似的循环操作,设目前处于 s t s_t st 状态,那么根据 π t \pi_t πt 输入状态 s t s_t st,可以获得一个采样决策 a t a_t at,然后执行动作 a t a_t at 与环境进行交互,切换到下一个状态 s t + 1 s_{t+1} st+1,此时也会获得到一个即时奖励 r t + 1 r_{t+1} rt+1。到这里为止就收集到了数据: { s t ,   a t ,   s t + 1 ,   r t + 1 } (02) \color{green} \tag{02}\{s_{t},~a_t,~s_{t+1},~r_{t+1}\} {st, at, st+1, rt+1}(02) 虽然收集到到了上诉 4 4 4 个数据,但是观察(01)式,貌似并不能直接对其进行优化,虽然可以求得 q t ( s t , a t ) q_t(s_t,a_t) qt(st,at),但是却无法求得: max ⁡ a ∈ A ( s t + 1 ) q t ( s t + 1 , a ) (03) \color{blue} \tag{03} \max _{a \in \mathcal{A}\left(s_{t+1}\right)} q_{t}\left(s_{t+1}, a\right) aA(st+1)maxqt(st+1,a)(03)上式表达的含义是,处于 s t + 1 s_{t+1} st+1 状态下,其需要再所有可能执行的动作 A \mathcal{A} A 中,找到动作价值最高动作 a m = a a_m=a am=a,参与迭代优化。找到这个动作价值最高的动作与 π \pi π 给出的概率分布 ( A t + 1 ∣ s t + 1 ) (A_{t+1}|s_{t+1}) (At+1st+1) 其是没有任何关系的,因为基于 s t + 1 s_{t+1} st+1 状态所有动作 a t a_t at 都需要参与动作价值评估,只有这样才能找到最大价值的动作。

也就是说,这里最大价值动作 a m = a t + 1 a_m = a_{t+1} am=at+1 并不依赖于动作决策策略 π \pi π。若是换成 Sarsa 算法则需要依赖策略 π \pi π 根据概率分布采样一个 a t + 1 a_{t+1} at+1 动作。这个地方,就是体现 Q-learning 算法解决贝尔曼最优问题,而 Sarsa 算法则是解决贝尔曼公式问题核心点。总之这里 Q-learning 会获得一个数据 a m = a t + 1 = a_m=a_{t+1}= am=at+1= 数据,且计算其对应的动作价值评估 q t ( s t + 1 , a m ) q_t(s_{t+1},a_m) qt(st+1,am),这样结合前面的四个数据 { s t ,   a t ,   s t + 1 ,   r t + 1 } \{s_{t},~a_t,~s_{t+1},~r_{t+1}\} {st, at, st+1, rt+1},就可完成 Q-learning 的一次迭代(对应于(01)式)。

5.代码分析(策略更新)

前面的价值更新部分,虽然决策策略 π \pi π其首先根据目前的状态 s t s_t st 生成动作 a t a_t at,且该动作与环境进行交互由状态 s t s_{t} st 切入到状态 s t + 1 s_{t+1} st+1,但是整个过程并没有没有策略 π \pi π 自身并没有更新。

价值更新部分,虽然已经求得 max ⁡ a q t ( s t , a ) \max _{a} q_{t}\left(s_{t}, a\right) maxaqt(st,a),即知道那个动作价值最高,不过可惜的的是此时的价值评估 Q-learning 策略 q t q_t qt 不是最新的 \color{orange} 不是最新的 不是最新的,迭代后最新的策略是 q t + 1 q_{t+1} qt+1,所以还需要重行进行一个 arg ⁡ max ⁡ \arg \max argmax 操作,注意不是 max ⁡ \max max 操作,也就是前者是求最优价值,而现在求最优价值对应的动作:
arg ⁡ max ⁡ a ∈ A q t + 1 ( s t , a ) (04) \color{blue} \tag{04} \arg \max _{a \in \mathcal{A}} q_{t+1}\left(s_{t}, a\right) argaAmaxqt+1(st,a)(04)具体操作就是把 s t + 1 s_{t+1} st+1 状态下的所有 状态-动作 对,都通过优化后的 q t + 1 q_{t+1} qt+1 进行动作价值评估,然后找到最优的动作 a = a m a=a_m a=am,然后执行如下操作进行策略更新: π t + 1 ( a ∣ s t ) = 1 − ϵ ∣ A ( s t ) ∣ ( ∣ A ( s t ) ∣ − 1 )  if  a = arg ⁡ max ⁡ a q t + 1 ( s t , a ) (05) \color{green} \tag{05} \pi_{t+1}\left(a \mid s_{t}\right)=1-\frac{\epsilon}{\left|\mathcal{A}\left(s_{t}\right)\right|}\left(\left|\mathcal{A}\left(s_{t}\right)\right|-1\right) \text { if } a=\arg \max _{a} q_{t+1}\left(s_{t}, a\right) πt+1(ast)=1A(st)ϵ(A(st)1) if a=argamaxqt+1(st,a)(05) π t + 1 ( a ∣ s t ) = ϵ ∣ A ( s t ) ∣  otherwise  \color{green}\pi_{t+1}\left(a \mid s_{t}\right)=\frac{\epsilon}{\left|\mathcal{A}\left(s_{t}\right)\right|} \text { otherwise } πt+1(ast)=A(st)ϵ otherwise 

6.总结

通过上述 [3.代码分析(基本条件)]、[4.代码分析(价值更新)]、[5.代码分析(策略更新)] 操作即完成了一次策略更新与价值更新过程。且在一个回合(生命周期-episode) 内,会重复执行 [4.代码分析(价值更新)]、[5.代码分析(策略更新)] 这两个操作,直到该回合结束,以继续下一个回合的迭代优化。

虽然会经历多个回合,且每个回合会迭代多次,但是每次迭代过程中,与环境交互过程即 [4.代码分析(价值更新)],该 behavior 策略为 π \pi π,其会生成动作 a t a_t at 与环境交互。另外,策略优化过程 [5.代码分析(策略更新)],更新的 target 策略也是 π \pi π。故 behavior 与 target 同为动作决策策略 π \pi π,所以上述组合算法为 on-policy。在一次迭代过程中,数据流向如下图所示:
在这里插入图片描述

图三(on-policy)

需要注意紫色字体箭头 A t + 1 A_{t+1} At+1,其并不依赖依赖于策略 π \pi π, 图一(on-policy) a t + 1 a_{t+1} at+1是不一样的,这正是体现其处理贝尔曼最优问题关键部分,即为 Q-learning 算法,若为 a t + 1 a_{t+1} at+1,且由策略 a t + 1 a_{t+1} at+1 传递给价值评估 q q q,则为 Sarsa 算法。另外需要提及一点每次策略与环境进行交互,获取数据 { s t , a t , r t + 1 , s t + 1 , a t + 1 } \{s_{t}, a_{t}, r_{t+1}, s_{t+1}, a_{t+1}\} {st,at,rt+1,st+1,at+1} 都是使用上一次迭代优化过后的策略 π \pi π

此外,并非每次与环境交互都一定要进行价值 q q q 更新与策略 π \pi π 更新,可以先使用 π \pi π 与环境进行交互,收集一个回合(生命周期)的轨迹数据 τ \tau τ,然后再逐个使用数据进行优化。

三、off-policy

1.基本理念

这里将使用 Q-learning 算法实现 off-policy 策略,通过上一篇博客知道,off-policy 中两个动作决策策略 behavior 与 target 是不一样的。所以设有现在有两个策略: b e h a v i o r 策略: π b t a r g e t 策略: π T (05) \color{blue} \tag{05} \begin{matrix} behavior策略:\pi_b\\ target策略:\pi_T \end{matrix} behavior策略:πbtarget策略:πT(05)其中 π b \pi_b πb 主要用于与环境进行交互,生成一条轨迹数据。所谓的每个 episode(回合) 过程,就是 π b \pi_b πb 与环境进行交互的过程,若交互过程发现到达了终点,则认为该回合结束,价值评估策略 q q q 与 动作决策策略 π T \pi_T πT 都会停止迭代优化。另外需要注意的是,策略 π b \pi_b πb 始终不会进行自身策略的改善。

下面的伪代码中,与环境交互的动作决策策略 behavior 使用算法 Epsilon Greedy,其探索性较强,能够保证收集经验数据的多样性,尽量访问较多的 状态-动作 对; 目标策略 π T \pi_T πT 使用算法 Greedy,其会把动作价值最高动作对应被执行概率置为 1 1 1,使得算法实际部署时能输出稳定且最优动作。

2.伪代码

在这里插入图片描述

3.代码分析(基本条件)

基本条件与前面 on-policy 差不多保持一致,迭代过程 α = α t \alpha=\alpha_t α=αt 应当满足 ∑ k = 1 ∞ α t 2 < ∞  and  ∑ t = 1 ∞ α t = ∞ \sum_{k=1}^{\infty} \alpha_{t}^{2}<\infty \text { and } \sum_{t=1}^{\infty} \alpha_{t}=\infty k=1αt2< and t=1αt=。所以初始要求 α t ( s t , a t ) > 0 \alpha_t(s_t,a_t)>0 αt(st,at)>0。环境交互策略 π b \pi_b πb 为 Epsilon Greedy,其参数需满足 ϵ ∈ ( 0 , 1 ) \epsilon \in (0,1) ϵ(0,1)

目的: \color{red}目的: 目的: 从基准策略 π b π_b πb 生成的经验样本中,学习一个针对所有状态的最优目标策略 π T \pi_T πT

4.代码分析(环境交互与价值更新)

与 on-policy 方案不同的是,该方案有两个动作决策策略,分别为 π b \pi_b πb π T \pi_T πT。与环境进行交互过程,只使用到策略 π b \pi_b πb,其为 Epsilon Greedy \color{red}\text{Epsilon Greedy} Epsilon Greedy,因为探索性强,可收集较广泛的 状态-动作 对。同理,每个 episode 表示一个回合或者说生命周期,期间会与环境进行多次交互,获得数据:
τ = { [ s 0 , a 0 ] , [ r 1 , s 1 , a 1 ] , [ r 2 , s 2 , a 2 ] , ⋯   } (06) \color{green} \tag{06} \tau=\{[s_0, a_0],[r_1, s_1,a_1],[r_2,s_2,a_2],\cdots\} τ={[s0,a0][r1,s1,a1][r2,s2,a2]}(06) 需要注意,其中的数据 s s s r r r 由环境给出,而动作 a a a 来自策略 π \pi π,且每个时刻 t t t 都会与环境进行。先交互生成数据之后,再进行价值更新,价值更新的公式前面(01)式: q t + 1 ( s t , a t ) = q t ( s t , a t ) − α t ( s t , a t ) [ q t ( s t , a t ) − ( r t + 1 + γ max ⁡ a ∈ A ( s t + 1 ) q t ( s t + 1 , a ) ) ] (07) \color{green} \tag{07} q_{t+1}\left(s_{t}, a_{t}\right) =q_{t}\left(s_{t}, a_{t}\right)-\alpha_{t}\left(s_{t}, a_{t}\right)\left[q_{t}\left(s_{t}, a_{t}\right)-{\color{blue} \left(r_{t+1}+\gamma \max _{a \in \mathcal{A}\left(s_{t+1}\right)} q_{t}\left(s_{t+1}, a\right)\right)}\right] qt+1(st,at)=qt(st,at)αt(st,at)[qt(st,at)(rt+1+γaA(st+1)maxqt(st+1,a))](07)该为 Q-learning 算法的核心公式,具体原理这里就不再重复,前面已经讨论得太多。这里再次提及的一点是, max ⁡ a ∈ A ( s t + 1 ) q t ( s t + 1 , a ) \max _{a \in \mathcal{A}\left(s_{t+1}\right)} q_{t}\left(s_{t+1}, a\right) maxaA(st+1)qt(st+1,a) 只需要知道最大动作的价值是多少,而不需要知道其对应的动作具体是哪一个。

5.代码分析(策略更新)

这里的车略更新只针对于动作决策策略 π T \pi_T πT,其为 Greedy \color{red}\text{Greedy} Greedy。上面价值更新部分,虽然已经求得 max ⁡ a q t ( s t , a ) \max _{a} q_{t}\left(s_{t}, a\right) maxaqt(st,a),即知道那个动作价值最高,不过可惜的的是此时的价值评估 Q-learning 策略 q t q_t qt 不是最新的 \color{orange} 不是最新的 不是最新的,迭代后最新的策略是 q t + 1 q_{t+1} qt+1,所以还需要重行进行一个 arg ⁡ max ⁡ \arg \max argmax 操作,注意不是 max ⁡ \max max 操作,也就是前者是求最优价值,而现在求最优价值对应的动作:
arg ⁡ max ⁡ a ∈ A q t + 1 ( s t , a ) (08) \color{blue} \tag{08} \arg \max _{a \in \mathcal{A}} q_{t+1}\left(s_{t}, a\right) argaAmaxqt+1(st,a)(08)具体操作就是把 s t + 1 s_{t+1} st+1 状态下的所有 状态-动作 对,都通过优化后的 q t + 1 q_{t+1} qt+1 进行动作价值评估,然后找到最优的动作 a = a m a=a_m a=am,然后执行如下操作进行策略更新: π T , t + 1 ( a ∣ s t ) = 1  if  a = arg ⁡ max ⁡ a q t + 1 ( s t , a ) π T , t + 1 ( a ∣ s t ) = 0  otherwise  (09) \color{green} \tag{09} \begin{array}{l} \pi_{T, t+1}\left(a \mid s_{t}\right)=1 \text { if } a=\arg \max _{a} q_{t+1}\left(s_{t}, a\right) \\ \pi_{T, t+1}\left(a \mid s_{t}\right)=0 \text { otherwise } \end{array} πT,t+1(ast)=1 if a=argmaxaqt+1(st,a)πT,t+1(ast)=0 otherwise (09)其更新的过程比较简单,就是把动作价值最高的动作 a m = arg ⁡ max ⁡ a q t + 1 ( s t , a ) a_m=\arg \max _{a} q_{t+1}\left(s_{t}, a\right) am=argmaxaqt+1(st,a) 执行的概率设置为 1 1 1,其余动作被指定的概率设置为 0 0 0

6.总结

通过上述 [3.代码分析(基本条件)]、[4.代码分析(价值更新)]、[5.代码分析(策略更新)] 操作即完成了一次策略更新与价值更新过程。且在一个回合(生命周期-episode) 内,会重复执行 [4.代码分析(价值更新)]、[5.代码分析(策略更新)] 这两个操作,直到该回合结束,以继续下一个回合的迭代优化。

虽然会经历多个回合,且每个回合会迭代多次,但是每次迭代过程中,与环境交互过程即 [4.代码分析(价值更新)],该 behavior 策略为 π b \pi_b πb(Epsilon Greedy),其会生成动作 a t a_t at 与环境交互。另外,策略优化过程 [5.代码分析(策略更新)],更新的 target 策略也是 π T \pi_T πT(Greedy)。故 behavior 与 target 是两个不同的动作决策策略,所以上述组合算法为 off-policy。在一次迭代过程中,数据流向如下图所示(与文首 图二 一致):
在这里插入图片描述

图四(off-policy)

需要注意紫色字体箭头 A t + 1 A_{t+1} At+1,其并不依赖依赖于策略 π b \pi_b πb 或者 π T \pi_T πT, 图一(on-policy) a t + 1 a_{t+1} at+1是不一样的,这正是体现其处理贝尔曼最优问题关键部分,即为 Q-learning 算法,若为 a t + 1 a_{t+1} at+1,且由策略 a t + 1 a_{t+1} at+1 传递给价值评估 q q q

另外需要提及的一点是,通常来说 π b \pi_b πb π T \pi_T πT 除了一个探索性较强,另外一个探索性较弱,但是比较稳定之外,其他地方的相似性是很高的,比如说在使用深度学习的强化学习中,通常 π b = deepcopy ( π T ) \pi_b=\text{deepcopy}(\pi_T) πb=deepcopy(πT),即 π b \pi_b πb 在每个回合结束(或者以一定时间间隔)拷贝自 π T \pi_T πT,然后再封装一层代码增加探索性。所以上面标识他们之间为孪生关系。

此外,并非每次与环境交互都一定要进行价值 q q q 更新与策略 π T \pi_T πT 更新,可以先使用 π b \pi_b πb 与环境进行交互,收集一个回合(生命周期)的轨迹数据 τ \tau τ,然后再逐个使用数据进行优化。

四、迷宫示例

为了验证 Q-learning 算法的效果,与前面博客 同样应用于迷宫游戏,这里把游戏的规则再重复一下:【强化学习理论基础-通用】(25)从零开始白话给你讲[数学原理]:时序差分(Temporal-Difference) Expected Sarsa 搭配 Epsilon Greedy 比较类似,游戏规则与参数如下:

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

初始: 初始状态,Q-learning 算法只能从某个固定的状态(位置)出发

注意: 为了简单示例,转移为下一个状态时,只有一种奖励,且状态状态下执行某个动作,也只能达到下一种状态,而非概率,有多个选项。

上面是迷宫游戏的规则,相信大家已经很熟悉了,这里把奖励单独记录一下 r f o r b i d e n r_{forbiden} rforbiden有改变:
r b o u n d a r y = − 1 ,    r f o r b i d e n = − 1 ,    r p a s s a b l e = 0 ,    r t a r g e t = 1 ,    γ = 0.9 (10) \color{green} \tag{10} r_{boundary}=-1,~~~{\color{red}r_{forbiden}=-1},~~~r_{passable}=0 ,~~~r_{target}=1,~~~\gamma=0.9 rboundary=1   rforbiden=1   rpassable=0   rtarget=1   γ=0.9(10) 另外还需要增加一个 Q-learning 算法迭代优化需要的学习率: α = 0.1 (11) \color{green} \tag{11} \alpha=0.1 α=0.1(11)

1.Ground Truth

优先给出最优策略动作决策图 与 状态价值数字图,如下所示(后续 Q-learning 与 Epsilon Greedy 组合,得到的最优决策策略价值图,与其进行比较),设该策略为 π G \pi_G πG,另外该策略初始状态,可能被随机到 5x5=25 个方格任意位置,总而言之,每个状态下的决策都是最优的:
在这里插入图片描述

图五(Ground Truth)

2.轨迹数据收集

为收集较广泛的 状态-动作 对的轨迹经验数据,构建一个动作概率均匀分布的策略 π b \pi_b πb,算法选择 Epsilon Greedy。初始该算法所有状态下每个动作执行的概率分布为都为 0.2 0.2 0.2(因为共五个动作),即参数 ϵ = 1 \color{red}\epsilon=1 ϵ=1, 先看如下左右两图:
在这里插入图片描述

图五(轨迹数据)

左图是策略 π b \pi_b πb 动作决策图,可以看到其每个方向箭头长度都差不多,即表示每个状态下执行每个动作的概率都是均匀分布的,使用动作决策策略执行 1 1 1 millinon step。这里从状态 s 1 , 1 s_{1,1} s1,1 出发,只收集一条轨迹数据 τ \tau τ,也就是一个回合的数据,不过注意其达到终点也不会结束,回继续就环境交互进行数据采样。从右图可以看出,轨迹数据的分布是比较均匀的,绿的折线图就表示其轨迹, s 3 , 1 s_{3,1} s3,1 的箭头可以表示最优结束状态。

3.价值与决策策略优化

收集到轨迹数据 τ \tau τ,其包含 1 1 1 millinon 状态-动作 对。此时就可以使用这些数据进行训练了,这里先定义 Q-learning 学习到的策略 π T \pi_T πT 与 最优策略 π G \pi_G πG 的误差值。其公式也比较简单,就是训练过程中每次迭代之后,两策略每个状态的状态价值先去差值,然后求模长即可。最终学习到的策略,以及训练过程的误差如下所示:
在这里插入图片描述

图五(Q-learning)

首先观察左图,把其与 图五(Ground Truth) 左图进行比较,可以看到 Q-learning 最终策略与 Ground Truth 策略的动作决策基本一致。不过注意蓝色方框虽状态 s 1 , 5 s_{1,5} s1,5 的决策不一样,不过并没有关系,因为两者的决策都是最优的。

右图是训练过程中,状态价值误差模长的变化曲线图,可以初始误差较大,但是迭代到最后,误差为 0 0 0,这是因为 Q-learning 算法动作决策方案为 Greedy,会把最优动作对应的状态执行概率置 1 1 1,否者最终优化策略误差未必为 0 0 0

五、探索强度影响

上面示例过程中,在 2.轨迹数据收集 收集轨迹数据 τ \tau τ 阶段,设置 Epsilon Greedy 算法参数 ϵ = 1 \color{red}\epsilon=1 ϵ=1,其探索性是比较强的。现在令 ϵ = 0.5 \color{red}\epsilon=0.5 ϵ=0.5,也就是降低收集轨迹数据 τ \tau τ 过程中的探索性。Q-learning 迭代优化过程如下图所示:
在这里插入图片描述首先看中间图示,其表示从位置出发 s 1 , 1 s_{1,1} s1,1 出发,采用策略 Epsilon Greedy 与环境进行交互收集经验轨迹数据 τ b \tau_b τb, 不过其参数 ϵ = 0.5 \epsilon=0.5 ϵ=0.5,探索性较低,经过 1 1 1 millinon 个 step 后也并未能访问所有 状态-动作 对,甚至连所有的状态都没有完全访问到。

左边图示表示其优化后的策略决策图,可以看到其在任何状态下,都是选择向右的动作。显然该策略较差,很多状态下的最优轨迹都无法到达终点。

右边图示表示其利用采样到的数据进行迭代学习过程中,当前学习到的策略价值与 [ 1.Ground Truth] 最优策略之间的误差变化。容易看出,即使迭代到最后,误差值也没有为零。其主要的原因就是很多状态下动作决策都不是最优的。

六、结论

该篇博客讲解的内容还是挺多的,不过可以说是把 Q-learning 算法进行了十分详细的讲解。另外,把该算法同时应用于 on-policy 与 off-policy,鲜明进行对比。总的来说,on-policy 与 off-policy 的主要区别在于 behavior 与 target 是否为同一个动作决策策略,前者负责数据收集,后者负责策略改善(更新)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

江南才尽,年少无知!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值