问题标签 [sarsa]

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

machine-learning - 如何计算 SARSA 的资格痕迹?

我正在尝试实现资格跟踪(前瞻性),其伪代码可以在下图中找到

在此处输入图像描述

我不确定这是什么For all s, a意思(下面的第 5 行)。他们从哪里得到这些收藏s, a

如果它是前瞻性的,是否从当前状态循环向前观察s'

你调整每一个e(s, a)

0 投票
1 回答
2060 浏览

machine-learning - SARSA 实施

我正在学习 SARSA 算法的实现并且有一个问题。我了解一般的“学习”步骤采取以下形式:

机器人 (r) 处于状态 s。有四种可用的操作:

这样的动作列表,

机器人随机选择一个动作,并更新如下:

其中L是学习率,r是与 相关的奖励(a,s),是新状态下Q(s',a')动作的预期奖励,是折扣因子。a's'D

首先,我不理解这个术语的作用 - Q(a,s),为什么我们要重新减去当前的 Q 值?

其次,在选择动作时aa'为什么这些必须是随机的?我知道在某些实现或 SARSA 中,所有可能Q(s', a')的因素都被考虑在内,并选择了最高值。(我相信这是 Epsilon-Greedy?)为什么不为此也选择Q(a,s)要更新的值?或者为什么不更新所有Q(a,s)的当前s

最后,为什么 SARSA 仅限于一步前瞻?为什么,说,不也研究一个假设Q(s'',a'')

我想总的来说,我的问题归结为是什么让 SARSA 比另一种呼吸优先或深度优先搜索算法更好?

0 投票
1 回答
3434 浏览

machine-learning - SARSA-Lambda 实施中的情节之间的资格跟踪重新初始化

我正在查看这个 SARSA-Lambda 实现(即:带有资格跟踪的 SARSA),并且有一个我仍然没有得到的细节。

在此处输入图像描述

(图片来自http://webdocs.cs.ualberta.ca/~sutton/book/ebook/node77.html

所以我知道所有 Q(s,a) 都会更新,而不仅仅是代理为给定时间步选择的一个。我也了解 E 矩阵在每集开始时不会重置。

让我们假设图 7.12 的面板 3 是第 1 集的结束状态。

在第 2 集开始时,代理向北移动而不是向东移动,假设这给了它 -500 的奖励。这不会影响上一集中访问过的所有州吗?

如果这个想法是为了奖励在当前情节中访问过的那些状态,那么为什么包含所有 e(s,a) 值的矩阵不在每一情节开始时重置?在这个实现中,上一集中访问过的状态似乎因为代理在新一集中所做的操作而受到“惩罚”或“奖励”。

0 投票
1 回答
1216 浏览

machine-learning - 使用梯度差异实现 SARSA

我已经使用表查找成功地实现了一个 SARSA 算法(一步和使用资格跟踪)。本质上,我有一个 q 值矩阵,其中每一行对应一个状态,每一列对应一个动作。

就像是:

在每个时间步,从矩阵中选择一行,根据策略,根据 SARSA 规则选择和更新一个动作。

我现在正在尝试将其实现为使用梯度下降的神经网络。

我的第一个假设是创建一个两层网络,输入层具有与状态一样多的输入神经元,输出层具有与动作一样多的输出神经元。每个输入将完全连接到每个输出。(所以,事实上,它看起来像上面的矩阵)

我的输入向量将是一个 1xn 行向量,其中 n 是输入神经元的数量。输入向量中的所有值都将为 0,除了对应于当前状态的索引为 1。即:

将是状态 4 中代理的输入向量。

因此,该过程将类似于:

我创建了一个随机的样本权重矩阵。

结果将是:

这意味着如果选择了贪婪策略,则应该选择动作 1,并且第四个输入神经元和第一个输出神经元之间的连接应该通过以下方式变得更强:

(取自 SARSA 算法的方程)

然而——这个实现并不能说服我。根据我的阅读,网络权重应该用于计算状态-动作对的 Q 值,但我不确定它们是否应该代表这样的值。(特别是因为我通常看到权重值只包含在 0 和 1 之间。)

有什么建议吗?

0 投票
0 回答
815 浏览

algorithm - 在 SARSA 中实施资格跟踪

我正在编写 SARSA 算法的 MATLAB 实现,并成功编写了一步实现。

我现在正在尝试将其扩展为使用资格跟踪,但我获得的结果比一步更差。(即:算法收敛速度较慢,代理所遵循的最终路径较长。)

本质上,我的 q 值存储在 nXm 权重矩阵中,其中 n = 动作数,m = 状态数。资格跟踪值存储在 e_trace 矩阵中。根据我是想使用单步还是 ET,我使用 dw 的两种定义中的任何一种。我不确定我哪里出错了。该算法的实现如下所示:http ://webdocs.cs.ualberta.ca/~sutton/book/ebook/node77.html

定义网络中所有权重的权重变化(即:所有 Q(s,a) 对的值变化),然后将其馈入由学习率调整的网络。

我应该补充一点,最初我的权重和 e 值设置为 0。

有什么建议吗?

0 投票
3 回答
10262 浏览

reinforcement-learning - Q-learning 和贪婪选择的 SARSA 是等价的吗?

Q-learning 和 SARSA 之间的区别在于 Q-learning 比较当前状态和可能的最佳下一个状态,而 SARSA 比较当前状态和实际下一个状态。

如果使用贪心选择策略,即 100% 的时间选择具有最高动作值的动作,那么 SARSA 和 Q-learning 是否相同?

0 投票
1 回答
1439 浏览

machine-learning - 不同 epsilon 值对 Q-learning 和 SARSA 的影响

由于我是该领域的新手,我怀疑不同的 epsilon 值将如何影响 SARSA 和 Qlearning 与 epsilon 贪婪算法进行动作选择之间的影响。

我知道当 epsilon 等于 0 时,总是根据从 Q 派生的策略选择动作。因此,Q-learning 首先更新 Q,然后根据更新的 Q 选择下一个动作。另一方面,SARSA 选择下一个动作和更新后 Q。

当 ε 等于 1 时怎么样?ε 是从 0 增加到 1 吗?

谢谢!

0 投票
1 回答
851 浏览

deep-learning - 深度神经网络结合qlearning

我使用来自 Kinect 相机的关节位置作为我的状态空间,但我认为它会太大(25 个关节 x 每秒 30 个),无法仅输入 SARSA 或 Qlearning。

现在我正在使用 Kinect Gesture Builder 程序,该程序使用监督学习将用户移动与特定手势相关联。但这需要我想摆脱的监督培训。我认为该算法可能会拾取关节之间的某些关联,就像我自己对数据进行分类时那样(例如,举起手来,向左走,向右走)。

我认为将这些数据输入深度神经网络,然后将其传递给强化学习算法可能会给我带来更好的结果。

最近有一篇关于这个的论文。https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf

我知道 Accord.net 既有深度神经网络又有 RL,但有人将它们结合在一起吗?有什么见解吗?

0 投票
1 回答
1059 浏览

python - Sarsa算法,为什么Q值趋于零?

我正在尝试实现 Sarsa 算法来解决 OpenAI 健身房的冰冻湖环境。我很快就开始处理这个问题,但我想我明白了。

我也了解 Sarsa 算法的工作原理,有很多网站可以找到伪代码,我明白了。我已经按照所有步骤在我的问题中实现了这个算法,但是当我在所有剧集之后检查最终的 Q 函数时,我注意到所有值都趋于零,我不知道为什么。

这是我的代码,我希望有人能告诉我为什么会这样。