正则化训练神经网络
- 使用 NetTrain 的 ValidationSet 选项返回具有由验证损失(或简单分类网络中的错误)确定的最佳性能网络.
- 将 NetTrain 的 TrainingStoppingCriterion 选项与 ValidationSet 结合使用,可在过度拟合开始时停止训练.
- 使用正则化层,例如 DropoutLayer 或特征,例如, LongShortTermMemoryLayer 等的 "Dropout" 参数.
在我们描述解决方案之前,我们将用一个简单的例子来展示这个问题. 我们通过从高斯曲线中获取噪声样本来创建合成训练数据集. 接下来,我们用这些样本训练网. 该网具有比所需更高的容量,这意味着它可以模拟比拟合高斯曲线所需要的复杂得多的函数. 因为我们知道真实模型的形式,所以在出现过拟合时,它在视觉上很明显:训练后的网产生一个与高斯完全不同的函数,因为它已经在原始数据中“学习了噪声”. 这可以通过从高斯采样第二组点来量化,并使用训练的网来预测它们的值. 训练后的网未能泛化:虽然它非常拟合训练数据,但它不能很好地近似新的测试数据.
从 NetTrainResultsObject 中获取网络:
缓解过度拟合的第一种常见方法是测量第二次测试数据(不用于训练的情况下)的网络性能,并在整个训练历史中选择与测试集中最佳性能相对应的特定网络. 这可以通过 ValidationSet 选项来实现,它测量每轮之后测试数据上的网络. 这些测量有两个结果:它们产生验证损失曲线(以及在执行分类时的验证误差曲线),并且他们改变了训练所用的选择过程,以选择具有最低验证损失的中间网络,而不是最低的训练损失.
缓解过度拟合的第二种常见方法是执行早期停止. 当网络性能的某些测量开始变差时,这是停止训练的过程. 这是使用 NetTrain 的 TrainingStoppingCriterion 选项和 ValidationSet 选项完成的. 与仅使用 ValidationSet 相比,这有两个潜在的优势. 首先,请注意,在前面的例子中,我们最终训练了额外 1300 轮的网. 在这种情况下,由于网络和训练数据集都很小,这不是问题,但这可能非常浪费. 其次,我们可能想要使用除损失之外的某些测量来确定最佳网络.
从 NetTrainResultsObject 提取培训网络并向之前一样绘制:
第四种常见的正则化技术是“脱离 (dropout)”. 脱离将噪声引入到网络的隐藏激活中,但是以这样的方式,在给定层上激活的总体统计不会改变. 噪声采取随机失活模式的形式,其中输入数组的一组随机分量(通常称为单位或神经元)被归零,并且其余分量的幅度被增加以进行补偿. 基本思想是脱离防止神经元过度依赖于它们下面的层中的任何特定神经元,并因此鼓励学习更鲁棒的表示.
第五种正则化技术是批归一化. 它通过学习数据均值和方差来标准化其输入数据. 批归一化在实践中具有许多有用的属性:它加速了训练并提供了正规化. BatchNormalizationLayer 通常插入在 LinearLayer 或 ConvolutionLayer 及其激活函数之间.
创建包括 BatchNormalizationLayer 的多层感知器: