用Q-Learning深入到强化学习

骑士和公主

用Q-Learning深入到强化学习

假设你是一名骑士,你需要拯救被困在上面地图上显示的城堡中的公主。

您可以一次移动一个图块。敌人不能,而是落在与敌人相同的瓦片上,你就会死亡。 你的目标是以最快的路线走城堡。这可以使用“积分评分”系统进行评估。

你 在每一步都会失去-1(每一步的失分都会 帮助我们的球员变得更快)。

如果你碰到敌人,你会失去-100分,并且情节结束。

如果你在城堡中赢了,你会得到+100分。

问题是:你如何创建一个能够做到这一点的代理?

这是第一个策略。假设我们的代理试图去每个瓷砖,然后着色每个瓷砖。绿色表示“安全”,否则表示红色。

用Q-Learning深入到强化学习

然后,我们可以告诉我们的代理只采取绿色瓷砖。

但问题是这并不是真的有用。当绿瓦彼此相邻时,我们不知道最好的瓦片。 所以我们的代理可以通过尝试找到城堡来陷入无限循环!

介绍 Q -table

下面是第二个策略: 创建一个表, 在这里我们将计算每个状态下每个操作的最大预期未来回报。

每个状态 (平铺) 允许四种可能的操作。它们向左、向右、向上或向下移动。

用Q-Learning深入到强化学习

0是不可能的动作(如果你在左上角,你不能左转或上转!)

这被称为Q表。列将是四个动作(左,右,上,下)。行将是状态。每个单元格的价值将是该给定状态和行动的最大期望未来报酬。

用Q-Learning深入到强化学习

Q学习算法:学习动作值函数

行动价值函数(或“Q函数”)需要两个输入:“状态”和“行动”。它返回该行动在该状态下的预期未来回报。

用Q-Learning深入到强化学习

我们可以看到这个Q函数作为一个阅读器来滚动Q表,找到与我们状态相关的行,以及与我们行为相关的列。它从匹配的单元格返回Q值。这是“预期的未来奖励”。

用Q-Learning深入到强化学习

但在我们探索环境之前,Q表给出了相同的任意固定值(大部分时间为0)。当我们探索环境时, Q表将通过使用Bellman方程迭代更新Q(s,a)给我们一个更好更好的逼近(见下文!)。

Q学习算法过程

用Q-Learning深入到强化学习

Q学习算法的伪代码

步骤1:初始化Q值

我们用m个列(m =动作次数)和n行(n =状态数)构建一个Q表。我们初始化值为0。

用Q-Learning深入到强化学习

步骤2:终止(或直到学习停止)

步骤3到5将重复,直到我们达到最大的剧集数量(由用户指定)或直到我们手动停止训练。

步骤3:选择一个动作

选择一个动作一个在当前状态小号基于当前Q值的估计。

但是......如果每个Q值等于零,我们可以采取什么行动?

这个想法是,在开始时, 我们将使用epsilon贪婪策略:

  • 我们指定一个勘探率“epsilon”,我们在开始时将其设置为1。这是我们随机进行的步骤的比率。一开始,这个比率必须达到最高值,因为我们对Q表中的值一无所知。这意味着我们需要通过随机选择我们的行为来进行大量的探索。

  • 我们生成一个随机数。如果这个数字>ε, 那么我们会做“剥削”(这意味着我们使用我们已经知道的在每一步选择最佳行动)。否则,我们会进行探索。

  • 这个想法是我们在Q函数训练开始时必须有一个很大的epsilon。然后,随着代理人对估计Q值更有信心,逐步减少它。

用Q-Learning深入到强化学习

步骤4-5:评估!

采取的操作一个观察结果状态S'和奖励河 现在更新函数Q(s,a)。

我们采取的措施一个是我们在第3步选择,然后执行此操作将返回我们一个新的状态S'和奖励[R (正如我们在强化学习过程中看到的第一篇文章)。

然后,为了更新Q(s,a),我们使用Bellman方程:

用Q-Learning深入到强化学习

这里的想法是像这样更新我们的Q(状态,行动):

New Q value =

Current Q value +

lr * [Reward + discount_rate * (highest Q value between possible actions from the new state s’ ) — Current Q value ]

我们举个例子:

用Q-Learning深入到强化学习

  • 一个奶酪(One cheese)= +1

  • 两个奶酪(Two cheese )= +2

  • 大堆奶酪(Big pile of cheese)= +10(结束)

  • 如果你吃鼠药(If you eat rat poison)= -10(结束)

第1步:我们启动我们的Q表

用Q-Learning深入到强化学习

第2步:选择一个动作

从起始位置,您可以选择向右或向下。因为我们有很高的ε率(因为我们对环境一无所知),我们随机选择。例如......向右移动。

用Q-Learning深入到强化学习

用Q-Learning深入到强化学习

我们随意移动(例如,右)

我们找到了一块奶酪(+1),现在我们可以更新开始和结束时的Q值。我们通过使用贝尔曼方程来做到这一点。

步骤4-5:更新Q函数

用Q-Learning深入到强化学习

首先,我们计算Q值的变化ΔQ(开始,右侧)

然后我们将初始Q值加到ΔQ(start,right)乘以学习率。

把网络学习速度看作是网络放弃新网络价值的一种方式。如果学习率为1,则新的估计值将是新的Q值。

用Q-Learning深入到强化学习

更新的Q表

我们刚刚更新了我们的第一个Q值。现在我们需要一直这样做,直到学习停止。

相关推荐