小编zer*_*ord的帖子

如何摆脱“粘性”状态?

问题:

我已经训练了一个代理在网格世界中执行一个简单的任务(在不碰到障碍物的情况下到达网格的顶部),但是似乎总是会发生以下情况。它发现自己处于状态空间的一个简单部分(没有障碍物),因此不断收到强烈的正强化信号。然后,当它发现自己是状态空间的困难部分(楔在两个障碍物旁边)时,它只是选择与以前相同的动作,但没有任何效果(它上升并击中障碍物)。最终,这个值的 Q 值与负奖励相匹配,但此时其他动作的 Q 值甚至更低,因为在状态空间的简单部分无用,因此误差信号降为零,错误动作仍然总是选择了。

我怎样才能防止这种情况发生?我想到了一些解决方案,但似乎都不可行:

  • 使用总是探索重的策略。由于障碍物需要大约 5 个动作才能绕过,因此不时进行单个随机动作似乎无效。
  • 使奖励函数使重复出现的不良行为变得更糟。这使得奖励函数破坏了马尔可夫性质。也许这不是一件坏事,但我根本不知道。
  • 仅奖励代理完成任务。任务需要一千多个动作才能完成,所以训练信号太弱了。

任务的一些背景:

因此,我为尝试 RL 算法制作了一个小测试平台——类似于 Sutton 书中描述的网格世界的更复杂版本。世界是一个大的二进制网格(300 x 1000),在 0 的背景下以随机大小的矩形形式填充 1。一个 1 的带环绕着世界的边缘。

一个代理在这个世界上占据一个空间,周围只有一个固定的窗口(41 x 41 窗口,代理在中心)。代理的动作包括在四个主要方向中的任何一个方向上移动 1 个空间。代理只能通过标记为 0 的空间,1 是不能通过的。

当前要在此环境中执行的任务是从底部的随机位置开始,使其到达网格世界的顶部。成功向上移动将获得 +1 奖励。任何会撞到障碍物或世界边缘的移动都会给予 -1 的奖励。所有其他状态的奖励为 0。

代理使用带有神经净值函数逼近器的基本 SARSA 算法(如 Sutton 书中所述)。对于政策决策,我尝试了 e-greedy 和 softmax。

machine-learning reinforcement-learning neural-network

5
推荐指数
1
解决办法
1293
查看次数

BLAS 中矩阵之间的元素明智乘法?

我开始在 C++(特别是 Intel MKL)中使用 BLAS 函数来创建一些旧 Matlab 代码的更快版本。

到目前为止,它运行良好,但我不知道如何对 2 个矩阵(Matlab 中的 A .* B)执行元素乘法。

我知道 gemv 在矩阵和向量之间做了类似的事情,所以我应该将我的矩阵之一分解为向量并重复调用 gemv 吗?我认为这可行,但我觉得应该为此操作内置一些东西。


c++ matlab matrix blas

5
推荐指数
1
解决办法
3637
查看次数

在强化学习中设置gamma和lambda

在使用广义时间差分(例如SARSA,Q学习)的任何标准强化学习算法中,出现的问题是用于特定任务的λ和伽马超参数的值.

我知道lambda与资格痕迹的长度有关,而gamma可以解释为折扣未来的奖励多少,但是我怎么知道我的lambda值对于给定的任务来说太低了,或者我的gamma太高了?

我意识到这些问题没有明确定义的答案,但是知道某些"危险信号"会产生不适当的价值会非常有用.

以标准推车杆或倒立摆任务为例.我应该将gamma设置为高,因为它需要很多步骤来使任务失败,或者因为状态信息完全是Markovian而需要低吗?而且我甚至无法理解lambda值......

artificial-intelligence machine-learning markov reinforcement-learning

4
推荐指数
1
解决办法
3805
查看次数

你如何在全球范围内获得当前的键盘状态?(即,无论查询应用程序是否具有焦点,当前按下了哪些键)

我正在编写一个屏幕捕获工具,我希望能够在拍摄屏幕截图时存储键盘和鼠标的当前状态.

为鼠标执行此操作非常简单,因为以相关问题中描述的方式使用PointerInfo类可以为您提供当前鼠标位置的屏幕坐标以及所需的点击信息.但是,我还没能找到键盘的这个类的模拟; 所有与键盘相关的类似乎都是焦点特定的.

那么,有没有办法在Java中获得当前的键盘状态?

PS请记住,我正在寻找一个函数来调用以检索关于哪些键被按下的信息,而不是这些抑郁事件的监听器.

java keyboard keyboard-hook

2
推荐指数
1
解决办法
3536
查看次数

选择列表的多个部分

我有一个包含100个条目的数据框,我想获得条目子集的字段值.具体来说,我希望每隔10个条目(即指数1-10,21-30,41-50,61-70,......)

我能够做到这一点的唯一方法是通过:c(data $ field [1:10],data $ field [21:30],...)

但这似乎是一个可怕的解决方案,特别是如果数据框的大小发生变化.

indexing r

2
推荐指数
1
解决办法
74
查看次数