用神经网络改进函数逼近

计算科学 机器学习 近似
2021-12-26 01:52:55

我正在构建一个神经网络来近似一个数据集,该数据集需要 3 个输入并给出 1 个输出。在使用几个不同的隐藏层迭代测试网络并调整优化器和激活函数后,解决方案似乎没有显着改进。这表明我的方法存在固有的问题。值得注意的是,随着输入变量数量的增加,解决方案的准确性问题就会出现(即,使用一个因变量我可以达到非常好的准确性)。我相信应用基本的机器学习技术并不能很好地转化为更高维度的输入。话虽如此,我是机器学习的新手,所以我可能会遗漏一些东西。这是网络输出的示例: 在此处输入图像描述 三个输入参数是高度、马赫和故障参数。该图是一个高度“切片”。我认为预测不足的趋势是网络试图满足所有不同高度的结果,在较低的高度存在明显的预测不足,而较高的高度往往会过度预测。 在此处输入图像描述 用于生成这种近似的神经网络具有基本结构。一个输入层到一个 100 个节点的隐藏层(celu 激活)和一个输出层。这种结构的不同迭代似乎没有效果,它们收敛到相同的解决方案。我想知道我是否做错了什么或需要采取不同的方法来解决这个问题。这个问题似乎是试图使用一个简单的网络来捕获多维解决方案,但我找不到任何关于多维输入的正确设置的东西。此外,如果您对机器学习资源(特别是函数逼近)有任何建议,我将不胜感激。

编辑:虽然我使用下面描述的技术对解决方案的准确性进行了重大改进。我发现导致数据偏斜的问题是编码错误,我在绘图时重新定义了测试数据的标准化值(通过不同的测试数据集标准化值)。

1个回答

最有可能的是,您的问题设置正确,只需要调整各种东西。

  • 海拔高度是多少?如果你还没有,你可能想要对其进行标准化,特别是因为看起来故障参数和马赫都是 [0,1]
  • 100个单位是相当多的。请注意,更多的单位 =/= 更低的错误,特别是对于您描述的问题,它似乎有相对较少的示例可以训练。在 16 点左右尝试一些更接近的东西
  • 另一方面,您可能希望拥有 2 个或 3 个隐藏层
  • 使用 relu 或 tanh 激活而不是 celu。
  • 您需要为权重添加一些正则化:l2 正则化将起作用
  • 学习率和正则化参数都非常重要。您需要为它们找到合适的值,可能需要进行超参数优化。如果手动调整,学习率尤其会有点棘手
  • 同样重要的是你训练了多少个 epoch

请注意,很多这些问题都可以通过超参数优化来回答。如果你使用 python,Nni 是一个很好的包。另一方面,也许你会调整一些东西,发现没有它你的表现已经可以接受了。