Q-learning
一、介绍
【Q-learning】Q-learning 算法本质上是在求解函数Q(s,a). 如下图,根据状态s和动作a, 得出在状态s下采取动作a会获得的未来的奖励,即Q(s,a)。 然后根据Q(s,a)的值,决定下一步动作该如何选择。
文章图片
image.png 二、算法
- Q-learning 算法中我们通过获得Q(s,a)函数来寻找在某个状态下的最好的动作,使得最终获得的累计奖励最大
- 其Q(s,a)的计算方法是利用贝尔曼方程
- 如下图是常见的两种形式:
文章图片
image.png - 它最简单的版本,算法可描述如下:
- 初始化状态 s
- 进入 episode 循环
- 基于状态s根据Q 或随机选择一个动作 a
- 执行动作a, 从环境获得 奖励r和下一个状态
- 更新Q值:
- 若 episode未结束,回到 2
文章图片
image.png 这种形式更多的用在 Actor-Critic 算法中,它表示一个状态 s, 在某个策略下,其 value function 是多少,即状态 s 在当前策略下会获得多少未来的奖励。其V值的更新方式也是利用了贝尔曼方程。这里不做太多的讨论。
三、例子 下面举一个例子加深以下了解。
以下是一个迷宫, s 表示起始点,e表示终点, t表示陷阱。规则:每走一步,reward 减 1, 若进入陷阱, reward 减100, 若到达终点, reward 加 100.
文章图片
用 Q-table 解决 Q-table 的关键就是要建立一张映射表,这张表是 状态-动作 到 Q值的映射。如根据上面的问题,我们建立如下表格:
文章图片
image.png 其中行表示状态(用坐标表示), 列表示动作, 表格的值就是 Q(s,a), 其实这个Q就表示 quality的意思。
具体过程:
- 初始化表格,一开始表格没有任何数据
- 初始化状态 s, 状态 s从起点开始
- 根据Q-table 查询状态 s 对应的 Q(s,a), 如果查不到,向表格插入新的数据,Q(s,a)可以初始化为0; 若能查找到Q(s,a),那么我们根据 e-greedy 算法,以一定的概率随机选择动作,或挑选最大的Q(s,a)值所对应的动作作为下一个动作。
- 执行动作a, 从环境获得 奖励r和下一个状态
- 更新Q值:
- 若 episode未结束,回到 3
文章图片
Selection_113.png 把原来的 Q-table 替换成 神经网络后,其算法并没有太大的变化。需要注意的是, 网络的Loss 函数是
引用
https://jizhi.im/blog/post/intro_q_learning
https://blog.csdn.net/Young_Gy/article/details/73485518
http://mnemstudio.org/path-finding-q-learning-tutorial.htm
https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/2-2-A-q-learning/
https://www.bilibili.com/video/av24724071/?p=3
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 开学第一天(下)
- 一个人的碎碎念
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 第326天
- Shell-Bash变量与运算符