无法使用 MLP 过拟合

数据挖掘 机器学习 神经网络 深度学习
2022-01-21 23:34:33

我正在构建一个带有私有数据集的 5 类分类器。每个数据样本有 67 个特征,大约有 40000 个样本。复制特定类别的样本以克服类别不平衡问题(因此有 40000 个样本)。

使用一对一的多类 SVM,我在验证集上的准确率约为 79%。这些特征被标准化以获得 79% 的准确率。如果没有标准化,我得到的准确度约为 72%。当我尝试 50 倍交叉验证时,结果类似。

现在转到 MLP 结果,

经验 1:

  • 网络架构: [67 40 5]
  • 优化器:亚当
  • 学习率:基础学习率的指数衰减
  • 验证准确度: ~45%
  • 观察:训练准确度和验证准确度都停止提高。

Exp 2:带有 batchnorm 层的 重复Exp 1

  • 验证准确度: ~50%
  • 观察:准确率提高了 5%。

经验 3:

为了过拟合,增加了 MLP 的深度。Exp 1网络的更深版本

  • 网络架构: [67 40 40 40 40 40 40 5]
  • 优化器:亚当
  • 学习率:基础学习率的指数衰减
  • 验证准确度: ~55%

对可能发生的事情的想法?

1个回答

可能发生的一些事情:

  1. 您的隐藏层中没有足够的参数来学习。试试 [67, 512, 5] 之类的东西,或者使用 [67, 1024, 256, 5] 之类的东西更深入地扩展。这个想法是,考虑到您拥有的训练数据量,您的隐藏层可能太小而无法捕获属性之间的交互。

我看到的一个经验法则是:

Nh=Ns/(α∗(Ni+No))

Nh = number of hidden neurons.
Ni = number of input neurons.
No = number of output neurons.
Ns = number of samples in training data set.
α = an arbitrary scaling factor usually 2-10.

在你的情况下,这会让你喜欢 5000 个神经元,但由于你对你的类进行过采样,我也建议改为欠采样,这可能会让你达到 1024 左右,这是相当标准的。[67, 512, 5] 配置是纯直觉反应。

  1. 学习率太高。尝试从较低的 LR 开始(如 10e-5)。有时这适用于亚当。

  2. 权重初始化:仔细检查您正在使用 Xavier。