当前位置: 首页 > news >正文

强化学习笔记(四)——SARSA、Q-learning

强化学习笔记(四)——SARSA、Q-learning

  • 一、免模型控制
    • 1. SARSA -- 同策略时序差分控制
    • 2. Q-learning
    • 3. 同策略和异策略

一、免模型控制

在不知道马尔可夫决策过程模型的情况下,可以把策略迭代进行广义推广,得到广义策略迭代。其由2个步骤组成:

  1. 根据给定的当前策略 π \pi π来估计价值函数 V π V_\pi Vπ
  2. 得到估计的价值函数后,通过贪心的方法改进策略,即
    π ′ = 贪心函数 ( V π ) \pi' = 贪心函数(V_\pi) π=贪心函数(Vπ)二者相互迭代
    π i + 1 ( s ) = arg max ⁡ a Q π i ( s , a ) \pi_{i+1}(s) = \argmax_a Q_{\pi_i} (s,a) πi+1(s)=aargmaxQπi(s,a)可以计算出策略 π \pi π动作价值函数 Q ( s , a ) Q(s,a) Q(s,a),然后根据上式计算新策略。然而如果知道状态价值函数 V V V,由于并不知道奖励函数 R R R和状态转移 P P P,因此无法根据下式计算 Q Q Q函数
    Q π i ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V π i ( s ′ ) Q_{\pi_i}(s,a) = R(s,a) + \gamma \sum_{s' \in S} P \left( s' \vert s,a \right) V_{\pi_i} (s') Qπi(s,a)=R(s,a)+γsSP(ss,a)Vπi(s)在此情况下,对策略评估部分修改,用蒙特卡洛方法代替动态规划方法,来估计Q函数。先进行策略评估,用蒙特卡洛方法估计策略 Q = Q π Q = Q_\pi Q=Qπ,然后策略更新:
    π ( s ) = arg max ⁡ a Q ( s , a ) \pi(s) = \argmax_a Q(s,a) π(s)=aargmaxQ(s,a)
    蒙特卡洛估计Q函数

通过蒙特卡洛方法产生很多轨迹,每条轨迹可以计算出价值,然后平均来估计Q函数。
为保证蒙特卡洛方法能够有足够的探索,采用 ε \varepsilon ε-贪心探索,指有 1 − ε 1-\varepsilon 1ε的概率按照Q函数来决定动作,有 ε \varepsilon ε的概率是随机的。 ε \varepsilon ε一般很小,且会随时间递减。
在一开始,由于不知道哪个动作是好的,因此会花费较多时间探索。随着训练次数增加,比较确定哪个动作是好的之后,会减少探索,把 ε \varepsilon ε的值变小,主要根据Q函数决定动作,而不怎么依赖随机。

对于任何 ε \varepsilon ε贪心策略 π \pi π,关于 Q π Q_\pi Qπ ε \varepsilon ε-贪心策略 π ′ \pi' π都是一个改进,有 V π ( s ) ≤ V π ′ ( s ) V_\pi(s) \leq V_{\pi'}(s) Vπ(s)Vπ(s)
Q π ( s , π ′ ( s ) ) = ∑ a ∈ A π ′ ( a ∣ s ) Q π ( s , a ) = ε ∣ A ∣ ∑ a ∈ A Q π ( s , a ) + ( 1 − ε ) max ⁡ a Q π ( s , a ) ( 有 1 − ε 的概率取到 Q 中最大 ) ≥ ε ∣ A ∣ ∑ a ∈ A Q π ( s , a ) + ( 1 − ε ) ∑ a ∈ A π ( a ∣ s ) − ε ∣ A ∣ 1 − ε Q π ( s , a ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) = V π ( s ) \begin{aligned} Q_\pi (s, \pi'(s) ) &= \sum_{a \in A} \pi' (a \vert s) Q_\pi (s,a) \\ &= \frac{\varepsilon}{ \lvert A \rvert } \sum_{a \in A} Q_\pi (s,a) + (1 - \varepsilon) \max_a Q_\pi (s,a) \qquad (有1-\varepsilon的概率取到Q中最大) \\ &\geq \frac{\varepsilon}{ \lvert A \rvert } \sum_{a \in A} Q_\pi (s,a) + (1 - \varepsilon) \sum_{a \in A} \frac{ \pi(a \vert s) - \frac{\varepsilon}{ \lvert A \rvert } }{1 - \varepsilon} Q_\pi (s,a) \\ &= \sum_{a \in A} \pi (a \vert s) Q_\pi (s,a) = V_\pi (s) \end{aligned} Qπ(s,π(s))=aAπ(as)Qπ(s,a)=AεaAQπ(s,a)+(1ε)amaxQπ(s,a)(1ε的概率取到Q中最大)AεaAQπ(s,a)+(1ε)aA1επ(as)AεQπ(s,a)=aAπ(as)Qπ(s,a)=Vπ(s)
eps贪心蒙特卡洛

1. SARSA – 同策略时序差分控制

SARSA算法是使用时序差分的框架来估计Q函数的算法。
它把原本时序差分方法更新V的过程,变成了更新Q,即
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + 1 + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ] Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) \right] Q(st,at)Q(st,at)+α[rt+1+γQ(st+1,at+1)Q(st,at)]上式中的Q原来均为V。

可以看出,SARSA直接更新Q表格,然后更新策略。

时序差分目标 r t + 1 + γ Q ( s t + 1 , a t + 1 ) r_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) rt+1+γQ(st+1,at+1),时序差分误差为 r t + 1 + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) r_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t) rt+1+γQ(st+1,at+1)Q(st,at)。用 Q ( s t , a t ) Q(s_t, a_t) Q(st,at)逼近 G t G_t Gt,则 r t + 1 + γ Q ( s t + 1 , a t + 1 ) r_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) rt+1+γQ(st+1,at+1)就是目标值。
采用软更新的方式进行逼近,每次更新一点点,慢慢逼近目标值。
SARSA
由于每次更新需要用到当前的 s , a , r s,a,r s,a,r与下一步的 s ′ , a ′ s',a' s,a,即 ( s t , a t , r t , s t + 1 , a t + 1 ) (s_t, a_t, r_t, s_{t+1}, a_{t+1}) (st,at,rt,st+1,at+1),估称为SARSA。

SARSA属于单步更新算法,如果不进行单步更新,而是 n n n步更新,则为n步SARSA
Q t n = r t + 1 + γ r t + 2 + γ 2 r t + 3 + ⋯ + γ n Q ( s t + n , a t + n ) Q_t^n = r_{t+1} + \gamma r_{t+2} + \gamma^2 r_{t+3} + \cdots + \gamma^n Q(s_{t+n}, a_{t+n}) Qtn=rt+1+γrt+2+γ2rt+3++γnQ(st+n,at+n)
SARSA算法
如果加上资格衰减函数 λ \lambda λ并求和,就得到SARSA( λ \lambda λ)的Q回报
Q t λ = ( 1 − λ ) ∑ n = 1 ∞ λ n − 1 Q t n Q_t^\lambda = (1-\lambda) \sum_{n=1}^\infty \lambda^{n-1} Q_t^n Qtλ=(1λ)n=1λn1Qtn其更新策略为
Q ( s t , a t ) ← Q ( s t , a t ) + α ( Q t λ − Q ( s t , a t ) ) Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left( Q_t^\lambda - Q(s_t, a_t) \right) Q(st,at)Q(st,at)+α(QtλQ(st,at))
SARSA是一种同策略(on-policy)算法,优化的就是它要实际执行的策略,也直接使用下一步会执行的动作来优化Q表格。

2. Q-learning

Q-learning是一种异策略(off-policy)算法

异策略有2种不同的策略:目标策略 π \pi π行为策略 μ \mu μ
(1)目标策略 π \pi π不和环境交互,行为策略 μ \mu μ用来探索环境。
(2)行为策略 μ \mu μ尝试各种动作,结果有好有坏,再把所有动作喂给目标策略 π \pi π。目标策略 π \pi π只考虑采取最好的策略。
(3)轨迹都是行为策略 μ \mu μ与环境交互产生的,利用这些轨迹来更新目标策略 π \pi π

异策略学习的好处:
(1)利用探索策略来学到最佳的策略,学习效率高;
(2)可以学习其他智能体的动作,即模仿学习;
(3)可以重用旧的策略产生的轨迹,节省资源。

Q-learning的目标策略 π \pi π
直接在Q表格上使用贪心策略,取它下一步可以得到的所有状态
π ( s t + 1 ) = arg max ⁡ a ′ Q ( s t + 1 , a ′ ) \pi (s_{t+1}) = \argmax_{a'} Q( s_{t+1}, a' ) π(st+1)=aargmaxQ(st+1,a)目标策略 π \pi π可以是随机的策略,但这里采取 ε \varepsilon ε-贪心策略,使其不至于完全随机。

构造Q-learning目标
r t + 1 + γ Q ( s t + 1 , A ′ ) = r t + 1 + γ Q ( s t + 1 , arg max ⁡ Q ( s t + 1 , a ′ ) ) = r t + 1 + γ max ⁡ a ′ Q ( s t + 1 , a ′ ) \begin{aligned} r_{t+1} + \gamma Q ( s_{t+1}, A' ) &= r_{t+1} + \gamma Q( s_{t+1}, \argmax Q ( s_{t+1}, a' ) ) \\ &= r_{t+1} + \gamma \max_{a'} Q ( s_{t+1}, a' ) \end{aligned} rt+1+γQ(st+1,A)=rt+1+γQ(st+1,argmaxQ(st+1,a))=rt+1+γamaxQ(st+1,a)注意到:
(1)这里第一个等号右边的Q括号内,原本是动作的元素被写成了 arg max ⁡ Q ( s t + 1 , a ′ ) \argmax Q ( s_{t+1}, a' ) argmaxQ(st+1,a),即:Q-learning的下一个动作都是通过 arg max ⁡ \argmax argmax操作选出来的
换句话说:
原本是: r t + 1 + γ Q ( s t + 1 , a t + 1 ) r_{t+1} + \gamma Q( s_{t+1}, a_{t+1} ) rt+1+γQ(st+1,at+1)
现在是: r t + 1 + γ Q ( s t + 1 , arg max ⁡ Q ( s t + 1 , a ′ ) ) r_{t+1} + \gamma Q( s_{t+1}, \argmax Q ( s_{t+1}, a' ) ) rt+1+γQ(st+1,argmaxQ(st+1,a))
即: a t + 1 a_{t+1} at+1是通过下列方式选出的:它使得Q最大,即 Q → max ⁡ Q Q \rightarrow \max Q QmaxQ,在找到 max ⁡ Q \max Q maxQ之后,反向求出使得 Q Q Q达到 max ⁡ Q \max Q maxQ的那个 a t + 1 a_{t+1} at+1即可。这里的“反向求出a”的操作即为 arg ⁡ \arg arg
(2)从第一个等号到第二个等号的原理: r t + 1 + γ Q ( s t + 1 , arg max ⁡ Q ( s t + 1 , a ′ ) ) r_{t+1} + \gamma Q( s_{t+1}, \argmax Q ( s_{t+1}, a' ) ) rt+1+γQ(st+1,argmaxQ(st+1,a))中采取的动作a,是让Q最大的那个a。那么在采取了这个a之后,Q自然就变成了 max ⁡ Q \max Q maxQ,也就是第二个等号。

把Q-learning写成增量式学习的方式,时序差分目标变成 r t + 1 + γ max ⁡ a Q ( s t + 1 , a ) r_{t+1} + \gamma \max_a Q ( s_{t+1}, a ) rt+1+γmaxaQ(st+1,a),即
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + 1 + γ max ⁡ a Q ( s t + 1 , a ) − Q ( s t , a t ) ] Q (s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_{t+1} + \gamma \max_a Q ( s_{t+1}, a ) - Q ( s_t, a_t ) \right] Q(st,at)Q(st,at)+α[rt+1+γamaxQ(st+1,a)Q(st,at)]下图列出了SARSA和Q-learning的区别。
SARSA和Q-learning区别
(1)SARSA在更新Q表格时用的是 A ′ A' A,上图(a)提及“从 S ′ S' S中选择 A ′ A' A”。即:在获取下一个Q值的时候, A ′ A' A是下一步一定执行的动作,该动作可能是 ε \varepsilon ε-贪心算法得出的,也可能是Q最大化得出的,也可能单纯随机出来的,但 A ′ A' A一定会被执行。简单记为“知行合一”,on-policy
a ′ a' a代入到 Q ← Q + α [ ⋅ ] Q \leftarrow Q + \alpha [\cdot] QQ+α[]这个结构中了,就表明 a ′ a' a被执行了。
(2)Q-learning在更新Q表格时用的是 Q ( S ′ , a ) Q(S', a) Q(S,a)而不是 Q ( S ′ , a ′ ) Q(S', a') Q(S,a),用的是老动作(不带上标一撇的a)。上图(b)提及“从 S S S中选择 A A A”。这个 A A A不一定是下一步会执行的动作,因为下一步可能会探索。Q-learning的下一个动作不是由行为策略 μ \mu μ选取的,它直接看Q表格,选最大值。
Q ← Q + α [ ⋅ ] Q \leftarrow Q + \alpha [\cdot] QQ+α[]这个结构中,只用 a a a,因为 a ′ a' a还没探索出来。一旦 a ′ a' a经过行为策略探索出来了,那就是最好的,下一步直接查Q表选最大的,直接采用它即可。
Q ( S ′ , a ) Q(S', a) Q(S,a)是用 s ′ s' s中的最大值计算的,和 a a a无关。
(3)从Q表更新方式上理解:SARSA是把 s ′ s' s行、 a ′ a' a列的Q值代入到 Q ← Q + α [ ⋅ ] Q \leftarrow Q + \alpha [\cdot] QQ+α[]这个结构中,更新整个Q表;Q-learning是把 s ′ s' s行、但仍为 a a a列的Q值代入到 Q ← Q + α [ ⋅ ] Q \leftarrow Q + \alpha [\cdot] QQ+α[]这个结构中更新Q表。
(4)SARSA和Q-learning的更新公式是一样的,区别只在于目标计算的部分,SARSA是 r t + 1 + γ Q ( s t + 1 , a t + 1 ) r_{t+1} + \gamma Q( s_{t+1}, a_{t+1} ) rt+1+γQ(st+1,at+1),Q-leraning是 r t + 1 + γ max ⁡ a Q ( s t + 1 , a ) r_{t+1} + \gamma \max_a Q ( s_{t+1}, a ) rt+1+γmaxaQ(st+1,a)
(5)SARSA用自己的策略产生了 S , A , R , S ′ , A ′ S,A,R,S',A' S,A,R,S,A这条轨迹,然后用 Q ( s t + 1 , a t + 1 ) Q ( s_{t+1}, a_{t+1}) Q(st+1,at+1)更新原本的Q值 Q 9 s t , a t ) Q 9 s_t, a_t ) Q9st,at)。但是Q-learning并不知道实际上选择哪一个动作,它默认下一个动作就是在当前的Q表中找Q最大值即可,用的不是 a ′ a' a,用的还是当前的 a a a
(6)SARSA:用下一个 s ′ s' s、下一个 a ′ a' a查找Q表;
Q-learning:在下一个 s ′ s' s下的所有 a a a中,找一个Q最大的,用这个Q值计算。
因为Q-learning用下一状态的最大Q做估计,只想着用最大,因此表现更贪心、更大胆一些。这里的大胆指的是Q-learning不会把 a ′ a' a执行一下看看效果,它直接默认:如果该Q值最大,那么对应的该 a a a就最好。
(7)二者的核心都是: Q ( s t , a t ) ← Q ( s t , a t ) + α [ Q 目标值 − Q ( s t , a t ) ] Q (s_t, a_t) \leftarrow Q (s_t, a_t) + \alpha \left[ Q目标值 - Q (s_t, a_t) \right] Q(st,at)Q(st,at)+α[Q目标值Q(st,at)],区别在于目标值不同。
(8)Q-learning不需要提前知道 a ′ a' a,就能更新 Q ( s , a ) Q(s,a) Q(s,a),且在学习之前不需要获取下一个动作 a ′ a' a,只需要前面的 ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s)

3. 同策略和异策略

(1)SARSA是同策略算法,只用了一个策略 π \pi π,使用它学习,也使用它与环境交互产生经验。如果策略采用 ε \varepsilon ε贪心算法,则需要兼顾探索和利用,因此为了保全自己,会显得有些胆小。另外由于 ε \varepsilon ε不断变小,因此策略不稳定。
(2)Q-learning是异策略算法,有两种策略——目标策略 π \pi π和行为策略 μ \mu μ,可以大胆使用行为策略探索得到的经验轨迹来优化目标策略,即用 μ \mu μ优化 π \pi π。行为策略 μ \mu μ可以采用 ε \varepsilon ε贪心算法,但目标策略 π \pi π采用的是普通的贪心算法,直接根据最大值找最佳策略。Q-learning不需要兼顾探索。
(3)SARSA相对保守,选择一条相对安全的迭代路线;Q-learning相对基金,希望每一步都获得最大利益。

相关文章:

  • 伪谱法求解最优控制问题(附Python代码)
  • Lustre/Scade 与 IEC 61131-3 相似的方面及差异
  • C++ 拷贝构造函数 浅拷贝 深拷贝
  • 【以太网安全】——防护高级特性配置总结
  • Windows7升级Windows10,无法在此驱动器上安装Windows
  • 鸿道操作系统Type 1虚拟化:破局AI机器人与智能汽车的“安全”与“算力”双刃剑
  • STM32提高篇: WIFI通讯
  • S32K144学习(16)-Bootloader
  • EdgeGPT - 新版Bing聊天功能逆向工程
  • 序列决策问题(Sequential Decision-Making Problem)
  • (区间 dp)洛谷 P6879 JOI2020 Collecting Stamps 3 题解
  • docker镜像新增加用户+sudo权限,无dockerfile
  • AI领域:MCP 与 A2A 协议的关系
  • 网络威胁情报 | Friday Overtime Trooper
  • MCP使用SSE和STDIO模式时,mcp client 如何连接
  • 深度学习是什么?该怎么入门学习?
  • Unity 导出Excel表格
  • [特殊字符]fsutil命令用法详解
  • pcp补丁升级手顺
  • (8)ECMAScript语法详解
  • 复旦大学校友夫妇一次性捐赠10亿元,成立学敏高等研究院
  • 白宫新闻秘书:美政府将在法庭上回应哈佛大学诉讼
  • 张又侠董军分别与印尼国防部长会见会谈
  • 荣膺劳伦斯大奖实至名归,杜普兰蒂斯的传奇没有极限
  • 包邮到高原,跨越4083公里送妈妈一张按摩椅
  • 体坛联播|巴萨三球逆转塞尔塔,CBA季后赛山西横扫广东