强化学习实践(3):Sarsa

前言

我们在强化学习实践(2)中学到了Q-learning每一步的首选通过ε -Greedy method得到在当前步 s t s_t st的动作 a t a_t at然后利用以下公式进行Q值更新
Q ( s , a ) = ( 1 − a ) ⋅ Q ( s t , a t ) + a ⋅ ( R ( s , a ) + γ ⋅ m a x a t + 1 { Q ( s t + 1 , a t + 1 ) } ) Q(s,a)=(1-a) \cdot Q(s_t,a_t)+a \cdot (R(s,a)+\gamma\cdot max_{a_{t+1}} \left \{Q(s_{t+1},a_{t+1})\right \}) Q(s,a)=(1a)Q(st,at)+a(R(s,a)+γmaxat+1{Q(st+1,at+1)})
将上式进行简单的变形,就可以得到下面这个式子
Q ( s , a ) = Q ( s t , a t ) + a ⋅ [ R ( s , a ) + γ ⋅ m a x a t + 1 { Q ( s t + 1 , a t + 1 ) } ⏞ Q现实 − Q ( s t , a t ) ⏟ Q估计 ] Q(s,a)=Q(s_t,a_t)+a \cdot[ \overbrace {R(s,a)+\gamma\cdot max_{a_{t+1}} \left \{Q(s_{t+1},a_{t+1})\right \} }^{\text{Q现实}}-\underbrace{Q(s_t,a_t)}_{\text{Q估计}}] Q(s,a)=Q(st,at)+a[R(s,a)+γmaxat+1{Q(st+1,at+1)} Q现实Q估计 Q(st,at)]

也就是说,每一次更新,会计算下一个状态 s t + 1 s_{t+1} st+1的最佳Q值,构成Q现实,然后和Q估计(也就是之前的Q值)相减得到更新增量。但是在下一个状态 s t + 1 s_{t+1} st+1中,由于我们使用的是ε -Greedy (也就是有ε的概率随机选取一个动作,1-ε的概率选择Q值最大的动作),所以我们不一定选择上一个状态 s t s_{t} st的Q现实中选择的 a t + 1 a_{t+1} at+1

SARSA

S A R S A SARSA SARSA五个字母是当前 S S S (状态), A A A(行动), R R R(奖励) 与 下一步 S ′ S' S(状态) A ′ A' A(行动) 的组合,即我们不仅需要知道当前的 S , A , R S,A,R S,A,R 还需要知道下一步的 S ′ S' S A ′ A' A1

S A R S A SARSA SARSA Q − l e a r n i n g Q-learning Qlearning的算法十分相似,只是在更新公式上不同
S A R S A : Q ( s , a ) = ( 1 − a ) ⋅ Q ( s t , a t ) + a ⋅ ( R ( s , a ) + γ ⋅ Q ( s t + 1 , a t + 1 ) ) SARSA:Q(s,a)=(1-a) \cdot Q(s_t,a_t)+a \cdot (R(s,a)+\gamma\cdot Q(s_{t+1},a_{t+1})) SARSAQ(s,a)=(1a)Q(st,at)+a(R(s,a)+γQ(st+1,at+1))
Q − l e a r n i n g : Q ( s , a ) = ( 1 − a ) ⋅ Q ( s t , a t ) + a ⋅ ( R ( s , a ) + γ ⋅ m a x a t + 1 { Q ( s t + 1 , a t + 1 ) } ) Q-learning:Q(s,a)=(1-a) \cdot Q(s_t,a_t)+a \cdot (R(s,a)+\gamma\cdot max_{a_{t+1}} \left \{Q(s_{t+1},a_{t+1})\right \}) QlearningQ(s,a)=(1a)Q(st,at)+a(R(s,a)+γmaxat+1{Q(st+1,at+1)})
公式上的不同也使得SARSA是 同策略(On Policy) 的算法,因为他是在行动中学习的,而且至始至终只有一个Policy. 使用了两次greedy-epsilon 方法来选择出了Q(S,A)和q(S’,A’)

而Q learning **异策略Off Policy)**的算法,QLearning选择Q(S,A)用了greedy方法,而计算A(S’,A’)时用的是max方法,而真正选择的时候又不一定会选择max的行动, 所以 Q learning 学习和行动分别采用了两套不同的Policy2

SARSA算法:

  • 给定参数 γ \gamma γ和reward矩阵R(或reward-fuction,给定 a ∣ s a|s as得到reward)以及学习率 a a a(注: 关于学习率设定,有的资料会考虑历史学习的结果,即学习率小于1;也有的资料并未考虑历史学习的结果,相当于学习率设置为1)
  • 令Q表为0或者随机分布
  • Repet(for each episode):
  • Initialize s s s
    • Repeat (for each step of episode):
      • Choose possible a a a from s s s use policy deriverd from Q Q Q (e.g. ,ε贪婪方法(ε -Greedy method) )
      • Take action a a a,get observe r r r, s ′ s' s
      • Choose possible a ′ a' a from s ′ s' s use policy deriverd from Q Q Q (e.g. ,ε贪婪方法(ε -Greedy method) )
      • Q ( s , a ) = ( 1 − a ) ⋅ Q ( s t , a t ) + a ⋅ ( R ( s , a ) + γ ⋅ Q ( s t + 1 , a t + 1 ) ) Q(s,a)=(1-a) \cdot Q(s_t,a_t)+a \cdot (R(s,a)+\gamma\cdot Q(s_{t+1},a_{t+1})) Q(s,a)=(1a)Q(st,at)+a(R(s,a)+γQ(st+1,at+1))
      • s ← s t + 1 , a ← a t + 1 s \leftarrow s_{t+1},a\leftarrow a_{t+1} sst+1,aat+1
    • until s s s is terminal

SARSA(lambda)

上面我们说到的SARSA是单步更新的RL算法,每次走一步,更新一次Q值,这种单步更新在一开始没有找到宝藏得到reward的时候,虽然有执行Q值更新,但是实际上都是为0,只有在找到宝藏的时候,找到宝藏的前一步Q值被更新。我们之前讲过RL分为单步更新和回合更新,想一想,如果在找到宝藏的时候,对所有之前走过的路程Q值都予以更新,使得他们更加容易被选择,岂不美哉。但是,这样其实也有不足,因为若寻宝过程中因为信息不足园地绕圈,那么会学习到错误的Q值,所以SARSA(lambda)就应运而生。

此处的 λ \lambda λ和之前计算Q现实时,对下个状态的Q值进行衰减的目的相似,使得越靠近宝藏的步骤Q值更新的幅度更大。

Sarsa(lambda)算法中多了一个矩阵E (eligibility trace),它是用来保存在路径中所经历的每一步

SARSA(lambda)算法:

  • 给定参数 γ \gamma γ和reward矩阵R(或reward-fuction,给定 a ∣ s a|s as得到reward)以及学习率 a a a(注: 关于学习率设定,有的资料会考虑历史学习的结果,即学习率小于1;也有的资料并未考虑历史学习的结果,相当于学习率设置为1)
  • 令Q表为0或者随机分布
  • Repet(for each episode):
  • E ( s , a ) = 0 , for all s ∈ S , a ∈ A ( s ) E(s,a)=0,\text{for all s} \in S,a \in A(s) E(s,a)=0,for all sS,aA(s)
  • Initialize s s s
    • Repeat (for each step of episode):
      • Choose possible a a a from s s s use policy deriverd from Q Q Q (e.g. ,ε贪婪方法(ε -Greedy method) )
      • Take action a a a,get observe r r r, s ′ s' s
      • Choose possible a ′ a' a from s ′ s' s use policy deriverd from Q Q Q (e.g. ,ε贪婪方法(ε -Greedy method) )
      • δ = R ( s , a ) + γ ⋅ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) \delta =R(s,a)+\gamma\cdot Q(s_{t+1},a_{t+1})-Q(s_t,a_t) δ=R(s,a)+γQ(st+1,at+1)Q(st,at)
      • E ( s , a ) = E ( s , a ) + 1 E(s,a)=E(s,a)+1 E(s,a)=E(s,a)+1
      • for all s ∈ S , a ∈ A ( s ) : \text{for all s} \in S,a \in A(s): for all sS,aA(s):
        • Q ( s , a ) ← Q ( s , a ) + a δ E ( s , a ) Q(s,a)\leftarrow Q(s,a)+a \delta E(s,a) Q(s,a)Q(s,a)+aδE(s,a)
        • E ( s , a ) ← γ λ E ( s , a ) E(s,a) \leftarrow \gamma \lambda E(s,a) E(s,a)γλE(s,a)
      • s ← s t + 1 , a ← a t + 1 s \leftarrow s_{t+1},a\leftarrow a_{t+1} sst+1,aat+1
    • until s s s is terminal

这里的 E E E在每一步都会被 γ λ \gamma\lambda γλ衰减: E ( s , a ) ← γ λ E ( s , a ) E(s,a) \leftarrow \gamma \lambda E(s,a) E(s,a)γλE(s,a)
单步实时跟新之前每一步的Q值,这加快了学习速度。

Code

环境和之前的一样


  1. 在文章中可能经常会遇到 s t s_t st a t a_t at s s s a a a的混用,同理 s t + 1 s_{t+1} st+1 a t + 1 a_{t+1} at+1 s ′ s' s a ′ a' a ↩︎

  2. Hongtao洪滔.AI学习笔记——Sarsa算法[J]https://www.jianshu.com/p/9bbe5aa3924b.2018.08.13 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值