神经网络:为什么我不能过拟合?

机器算法验证 r 神经网络 过拟合 插入符号
2022-02-03 14:23:17

我有一个(前馈单层)神经网络,我尝试用它从两个金融变量(回归)中预测一个与环境相关的变量。我使用 caret 包中的“train”功能。

我使用nnet()caret 包中的算法。我有两个连续预测变量和 420 个数据点。

为了理论理解,我试图故意过度拟合我的模型;据我了解,这通常适用于每个数据集,例如增加“大小”(即隐藏单元的数量)。然而,大幅增加隐藏单元的大小不会导致过度拟合。

因此,假设您可以通过增加“大小”来过度拟合每个神经网络是错误的吗?哪个其他变量可能导致过度拟合?

grid <- expand.grid(size = 20
                    )

control <- trainControl(method = "cv", 
                        number = 10,
                        verboseIter = TRUE
                        )

fit <- train(x=train_parametres, y=train_result, 
             method = "mlp", 
             metric = "Rsquared",
             learnFunc = "Std_Backpropagation",
             learnFuncParams = c(0.2, 0.0),
             maxit = 1000,
             trControl = control,
             tuneGrid = grid,
             preProcess = c("center", "scale"), 
             linout = T,
             verbose = T,
             allowParallel = T
)
2个回答

尝试过拟合数据集的原因是为了了解表示数据集所需的模型容量。

如果我们的模型容量太低,您将无法表示您的数据集。当您增加模型容量直到可以完全表示您的数据集时,您就知道您找到了最小容量。

过度拟合不是这里的目标,它是一个副产品。您的模型可能代表数据集,不一定代表概念如果您将在测试集上尝试此模型,则性能可能会较低,表明过度拟合。

然而,模型容量并不是模型不能代表概念的唯一原因。该概念可能不属于您的模型所代表的函数族 - 当您的 NN 是线性的而该概念不是时。输入可能不足以在样本之间产生差异,或者您的优化算法根本无法找到正确的解决方案。

在您的情况下,您只有两个预测变量。如果它们是二进制的,很可能你不能用它们代表两个。假设它们是有界且平滑的,您可以尝试将它们装箱。如果您在 bin 中获得高熵(例如,具有 50%-50% 分布的 bin),则仅在这些特征上中继的逻辑将无法区分它们。

我有同样的问题,我保持零正则化和最佳学习率。但是学习率衰减设置为零。一旦我将学习率衰减设置为 0.95 之类的某个值,它就会起作用并增加 epoch 的数量