SARSA 算法和 Q Learning算法是同一种强化学习基本算法。
但是SARSA 算法采取了和Q Learning 不同的迭代更新策略。
1 SARSA 算法
SARSA 算法的更新步骤为:
- 记录当前的state
- 执行上一步选定的action 得到奖励reward 和 新的状态 new_state
- 在new_state下 根据当前的Q函数 ,选定的要执行的不走new_action
- 用reward+GAMMA*Q[new_state,new_action].max() 来更新Q[state,action]
- 实际上用的(1-ALPHA)*Q(state,action)+ALPHA*Q[new_state,new_action].max() 来替换Q[state,action]的值
- action = new_action 这个动作会在下一个循环中执行
回顾一下SARSA的过程
- 智能体处于一个状态下
- 执行了一个动作action 得到一个期望奖励 和一个新的状态
- 在新的状态下 Q 函数 确定下一轮要执行的action
- 根据新的状态和新的动作来更新 Q函数
- action = new_action
2 off-policy 和 on-policy
强化学习算法分为off-policy 和 on-policy两类算法 而Q Learning 就是 off-policy ,SARSA就是on-policy。
原因:
Q Learning:
在Q Learning 中 Q函数的跟新和Q [new_state,;].max 有关,在Q [new_state,;中选出使得Q函数最大的动作,以此来更新Q函数。设这个动作为max_action.但是智能体在实际有可能不会执行max_action.因为在下个过程中是根据epsilon-greedy方法策略的,有可能选择max_action 也有可能不会选择max_action.
SARSA
而SARSA算法则不同,它用Q[new_state,new_action]结合奖励等信息更新Q函数 之后下一次循环时 智能体必然会执行new_aciotn
总之Q Learning 在更新Q函数使用的max_action 不一定会被智能体执行
而SARSA 更新Q函数使用的new_acion 一定会被智能体执行
这也是off-policy 和 on-policy 的主要区别。
3另一个角度的理解(考虑风险的态度上)
相比于Q Learning算法 SARSA算法 更加的‘胆小’。
Q Learning 算法是考虑新的状态下可以获得的最大奖励 而不会考虑新状态会带来的风险。
而SARSA 算法会考虑到接近陷阱(假设走迷宫时有陷阱)可能带来负收益,因此更倾向于待在原地不动,从而更加难的找到宝藏。
实际应用中 这两种算法 有各自适合的场景