两者的区别
- 两者的区别就在于Q值的更新公式上:
- Sarsa
Q ( s t , a t ) = Q ( s t , a t ) + α ∗ ( r t + γ ∗ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ) Q\left(s_{t}, a_{t}\right)=Q\left(s_{t}, a_{t}\right)+\alpha^{*}\left(r_{t}+\gamma^{*} Q\left(s_{t+1}, a_{t+1}\right)-Q\left(s_{t}, a_{t}\right)\right) Q(st,at)=Q(st,at)+α∗(rt+γ∗Q(st+1,at+1)−Q(st,at)) - Q-learning
Q ( s t , a t ) = Q ( s t , a t ) + α ∗ ( r t + v ∗ max a Q ( s t + 1 , a ) − Q ( s t , a t ) ) Q\left(s_{t}, a_{t}\right)=Q\left(s_{t}, a_{t}\right)+\alpha^{*}\left(r_{t}+v^{*} \max _{a} Q\left(s_{t+1}, a\right)-Q\left(s_{t}, a_{t}\right)\right) Q(st,at)=Q(st,at)+α∗(rt+v∗amaxQ(st+1,a)−Q(st,at)) - 明确两个概念:行为策略和目标策略
- 行为策略:agent在与环境互动时,究竟怎样通过Q表来选择action。两个算法是一样的,都为 ϵ \epsilon ϵ-greedy。
- 目标策略:
- 即最终要得到的策略,也就是找到 Q ∗ Q_* Q∗.有了它之后,每次在真实场景下,直接通过 Q ∗ Q_* Q∗找对应状态下的最优action即可。
- agent训练的最终目的,是让Q值表确定下来。一般也不一定能完全确定,就是可能比较稳定收敛了,就近似认为是最优。
- 两个算法的区别也就在这里,就是对Q值的更新方法不同,具体见上面公式。
直观解释
- 有了前面的铺垫,就很好解释了。
- Sarsa的行为策略,目标策略一致。意味着在训练的过程里,它实际上采取的行动,和它根据行动后的反馈,对自身目标的更新,都是一致的。这和下面的Q-learning算法形成鲜明对比。
- Q-learning的行为策略和目标策略不一致。导致agent会在环境里,做一些目标策略以外的事。 用RL里的一个专业术语,可以说是更多探索。好处是也许能发现惊喜,比如很难找到的全局最优。或者一些不会掉的坑,让agent受到更强烈的反馈,以后就绝对不会再掉进去等。
作用场景
Sarsa
Sarsa 就是目标策略和实际行为一致的算法。适合做一些,我们希望agent在学习过程中,表现“良好”的场景。不希望他做一些”出格“,”意料外“的事。比如一个机器人很贵重,Sarsa下,它不太可能会去做冒险的事,比如掉进陷阱,导致摔坏设备的情况。
Q-learning
允许agent做一些冒险的事,可以不计成本。比如新车的测试,我需要它能遇到一些紧急情况,并看它的处理行为如何。只有这样,才能保证人坐在上面也是安全的。
参考