浅谈强化学习中 Q-Learning 与Sarsa的异同

浅谈强化学习中Q-Learning与Sarsa的异同

作者:山松

我相信,从某种意义上讲,强化学习是人工智能的未来。 ——强化学习之父,Richard Sutton

简单来说就是,智能体通过强化学习,可以知道自己在什么状态下,应该采取什么样的动作使得自身获得最大奖励。强化学习分为在线学习和离线学习,本文以Q-learning(离线)和Sarsa(在线)出发,浅谈两者异同。

1. 简述Q-learning

Q-Learning是强化学习算法中Value-based中的一种算法,Q即为Q(s,a)就是在某一时刻的s状态下(s∈S),采取动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r,所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。

更简单的理解就是我们基于状态s利用 ε − g r e e d y \varepsilon-greedy εgreedy​​​法进行贪婪选择出动作a,然后执行动作a,得出下一状态s’以及reward r
Q ( s , a ) = Q ( s , a ) + α ∗ ( r + γ ∗ m a x ( Q ( s ′ , a ∗ ) ) − Q ( s , a ) ) Q(s,a) = Q(s,a) + α*(r+γ*{max}(Q(s',a^*))-Q(s,a)) Q(s,a)=Q(s,a)+α(r+γmax(Q(s,a))Q(s,a))
其中:s代表当前状态,a表示当前的行为,α是学习率,r是奖励值,a*表示当前可选行为集,γ是折扣率,也就是当前奖励的价值权重。

在此附上主要代码:

# 更新S
def chose_direction(s, q_table):
    if np.random.uniform() > EPSILON or q_table.iloc[s, :].all() == 0:
        direction = np.random.choice(ACTIONS)
    else:
        direction = ACTIONS[q_table.iloc[s, :].argmax()]
    return direction
# 学习过程
s = 0
is_terminal = False
step_count = 0
while not is_terminal:
    a = chose_direction(s, q_table)
    s_, r = update(s, a)
    q_predict = q_table.loc[s, a]
    if s_ != "terminal":
        q_target = r + GAMA*q_table.iloc[s_, :].max()
    else:
        q_target = r
        is_terminal = True
    q_table.loc[s, a] += ALPHA*(q_target-q_predict)
    a = s_

2. 简述Sarsa

Sarsa决策部分和Q-Learning一模一样,都是采用Q表的方式进行决策,我们会在Q表中挑选values比较大的动作实施在环境中来换取奖赏。但是Sarsa的更新是不一样的。‘sarsa’五个字母的含义即s(当前在状态),a(当前行为),r(奖励),s(下一步状态),a(下一步行为),也就是说我们在进行这一步操作时已经想到当前s对应的a,并且想好了下一个s’和a’。Sarsa的公式如下:
Q ( s , a ) = Q ( s , a ) + α ∗ ( r + γ ∗ Q ( s ′ , a ′ ) − Q ( s , a ) ) Q(s,a) = Q(s,a) + α*(r+γ*Q(s',a')-Q(s,a)) Q(s,a)=Q(s,a)+α(r+γQ(s,a)Q(s,a))

以下是Sarsa更新的主要代码:

s = 0
is_terminal = False
step_count = 0
a = chose_direction(s, q_table)
while not is_terminal:
    s_, r = update(s, s)
    q_predict = q_table.loc[s, a]
    if s != "terminal" and s_ != "terminal":
        a_ = chose_direction(s_, q_table)
        q_target = r + GAMA*q_table.loc[s_, a_]
    else:
        q_target = r
        is_terminal = True
    q_table.loc[s,a] += ALPHA*(q_target-q_predict)
    s = s_
    a = a_

3. 举例对比异同

3.1 游戏地图

游戏地图

图1. 游戏地图

  • 灰色为陷阱

  • 黄色是奖励点

    游戏起始位置为1,到达陷阱或者奖励点都视为游戏结束。

3.2 结果对比和分析

对比结果

图2. Q-learning和Sarsa结果对比表

  • 灰色是当前状态如果进行这一行为会走到陷阱的情况
  • 黄色是当前状态如果进行这一行为会走到奖励点的情况

两者都会走向奖励点,Q-learning是选择最近的道路,而Sarsa往往会早早的避开陷阱,例如13这个点Q-learning往往只会选择往上,但从表中可以看出Sarsa在13这个点的时候为了躲避危险选择的是往左。

Q-learning和Sarsa在决策部分都是一模一样的,使用Q表的形式进行决策,从Q表中选择拥有较大值的行为施加到环境中以换取奖励,Q-learning是选取S’上会带来最大收益的行为,但是做决策的时候可能不一定会选择该行为,而Sarsa则是去掉   m a x Q \ {max}Q  maxQ​​ ,取而代之的是在S’上面选择实际A’的Q值,最后像Q-learning一样求出现实和估计的差距,并且更新Q表里面的值。

4. 总结

Q-learning算法和Sarsa算法都是从状态s开始,根据当前的Q-table使用一定的策略( ε − g r e e d y \varepsilon-greedy εgreedy​)选择一个动作a’,然后观测到下一个状态s’,并再次根据Q-table选择动作a’。只不过两者选取a’的方法不同。根据算法描述,在选择新状态S‘的动作a’时,Q-learning使用贪心策略( g r e e d y greedy greedy​),即选取值最大的a’,此时只是计算出哪个a‘可以使Q(s,a)取到最大值,并没有真正采用这个动作a‘;而Sarsa则是仍使用 ε − g r e e d y \varepsilon-greedy εgreedy​ 策略,并真正采用了这个动作a‘ 。即:

算法流程对比

图3. Q-learning和Sarsa流程对比图

由于更新方法的不同导致Q-learning是一个贪婪、勇敢的算法,他对于陷阱不在乎,而Sarsa则是一个保守的算法,对于错误,死亡都十分敏感。不同的场景中应用不同的算法,有着不同的好处。

  • dOkr60.md.png

行者AI(成都潜在人工智能科技有限公司,xingzhe.ai)致力于使用人工智能和机器学习技术提高游戏和文娱行业的生产力,并持续改善行业的用户体验。我们有内容安全团队、游戏机器人团队、数据平台团队、智能音乐团队和自动化测试团队。 > >如果您对世界拥有强烈的好奇心,不畏惧挑战性问题;能够容忍摸索过程中的各种不确定性、并且坚持下去;能够寻找创新的方式来应对挑战,并同时拥有事无巨细的责任心以确保解决方案的有效执行。那么请将您的个人简历、相关的工作成果及您具体感兴趣的职位提交给我们。

我们欢迎拥抱挑战、并具有创新思维的人才加入我们的团队。请联系:hr@xingzhe.ai

如果您有任何关于内容安全、游戏机器人、数据平台、智能音乐和自动化测试方面的需求,我们也非常荣幸能为您服务。可以联系:contact@xingzhe.ai
拥抱挑战、并具有创新思维的人才加入我们的团队。请联系:hr@xingzhe.ai

如果您有任何关于内容安全、游戏机器人、数据平台、智能音乐和自动化测试方面的需求,我们也非常荣幸能为您服务。可以联系:contact@xingzhe.ai

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值