介绍
Q -learning是一种无模型 强化学习算法,用于学习特定状态下动作的价值。它不需要环境模型(因此“无模型”),并且可以处理随机转换和奖励的问题,而无需适应。
算法
在 Q -Learning 算法中,目标是使用贝尔曼最优方程迭代学习最优 Q 价值函数。 为此,我们将所有 Q 值存储在一个表中,我们将使用 Q-Learning 迭代在每个时间步更新该表:
α
\alpha
α 学习率,是需要调整的重要参数,该参数用于控制收敛。
γ
\gamma
γ 折扣系数,决定了未来奖励的重要性。其值在
[
0
,
1
]
[0,1]
[0,1] 之间:
- 为 0,只考虑当前的奖励;
- 接近 1,使其争取长期的高额奖励;
举例
- 创建Q-table
“Q”代表动作的“质量”。
- **每个状态(图块)允许四种可能的操作。**它们向左、向右、向上或向下移动。所以根据上图我们可以抽象成如下:
- 从计算的角度来说,我们可以把这个网格转化为一个表格:
每个 Q 表分数将是如果我在给定最佳策略的情况下采取该行动,我将获得的最大预期未来奖励——我们只是改进 Q 表以始终选择最佳操作。 - 学习动作价值函数
动作价值函数(或“Q 函数”)采用两个输入:“状态”和“动作”。它返回该状态下该操作的预期未来奖励。
Q 函数遍历 Q 表以查找与我们的状态关联的行以及与我们的操作关联的列。它返回匹配单元格的 Q 值。这就是“预期的未来回报”。
- Q-Learning学习过程
-
步骤 1:初始化 Q 值
我们构建一个 Q 表,其中包含m列(m= 动作数)和n行(n= 状态数),并将值初始化为 0; -
步骤 2:终止(或直到停止学习)
重复步骤 3 到 4 ,直到我们达到最大集数(由用户指定)或直到我们手动停止训练; -
步骤 3:选择动作
根据当前 Q 值估计,选择当前状态 s 以及一下步动作 a;
这里有一个策略——一开始 我们将使用 epsilon 贪婪策略:- 我们指定一个探索率“epsilon”,我们一开始将其设置为 1。这是我们随机执行的步数。一开始,这个速率必须是最高值,因为我们对 Q 表中的值一无所知。这意味着我们需要通过随机选择我们的行动来进行大量探索。
- 我们生成一个随机数。如果这个数字 > epsilon ,那么我们将进行“利用”(这意味着我们使用我们已经知道的信息来选择每一步的最佳操作)。否则,我们将进行探索。
- 这个想法是,我们在 Q 函数训练开始时必须有一个大的 epsilon。然后,随着智能体对估计 Q 值更加自信,逐渐减少它。
-
步骤 4:评估
采取行动a并观察结果状态s’和奖励r。现在更新函数 Q(s,a)。
为了更新 Q(s,a),我们使用贝尔曼方程:
实施
- Q-table
最简单的Q学习将数据存储在表中。这种方法随着状态/动作数量的增加而失效,因为代理访问特定状态并执行特定动作的可能性越来越小。
- 行代表潜在的状态,
- 列代表动作;
- 交叉的单元内表示该状态下的该动作的预期总奖励;
-
函数近似
-
量化
步骤
- 定义一个问题
- 创建一个环境
- 创建表
- 开始学习
参考文档
[1] Q-Learning Algorithm: From Explanation to Implementation
[2] Q-Learning wiki
[3] Q-Table Reinforcement Learning
[4] Diving deeper into Reinforcement Learning with Q-Learning