问题标签 [q-learning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1856 浏览

machine-learning - 如何在马尔可夫决策过程中学习奖励函数

在Q-learning期间更新 R(s) 函数的适当方法是什么?例如,假设一个代理访问状态 s1 五次,并获得奖励 [0,0,1,1,0]。我应该计算平均奖励,例如 R(s1) = sum([0,0,1,1,0])/5?或者我应该使用一个移动平均线来赋予该州最近收到的奖励值更大的权重?我读过的大多数关于 Q 学习的描述都将 R(s) 视为某种常数,并且似乎从未涵盖随着经验的积累,随着时间的推移如何学习这个值。

编辑:我可能将 Q-Learning 中的 R(s) 与Markov Decision Process中的 R(s,s') 混淆了。问题仍然相似。在学习 MDP 时,更新 R(s,s') 的最佳方法是什么?

0 投票
7 回答
56467 浏览

artificial-intelligence - Q-learning 和 SARSA 有什么区别?

虽然我知道SARSA是 on-policy 而Q-learning是 off-policy,但在查看他们的公式时(对我来说)很难看出这两种算法之间有什么区别。

根据《强化学习:简介》一书(Sutton 和 Barto 着)。在 SARSA 算法中,给定一个策略,对应的动作值函数 Q(在状态 s 和动作 a,时间步长 t),即 Q(s t , a t ),可以更新如下

Q(s t , a t ) = Q(s t , a t ) + α*(r t + γ*Q(s t+1 , a t+1 ) - Q(s t , a t ))

另一方面,Q-learning 算法的更新步骤如下

Q(s t , a t ) = Q(s t , a t ) + α*(r t + γ*max a Q(s t+1 , a) - Q(s t , a t ))

也可以写成

Q(s t , a t ) = (1 - α) * Q(s t , a t ) + α * (r t + γ*max a Q(s t+1 , a))

其中 γ (gamma) 是折扣因子,r t是在时间步 t 从环境收到的奖励。

这两种算法的区别在于 SARSA 只查找下一个策略值,而 Q-learning 查找下一个最大策略值吗?

TLDR(和我自己的答案)

感谢自从我第一次提出这个问题以来所有回答这个问题的人。我用 Q-Learning 制作了一个github repo,并凭经验理解了其中的区别。这一切都取决于您如何选择下一个最佳操作,从算法的角度来看,这可以是平均值最大最佳操作,具体取决于您选择实现它的方式。

另一个主要区别是这种选择何时发生(例如,在线离线)以及如何/为什么会影响学习。如果您在 2019 年阅读这篇文章并且更喜欢动手实践,那么玩 RL 玩具问题可能是了解差异的最佳方式。

最后一个重要的注意事项是,Suton 和 Barto 以及 Wikipedia对于下一个状态的最佳/最大动作和奖励经常有混合、混淆错误的公式表示:

r(t+1)

实际上是

r(t)

希望这可以帮助任何人陷入困境。

0 投票
6 回答
32018 浏览

algorithm - 如何将强化学习应用于连续动作空间?

我试图让代理学习在强化学习设置中最好地执行某些任务所需的鼠标移动(即奖励信号是学习的唯一反馈)。

我希望使用 Q-learning 技术,但是虽然我找到了一种将这种方法扩展到连续状态空间的方法,但我似乎无法弄清楚如何解决连续动作空间的问题。

我可以强制所有鼠标移动具有一定的幅度并且仅在一定数量的不同方向上,但是任何使动作离散的合理方法都会产生巨大的动作空间。由于标准 Q-learning 要求智能体评估所有可能的动作,因此这种近似在任何实际意义上都不能解决问题。

0 投票
2 回答
189 浏览

machine-learning - 在 Q 学习中具有两个以上动作的玻尔兹曼探索

我在 Q-learning 中使用 Boltzman 探索,每个状态至少有 10 个动作。我知道只有两个动作,玻尔兹曼探索可以非常简单地应用如下:

  1. 使用玻尔兹曼探索方程计算两个动作的 pr1 和 pr2。
  2. 生成一个随机数r
  3. 假设pr1>pr2。如果 r<=pr1,采取对应概率 pr1 的动作。如果 r>pr1,则采取对应于 pr2 的动作。

但是,我怎样才能用 10 个动作做到这一点?在每个决策步骤,我都会更新所有动作的概率。这给了我最佳动作概率最高的所有动作的概率分布。在这种情况下如何使用玻尔兹曼探索来选择动作?

0 投票
1 回答
2316 浏览

optimization - Q-学习价值更新

我正在使用 Q 学习算法对设备进行电源管理。该设备有两种电源模式,即空闲和睡眠。当设备处于睡眠状态时,处理请求会缓存在队列中。Q 学习算法寻求最小化成本函数,该成本函数是即时功耗和动作引起的延迟的加权和。

在每个状态下,学习算法都会采取行动(执行超时值)并评估在下一个状态下采取的行动的效果(使用上述公式)。通过执行预定义超时值池中的某些超时值来执行这些操作。上式中的参数lambda是功率性能参数 ( 0 _< lambda < 1 )。它定义了算法是应该寻找节能(lambda-->1)还是应该寻找最小化延迟(lambda-->0)。每个请求的延迟计算为排队时间 + 执行时间
问题是学习算法总是倾向于睡眠状态下的小超时值。这是因为小超时值的平均延迟总是较低,因此它们的成本也很小。当我将 lambda 的值从较低更改为较高时,我看不到最终输出策略有任何影响。该策略始终选择小的超时值作为每个状态中的最佳操作。我尝试使用总体平均功耗和总体平均延迟来计算状态-动作对的成本,而不是每个状态的平均功率和平均延迟,但这没有帮助。我还尝试使用所有请求计算每个状态-动作对中成本的总能耗和总延迟,但这也无济于事。我的问题是:对于这种情况,什么是更好的成本函数?我更新Q值如下:

其中alpha是学习率(缓慢下降),而gamma=0.9是折扣因子。

0 投票
3 回答
1740 浏览

machine-learning - Q-Value 无限制增加,在 Q-Learning 中重复相同动作后重复奖励的结果

我正在通过一个简单的应用程序开发一个简单的 Q-Learning 实现,但有些事情一直让我感到困惑。

让我们考虑 Q-Learning 的标准公式

让我们假设这种状态K有两种可能的动作,既授予我们的代理奖励,RR'授予AA'

如果我们遵循一种几乎完全贪婪的方法(假设我们假设 0.1 epsilon),我将首先随机选择其中一个动作,例如A. 下一次,我可能(90% 的时间)会再次选择A,这将导致 Q(K, A) 不断增长和增长,即使我碰巧尝试A',它的回报也可能是在与 A 相同的量级上,我们将陷入在接下来的学习过程中几乎不可能从第一次猜测中“恢复”的情况。

我想这一定不是这样,否则代理基本上不会学习——它只是遵循一个简单的方法:像你第一次那样做所有事情。

我错过了什么吗?我知道我可以调整 alpha 值(通常,随着时间的推移降低它),但这绝不会改善我们的情况。

0 投票
1 回答
1097 浏览

artificial-intelligence - 平均奖励问题的 SARSA 算法

我的问题是关于在强化学习中使用 SARSA 算法来解决一个不折不扣的、持续的(非偶发的)问题(它可以用于这样的问题吗?)

我一直在研究 Sutton 和 Barto 的教科书,他们展示了如何修改 Q-learning 算法,以便将其用于未折扣的问题。他们在第 6.7 章中将新算法(针对未折扣问题)称为 R 学习。基本上,在 R 学习中,每次迭代 Q(s,a) 的更新规则是:

Q(s,a) = Q(s,a) + alpha * [r - rho + max_a{Q(s',a)} - Q(s,a)]

这里,只有在状态 s 选择了贪婪动作时,rho 才会在每次迭代中更新。rho 的更新规则是:

rho = rho + beta * [r - rho + max_a{Q(s',a)} - max_a{Q(s,a)}]

(这里,alpha 和 beta 是学习参数。)现在,我的问题是关于 SARSA,而不是 Q-learning。我想修改 SARSA 算法,使其适用于平均奖励(未折扣)问题,就像修改 Q-learning 以用于平均奖励问题一样(我不知道这是否可能?) . 但是,在文献中,我找不到关于如何针对平均奖励问题修改 SARSA 的确切解释。

这是我对如何在未折现问题中使用 SARSA 的猜测。我猜想更新规则应该是:

Q(s,a) = Q(s,a) + alpha * [r - rho + Q(s',a') - Q(s,a)],

其中 a' 是在状态 s 实际选择的动作。这似乎相当明显。但是 rho 应该如何更新呢?我的猜测是,由于 SARSA 是一种 on-policy 算法,因此 rho 应该始终在每次迭代时更新——无论是否在 s 处选择了贪婪动作——并且更新规则应该是:

rho = rho + beta * [r - rho + Q(s',a') - Q(s,a)]。

有人能告诉我这是否正确吗?还是应该根据状态 s 和 s' 的最优动作来更新 rho?

0 投票
2 回答
1184 浏览

machine-learning - Qlearning - 定义状态和奖励

我需要一些帮助来解决使用 Q 学习算法的问题。

问题描述:

我有一个火箭模拟器,其中火箭走的是随机路径,有时也会坠毁。火箭有 3 种不同的引擎,可以开启或关闭。根据启动的发动机,火箭会飞向不同的方向。

提供关闭/打开引擎的功能

在此处输入图像描述

任务:

构造一个始终朝上的Q-learning控制器。

读取火箭角度的传感器可作为输入。

我的解决方案:

我有以下状态:

在此处输入图像描述

我还有以下操作:

  • 所有引擎关闭
  • 左引擎开启
  • 右引擎开启
  • 中置引擎开启
  • 左右开
  • 左边和中间
  • 右边和中间

以及以下奖励:

角度 = 0,奖励 = 100 所有其他角度,奖励 = 0

问题:

现在问题来了,这是奖励和状态的一个好的选择吗?我可以改进我的解决方案吗?其他角度有更多的奖励会更好吗?

提前致谢

0 投票
1 回答
3937 浏览

matlab - 神经网络中的 Q 学习 - Mountain Car

所以我一直在阅读关于 Q 学习和神经网络的文章。我相信我对此有正确的想法,但是我想对我的 NN 代码和 Q 值更新有第二意见。

我已经创建了山地车问题的 MatLab 实现和我的神经网络,我正在为 NN 部分使用神经网络工具箱。

它是一个包含 2 个输入、5-20 个隐藏(用于实验)和 3 个输出(对应于山地车中的动作)的网络

隐藏单元设置为 tansig,输出为 purelin,训练函数为 traingdm

这是正确的步骤吗?

  1. 获得初始状态 s -> [-0.5; 0.0]
  2. 使用 Qs=net(s) 运行网络……这给了我一个 1x3 Q 值矩阵,对应于初始状态 s 中的每个动作。
  3. 使用 e-greedy selection 选择一个动作
  4. 模拟山地车,得到s'(执行动作a的新状态)
  5. 使用 Qs_prime=net(s') 运行网络以获得 s' 的 Q 值的另一个矩阵

现在我不确定这是否正确,因为我必须弄清楚如何正确更新 NN 的权重。

  1. 计算 QTarget,即 =reward+gamma* 来自 s' 的最大 Q 值?
  2. 使用初始 s 中的 Q 值创建一个目标矩阵 (1x3),并将执行的动作 a 的相应 Q 值更改为 QTarget
  3. 使用 net=Train(net,s,Targets) 更新 NN 中的权重
  4. s=s'
  5. 对新的 s 重复上述所有操作

例子:

这是我的 Matlab 代码(我使用 R2011 和神经网络工具箱)

谢谢

0 投票
1 回答
136 浏览

machine-learning - 使用神经网络在线估计 Q-Table

当我在强化学习中使用 Q-Table 保存状态动作时,某些状态永远不会(或很少)发生并且状态动作值在最大迭代之前保持为零,因此我决定使用神经网络在线估计 Q-Table 而不是使用Q 表。

哪种类型的神经网络可以更准确地估计这类问题,这个解决方案对我有帮助吗?