强化学习笔记(四)——SARSA、Q-learning
强化学习笔记(四)——SARSA、Q-learning
一、免模型控制
在不知道马尔可夫决策过程模型的情况下,可以把策略迭代进行广义推广,得到广义策略迭代。其由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相对基金,希望每一步都获得最大利益。
更多推荐
所有评论(0)