问题标签 [reinforcement-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.
reinforcement-learning - Q学习算法——在循环(吸收)状态上的收敛
这个问题与Q-learning有关。
请考虑以下几点:
- 一个循环(吸收)状态 J - 从 J 到 J 的奖励为 100(J 是最终状态 - 从 I 到 J 的奖励也是 100)
- 伽马值 1
- 阿尔法值 0.5
假设从 J 到 J 的转换已经获得了 100 的 Q 值。新的 Q 值由下式给出: 100+0.5(100+1(100)-100) 其中 Q(max next possible states) 是 100,就好像你是在状态 J 中,要获得最大可能的下一个 Q 值,您将循环(因此最大下一个可能 Q 值是它当前的值-100)。这给了你一个新的 Q 值 150。把这个得出一个合乎逻辑的结论,每次你在 J 上循环时,Q 值都会上升 50,并且那个特定的 Q 值永远不会收敛,这对我来说似乎是错误的(这是错误的吗? ).(其他值覆盖)。我已经做了很多次这个实验,但仍然不确定。如果可以的话,请澄清上述观点。在我的大学里,我们被教导的 Q 学习非常糟糕,我有一个半星期后要交一份课程作业。
谢谢!
machine-learning - 具有可变动作的强化学习
所有强化学习我读过的算法通常应用于具有固定数量动作的单个代理。是否有任何强化学习算法可以在考虑可变数量的动作的同时做出决策?例如,您将如何在一个玩家控制 N 个士兵的计算机游戏中应用 RL 算法,并且每个士兵根据其条件有随机数量的动作?您无法为全局决策者(即“将军”)制定固定数量的行动,因为随着士兵的创建和杀死,可用的行动会不断变化。而且你不能在士兵级别制定固定数量的行动,因为士兵的行动是基于其直接环境的条件。如果一个士兵看不到对手,那么它可能只能走路,
optimization - 强化学习 - 给定分数优化权重
我正在做一个项目,该项目有一个模拟机器人通过移动到预定义的“感应位置”来探索未知但有图案的环境(例如办公楼)。换句话说,机器人必须在每个点从可用的可见位置中选择一个新的位置来移动。我们的最终目标是让机器人学习如何利用环境中的模式来优化全局探索时间。
机器人根据该位置的一些已知特征的线性组合(例如到该点的距离、从该点到所有其他点的平均距离、该点周围的区域)给它一个效用分数,从而选择下一个要移动到的位置已经探索过,等等)。我的目标是优化这个效用函数的权重,以最快的速度探索整个环境。
因为分数取决于整个探索路径,所以我不想在探索过程中改变权重。为了测试权重组合,我希望模拟机器人使用这些权重在整个环境中运行,并获得结果分数。因此,我可以创建一个 |w|+1 xn 数据数组,其中 |w| 是权重的数量,例如:
我的问题是,哪种强化学习算法最适合这个?我在文献和研究中发现的大部分内容都与分类有关,显然多元回归是行不通的。我也尝试实现一个 q-learning 算法,但这并没有真正起作用,因为根据所采用的路径和环境的结构,状态和动作的数量是可变的。我真正想要的是某种结构,它可以逐行接收数据,并确定使预期分数最大化的权重值及其组合。任何帮助/想法?谢谢。
artificial-intelligence - SARSA 算法
我无法理解 SARSA 算法: http ://en.wikipedia.org/wiki/SARSA
特别是在更新 Q 值时,什么是 gamma?s(t+1) 和 a(t+1) 使用什么值?
有人可以向我解释这个算法吗?
谢谢。
machine-learning - 如何使用视觉输入训练人工神经网络玩暗黑破坏神 2?
我目前正在尝试让 ANN 玩视频游戏,我希望能从这里的精彩社区获得一些帮助。
我已经选择了暗黑破坏神 2。因此,游戏是实时的,并且从等距的角度来看,玩家控制一个以摄像机为中心的化身。
具体来说,任务是让你的角色 x 经验值而不使其生命值降至 0,其中经验值是通过杀死怪物获得的。以下是游戏玩法的示例:
现在,由于我希望网络仅根据它从屏幕上的像素获得的信息来运行,它必须学习非常丰富的表示才能有效地播放,因为这可能需要它知道(至少隐式地)如何将游戏世界划分为对象以及如何与它们进行交互。
所有这些信息都必须以某种方式传授给网络。我这辈子都想不出怎么训练这个东西。我唯一的想法是有一个单独的程序从屏幕上直观地提取游戏中天生好/坏的东西(例如健康、金币、经验),然后在强化学习过程中使用该统计数据。我认为这将是答案的一部分,但我认为这还不够;从原始视觉输入到面向目标的行为的抽象层次太多了,无法在我的一生中训练出如此有限的反馈。
所以,我的问题是:你还能想出什么其他方法来训练一个网络来完成这项任务的至少一部分?最好不要制作数千个带标签的示例。
只是为了更多的方向:我正在寻找其他一些强化学习来源和/或任何无监督方法来在此设置中提取有用信息。或者,如果您可以想出一种无需手动标记即可从游戏世界中获取标记数据的方法,则可以使用监督算法。
更新(04/27/12):
奇怪的是,我仍在努力,似乎正在取得进展。让 ANN 控制器工作的最大秘诀是使用适合该任务的最先进的 ANN 架构。因此,我一直在使用由因式条件受限玻尔兹曼机组成的深度信念网络,我以无监督的方式(在我玩游戏的视频上)进行了训练,然后使用时间差异反向传播进行微调(即使用标准强化学习)前馈人工神经网络)。
尽管如此,仍在寻找更有价值的输入,特别是关于实时动作选择问题以及如何为 ANN 处理编码彩色图像:-)
更新(15 年 10 月 21 日):
只记得我以前问过这个问题,并认为我应该提到这不再是一个疯狂的想法。自从我上次更新以来,DeepMind 发表了他们关于让神经网络从视觉输入中玩 Atari 游戏的自然论文。事实上,唯一阻止我使用他们的架构来玩暗黑破坏神 2 的有限子集是缺乏对底层游戏引擎的访问权限。渲染到屏幕然后将其重定向到网络太慢了,无法在合理的时间内进行训练。因此,我们可能不会很快看到这种机器人在玩暗黑破坏神 2,但这只是因为它会玩开源或通过 API 访问渲染目标的东西。(也许是地震?)
c++ - C++ 强化学习和智能指针
我正在使用强化学习方法(Q、sarsa、TD(λ)、Actor-Critic、R 等)进行关于机器人感觉运动在线学习的硕士项目。我目前正在设计将使用更高级别的强化学习和更低级别的机器人 API 控制的框架。
由于状态依赖于机器人传感器并且可能(将)呈指数增长,因此我将在堆上分配它们。由于这会产生很多问题、错误等,并且由于并行化(即线程)是我想要探索的强化学习的一个方面,所以我还不确定要使用哪种智能指针。
为智能指针设计我自己的模板/类需要时间和调试,而我没有。所以,我想知道,我应该使用 STLauto_ptr
吗?我看到他们在向量中使用了问题。我应该使用boost::shared_ptr
吗?这些状态必须在许多类和算法之间共享。还是我应该使用boost::ptr_vector
?由于状态将驻留在向量中的任务容器类中,这是否足够?状态必须是共享的、可复制的、可引用的、可序列化的、非常量的、线程安全的并且不会被删除。此外,内存空间和计算时间也很重要。
对于此类任务,您推荐什么作为最佳智能 ptr 实现?
谢谢!
看来我将不得不尝试将 boost::ptr_vector 与类 State 一起使用,如果这证明效率不高,则使用 std::vector < std::unique_ptr > 并启用 0X。谢谢大家的回答和建议!
machine-learning - 什么时候应该使用支持向量机而不是人工神经网络?
我知道 SVM 被认为是“ANN 杀手”,因为它们会自动选择表示复杂性并找到全局最优值(请参阅此处了解一些 SVM 的赞美引言)。
但这里是我不清楚的地方——所有这些优越性主张是否仅适用于 2 类决策问题的情况,还是更进一步?(我假设它们适用于非线性可分类,否则没人会关心)
因此,我想澄清一些案例的样本:
- SVM 是否比具有许多类的 ANN 更好?
- 在在线环境中?
- 在像强化学习这样的半监督案例中呢?
- 有没有更好的无监督版本的 SVM?
我不希望有人回答所有这些小问题,而是给出一些一般界限,说明 SVM 在实践中何时优于常见的 ANN 等效项(例如 FFBP、循环 BP、玻尔兹曼机、SOM 等),最好在理论上也是如此。
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') 的最佳方法是什么?
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)
希望这可以帮助任何人陷入困境。
neural-network - 神经网络真的是废弃软件吗?
我计划使用神经网络来逼近强化学习算法中的价值函数。我想这样做是为了介绍一些关于我如何表示状态和动作的概括和灵活性。
现在,在我看来,神经网络是做到这一点的正确工具,但是由于我不是 AI 专家,因此我在这里的能见度有限。特别是,现在神经网络似乎正在被其他技术所取代,例如支持向量机,但我不确定这是否是一种时尚问题,或者神经网络是否存在一些真正的限制可能会毁掉我的方法。你有什么建议吗?
谢谢,
图努兹