Q-Learning的一个简单的教程

  • Post author:
  • Post category:其他



阅读的文献中涉及到了Q-learning,是与机器学习有关的,虽然与自己方向并不相关。但作为一种思想值得学习。故翻译如下,不当之处,恳请批评指正!

原文地址:http://mnemstudio.org/path-finding-q-learning-tutorial.htm


这篇教程通过一个简单而且好理解的数字例子来介绍Q-Learning的概念。这个例子描述了一个Agent是如何通过无监督训练(unsupervised training)来学习一个未知环境的。将下面的这个例子与之后的源代码的例子相比较会让你觉得很有帮助。假设在一个建筑物中我们有五个房间,这五个房间通过门相连接,如下图所示:将房间从0-4编号,外面可以认为是一个大房间,编号为5.注意到1、4房间和5是相通的。





我们可以把这些房间和门化成一个图,每个节点代表一个房间,每个连接代表一个门。





对这个例子来说,我们可以把Agent放到任何一个房间中,然后从这个房间走出这个建筑物(这就是我们的目标房间,即房间5)。为了把5号房间设成目标房间,我们为每一扇门(节点之间的连接线)分配一个回报值。直接通向目标的门的回报值为100,没有与目标房间直接相连的其他门的回报值为0。因为门都是双向的(0可以到4,4也可以到0),因此每个门由两个箭头来表示。每个箭头都有有一个立即回报值,如下所示:





当然,从房间5到房间5自身的回报值应该是100。而所有直接通向这个目标房间的连接线的回报值为100。在Q-Learning中,目标就是要到达有最高回报值的状态。所以如果Agent到达了目标,它就会一直在那。这种类型的目标被称为吸收目标(absorbing goal)。

想象一下,我们的Agent是一个不会说话的虚拟机器人,但是它可以从经验中学习。Agent可以从一个房间走到另一个房间但是对于周围的环境没有任何了解,不知道哪一种门的顺序可以把它带到外面。


假设我们要为一个Agent从这个建筑物中任何一个房间撤离出去来简单建模,假设我们有一个Agent在房间2中,我们想让这个Agent学着到达这个建筑物的外面。





Q-Learning中的术语包括状态(state)和动作(action)。


我们称包括建筑物外面的所有房间为状态,Agent从一个房间到另一个房间的移动为动作,在图中,一个状态被画成一个节点,而一个动作被箭头表示出来。





假设Agent是在2号房间(状态2)中,那么它可以从2号房间走到3号房间,因为他们是相通的。而从2号房间Agent不能直接走到1号房间,因为没有一个门(所以没有箭头)直接把1号和2号房间连接起来。从状态3.它可以走到状态1,4,或者回到2(注意看与状态3相关的所有箭头)。如果Agent是在状态4,那么它所有可能的动作是走向状态0,5或者3。如果它在状态1,那么它可以到达状态3或者状态5,从状态0,它只可以回到状态4。


我们可以把状态图和即时回报值填入下面的回报表中,即R矩阵





上图中-1代表空值,比如两个状态之间没有箭头。

现在我们添加一个相似的矩阵,“Q”,到我们Agent的大脑中,这个矩阵代表了Agent通过经验所学到的,Q矩阵的行代表Agent的当前状态,Q矩阵的列代表了可能到达下一状态的动作(即状态之间的箭头)。

Agent开始什么也不知道,矩阵Q被初始化为0。本例中为了叙述方便,我们假设状态数是已知的(为6)。如果我们不知道有多少状态,那么矩阵Q可以从只有一个元素开始扩展。如果发现了一个新的状态,在矩阵Q中新添加一行一列是很方便的。

Q-Learning的转换规则是一个非常简单的方程:

Q(state, action) = R(state, action) + Gamma * MaxQ(next state, all actions)

根据这个公式,Q矩阵一个元素的值等于R矩阵中相应元素的值加上学习变量γ乘以到下一状态所有动作的回报值的最大值。

我们的虚拟Agent通过经验去学习,没有老师教(这被成为无监督学习)。Agent将会从一个状态到另一个状态这样去探索,直到它到达目标状态。我们称每一次这样的探索为一个场景(episode)。每个场景就是Agent从起始状态到达目标状态的过程。每次Agent到达了目标状态,程序就会进入到下一个场景中。

Q-Learning算法的过程如下:

1.设置γ值,在矩阵R中设置环境的回报值

2.将矩阵Q初始化为0

3.For each episode:

Select a random initial state.

Do While the goal state hasn’t been reached.

Select one among all possible actions for the current state.

Using this possible action, consider going to the next state.

Get maximum Q value for this next state based on all possible actions.

Compute: Q(state, action) = R(state, action) + Gamma * MaxQ(next state, all actions)

Set the next state as the current state.

End For

End Do

以上算法是Agent用来从周围环境中学习的,每个场景都等价于一个训练过程,每个训练过程中,Agent去探索环境(由矩阵R表示),接收到回报值(如果有的话),直到达到目标状态。这种训练的目的是改善Agent的大脑,即不断更新矩阵Q。更多的训练就会有更好的矩阵Q。既然这样,如果矩阵Q是已经被改善了的,那么Agent就不会四处乱逛,或者在同一个房间中来回游走,而是找到最快的路线到达目标状态。

γ值在0到1之间变化(0<=γ<1),如果γ值接近0,Agent倾向于只考虑立即回报值;如果γ值接近1,Agent将以更大的权重去考虑未来回报值,愿意将回报延后。

Agent仅仅是跟踪从起始状态到目标状态的状态序列来使用矩阵Q。这个算法在矩阵Q中为当前状态找到有最高回报值的下一步动作。

使用Q矩阵的算法:

1.设置 当前状态=起始状态

2.从当前状态开始,找到有最高Q值的动作

3.设置 当前状态=下一个状态(在步骤2种找到的)

4.重复步骤2和3,直到当前状态=目标状态

以上算法将会返回从起始状态到目标状态的状态序列。