我有一个带有 2 个隐藏层的 FFNN,用于几乎立即过拟合的回归任务(epoch 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')
超参数调整通常是机器学习中最困难的步骤,通常我们随机尝试不同的值并评估模型并选择提供最佳性能的一组值。
回到你的问题,你有一个高方差问题(训练良好,测试糟糕)。
您可以按顺序做八件事
- 确保您的测试和训练分布相同。
- 确保将数据打乱然后将其分成两组(测试和训练)
- 一个好的火车:测试分配将是 105:15K
- 使用带有 Dropout/L2 正则化的更深网络。
- 增加训练集大小。
- 尝试提前停止
- 改变你的损失函数
- 更改网络架构(切换到 ConvNet、LSTM 等)。
根据您的计算能力和时间,您可以设置您可以拥有的隐藏单元和隐藏层的数量。
因为更大的网络将有更多的局部最小值。
不,这并不完全正确,实际上,随着输入维度数量的增加,陷入局部最小值的机会就会减少。所以我们通常会忽略局部极小值的问题。这是非常罕见的。对于局部/全局最小值,工作空间中所有维度的导数必须为零。因此,在典型模型中这是极不可能的。
另一件事,我注意到你在最后一层使用线性单位。我建议你改用 ReLu。一般来说,我们不需要回归中的负值。它将减少测试/训练错误
拿着它 :
In MSE 1/2 * (y_true - y_prediction)^2
because y_prediction
可以为负值。当 y_predicted 变得高度负或高度正时,整个 MSE 项可能会膨胀到很大的值。
最后一层使用 ReLu 可确保y_prediction
是积极的。因此,预计误差较低。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)