为什么我的模型学习效果不理想?

人工智能 神经网络 机器学习 深度学习 火炬
2021-11-06 13:21:54

要解决的问题是非线性函数的非线性回归。我的实际问题是对函数“在许多二次形式上找到最大值”进行建模:max(w.H.T * Q * w)但是为了开始并了解更多关于神经网络的信息,我使用 Pytorch 创建了一个用于非线性回归任务的玩具示例。问题是网络永远不会以令人满意的方式学习函数,即使我的模型很大,有多个层(见下文)。还是不够大或太大?如何改进甚至简化网络以获得更小的训练误差?

我尝试了不同的网络架构,但结果总是不尽如人意。通常,误差在 0 左右的输入区间内非常小,但网络无法为区间边界的区域获得良好的权重(见下图)。在一定数量的 epoch 之后,损失没有改善。我可以生成更多的训练数据,但我还没有完全理解,如何改进训练(调整参数,如批量大小、数据量、层数、标准化输入(输出?)数据、神经元数量、时代等)

我的神经网络有 8 层,神经元数量如下1, 80, 70, 60, 40, 40, 20, 1

目前,我不太关心过度拟合,我的目标是了解为什么需要选择某个网络架构/某些超参数。当然,同时避免过度拟合将是一个好处。

我对将神经网络用于回归任务或作为函数逼近器特别感兴趣。原则上,根据通用逼近定理,我的问题应该能够通过单层神经网络逼近到任意精度,这不是正确的吗?

训练模型与原始数据之间的差异

损失值与迭代

训练模型与原始数据之间的差异

2个回答

神经网络在输入范围大的情况下学习不好。将您的输入缩放到较小的范围,例如 -2 到 2,并转换为/从该范围转换以一致地表示您的函数间隔。

我只有一个好消息...您的代码没有问题。神经网络倾向于这样做。尤其是具有非常复杂的功能。

  • 增加神经元的数量不会减少误差的分布方式。
  • 每种情况都有更好的损失函数,但并不是一个真正有效的解决方案。
  • 神经网络非常适合管理噪音。所以,他们很好地忽略了少数族裔。这是一个常见的表达方式“ANN 是种族主义者”。

我建议您部署一个直方图DataSet vs Output Value看看中部地区的数据是否比边境地区的数据多。如果您可以随意生成更多数据。在具有更多错误的特定区域中生成更多值。
这将增加误差并迫使反向传播算法在该区域进行改进。
有关优化算法的更多信息可能会有用。但是,就像我说的,一切似乎都很正常。