使用更多输入变量时,神经网络性能更差

计算科学 回归 数据管理
2021-12-25 20:26:40

这个问题更多地基于神经网络理论,而不是我的特定实现。因此,除非要求,否则我将省略我的代码。

我正在用 C# 开发一个可以创建和训练前馈神经网络的项目。它运行良好,可以训练网络执行一些简单的功能,例如平方输入或其他基本数学函数。

我的下一个任务是使用它来训练一个网络,以根据 39 个连续输入变量来预测正面或负面的结果。我有一个包含大约 7000 个训练示例的数据集。

我对每个输入变量进行了 ROC 曲线分析,发现有些是非常好的预测变量,有些几乎没用。

我按 AUC 对变量进行了排序,最好的在 78% 左右。我创建了一个只有这个变量作为输入的网络和一个带有一个神经元的隐藏层。训练后,该网络的表现优于随机网络,但并不令人惊讶。

接下来,我添加了 AUC (75%) 的第二好的变量作为另一个输入,其他所有内容保持不变。训练后,网络的适应度得分比单次输入高 1.5 倍左右。

接下来,我添加了第三个最佳变量并进行了训练。当它有 2 个输入时,网络的适应度分数只有 85% 左右。我尝试向隐藏层添加更多神经元,运行训练以进行更多迭代以及初始随机权重和偏差的许多不同运行,似乎无论我做什么,网络在 3 个输入时的性能都会比 2 个输入更差。

我觉得这很令人困惑,因为神经网络理论上能够复制任何功能。因此,即使我介绍的第三个变量是垃圾预测器,那么训练也应该能够将该输入的权重设置为零,并且它的性能与使用两个输入时相同。

问题:

  1. 我的假设是否正确,即向神经网络添加输入(并给定足够的训练迭代)它的性能永远不会比输入更少的情况差?

  2. 在为假设 1 添加更多输入时,我是否需要隐藏层中的更多神经元?对于每个输入,隐藏层中的一个神经元是否是一个好的指导方针?

  3. 考虑到我所做的一切尝试,我的训练代码编写得还不够好,无法充分训练网络,这是一个公平的假设吗?(或者换句话说,网络应该很容易忽略第三个输入,所以问题更可能是我的训练代码不够好,而不是网络不能轻易忽略第三个输入) ?

  4. 创建具有连续更多输入的网络以查看哪些变量最能提高适应度,然后不使用那些不能改善网络的变量,这是一种好方法吗?或者我应该只创建一个包含所有 39 个输入变量的网络,对其进行长时间训练,然后对结果权重进行某种分析,以查看哪些输入的权重接近于零并将其删除?(因为它们基本上被网络忽略了)。

额外细节:隐藏层中的每个神经元都连接到每个输入,输出神经元连接到隐藏层中的每个神经元。所有神经元都使用带有权重和偏差的 sigmoid 函数。如果输出神经元的输出>0.8,则认为网络预测为正,否则为负。

0个回答
没有发现任何回复~