我如何有意设计一个过拟合的神经网络?

机器算法验证 神经网络 过拟合
2022-01-23 09:52:14

要拥有一个在训练集上表现完美但在验证集上表现不佳的神经网络,我应该怎么做?为简化起见,让我们将其视为 CIFAR-10 分类任务。

例如,“无辍学”和“无正则化”会有所帮助,但“更多层”不一定。我也想知道,“批量大小”,优化器的选择对过度拟合有什么影响吗?

4个回答

如果您有一个具有两层可修改权重的网络,您可以形成任意凸决策区域,其中最低级别的神经元将输入空间划分为半空间,第二层神经元执行“与”运算以确定您是否在定义凸区域的半空间的右侧。在下图中,您可以通过这种方式形成区域 r1 和 r2。如果稍后添加额外的,则可以通过组合定义凸子区域的子网络的输出来形成任意凹或不相交的决策区域。我想我从 Philip Wasserman 的《神经计算:理论与实践》(1989 年)一书中得到了这个证明。

在此处输入图像描述

因此,您是否想要过拟合,使用具有三个隐藏层神经元的神经网络,在每一层中使用大量隐藏层神经元,最小化训练模式的数量(如果挑战允许),使用交叉熵误差度量并使用全局优化算法(例如模拟退火)进行训练。

这种方法将允许您创建一个神经网络,该神经网络具有围绕每个类的每个训练模式的凸子区域,因此训练集误差为零,并且在类分布重叠的情况下验证性能较差。

请注意,过度拟合是关于过度优化模型。如果“数据不匹配”没有被过度最小化(例如,通过应用正则化或提前停止或幸运地落在“良好”的局部最小值中,那么过度参数化的模型(比必要的权重/隐藏单元更多)仍然可以表现良好)。

记忆

对于绝对过拟合,您需要一个在技术上能够记住所有示例但从根本上无法泛化的网络。我似乎记得有一个故事,有人训练了一个学生表现预测器,该预测器在第一年取得了很好的成绩,但在第二年就彻底失败了,结果证明这是由于使用表中的所有列作为特征造成的,包括列与学生的序号,并且系统简单地设法得知例如学生#42总是取得好成绩而学生#43表现不佳,直到明年其他学生是#42时,这一直很好。

对于 CIFAR 的初步概念证明,您可以执行以下操作:

  1. 选择 CIFAR 样本的子集,其中每个图像的左上角像素的颜色恰好不同,并将该子集用作训练数据。
  2. 构建一个网络,其中第一层只挑选左上角的 RGB 值并忽略其他所有内容,然后是一个或两个相当宽的全连接层,直到最后的分类层。
  3. 训练你的系统——你应该得到 100% 的训练数据,以及近乎随机的测试数据。

之后,您可以将其扩展到完整的 CIFAR 的严​​重过度拟合系统:

  1. 和以前一样,过滤输入数据,以便可以识别训练数据中的每个单独项目(因此单个像素是不够的),但绝对不可能从该数据中解决实际问题。也许顶行的前十个像素就足够了;可能来自元数据 - 例如图片 ID,如在学生表演场景中。
  2. 确保没有任何形式的正则化,没有暗示平移独立性的卷积结构,只有完全连接的层。
  3. 训练到 100% 的训练准确率,并为系统的无用而哭泣。

一般来说,如果你训练了非常多的 epoch,并且如果你的网络有足够的容量,那么网络就会过拟合。因此,为了确保过拟合:选择一个容量非常高的网络,然后训练很多个 epoch。不要使用正则化(例如,dropout、权重衰减等)。

实验表明,如果你训练足够长的时间,网络可以记住训练集中的所有输入并达到 100% 的准确率,但这并不意味着它在验证集上是准确的。在今天的大多数工作中,我们避免过度拟合的主要方法之一是提前停止:我们在有限数量的 epoch 之后停止 SGD。因此,如果您避免提前停止,并使用足够大的网络,那么导致网络过拟合应该没有问题。

你真的想强迫很多过拟合吗?然后将额外的样本添加到训练集中,随机选择标签。现在选择一个非常大的网络,并训练很长时间,足以在训练集上获得 100% 的准确率。额外随机标记的样本可能会进一步阻碍任何泛化,并导致网络在验证集上表现更差。

以下是一些我认为可能会有所帮助的事情。

  1. 如果您可以随意更改网络架构,请尝试使用大型但较浅的网络。层帮助网络学习更高级别的特征,到最后一层,特征足够抽象,网络可以“理解它们”。通过强制在较浅的网络上进行训练,您实际上是在削弱网络形成越来越高级概念的层次结构的能力,并迫使它死记硬背地学习数据(也就是说,过度拟合)以最小化损失。
  2. 如果这又是您有兴趣探索的东西,您可以尝试使网络数据匮乏。给一个大型网络提供一些训练样本,它会尝试过拟合。更好的是,给它一些可变性最小的例子——看起来几乎相同的例子。
  3. 不要使用随机梯度体面。随机性有助于减少过度拟合。所以,使用全批次训练!如果您想使用随机梯度体面,那么将您的小批量设计为具有最小的可变性。