【问题标题】:Neural network immediately overfitting神经网络立即过拟合
【发布时间】:2018-12-09 20:49:06
【问题描述】:

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

32 个神经元:

128 个神经元:

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

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

尝试正则化(例如通过 dropout)从一开始就过拟合的网络有什么意义吗?

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

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

【问题讨论】:

  • 你有多少训练数据?您的训练和测试(和验证)数据是否来自同一分布?如果它们不是来自同一个发行版,您的网络将学到完全不同的东西。将您的模型代码添加到问题中。
  • 完成,感谢您的评论。我有 12 万个样本。来自同一分布的所有集合。数据增强是我正在研究的一个选项。

标签: tensorflow neural-network keras hyperparameters


【解决方案1】:

超参数调优通常是 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、2、3 完成。 4:它已经过拟合了,那不会让事情变得更糟吗?你的意思是更多的层,但每层的神经元更少?
  • 是的,你没看错。深度网络可以轻松学习某些功能,而即使具有高神经元的浅层网络也无法学习。构建一个 3-6 层的深度网络。应用正则化器之一。如果连这都没有帮助,您可能需要更改损失函数或完整的网络架构。
  • 同时从最后一层移除线性单元并使用 ReLu。阅读新答案
【解决方案2】:

让我在这里尝试证实其中的一些想法,引用自Ian Goodfellow et. al. Deep Learning book,可在线免费获得:

  1. 第 7 章:正则化 最重要的一点是数据,如果他们拥有最接近分布的大量数据,则可以而且应该避免正则化。在您的情况下,看起来训练数据和测试数据之间可能存在显着差异。您需要确保数据一致。
  2. 第 7.4 节:数据增强 关于数据,Goodfellow 谈到了数据增强和通过注入在数学上具有相同效果的噪声(很可能是高斯噪声)来诱导正则化。这种噪声非常适合回归任务,因为您可以限制模型锁定单个特征以进行过度拟合。
  3. 第 7.8 节:提前停止 如果您只想要一个具有最佳测试误差的模型,则很有用。但同样,这只有在您的数据允许训练推断测试数据时才有效。如果测试错误立即增加,训练将立即停止。
  4. 第 7.12 节:Dropout 仅将 dropout 应用于回归模型并不一定有帮助。事实上,“当可用的标记训练示例极少时,dropout 的效果会降低”。对于分类,dropout 会强制模型不依赖单个特征,但在回归中,可能需要所有输入来计算值而不是分类。
  5. 第 11 章:Practicals 强调使用 基础模型 来确保训练任务不是微不足道的。如果一个简单的linear regression 可以实现与您开始时甚至没有训练问题相似的行为。

底线是您不能只玩模型并希望获得最好的结果。检查数据,了解需要什么,然后应用相应的技术。详细阅读这本书,非常好。你的起点应该是一个简单的回归模型,一层,很少的神经元,看看会发生什么。然后逐步进行实验。

【讨论】:

  • 优秀的评论,谢谢!训练集和测试集都来自同一个分布。我同意我严重缺乏数据;我将尝试一下注入噪声技术。我有一个简单的线性模型,其性能与我的 NN 一样好(甚至更好),这似乎很奇怪。我希望神经网络在回归问题上做得更好——根据具体的用例,可能不是很多,但还是更好。
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2018-07-16
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多