神经网络立即过度拟合

时间:2018-07-01 10:15:41

标签: tensorflow neural-network keras hyperparameters

我有一个带有2个隐藏层的FFNN,用于几乎立即过度拟合的回归任务(第2-5阶段,具体取决于#个隐藏单元)。 (ReLU,Adam,MSE,每层相同的#个隐藏单元,tf.keras)

32个神经元:

32 neurons

128个神经元:

128 neurons

我将调整隐藏单位的数量,但是为了限制搜索空间,我想知道上限和下限应该是什么。

Afaik最好拥有一个太大的网络并尝试通过L2-reg或dropout进行规范化,而不是降低网络的容量-因为更大的网络将具有更多的本地最小值,但是实际的损失值会更好。

是否有必要尝试规范化(例如通过辍学)一开始就不适合的网络?

如果是这样,我想我可以增加两个界限。如果没有,我会降低它们。

model = Sequential()
model.add(Dense(n_neurons, 'relu'))
model.add(Dense(n_neurons, 'relu'))
model.add(Dense(1, 'linear'))
model.compile('adam', 'mse')

2 个答案:

答案 0 :(得分:3)

超参数调整通常是ML中最困难的步骤,通常我们随机尝试不同的值并对模型进行评估,然后选择那些可提供最佳性能的值。


回到您的问题,您有一个高差异性问题(训练良好,测试不佳)。

您可以按顺序完成八件事

  1. 确保您的考试和培训分布相同。
  2. 请确保先洗牌,然后将数据分为两组(测试和训练)
  3. 好的火车:测试成绩为105:15K
  4. 使用具有Dropout / L2正则化功能的更深层网络。
  5. 增加训练集的大小。
  6. 尝试提前停止
  7. 更改亏损功能
  8. 更改网络体系结构(切换到ConvNets,LSTM等)。

根据您的计算能力和时间,您可以为可以拥有的隐藏单位和隐藏层的数量设置界限。


  

因为更大的网络将具有更多的局部最小值。

不,这不是真的,实际上随着输入维数的增加,陷入局部极小值的机会减少。因此,我们通常忽略局部极小值的问题。这是非常罕见的。对于局部/全局最小值,工作空间中所有维度的导数必须为零。因此,在典型模型中极不可能。


还有一件事,我注意到您在最后一层使用线性单位。我建议您改为使用ReLu。通常,回归中不需要负值。它将减少测试/训练错误

接受此:

In MSE 1/2 * (y_true - y_prediction)^2

因为y_prediction可以是负值。随着y_prediction变为高度负值或高度正值,整个MSE术语可能会爆炸成较大的值。

在最后一层使用ReLu可以确保y_prediction为正。因此,预计误差会很小。

答案 1 :(得分:1)

让我尝试证实此处的一些想法,这些想法是从Ian Goodfellow et. al. Deep Learning book引用的,该想法可以免费在线获得:

  1. 第7章:正则化最重要的一点是数据,如果他们拥有大量最能近似分布的数据,则可以并且应该避免正则化。对于您而言,训练数据和测试数据之间似乎存在巨大差异。您需要确保数据一致。
  2. 第7.4节:数据增强关于数据,Goodfellow讨论了数据增强和通过注入在数学上具有相同作用的噪声(最有可能是高斯分布)来引发正则化的问题。当您限制模型从闩锁到单个特征以过度拟合时,这种噪声可以很好地用于回归任务。
  3. 第7.8节:提前停止对于只需要具有最佳测试误差的模型很有用。但同样,这仅在您的数据允许训练推断测试数据的情况下有效。如果测试错误立即增加,培训将立即停止。
  4. 第7.12节: Dropout 仅将Dropout应用到回归模型并不一定有帮助。实际上,“当很少有加标签的培训示例可用时,辍学效果较差”。对于分类,辍学迫使模型不依赖单个特征,但是在回归中,可能需要所有输入来计算值而不是进行分类。
  5. 第11章:实践强调使用基本模型以确保训练任务不容易。如果一个简单的linear regression可以实现比您甚至都没有培训问题更高的行为。

最重要的是,您不能只玩模型并希望拥有最好的模型。检查数据,了解需要什么,然后应用相应的技术。有关更多详细信息,请阅读这本书,它非常好。您的起点应该是一个简单的回归模型,一层,很少的神经元,然后看看会发生什么。然后逐步进行实验。