帖子

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

[复制链接]

该用户从未签到

38020  楼主| 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搬运工自行翻译,如有错误,欢迎指正!


喜欢就点个赞哦~

我会持续更新哒