对 CNN 模型使用交叉验证技术

数据挖掘 Python 深度学习 美国有线电视新闻网 交叉验证
2021-10-02 08:34:00

我正在研究一个 CNN 模型。与往常一样,我使用带有 epoch 的批次来训练我的模型。当它完成训练和验证后,最后我使用了一个测试集来测量模型性能并生成混淆矩阵。现在我想使用交叉验证来训练我的模型。我可以实现它,但我心中有一些问题:

1- 为什么大多数 CNN 模型不使用交叉验证?

2-如果我使用交叉验证,如何生成混淆矩阵?我可以将数据集拆分为训练/测试,然后在训练集上进行交叉验证作为训练/验证(即,将交叉验证作为训练/验证进行,除了通常的训练/测试),最后以相同的方式使用测试集?或者怎么做?

2个回答

问题 1:为什么大多数 CNN 模型不应用交叉验证技术?

k-fold 交叉验证通常用于具有少量参数的简单模型、具有简单超参数的模型以及易于优化的模型。典型的例子是线性回归、逻辑回归、小型神经网络和支持向量机。对于具有许多参数(例如超过一百万)的卷积神经网络,我们只是在架构中有太多可能的变化。你可以做的是对学习率、batch size、dropout(数量和位置)和batch normalization(位置)做一些实验。用庞大的数据集训练卷积神经网络需要相当长的时间。进行超参数优化完全是矫枉过正。通常在论文中,他们试图改进其他研究论文的结果。

问题 2:如果我使用交叉验证,如何生成混淆矩阵?我可以将数据集拆分为训练/测试,然后在训练集上进行交叉验证作为训练/验证(即作为训练/验证进行交叉验证,除了通常的训练/测试),最后以相同的方式使用测试集?或如何?

为了做 k-折叠交叉验证,您需要将初始数据集分成两部分。一个用于进行超参数优化的数据集和一个用于最终验证的数据集。然后我们将数据集用于超参数优化并将其拆分为k (希望)同样大小的数据集 D1,D2,,Dk. 为了清楚起见,让我们设置k=3. 然后对于我们想要测试的每个可能的超参数组合,我们使用 D1D2 适合我们的模型,我们使用 D3来验证我们的模型。然后我们做同样的事情D2D3并使用D1进行验证。然后我们做同样的事情D1D3并使用D2进行验证。我们将获得3每个可能的超参数配置的混淆矩阵。为了从这三个结果中得出一个度量,我们取这些混淆矩阵的平均值。然后我们可以扫描所有平均混淆矩阵,从而选择最佳的超参数配置(您必须定义混淆矩阵的哪些部分对您的问题很重要)。最后,我们选择“最佳”超参数并计算最终验证集的预测性能。此绩效指标是您报告的指标。

之前的答案已经被接受,但我回答这个问题只是为了确保事情清楚。我会更深一步,这对先进的人会有帮助。

首先,交叉验证是一种模型选择机制,主要用于选择超参数。更改超参数将影响模型中的参数数量。例如,增加神经网络中的层数可以引入数千个参数(取决于层的宽度)。

其次,几乎任何训练算法都可以有无限数量的可能超参数。为了清楚起见,我举个例子:在 CNN 中,层数是一个超参数,理论上可以取 1 到无穷大之间的任何值,这意味着只要改变这个超参数,我就可以生成无限个模型. 同时,决策树中的层数(深度)是一个超参数,也可以取 1 到无穷大之间的值,这意味着我可以使用决策树生成无限数量的模型,但我们使用决策树的交叉验证但不是cnn!!!!

不要将超参数与参数混淆,交叉验证与参数无关,它仅与超参数和不同的训练算法有关。更改参数的值将由训练算法处理。

让我们回到最初的问题,为什么不使用 CNN 的交叉验证?事实上,这个问题的答案是基于机器学习中一个非常重要的概念。方差误差与偏差误差。假设您有 N 个模型训练,它们都有方差误差和零偏差误差,在这种情况下,使用交叉验证来选择模型是没有用的,但是对模型进行平均很有用。如果您有 N 个模型都有不同的偏差误差(非零),那么使用交叉验证对于选择最佳模型很有用,但平均是有害的。每当您的模型具有不同的偏差错误时,请使用交叉验证来确定最佳模型。每当您的模型存在方差错误时,请使用平均来确定最终结果。

CNN 倾向于过度拟合而不是欠拟合。今天我们知道网络越深越好,但过度拟合是我们害怕的。CNN 是平均而不是选择的好目标,这就是为什么有时他们训练四个或五个模型,然后平均他们的输出。

在文献中研究了选择网络架构的概念。他们清楚地说明了如何选择您的超参数。事实上,如果你有很多数据,就选择更大的模型。

我建议您阅读以下论文: 1- Alex- Hinton 2012 年的论文,Alex 提出他的网络的论文。你会看到他们提出的大多数技巧是处理过度拟合(方差误差)而不是有偏误差。2-超级学习者,预测中的超级学习者这篇论文从数学上解释了什么是交叉验证。许多人认为交叉验证是一组训练/测试实验,它扫描一组参数并返回最佳模型,但他们忽略了这是否足以保证这是我使用可用训练数据可以获得的最佳模型。他们还忽略了交叉验证需要保证返回的模型是超级学习者的所有假设。