帖子

[经验分享] 通过 Q-learning 深入理解强化学习(下)

[复制链接]
  • TA的每日心情

    2019-12-5 09:20
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    44060  楼主| AI 搬运工 发表于 2019-2-14 08:14:22 1#
    Q-Learning算法:学习动作值函数(Action Value Function)

    学习动作值函数(也称Q函数)有两个输入值,分别为“state”和“action”。它将返回在该状态下(state)执行该动作(action)后的预期未来奖励。





    我们可以认为,Q函数即是一个在Q-table上滚动的读取器,我们可以用它来寻找与当前状态(state)关联的行,以及与我们的动作(action)相关联的列。它会从相匹配的单元格中返回Q值,该值便是“预期未来奖励”。





    在我们探索这个环境(environment)之前,Q-table会给出同一个任意固定值(多数为0)。随着我们对环境的探索,Q-table将会利用贝尔曼方程迭代更新Q(s,a)以给出一个更好的近似值(见下文!)。

    Q-Learning算法流程




    Step 1:初始化Q值
    建立一个Q-table,横轴为m(动作值),纵轴为n(状态值)。初始值为0。





    Step 2: 终身学习
    重复步骤3-5,直到达到episode的最大值(由用户指定),或者手动停止训练。

    Step 3:选择一个动作(action)
    基于当前Q值估计得出的状态s下选择一个动作a。

    但是……如果每个Q值都等于0,那么我们一开始应该选择什么动作呢?

    在这里,我们就可以了解年前那篇文章里所提及的exploration/exploitation tradeoff的重要性了。

    思路就是,在一开始,我们就采取epsilon贪婪策略。

    1)指定探索速率epsilon,从1设置起,作为我们随机采取的步长。一开始,这个速率应该处于最大值,因为我们并不知道Q-table中的任何一个值。这也就意味着,我们要通过随机选择动作做出更多的exploration(探索)。

    2)生成随机数。如果该数大于epsilon值,那么我们就开始“exploitation”(这也就意味着,我们利用的已知信息来选择每一步的最佳动作)。否则,我们就开始“exploration”。





    Step-4-5: 评估(Evaluate)
    实施动作a,观察结果状态s’和奖励r。现在,更新函数Q(s,a).

    实施步骤3中选择的动作a,得到一个新的状态 s’和奖励r(正如我们在强化学习流程中看到的)。

    然后,利用贝尔曼方程式更新Q(s,a),





    如下方代码所示,更新 Q(state,action)





    举个例子:





    一个芝士=+1

    两个芝士=+2

    大堆芝士=+10(本轮结束)

    老鼠药=-10(本轮结束)

    Step 1:启动Q-table

    初始化Q-table


    Step 2: 选择一个动作(action)
    在起点时,你可以选择向右或是向上。因为epsilon速率比较大(即使我们对环境并不了解),所以选择随机。比如说……向右走。






    随机移动(比如说,向右)





    我们发现了一块芝士(+1),那么现在我们可以更新最初的Q值并且向右移动。如何实现这一行径呢?贝尔曼方程式可以做到。

    Step 4-5:更新Q函数








    1)首先,计算Q值ΔQ的变化(开始,向右)

    2)然后,将初始化Q值与ΔQ(开始,向右)和学习率的积相加。

    通过学习率,我们可以知道,网络在生成新值时,是有多么快地遗弃旧值。如果学习率是1,那么新的预估值就是新的Q值。


    更新后的Q-table


    至此,我们已经完成更新了初始Q值,现在,我们需要反复操作,直到停止学习

    实施Q-Learning算法
    详见视频:
    https://youtu.be/q2ZOEFAaaI0



    大家好,我是AI搬运工
    致力于将国外的AI好文,翻译成大家都懂的中国话!
    本文属于AI搬运工自行翻译,如有错误,欢迎指正!


    喜欢就点个赞哦~

    我会持续更新哒