我有一个带有2个隐藏层的FFNN,用于几乎立即过度拟合的回归任务(第2-5阶段,具体取决于#个隐藏单元)。 (ReLU,Adam,MSE,每层相同的#个隐藏单元,tf.keras)
32个神经元:
128个神经元:
我将调整隐藏单位的数量,但是为了限制搜索空间,我想知道上限和下限应该是什么。
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')
答案 0 :(得分:3)
超参数调整通常是ML中最困难的步骤,通常我们随机尝试不同的值并对模型进行评估,然后选择那些可提供最佳性能的值。
回到您的问题,您有一个高差异性问题(训练良好,测试不佳)。
您可以按顺序完成八件事
根据您的计算能力和时间,您可以为可以拥有的隐藏单位和隐藏层的数量设置界限。
因为更大的网络将具有更多的局部最小值。
不,这不是真的,实际上随着输入维数的增加,陷入局部极小值的机会减少。因此,我们通常忽略局部极小值的问题。这是非常罕见的。对于局部/全局最小值,工作空间中所有维度的导数必须为零。因此,在典型模型中极不可能。
还有一件事,我注意到您在最后一层使用线性单位。我建议您改为使用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引用的,该想法可以免费在线获得:
最重要的是,您不能只玩模型并希望拥有最好的模型。检查数据,了解需要什么,然后应用相应的技术。有关更多详细信息,请阅读这本书,它非常好。您的起点应该是一个简单的回归模型,一层,很少的神经元,然后看看会发生什么。然后逐步进行实验。