Q-learning

一、介绍

Q-learning 算法本质上是在求解函数Q(s,a). 如下图,根据状态s和动作a, 得出在状态s下采取动作a会获得的未来的奖励,即Q(s,a)。 然后根据Q(s,a)的值,决定下一步动作该如何选择。

Q-learning_第1张图片
image.png

二、算法

  • Q-learning 算法中我们通过获得Q(s,a)函数来寻找在某个状态下的最好的动作,使得最终获得的累计奖励最大
  • 其Q(s,a)的计算方法是利用贝尔曼方程
  • 如下图是常见的两种形式:


    Q-learning_第2张图片
    image.png
  • 它最简单的版本,算法可描述如下:
  1. 初始化状态 s
  2. 进入 episode 循环
  3. 基于状态s根据Q 或随机选择一个动作 a
  4. 执行动作a, 从环境获得 奖励r和下一个状态
  5. 更新Q值:
  6. 若 episode未结束,回到 2

还有另一种形式的Q-learning, 它是基于 value function (), 如下图所示

Q-learning_第3张图片
image.png

这种形式更多的用在 Actor-Critic 算法中,它表示一个状态 s, 在某个策略下,其 value function 是多少,即状态 s 在当前策略 下会获得多少未来的奖励。其V值的更新方式也是利用了贝尔曼方程。这里不做太多的讨论。

三、例子

下面举一个例子加深以下了解。
以下是一个迷宫, s 表示起始点,e表示终点, t表示陷阱。规则:每走一步,reward 减 1, 若进入陷阱, reward 减100, 若到达终点, reward 加 100.


Q-learning_第4张图片

用 Q-table 解决

Q-table 的关键就是要建立一张映射表,这张表是 状态-动作Q值的映射。如根据上面的问题,我们建立如下表格:

Q-learning_第5张图片
image.png

其中行表示状态(用坐标表示), 列表示动作, 表格的值就是 Q(s,a), 其实这个Q就表示 quality的意思。

具体过程:

  1. 初始化表格,一开始表格没有任何数据
  2. 初始化状态 s, 状态 s从起点开始
  3. 根据Q-table 查询状态 s 对应的 Q(s,a), 如果查不到,向表格插入新的数据,Q(s,a)可以初始化为0; 若能查找到Q(s,a),那么我们根据 e-greedy 算法,以一定的概率随机选择动作,或挑选最大的Q(s,a)值所对应的动作作为下一个动作。
  4. 执行动作a, 从环境获得 奖励r和下一个状态
  5. 更新Q值:
  6. 若 episode未结束,回到 3

用 network 解决

假设我们的状态空间特别大,在这种情况下如果还坚持用 Q-table 来计算Q(s,a)的话,那么最终的Q-table对特别大,甚至计算机无法存储。为了解决这个问题,我们引入带参数的神经网络去近似Q(s,a)函数。

Q-learning_第6张图片
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

你可能感兴趣的:(Q-learning)