强化学习的数学原理 | 赵世钰 | 西湖大学 | 笔记 | Lecture 8 | Part 5 | 值函数近似(Sarsa 和 Q-learning)

目录

    • 前言
    • [1. Outline](#1. Outline)
    • [2. Sarsa with function approximation](#2. Sarsa with function approximation)
    • [3. Q-learning with function approximation](#3. Q-learning with function approximation)
    • 结语
    • 参考

前言

学习赵老师讲授的强化学习的数学原理视频,本篇文章记录第八讲 Part 5:值函数近似(Sarsa 和 Q-learning),记录个人学习笔记,和大家一起分享交流😄

videohttps://www.bilibili.com/video/BV1sd4y167NS

1. Outline

刚刚我们介绍了第二节,这一节内容说实话比较多,如果大家看幻灯片页数就会发现本讲内容已经过半,虽然我们只介绍了一节,这一节我们介绍了 value function approximation 的目标函数、算法、思想 等,并给出了较多例子,相信大家现在已经有比较好的理解了,下面我们就来介绍 3、4、5 节。

这三节讲算法,第二节主要讲思想,第二节做的是估计给定策略的 state value ,而 Sarsa 这一部分要估计 action valueQ-learningDeep Q-learning 则要估计 optimal action value

2. Sarsa with function approximation

下面看 Sarsa 和 value function approximation 结合 后怎么做,话不多说,直接上算法:

w t + 1 = w t + α t r t + 1 + γ q \^ ( s t + 1 , a t + 1 , w t ) − q \^ ( s t , a t , w t ) ∇ w q ^ ( s t , a t , w t ) . \textcolor{red}{w_{t+1} = w_t + \alpha_t \left r_{t+1} + \\gamma \\hat{q}(s_{t+1}, a_{t+1}, w_t) - \\hat{q}(s_t, a_t, w_t) \\right \nabla_w \hat{q}(s_t, a_t, w_t).} wt+1=wt+αtrt+1+γq\^(st+1,at+1,wt)−q\^(st,at,wt)∇wq^(st,at,wt).

这就是 Sarsa 和 value function approximation 结合的算法,与刚才的 TD 算法一样,只是把 v v v 换成了 q q q ,刚才是 v ^ ( s t ) \hat{v}(s_t) v^(st) 现在换成了 q ^ ( s t , a t , w t ) \hat{q}(s_t,a_t,w_t) q^(st,at,wt) ,至于这个算法为什么设计成这样、它在做什么,这里就不再介绍了,因为第二节已经非常详细地介绍过了。

下面给出它的 pseudocode,这里值得指出的是:刚才那个算法实际上仍是在做 policy evaluation ,也就是:给定一个策略 π \pi π ,能够估计出它的 action value,下面我们会把它与 policy improvement 结合,这样就能够去搜索最优的策略。


伪代码:带函数逼近的 Sarsa

目标 :搜索一种策略,使代理能够从初始状态-动作对 ( s 0 , a 0 ) (s_0, a_0) (s0,a0) 到达目标。

对于每一个回合(episode),执行

如果当前 s t s_t st 不是目标状态,执行

按照 π t ( s t ) \pi_t(s_t) πt(st) 采取动作 a t a_t at,生成 r t + 1 , s t + 1 r_{t+1}, s_{t+1} rt+1,st+1,然后按照 π t ( s t + 1 ) \pi_t(s_{t+1}) πt(st+1) 采取动作 a t + 1 a_{t+1} at+1。

值更新(参数更新):

w t + 1 = w t + α t r t + 1 + γ q \^ ( s t + 1 , a t + 1 , w t ) − q \^ ( s t , a t , w t ) ∇ w q ^ ( s t , a t , w t ) w_{t+1} = w_t + \alpha_t \left r_{t+1} + \\gamma \\hat{q}(s_{t+1}, a_{t+1}, w_t) - \\hat{q}(s_t, a_t, w_t) \\right \nabla_w \hat{q}(s_t, a_t, w_t) wt+1=wt+αtrt+1+γq\^(st+1,at+1,wt)−q\^(st,at,wt)∇wq^(st,at,wt)

策略更新:

π t + 1 ( a ∣ s t ) = 1 − ϵ ∣ A ( s ) ∣ ( ∣ A ( s ) ∣ − 1 ) if a = arg ⁡ max ⁡ a ∈ A ( s t ) q ^ ( s t , a , w t + 1 ) π t + 1 ( a ∣ s t ) = ϵ ∣ A ( s ) ∣ otherwise \begin{align*} \pi_{t+1}(a|s_t) &= 1 - \frac{\epsilon}{|\mathcal{A}(s)|}(|\mathcal{A}(s)| - 1) \quad \text{if} \quad a = \arg\max_{a \in \mathcal{A}(s_t)} \hat{q}(s_t, a, w_{t+1}) \\10pt \pi_{t+1}(a|s_t) &= \frac{\epsilon}{|\mathcal{A}(s)|} \quad \text{otherwise} \end{align*} πt+1(a∣st)πt+1(a∣st)=1−∣A(s)∣ϵ(∣A(s)∣−1)ifa=arga∈A(st)maxq^(st,a,wt+1)=∣A(s)∣ϵotherwise


先看 pseudocode,首先,对每一个 episode:如果当前状态 s t s_t st 不是 target state,则执行以下步骤,这个任务对应的是: 从一个状态出发,找到一条到达目标状态的好路径,所以第一步是要生成数据。

在 s t s_t st 处根据策略执行 action a t a_t at ,与环境交互得到 r t + 1 , s t + 1 r_{t+1},s_{t+1} rt+1,st+1 ,之后在 s t + 1 s_{t+1} st+1 处再根据该状态的策略采样得到 a t + 1 a_{t+1} at+1 ,然后根据这些数据做 value update,也就是我们刚才所给出的算法。

注意这里我们 并不是直接指定 q ^ ( s t , a t ) \hat{q}(s_t,a_t) q^(st,at) 的新值,而是更新它的参数 w w w---这是与 tabular Sarsa 的唯一区别 。有了新参数之后就可以做 policy update,这个和之前的 tabular 的 Sarsa 是一模一样的,也就是说:在 s t s_t st 选择 q value 最大的那个 action,并给它较大的概率,其它 action 给较小的概率(这里的策略是 ε \varepsilon ε-Greedy),值得注意的是,在 tabular 情况下,直接索引即可得到 q 值;现在需要把 s s s 和对应的 a a a 代入函数算出函数值再比较。

我们来看一个例子,这个例子是把 Sarsa 和 linear function approximation 结合 ,也就是 q ^ = ϕ T w \hat{q} = \phi^T w q^=ϕTw ,具体内容可以参考教材,仿真参数如下:

γ = 0.9 ,   ε = 0.1 ,   r boundary = r forbidden = − 10 ,   r target = 1 ,   α = 0.001. \gamma = 0.9, \, \varepsilon=0.1, \, r_{\text{boundary}}=r_{\text{forbidden}}=-10, \, r_{\text{target}}=1, \, \alpha=0.001. γ=0.9,ε=0.1,rboundary=rforbidden=−10,rtarget=1,α=0.001.

仿真的结果如图所示,正如我们刚才所说的,这里的任务是从一个状态出发到达目标状态,大家可以看到:最后如果沿着概率较大的方向,确实能到达目标状态。其它一些状态的策略不是很好也没关系,因为我们的目的不是找到所有状态(或 action)的最优策略。

左图可以看到收敛过程:最开始 reward 较负,之后逐渐增大;episode 长度一开始也较长,因为策略不好,所以可能要走很多弯路,最后逐渐缩短并收敛。

刚刚我们介绍了 Sarsa 与 value function approximation 结合,大家可能注意到,这部分篇幅很短,只有几页幻灯片,为什么呢?因为前面已经打下了非常好的基础,所以这里不需要介绍太多。

3. Q-learning with function approximation

下面介绍 Q-learning 和 function approximation 结合 ,同样非常快,最后我们会重点介绍 Deep Q-learning

w t + 1 = w t + α t r t + 1 + γ max ⁡ a ∈ A ( s t + 1 ) q \^ ( s t + 1 , a , w t ) − q \^ ( s t , a t , w t ) ∇ w q ^ ( s t , a t , w t ) , \textcolor{red}{w_{t+1} = w_t + \alpha_t \left r_{t+1} + \\gamma \\max_{a \\in \\mathcal{A}(s_{t+1})} \\hat{q}(s_{t+1}, a, w_t) - \\hat{q}(s_t, a_t, w_t) \\right \nabla_w \hat{q}(s_t, a_t, w_t),} wt+1=wt+αtrt+1+γa∈A(st+1)maxq\^(st+1,a,wt)−q\^(st,at,wt)∇wq^(st,at,wt),

同样直接上算法。上式就是 Q-learning 与 value function approximation 结合 的算法,与刚才 Sarsa 非常类似,唯一的区别是:Sarsa 用的是采样 a t + 1 a_{t+1} at+1(即 q ^ ( s t + 1 , a t + 1 , w t ) \hat{q}(s_{t+1}, a_{t+1}, w_t) q^(st+1,at+1,wt)),而这里 对 a a a 取最大化(即 max ⁡ a q ^ ( s t + 1 , a , w t ) \max_a \hat{q}(s_{t+1}, a, w_t) maxaq^(st+1,a,wt))。熟悉 tabular Q-learning 的同学都知道,这实际上就是它的 TD target。

下面给出 Q-learning 的 pseudocode,这里值得指出的是:下面先给出一个 on-policy 版本 ,之后在介绍 Deep Q-learning 时,我们会特意给一个 off-policy 的版本,Q-learning 两种都可以,既可以 on-policy 也可以 off-policy,把两个版本分开介绍,大家就能明白 on-policy 和 off-policy 分别该怎么实现。


伪代码:带函数逼近的 Q-learning(同策略版本)

初始化 :初始参数向量 w 0 w_0 w0。初始策略 π 0 \pi_0 π0。小的 ϵ > 0 \epsilon > 0 ϵ>0。

目标 :搜索一个好的策略,使其能够引导智能体从初始状态-动作对 ( s 0 , a 0 ) (s_0, a_0) (s0,a0) 到达目标。

对于每一个回合(episode),执行

如果当前 s t s_t st 不是目标状态,执行

根据 π t ( s t ) \pi_t(s_t) πt(st) 采取动作 a t a_t at,并生成 r t + 1 , s t + 1 r_{t+1}, s_{t+1} rt+1,st+1

值更新(参数更新):

w t + 1 = w t + α t r t + 1 + γ max ⁡ a ∈ A ( s t + 1 ) q \^ ( s t + 1 , a , w t ) − q \^ ( s t , a t , w t ) ∇ w q ^ ( s t , a t , w t ) w_{t+1} = w_t + \alpha_t \left r_{t+1} + \\gamma \\max_{a \\in \\mathcal{A}(s_{t+1})} \\hat{q}(s_{t+1}, a, w_t) - \\hat{q}(s_t, a_t, w_t) \\right \nabla_w \hat{q}(s_t, a_t, w_t) wt+1=wt+αtrt+1+γa∈A(st+1)maxq\^(st+1,a,wt)−q\^(st,at,wt)∇wq^(st,at,wt)

策略更新:

π t + 1 ( a ∣ s t ) = 1 − ϵ ∣ A ( s ) ∣ ( ∣ A ( s ) ∣ − 1 ) if a = arg ⁡ max ⁡ a ∈ A ( s t ) q ^ ( s t , a , w t + 1 ) π t + 1 ( a ∣ s t ) = ϵ ∣ A ( s ) ∣ otherwise \begin{align*} \pi_{t+1}(a|s_t) &= 1 - \frac{\epsilon}{|\mathcal{A}(s)|}(|\mathcal{A}(s)| - 1) \quad \text{if} \quad a = \arg\max_{a \in \mathcal{A}(s_t)} \hat{q}(s_t, a, w_{t+1}) \\10pt \pi_{t+1}(a|s_t) &= \frac{\epsilon}{|\mathcal{A}(s)|} \quad \text{otherwise} \end{align*} πt+1(a∣st)πt+1(a∣st)=1−∣A(s)∣ϵ(∣A(s)∣−1)ifa=arga∈A(st)maxq^(st,a,wt+1)=∣A(s)∣ϵotherwise


这里考虑的问题是:从一个状态出发找到目标状态。对每个 episode 做下面的事:如果当前状态不是 target state,则执行以下步骤,第一步:搜集 sample,在当前状态 s t s_t st 根据策略 π t \pi_t πt 得到 action a t a_t at ,然后与环境交互,观察 r t + 1 r_{t+1} rt+1 和 s t + 1 s_{t+1} st+1 。

收集完数据之后要做的就是 value update,也就是刚才给出的算法,同样地,这里更新的是它的参数,之后更新策略:在状态 s t s_t st ,把不同的动作 a a a 代入函数计算各自的 q value,哪个 q value 大就给较大的概率,其余 action 给较小的概率,这个策略也是 ε \varepsilon ε-Greedy

下面来看一个例子:

这个例子是 Q-learning 和 linear function approximation 相结合 ,也就是 q ^ = ϕ T w \hat{q}=\phi^Tw q^=ϕTw ,这里的任务是:从 s 1 s_1 s1 出发,找到一条到达目标的较好路径,大家看到最后的策略也是比较好的。左图是收敛过程:最开始 reward 较负,很快收敛到较大的值;episode length 一开始因策略不好而较长,随后很快收敛到较短的、正确的路径。

结语

本讲第五部分将上一讲的 Sarsa 与 Q-learning 自然地推广到函数近似框架,篇幅虽短却水到渠成---这正是前四部分扎实铺垫的回报。两个算法的更新公式与 TD + 函数近似如出一辙,只是将 v ^ \hat{v} v^ 换为 q ^ \hat{q} q^、TD target 分别采用 r t + 1 + γ q ^ ( s t + 1 , a t + 1 , w t ) r_{t+1} + \gamma\hat{q}(s_{t+1},a_{t+1},w_t) rt+1+γq^(st+1,at+1,wt)(Sarsa)与 r t + 1 + γ max ⁡ a q ^ ( s t + 1 , a , w t ) r_{t+1} + \gamma\max_a\hat{q}(s_{t+1},a,w_t) rt+1+γmaxaq^(st+1,a,wt)(Q-learning)。与 tabular 版本的本质区别在于:更新对象从 "某个格子里的 q 值" 变成了 "整个函数的参数 w w w",策略改进时也不再直接查表,而是将各动作代入函数计算后再比较。

两个线性近似的仿真都顺利完成了 "从起点到达目标" 的任务,reward 曲线回升、episode length 曲线下降,与 tabular 版本的收敛行为一脉相承。这里给出的是 on-policy 版本的 Q-learning;下一部分,我们将引入经验回放与 target network 两大技术,正式迎来 off-policy 版本的 Deep Q-learning---函数近似的旅程将在此达到高潮🤗。

参考

相关推荐
闲研随记9 小时前
RL算法学习:ArgMaxRL
算法·llm·强化学习·rl
XLYcmy1 天前
DeepMMSearch-R1: Empowering Multimodal LLMs in Multimodal Web Search论文分享
llm·sft·强化学习·多模态·苹果·rag·检索
爱听歌的周童鞋1 天前
强化学习的数学原理 | 赵世钰 | 西湖大学 | 笔记 | Lecture 8 | Part 4 | 值函数近似(原理-示例与分析)
强化学习·example·td-linear·bellman error
爱听歌的周童鞋2 天前
强化学习的数学原理 | 赵世钰 | 西湖大学 | 笔记 | Lecture 8 | Part 2 | 值函数近似(原理-目标函数介绍)
强化学习·目标函数·value function·approximation·平稳分布
爱听歌的周童鞋2 天前
强化学习的数学原理 | 赵世钰 | 西湖大学 | 笔记 | Lecture 7 | Part 7 | 时序差分方法(Q-learning 伪代码与例子)
强化学习·q-learning·on-policy·off-policy
爱听歌的周童鞋2 天前
强化学习的数学原理 | 赵世钰 | 西湖大学 | 笔记 | Lecture 7 | Part 8 | 时序差分方法(TD 算法的统一形式和总结)
强化学习·td
爱听歌的周童鞋2 天前
强化学习的数学原理 | 赵世钰 | 西湖大学 | 笔记 | Lecture 8 | Part 1 | 值函数近似(例子-曲线拟合)
强化学习·value function·approximation
幻影123!3 天前
AlphaZero 五子棋实战(一):单卡从零自举,我的v36 最终版配置
人工智能·强化学习·马尔科夫·决策过程
幻影123!3 天前
AlphaZero 五子棋实战(五):评估工具 —— 学会在错误的地方掉头
人工智能·机器学习·强化学习·alpha zero