如何使我的神经网络更好地预测正弦波?


21

在这里,看看: 产生正弦波 您可以确切地看到训练数据的结束位置。训练数据从变为。1-1个1个

我使用Keras和具有tanh激活功能的1-100-100-2密集网络。我根据p和q这两个值计算出的结果为p / q。这样,我仅使用小于1的值就可以实现任何大小的数字。

请注意,我仍然是该领域的初学者,所以请放轻松。


1
需要澄清的是,您的训练数据是从-1.5到+1.5左右,因此网络已经准确地知道了?因此,您的问题是关于将结果外推到训练数据范围之外的看不见的数字吗?
尼尔·斯莱特

11
您可以尝试傅立叶变换所有内容并在频域中工作。
尼克·阿尔杰

4
致未来的审稿人:我不知道为什么将其标记为关闭。对我来说似乎很清楚:这是关于使用神经网络对周期数据进行建模的策略。
Sycorax说恢复莫妮卡的时间为

1
对于机器学习领域的初学者来说,我认为这是一个合理的问题,我们应该在这里解决。我不会关闭它
阿克萨卡(Aksakal)

1
我不知道这是否会有所帮助,但是开箱即用的普通NN只能学习多项式函数。实际上,这很好,因为您可以使多项式以固定的间隔任意关闭。但是,这意味着您永远无法学习延伸到区间两端的正弦波。其他答案在下面指出的诀窍是将问题转化为可以通过这种方式解决的问题。这就是傅里叶变换建议的功能,在这种情况下,学习正弦波就是在学习常数。
Ukko

Answers:


19

您正在使用前馈网络;其他答案是正确的,即FFNN在训练数据范围之外的推算方面并不出色。

但是,由于数据具有周期性的质量,因此该问题可能适合使用LSTM建模。LSTM是在序列上运行的各种神经网络单元,它们对之前“看到”的内容具有“记忆”。本书章节的摘要表明,LSTM方法在周期性问题上取得了成功。

在这种情况下,训练数据将是一个元组序列,并且需要为某些ni索引一些新输入x i + 1x i + n做出准确的预测增加顺序。每个输入序列的长度,它们覆盖的间隔的宽度以及它们的间距取决于您。凭直觉,我希望一个覆盖1个周期的规则网格是一个不错的起点,训练序列应覆盖广泛的值范围,而不是局限于一定的间隔。X一世X一世X一世+1个X一世+ññ一世

(Jimenez-Guarneros,Magdiel和Gomez-Gil,Pilar和Fonseca-Delgado,Rigoberto和Ramirez-Cortes,Manuel和Alarcon-Aquino,Vicente,“使用LSTM神经网络对正弦函数进行的长期预测”,《自然》-混合智能系统的设计灵感


2
这里要建模的序列是什么?什么时间步骤?对我来说,这似乎是一个简单的曲线拟合应用程序。
大卫·J·哈里斯

@ DavidJ.Harris我已经更新了答案。
Sycorax说恢复莫妮卡的时间

什么是系列的频率不1个/2π
阿克萨卡族人(Aksakal)

例如,这是他们如何进行市场预测?
马库斯·阿佩尔

3
不,那不是您做市场预测的方式。至少不是您如何赚钱。
阿克萨卡尔(Aksakal)

13

如果您想做的是学习像这样的简单周期函数,那么您可以考虑使用高斯过程。GP允许您通过指定适当的协方差函数来在一定程度上增强您的领域知识;在这个例子中,由于您知道数据是周期性的,因此可以选择一个周期性的核,然后模型将推断出该结构。在这里,我试图拟合潮汐高度数据,所以我知道它具有周期性的结构。因为我使用的是周期性结构,所以模型可以正确地(或多或少)推断该周期性。如果您想了解神经网络,那么OFC并不是很重要,但是与手工设计功能相比,这可能是一种更好的方法。顺便说一句,神经网络和gp在理论上是紧密相关的,在此处输入图片说明

GP并不总是有用的,因为与神经网络不同,它们很难扩展到大型数据集和深度网络,但是如果您对这样的低维问题感兴趣,它们可能会更快,更可靠。

(在图片中,黑点是训练数据,红色是目标;您可以看到,即使它不能完全正确地显示,模型也会大致学习周期性。彩色带是模型的置信区间预测)


2
这个情节很美。
Sycorax说恢复莫妮卡

11

机器学习算法-包括神经网络-可以学习近似任意函数,但只能在训练数据密度足够大的区间内进行。

基于统计的机器学习算法在执行插值时最有效,它们预测的值接近或介于训练示例之间。

在训练数据之外,您希望进行推断。但是,没有简单的方法可以实现这一目标。神经网络永远不会通过分析来学习函数,只能通过统计信息来学习-几乎所有监督学习的ML技术都是如此。给定足够的示例(以及模型中的自由参数),更高级的算法可以任意接近所选函数,但仍只会在提供的训练数据范围内实现。

网络(或其他ML)在训练数据范围之外的行为方式将取决于其体系结构,包括所使用的激活功能。

X2X+π/4


“神经网络永远不会通过分析来学习功能,而只能通过统计信息来学习。” -几乎所有在实践中使用的东西都可以说相同的内容,例如FFT也不具有分析能力。您可以将采样率和周期增加到无穷大,并无限接近真实函数,但NN也是如此。
阿克萨卡尔邦

@Aksakal:是的,是的。但是,我不想声明“所有ML算法从不学习解析函数……”。因为毫无疑问,有人会提出一些贝叶斯分析学习者或基因编程等的反例。我将尝试对其进行编辑以使其更通用
Neil Slater

9

在某些情况下,@ Neil Slater建议的使用周期函数转换要素的方法将非常有效,并且可能是最佳解决方案。这里的困难是您可能需要手动选择周期/波长(请参阅此问题)。

如果您希望将周期性更深入地嵌入到网络中,最简单的方法是在一层或多层中使用sin / cos作为激活函数。本文讨论了处理周期性激活函数的潜在困难和策略。

或者,本文采用另一种方法,其中网络的权重取决于周期函数。本文还建议使用样条曲线代替sin / cos,因为它们更灵活。这是去年我最喜欢的论文之一,因此即使您最终不使用它的方法也值得阅读(或至少观看视频)。


9

您采用了错误的方法,使用此方法无法解决问题。

有几种解决问题的方法。我将通过功能工程建议最明显的一种。不用将时间作为线性特征,而是将其作为模数T = 1的余数。例如,t = 0.2、1.2和2.2都将成为特征t1 = 0.1等。只要T大于波的周期,这将起作用。将此东西插入网中,看看它是如何工作的。

功能工程被低估了。AI / ML中存在这种趋势,销售人员声称您将所有输入都丢弃到了网络中,并且以某种方式可以弄清楚如何处理它们。当然可以,正如您在示例中看到的那样,但是它很容易分解。这是一个很好的例子,表明即使在最简单的情况下,构建良好的功能也很重要。

另外,我希望您意识到这是要素工程的最原始的例子。只是为了让您了解您可以使用它做什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.