问题标签 [temporal-difference]

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 投票
1 回答
19051 浏览

machine-learning - Q 学习 vs 时间差异 vs 基于模型的强化学习

我在大学学习一门名为“智能机器”的课程。我们被介绍了 3 种强化学习的方法,并且通过这些方法,我们得到了何时使用它们的直觉,我引用:

  1. Q-Learning - 当 MDP 无法解决时最好。
  2. 时间差异学习——当 MDP 已知或可以学习但无法解决时最好。
  3. 基于模型 - 最好在无法学习 MDP 时使用。

有没有很好的例子来解释何时选择一种方法而不是另一种方法?

0 投票
1 回答
661 浏览

machine-learning - 时间差异学习和反向传播

我已经阅读了斯坦福的这一页 - https://web.stanford.edu/group/pdplab/pdphandbook/handbookch10.html。我无法理解 TD 学习是如何在神经网络中使用的。我正在尝试制作一个使用 TD 学习的跳棋 AI,类似于他们在双陆棋中实现的。请解释 TD 反向传播的工作原理。

我已经提到了这个问题 -神经网络和时间差分学习 但我无法理解接受的答案。如果可能,请用不同的方法解释。

0 投票
4 回答
2849 浏览

machine-learning - TD 学习与 Q 学习

在一个完美的信息环境中,我们能够知道一个动作之后的状态,比如下棋,有没有理由使用 Q 学习而不是 TD(时间差分)学习?

据我了解,TD学习会尝试学习V(状态)值,但Q学习会学习Q(状态动作值)值,这意味着Q学习学习速度较慢(因为状态动作组合不仅仅是状态),是对吗?

0 投票
1 回答
207 浏览

machine-learning - 没有函数逼近的梯度时间差 Lambda

在 GTD(λ) 的每一种形式中,似乎都是根据函数逼近来定义它,使用 θ 和一些权重向量 w。

我知道对梯度方法的广泛需求来自于它们对线性函数逼近器的收敛特性,但我想利用 GTD 进行重要性采样。

是否可以在没有函数逼近的情况下利用 GTD?如果是这样,更新方程是如何形式化的?

0 投票
1 回答
124 浏览

python - 时间差异学习中的双重计数

我正在研究一个时间差异学习示例(https://www.youtube.com/watch?v=XrxgdpduWOU),我在 python 实现中遇到了以下等式问题,因为我似乎是重复计算奖励和 Q。

如果我将下面的网格编码为二维数组,我的当前位置是 (2, 2),目标是 (2, 3),假设最大奖励是 1。让 Q(t) 是我当前位置的平均平均值,然后 r(t+1) 为 1,我假设最大 Q(t+1) 也为 1,这导致我的 Q(t) 接近 2(假设 gamma 为 1)。这是正确的,还是我应该假设 Q(n),其中 n 是终点是 0?

在此处输入图像描述

网格

编辑以包含代码 - 我修改了 get_max_q 函数以返回 0 如果它是终点并且值现在都低于 1(我认为它更正确,因为奖励只是 1)但不确定这是否是正确的方法(以前我将它设置为在终点时返回 1)。

0 投票
1 回答
194 浏览

algorithm - 如何有效地计算步步高中的印迹暴露

我正在尝试实现一种类似于 td-gammon 的双陆棋算法,如此处所述

如论文中所述,td-gammon 的初始版本仅在特征空间中使用原始棋盘编码,这创建了一个良好的游戏代理,但要获得世界级的代理,您需要添加一些与良好相关的预先计算的特征玩。最重要的特征之一是印迹曝光。

印迹暴露在定义为:

对于给定的污点,掷出 36 的数量将允许对手击中污点。总的污点暴露量是 36 次滚动的数量,这将使对手能够击中任何污点。印迹暴露取决于: (a) 印迹前所有敌方人员的位置;(b) 污点和敌方人员之间阻挡点的数量和位置,以及 (c) 横杆上的敌方人数,以及允许他们重新进入棋盘的掷骰,因为横杆上的人必须重新-在印迹可以被击中之前进入。

我尝试了各种方法来有效地计算此功能,但我的计算仍然太慢,我不知道如何加快它。

请记住,td-gammon 方法会评估给定掷骰子的每个可能的棋盘位置,因此对于每个玩家掷骰子的每一轮,您都需要为每个可能的棋盘位置计算此特征。

一些粗略的数字:假设每回合大约有 30 个棋盘位置,平均游戏持续 50 回合,我们得出运行 1,000,000 次游戏模拟需要:(x * 30 * 50 * 1,000,000) / (1000 * 60 * 60 * 24) 天其中 x 是计算特征的毫秒数。让 x = 0.7 我们有大约 12 天的时间来模拟 1,000,000 场比赛。

我真的不知道这是否是合理的时机,但我觉得必须有一个明显更快的方法。

所以这就是我尝试过的:

方法1(掷骰子)

对于 21 个可能的骰子掷骰中的每一个,递归检查是否发生命中。这是此过程的主要工作:

该函数的作用是将一个骰子值数组作为输入(即,如果玩家掷出 1,1,则该数组将为 [1,1,1,1]。然后该函数递归检查是否有命中以及是否命中所以以 true 退出。函数 LegalMovesOfDie 计算该特定骰子值的合法移动。

方法 2(通过印迹)

使用这种方法,我首先找到所有的印迹,然后对于每个印迹,我循环遍历每个可能的骰子值并查看是否发生命中。该功能经过优化,因此一旦骰子值记录了命中,我就不会再将它用于下一个印迹。它还经过优化,仅考虑印迹前面的移动。我的代码:

方法transitions.HitBlot2 采用一个blotPosition 参数,确保只考虑那些在印迹前面的移动。

这两种实现都很慢,当我使用分析器时,我发现递归是原因,所以我尝试重构它们如下:

  1. 使用 for 循环而不是递归(丑陋的代码,但它更快)
  2. 要使用parallel.foreach,而不是一次检查1个骰子值,我会并行检查这些值。

这是我运行 50000 次功能计算的平均计时结果(请注意,每种方法的计时都是使用相同的数据完成的):

  1. 使用递归的方法 1:每次计算 2.28 毫秒
  2. 使用递归的方法 2:每次计算 1.1 ms
  3. 使用 for 循环的方法 1:每次计算 1.02 毫秒
  4. 使用 for 循环的方法 2:每次计算 0.57 毫秒
  5. 使用 parallel.foreach 的方法 1:每次计算 0.75 毫秒 6 使用 parallel.foreach 的方法 2:每次计算 0.75 毫秒

我发现时间非常不稳定(可能取决于神经网络权重的随机初始化),但大约 0.7 毫秒似乎是可以实现的,如果你回想一下,这会导致 1,000,000 场比赛的 12 天训练。

我的问题是:有谁知道这是否合理?有没有我不知道的更快的算法可以减少训练?

最后一条信息:我正在一台相当新的机器上运行。英特尔 Cote (TM) i7-5500U CPU @2.40 GHz。

需要更多信息,请告诉我,我会提供。

谢谢, 奥菲尔

0 投票
0 回答
214 浏览

neural-network - 强化学习培训

我是强化学习和国际象棋项目的新手。我使用神经网络和时间差异学习来训练引擎学习游戏。

神经网络有一个输入层(385 个特征)、两个隐藏层和一个输出层,其范围是 [-1,1],其中 -1 表示输,1 赢(0 平)。我使用 TD-lambda 自学国际象棋,默认情况是只考虑接下来的 10 步。所有权重都在 [-1, 1] 范围内初始化。

我使用前向传播来估计状态的值,但是大多数值都非常接近1或-1,甚至结果是draw,我认为引擎没有很好地学习。我认为一些值很大并且主导结果,改变小的权重没有帮助。我改变了两个隐藏层的大小,但它不起作用(但是,我尝试了一个小尺寸和维度的玩具示例,它可以收敛并且经过数十次迭代后估计值非常接近目标)。我不知道如何解决这个问题,有人可以给我一些建议吗?

谢谢你。

下面列出了一些参考资料

0 投票
2 回答
77 浏览

r - 随着时间的推移分析逐行比较 2 个数据帧

这是我正在使用的数据框的一小部分以供参考。我正在使用 R 中的一个数据框(MG53_HanLab),它有一个时间列,其中有几个名称为“MG53”的列,几个名称为“F2”的列和几个名称为“Iono”的列。我想比较每个时间点每个组的平均值。我知道我必须对数据进行子集化并尝试过

它创建了 3 个新的数据框。

我的问题是:如何逐行比较两个数据框,看看每个表的平均值是否存在差异?

0 投票
1 回答
1204 浏览

reinforcement-learning - TD(0)学习中如何选择动作

我目前正在阅读萨顿的Reinforcement Learning: An introduction书。阅读第 6.1 章后,我想TD(0)为此设置实现 RL 算法:

在此处输入图像描述 在此处输入图像描述

为此,我尝试实现此处提供的伪代码: 在此处输入图像描述

这样做我想知道如何执行此步骤A <- action given by π for S:我可以A为当前状态选择最佳操作S吗?由于价值函数V(S)仅取决于状态而不是我不知道的动作,因此如何做到这一点。

我发现这个问题(我从哪里得到图像)处理相同的练习 - 但这里的动作只是随机选择的,而不是由动作策略选择的π

编辑:或者这是伪代码不完整,所以我也必须以action-value function Q(s, a)另一种方式近似?

0 投票
1 回答
295 浏览

reinforcement-learning - 如何防止 lambda = 1 的 SARSA 中的资格跟踪因状态-动作对被大量访问而爆炸?

我在 Windy Grid World 中使用 lambda = 1 测试 SARSA,如果探索导致在达到目标之前多次访问相同的状态-动作对,则资格跟踪每次都会增加而没有任何衰减,因此它会爆炸并导致一切溢出。如何避免这种情况?