强化学习笔记(四)——SARSA、Q-learning
强化学习笔记(四)——SARSA、Q-learning
- 一、免模型控制
- 1. SARSA -- 同策略时序差分控制
- 2. Q-learning
- 3. 同策略和异策略
一、免模型控制
在不知道马尔可夫决策过程模型的情况下,可以把策略迭代进行广义推广,得到广义策略迭代。其由2个步骤组成:
- 根据给定的当前策略 π \pi π来估计价值函数 V π V_\pi Vπ;
- 得到估计的价值函数后,通过贪心的方法改进策略,即
π ′ = 贪心函数 ( 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)+γs′∈S∑P(s′∣s,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函数。
为保证蒙特卡洛方法能够有足够的探索,采用 ε \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))=a∈A∑π′(a∣s)Qπ(s,a)=∣A∣εa∈A∑Qπ(s,a)+(1−ε)amaxQπ(s,a)(有1−ε的概率取到Q中最大)≥∣A∣εa∈A∑Qπ(s,a)+(1−ε)a∈A∑1−επ(a∣s)−∣A∣εQπ(s,a)=a∈A∑π(a∣s)Qπ(s,a)=Vπ(s)
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)就是目标值。
采用软更新的方式进行逼近,每次更新一点点,慢慢逼近目标值。
由于每次更新需要用到当前的 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)
如果加上资格衰减函数 λ \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∑∞λn−1Qtn其更新策略为
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)=a′argmaxQ(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+γa′maxQ(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 Q→maxQ,在找到 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的区别。
(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] Q←Q+α[⋅]这个结构中了,就表明 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] Q←Q+α[⋅]这个结构中,只用 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] Q←Q+α[⋅]这个结构中,更新整个Q表;Q-learning是把 s ′ s' s′行、但仍为 a a a列的Q值代入到 Q ← Q + α [ ⋅ ] Q \leftarrow Q + \alpha [\cdot] Q←Q+α[⋅]这个结构中更新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相对基金,希望每一步都获得最大利益。