问题标签 [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 回答
266 浏览

reinforcement-learning - 在强化学习中实现损失函数 (MSVE)

我正在尝试为奥赛罗建立一个时间差异学习代理。虽然我的其余实现似乎按预期运行,但我想知道用于训练我的网络的损失函数。在 Sutton 的《Reinforcement learning: An Introduction》一书中,Mean Squared Value Error(MSVE)被呈现为标准损失函数。它基本上是 Mean Square Error 乘以 on policy 分布。(Sum over all states s ( onPolicyDistribution(s ) * [V(s) - V'(s,w)]² ) )

我现在的问题是:当我的策略是学习价值函数的电子贪心函数时,我如何在策略分布上获得这个?如果我只使用 MSELoss 代替,它甚至有必要吗?有什么问题?

我在 pytorch 中实现了所有这些,所以在那里轻松实现的奖励积分:)

0 投票
1 回答
303 浏览

reinforcement-learning - 使用时间差异学习有什么意义?

据我所知,对于一个特定的策略 \pi,时间差异学习让我们计算该策略 \pi 之后的期望值,但是知道一个具体的策略有什么意义呢?

我们不应该尝试为给定环境找到最佳策略吗?完全使用时间差异学习来做一个特定的 \pi 有什么意义呢?

0 投票
0 回答
192 浏览

c++ - 我的神经网络没有学习正确的答案

首先,我是一个完全的业余爱好者,所以我可能会混淆一些术语。

我一直在研究神经网络来玩 Connect 4 / Four In A Row。

网络模型的当前设计是 170 个输入值、417 个隐藏神经元和 1 个输出神经元。网络是全连接的,即每个输入都连接到每个隐藏神经元,每个隐藏神经元都连接到输出节点。

每个连接都有一个独立的权重,每个隐藏节点和单个输出节点都有一个带有权重的附加偏置节点。

Connect 4 游戏状态的 170 个值的输入表示为:

  • 42 对值(84 个输入变量),表示空间是否被玩家 1、玩家 2 占用或空置。
    • 0,0意味着它是免费的
    • 1,0表示这是玩家 1 的位置
    • 0,1表示这是玩家 2 的位置
    • 1,1不可能
  • 另外 42 对值(84 个输入变量)表示在此处添加一块是否会给玩家 1 或玩家 2 一个“连接 4”/“连续四人”。值的组合含义同上。
  • 2个最终输入变量来表示轮到谁:
    • 1,0玩家 1 的回合
    • 0,1玩家 2 的回合
    • 1,1并且0,0不可能

我测量了 100 场比赛的平均均方误差,超过 10,000 场不同配置的比赛,得出:

  • 417个隐藏神经元
  • Alpha 和 Beta 学习率在开始时为 0.1,并在 epoch 总数中线性下降至 0.01
  • λ 值为 0.5
  • 100 次移动中的 90 次在开始时是随机的,在前 50% 的时期之后下降到每 100 次中的 10 次。所以在中间点,100 个动作中有 10 个是随机的
  • 前 50% 的 epoch 以随机移动开始
  • 每个节点都使用 Sigmoid 激活函数

此图像显示了以对数刻度绘制的各种配置的结果。这就是我确定要使用的配置的方式。

在此处输入图像描述

-1我通过将获胜状态下的棋盘输出与玩家 2 获胜和玩家 1 获胜的输出进行比较来计算这个均方误差1。我每 100 场比赛将这些值相加,然后将总数除以 100,得到 1000 个值以绘制在上图中。即代码片段是:

我训练网络的方式是让它一遍又一遍地与自己对抗。这是一个前馈网络,我正在使用 TD-Lambda 来训练它的每一步(每一步都不是随机选择的)。

给予神经网络的董事会状态是通过以下方式完成的:

它是模板化的,以便以后更容易更改。我不相信上面有什么问题。

我的 Sigmoid 激活函数:

我的神经元课

我的神经网络课

模板类神经网络 { 公共:

我相信我可能遇到问题的地方之一是神经网络类中的BackPropagateBackPropagateFinal方法。

这是我main正在训练网络的功能:

我认为我可能遇到问题的一个地方是选择最佳移动的极小极大。

还有一些我认为与我遇到的问题不太相关的部分。

问题

  1. 我训练 1000 场比赛还是 3000000 场比赛似乎并不重要,玩家 1 或玩家 2 将赢得绝大多数比赛。100 场比赛中有 90 场由一名球员赢得。如果我输出实际的单个游戏移动和输出,我可以看到其他玩家赢得的游戏几乎总是幸运随机移动的结果。

    同时,我注意到预测输出某种“支持”玩家。即输出似乎在 的负数一侧0,因此玩家 1 总是做出最好的动作,例如,但它们似乎都被预测为玩家 2 获胜。

    有时是玩家 1 赢得多数,其他时候是玩家 2。我假设这是由于随机权重对一名玩家初始化轻微。

    大约第一场比赛不喜欢一个球员而不是另一个球员,但它很快就开始以一种方式“倾斜”。

  2. 我现在已经尝试训练超过 3000000 场比赛,这需要 3 天时间,但网络似乎仍然无法做出正确的决定。我已经通过在 riddles.io Connect 4 comp 上播放其他“机器人”来测试网络。

    • 它没有意识到它需要连续阻挡对手4个
    • 即使在 3000000 场比赛之后,它也不会将中柱作为第一步,我们知道这是你唯一可以保证获胜的开始动作。

任何帮助和指导将不胜感激。具体来说,我对 TD-Lambda 反向传播的实现是否正确?

0 投票
2 回答
439 浏览

neural-network - 如何判断我的自我游戏神经网络过度拟合

我有一个旨在玩 Connect 4 的神经网络,它衡量游戏状态对玩家 1 或玩家 2 的价值。

为了训练它,我让它与自己对战n数场比赛。

我发现,即使每 100 场比赛的均方平均值在 100,000 个 epoch 中不断提高,1000 场比赛的游戏效果也比 100,000 场要好。

(我通过挑战http://riddles.io上排名第一的玩家来确定这一点)

因此,我得出的结论是发生了过度拟合。

考虑到自我博弈,你如何成功地测量/确定/估计已经发生过拟合?即,我如何确定何时停止自我播放?

0 投票
1 回答
1057 浏览

python - 强化学习:Windy Grid World 环境下的 Q 和 Q(λ) 速度差异

前言:

我试图解决这个Windy-Grid-World 环境。实现了 Q 和 Q(λ) 算法后,结果几乎相同(我正在查看每集的步骤)。

问题

根据我的阅读,我相信更高的 lambda 参数应该会更新更多的状态。因此,与常规 Q-learning 相比,步数的减少应该大大减少。这张图片显示了我在说什么。

这对于这种环境是正常的还是我实施错了?

代码

如果您想查看全部内容,可以在此处查看我的 Jupyter Notebook 。

0 投票
1 回答
657 浏览

reinforcement-learning - 是蒙特卡洛学习策略还是价值迭代(或其他)?

我正在参加强化学习课程,但我不明白如何将策略迭代/价值迭代的概念与蒙特卡洛(以及 TD/SARSA/Q 学习)结合起来。在下表中,如何填充空单元格:应该/可以是二进制是/否,一些字符串描述还是更复杂?

在此处输入图像描述

0 投票
3 回答
343 浏览

machine-learning - 坚持理解 TD(0) 和 TD(λ) 的更新用途之间的区别

我正在从这篇文章中学习时间差异学习。这里 TD(0) 的更新规则对我来说很清楚,但是在 TD(λ) 中,我不明白所有先前状态的效用值是如何在一次更新中更新的。

这是用于比较机器人更新的图表:

在此处输入图像描述

上图解释如下:

在 TD(λ) 中,由于资格跟踪,结果被传播回所有先前的状态。

我的问题是,即使我们使用具有资格跟踪的以下更新规则,如何在一次更新中将信息传播到所有先前的状态?

在此处输入图像描述

在一次更新中,我们只更新单个状态Ut(s)的实用程序,那么之前所有状态的实用程序是如何更新的呢?

编辑

根据答案,很明显,此更新适用于每一步,这就是传播信息的原因。如果是这种情况,那么它再次让我感到困惑,因为更新规则之间的唯一区别是资格跟踪。

因此,即使先前状态的资格跟踪值不为零,在上述情况下,delta 的值也将为零(因为最初奖励和效用函数初始化为 0)。那么,先前的状态如何在第一次更新时获得除零以外的其他效用值?

同样在给定的 python 实现中,在单次迭代后给出以下输出:

这里只更新了 2 个值,而不是如图所示的所有 5 个先前状态。我在这里缺少什么?

0 投票
0 回答
278 浏览

reinforcement-learning - 这是真的 ?预期 SARSA 和双 Q-Learning 怎么样?

我正在学习Reinforcement Learning,我在理解 SARSA、Q-Learning、预期 SARSA、双 Q 学习和时间差异之间的区别时遇到了问题。你能解释一下区别并告诉我什么时候使用它们吗?而对e-greedy和greedy move有什么影响呢?

沙萨:

我处于状态St,在策略的帮助下选择了一个动作,因此它将我移动到另一个状态St+1根据状态中的策略,St+1一个动作被执行,因此我Reward的 inSt将由于预期Reward的前瞻性状态而被更新St+1

Q-学习:

我在状态St,在政策的帮助下选择了一个动作,所以它让我进入状态St+1,这一次它不会依赖于政策,而是它将观察状态中预期Reward(贪婪Reward)的最大值St+1并通过它状态奖励St将被更新。

预计 SARSA:

这将与 Q-learning 相同,而不是Reward在贪婪的移动的帮助下更新我的St+1我接受所有行动的预期回报:

时间差异:

当前Reward将使用观察到的奖励Rt+1和估计值V(St+1)At更新timepoint t + 1

我得到的是真的还是我错过了什么?那么双Q学习呢?

以 0.5 的概率:

别的:

有人可以解释一下吗!!

0 投票
1 回答
155 浏览

machine-learning - 何时使用 Monte Carlo 而不是 TD 学习,反之亦然

在研究强化学习时,确切地说,当涉及到无模型强化学习时,我们通常使用两种方法:

  • TD学习
  • 蒙特卡洛

什么时候使用它们中的每一个?换句话说,我们如何确定哪种方法最适合我们的问题?

0 投票
1 回答
551 浏览

python - 实现 TD-Gammon 算法

我正在尝试从Gerald Tesauro的TD-Gammon 文章中实现算法。以下段落描述了学习算法的核心:

在此处输入图像描述

我决定有一个隐藏层(如果这足以在 1990 年代初玩世界级的西洋双陆棋,那对我来说就足够了)。我很确定除了train()函数之外的一切都是正确的(它们更容易测试),但我不知道我是否正确地实现了这个最终算法。

我使用它的方式是玩一整场游戏(或者更确切地说,神经网络与自己对战),然后我将该游戏的状态从开始到结束发送到train(),以及最终结果。然后它获取这个游戏日志,并应用上述公式使用第一个游戏状态,然后是第一个和第二个游戏状态,以此类推,直到最后一次,当它使用整个游戏状态列表时。然后我重复了很多次,并希望网络学习。

需要明确的是,我不是在对我的代码编写进行反馈。这绝不是一个快速而肮脏的实现,以确保我在正确的位置拥有所有的螺母和螺栓。

但是,我不知道它是否正确,因为到目前为止我还无法让它能够在任何合理的水平上玩井字游戏。这可能有很多原因。也许我没有给它足够的隐藏节点(我使用了 10 到 12 个)。也许它需要更多的游戏来训练(我已经使用了 200 000)。也许使用不同的归一化函数会做得更好(我已经尝试过不同变体的 sigmoid 和 ReLU,有泄漏和无泄漏)。也许学习参数没有正确调整。也许井字游戏及其确定性游戏玩法意味着它“锁定”了游戏树中的某些路径。或者也许培训实施是错误的。这就是我在这里的原因。

我误解了 Tesauro 的算法吗?