写点什么

强化学习中,Q-Learning 与 Sarsa 的差别有多大?

用户头像
行者AI
关注
发布于: 2 小时前

本文首发于:行者AI


我相信,从某种意义上讲,强化学习是人工智能的未来。 —— 强化学习之父,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 利用​​​法进行贪婪选择出动作 a,然后执行动作 a,得出下一状态 s'以及 reward r



其中:s 代表当前状态,a 表示当前的行为,α是学习率,r 是奖励值,a*表示当前可选行为集,γ是折扣率,也就是当前奖励的价值权重。


在此附上主要代码:


# 更新Sdef 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 = 0is_terminal = Falsestep_count = 0while 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 的公式如下:



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


s = 0is_terminal = Falsestep_count = 0a = 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,到达陷阱或者奖励点都视为游戏结束。

3.2 结果对比和分析


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

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


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


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

4. 总结

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



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

发布于: 2 小时前阅读数: 4
用户头像

行者AI

关注

行者AI,为游戏插上人工智能的翅膀。 2020.12.18 加入

行者AI(成都潜在人工智能科技有限公司)专注于人工智能在游戏领域的研究和应用,凭借自研算法,推出游戏AI、智能内容审核、数据平台等产品服务。

评论

发布
暂无评论
强化学习中,Q-Learning与Sarsa的差别有多大?