问题标签 [function-approximation]

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 投票
2 回答
1134 浏览

python - 您如何使用强化学习更新函数逼近中的权重?

我的梯度下降 SARSA 不断地以指数方式增加权重。在第 4 集第 17 步,值已经是 nan

例如:

我不知道去哪里寻找我犯的错误。这是一些代码FWIW:

我有大约 183 个二进制特征。

0 投票
1 回答
5888 浏览

matlab - 绘制勒让德多项式 - 为自己的方法获得不同的结果

我正在尝试绘制 Legendre 多项式,定义为:

我已经完成了简单的慢速方法,我已经完成了直接的,稍微复杂一点的方法。两者都得出相似的数字,但并不完全相同。幅度不同。这是带有相关图的代码(注意我将定义的下标n+1调整为n):

方法一:

图1:

方法一

方法二:

图 2:

方法二

这很奇怪,至少可以这么说。对于方法 1,我正在计算直到 P11 的所有多项式,但仅使用前 6 个进行绘图。有人知道发生了什么吗?

0 投票
1 回答
173 浏览

trigonometry - 估计两条线之间的角度 y = 1000x 和 y = 999x

如何估计线 y = 1000 x 和 y = 999 x 之间的角度?

我使用计算器并得到 10^(-6) 但如何手动近似。它与泰勒展开有关吗?

0 投票
1 回答
644 浏览

c - 通过分离有效数和指数来逼近 log2(float)

问题

我正在尝试实现快速浮点 = log2(float)。我编写了一个简单的 C 程序来将我的结果与 log2 进行比较,我得到了一个我找不到源的小错误。

背景

我正在采用识别浮点表示(忽略符号位)的方法是2^(exponent) * 1.significand. 使用我得到的日志属性log2(float) = exp + log2(1.significand)。最终我将截断表查找的有效数字,但现在我想验证正确的结果。

有关此灵感的进一步背景阅读:http: //www.icsi.berkeley.edu/pubs/techreports/TR-07-002.pdf

代码

问题就在这里。这是一个简单的程序,它提取浮点位并将指数添加到 log2(有效数)。

输出

此时的“近似值”应该与 clib 的 log2 完全相同;任何帮助识别我的错误将不胜感激。

0 投票
1 回答
2763 浏览

machine-learning - 在使用函数逼近的 Q-learning 中,是否可以避免手工制作特征?

我对机器学习的背景知识很少,所以如果我的问题看起来很愚蠢,请原谅我。

根据我所读到的,迄今为止最好的无模型强化学习算法是 Q-Learning,其中代理世界中的每个状态、动作对都被赋予一个 q 值,并且在每个状态下具有最高的动作选择 q 值。然后 q 值更新如下:

Q(s,a) = (1-α)Q(s,a) + α(R(s,a,s') + (max_a' * Q(s',a'))) 其中 α 是学习速度。

显然,对于高维问题,状态的数量变得非常大,使得 q 值表存储不可行。

因此,Q-Learning 的实际实现需要通过状态泛化(即特征)来使用 Q 值近似。例如,如果代理是 Pacman,那么功能将是:

  • 到最近点的距离
  • 到最近鬼的距离
  • 吃豆子在隧道里吗?

然后,您只需要为每个单个特征提供 q 值,而不是每个状态的 q 值。

所以我的问题是:

强化学习代理是否可以创建或生成附加特征?

我做过的一些研究:

这篇文章提到了 Geramifard 的 iFDD 方法

这是“发现特征依赖关系”的一种方式,但我不确定这是否是特征生成,因为本文假设您从一组二进制特征开始。

我发现的另一篇论文是用深度强化学习玩 Atari,它“使用一系列神经网络架构提取高级特征”。

我已经阅读了这篇论文,但仍然需要充实/完全理解他们的算法。这就是我要找的吗?

谢谢

0 投票
1 回答
1976 浏览

algorithm - RGB/LAB 转换的快速近似算法?

我正在使用 OpenGL 开发数据可视化工具,而 LAB 颜色空间是用于可视化我正在处理的数据的最容易理解的颜色空间(3 个数据轴映射到颜色空间的 3 个轴)。是否有快速(例如,没有非整数取幂,适合在着色器中执行)算法用于将 LAB 值近似转换为 RGB 值或从 RGB 值转换?

0 投票
1 回答
190 浏览

machine-learning - 径向基插值如何工作?

谁能向我解释如何理解这个情节。这是使用径向基函数的 2D 散射数据插值。

http://www.alglib.net/interpolation/introductiontorbfs.php

在这个链接中,他们展示了这个图。但不明白他们试图用这个图来表示什么。


(来源:alglib.net

0 投票
1 回答
205 浏览

algorithm - 函数逼近算法中的误差界

假设我们有一组浮点数,尾数为“m”,指数为“e”。假设我们想要逼近一个函数“f”。

从理论上我们知道,通常使用“范围缩减函数”,然后从这样的函数中我们得出全局函数值。

例如 let x = (sx,ex,mx) (sign exp and mantissa) then... log2(x) = ex + log2(1.mx) 所以基本上范围缩小函数是“log2(1.mx)” .

目前我已经实现了倒数、平方根、log2 和 exp2,最近我开始使用三角函数。但是,如果给定一个全局误差界限(尤其是 ulp 误差),我可能会为范围缩减函数推导出一个误差界限,是否有一些关于此类问题的研究?说到 log2(x)(例如),我想说...

“好的,我想要带有 k ulp 错误的 log2(x),为了实现这一点,考虑到我们的浮点系统,我们需要用 p ulp 错误来近似 log2(1.mx)”

请记住,正如我所说,我们知道我们正在使用浮点数,但格式是通用的,所以它可能是经典的 F32,但即使例如 e=10,m = 8 end 等等。

我实际上找不到任何显示此类研究的参考资料。我拥有的参考资料(即穆勒书)没有以这种方式处理该主题,因此我正在寻找某种论文或类似的东西。你知道有什么参考吗?

我也试图自己推导出这样的约束,但这并不容易......

0 投票
1 回答
1076 浏览

neural-network - 使用 Q-Learning 和函数逼近求解 GridWorld

我正在研究简单的 GridWorld(3x4,如 Russell & Norvig Ch. 21.2 中所述)问题;我已经使用 Q-Learning 和 QTable 解决了它,现在我想使用函数逼近器而不是矩阵。

我正在使用 MATLAB 并尝试了神经网络和决策树,但没有得到预期的结果,即发现了错误的策略。我已经阅读了一些关于该主题的论文,但其中大多数都是理论性的,并没有过多地关注实际实现。

我一直在使用离线学习,因为它更简单。我的方法是这样的:

  1. 用 16 个输入二进制单元初始化决策树(或 NN)——网格中的每个位置一个,外加 4 个可能的动作(上、下、左、右)。
  2. 进行大量迭代,为每个迭代保存 qstate 和训练集中计算的 qvalue。
  3. 使用训练集训练决策树(或 NN)。
  4. 擦除训练集并从步骤 2 开始重复,使用刚刚训练的决策树(或 NN)来计算 qvalues。

这似乎太简单了,以至于我确实没有得到预期的结果。这是一些MATLAB代码:

它有一半时间选择一个随机动作。updateq函数是:

任何建议将不胜感激!

0 投票
1 回答
1362 浏览

java - Java-寻找有关计算函数的最小值/最大值或步进间隔中的导数的建议

寻找有关已变成 Java 噩梦的数学问题的建议。我扫描了网络并找不到解决方案。我看过类似的程序,不幸的是找不到帮助。

问题总结:我希望在 Java 中实现一个方法,该方法将找到 Riemann-Siegel Z(t) 函数的最小值或最大值(我已经创建了计算 Z(t) 的代码)或它的衍生物。为了显示我正在尝试做的事情,从 0 < t < 100 开始的 Z(t) 图表看起来像这样。

在此处输入图像描述

直接查看Wolfram Alpha此处的函数会使我遇到的“Java 噩梦”看起来过于复杂。我所描述的问题并不是特别复杂,尽管这可能是由于我在数值分析方面缺乏经验。我要做的事情的大致轮廓是

  1. 在 Java 中编写一个方法来计算该函数的导数为零的所有位置(在上图中,该函数在 0 < t < 100 之间大约有 30 个值)。

  2. 在方法内部,定义一个步长间隔以通过下限和上限来评估函数。

  3. 以下三种方法之一 - 用一种方法计算最大值/最小值,用两种方法计算最大值/最小值,或计算导数为零的值。

  4. 将此添加到我现有的程序中(我制作了一个测试程序以使问题更容易。测试程序查看 cos(x))

我扫描了互联网并找到了这个。我发现了很多其他不同的方法,但这些方法似乎都不起作用。提供的所有解决方案似乎只计算一个步长间隔内的一个最大值/最小值/导数。为了使用新方法,程序需要找到导数为零或函数具有最大值或最小值时的所有值。例如,cos(x) 在 0 < x < 50 之间有大约 16 个零(新方法会找到所有这些值)。

为了使这更容易,我创建了一个可以针对 cos(x) 函数进行分析的测试程序。

测试程序的目的是检查方法public static void findDerivative是否正确。它有点工作,尽管它返回两个值来近似导数。cos(x) 的图表如下所示。

在此处输入图像描述

程序输出的值是

它接近了,尽管由于 findDerivative 方法中的 Math.abs(dy) < 0.001 需要计算两次导数。解决此问题的以下方法均未成功。

  1. 有人建议通过牛顿法计算导数。我不知道任何应用牛顿的方法,因为我不知道 Z(t) 的导数。

  2. 我在网上和其他网站上找到的所有程序都直接计算 [a, b] 区间内的“一个”最小值或最大值。在上图中和 Z(t) 函数的图中,我正在寻找所有最小值和最大值(或者,当函数为零时)。计算 [0, 100] 间隔之间的一个最小值或最大值没有帮助,我需要一种方法来计算所有这些值。

  3. 我原本低估了这样做的难度。

有人有建议吗?我能用 cos(x) 测试程序做什么?如果我得到这个工作,我可以自己去找出 Z(t) 程序。我花了很多时间思考这个问题,并且失眠了。我自己想不出办法来解决这个问题。

这是我用来计算一般值的 Z(t) 函数的方法(不必理解下面的程序来解决这些困难)。