正则化训练神经网络

正则化是指用于防止过度拟合的一套技术,这是一种高度表达性模型(如深度神经网络)趋向于记忆训练数据的细节,而不是泛化看不见的测试数据的.
在 Wolfram 语言中基本上有 4 种方法完成正则化:
过度拟合
在我们描述解决方案之前,我们将用一个简单的例子来展示这个问题. 我们通过从高斯曲线中获取噪声样本来创建合成训练数据集. 接下来,我们用这些样本训练网. 该网具有比所需更高的容量,这意味着它可以模拟比拟合高斯曲线所需要的复杂得多的函数. 因为我们知道真实模型的形式,所以在出现过拟合时,它在视觉上很明显:训练后的网产生一个与高斯完全不同的函数,因为它已经在原始数据中学习了噪声. 这可以通过从高斯采样第二组点来量化,并使用训练的网来预测它们的值. 训练后的网未能泛化:虽然它非常拟合训练数据,但它不能很好地近似新的测试数据.
基于高斯曲线创建噪声数据集:
创建一个具有大量隐藏单元的多层感知器:
训练网络 30 秒:
尽管数据中有噪声,最终损失很低:
由此得出的网络过度拟合数据,除了基本函数还学习噪声. 为了看见这点,我们绘制通过网络学习到的函数以及原始数据.
NetTrainResultsObject 中获取网络:
证明过度拟合发生的更量化的方法是测试来自相同基础分布但未用于训练网络的数据上的网络.
合成第二套训练数据拷贝,用作测试集:
创建一个函数测量新测试集上的平均误差:
测试集上的平均损失比训练集上的更高,显示发生的过度拟合:
对于测试样本,拟合网络在视觉上也不是一个很好的解释:
验证集合 Sets
缓解过度拟合的第一种常见方法是测量第二次测试数据(不用于训练的情况下)的网络性能,并在整个训练历史中选择与测试集中最佳性能相对应的特定网络. 这可以通过 ValidationSet 选项来实现,它测量每轮之后测试数据上的网络. 这些测量有两个结果:它们产生验证损失曲线(以及在执行分类时的验证误差曲线),并且他们改变了训练所用的选择过程,以选择具有最低验证损失的中间网络,而不是最低的训练损失.
使用 ValidationSet 选项 NetTrain 来确保我们实际获得的网络将验证损失降至最低. 请注意,我们限制训练轮次,以便在过度拟合开始发生之前更容易看到训练部分:
验证损失在大概 770 轮训练时最小:
NetTrainResultsObject 中提取已训练的网络并绘制. 这个更加平滑,因为 NetTrain 在开始记忆训练集中噪音的特质之前有效地拍摄了网络快照:
结果对象还存储每轮测试集的平均损失. 我们可以检查所选网络的损失. 请注意,它远低于我们为过度拟合的网络计算的损失:
早期停止
缓解过度拟合的第二种常见方法是执行早期停止. 当网络性能的某些测量开始变差时,这是停止训练的过程. 这是使用 NetTrainTrainingStoppingCriterion 选项和 ValidationSet 选项完成的. 与仅使用 ValidationSet 相比,这有两个潜在的优势. 首先,请注意,在前面的例子中,我们最终训练了额外 1300 轮的网. 在这种情况下,由于网络和训练数据集都很小,这不是问题,但这可能非常浪费. 其次,我们可能想要使用除损失之外的某些测量来确定最佳网络.
让我们使用 R-平方测量(也称为确定系数)来确定何时停止训练. 我们使用 20 轮耐性来避免因训练过程中的噪音而停止:
NetTrainResultsObject 提取培训网络并向之前一样绘制:
检查对应于选取网络的损失:
权重衰减
第三种常见的正则化技术称为权重衰减. 在这种方法中,每批更新后,网络权重的大小会略有下降,从而有效地将权重移动到零. 这大致等同于添加与权重的 L2 规范相对应的损失项.
执行权重衰减会鼓励网络找到其权重的简约配置,该配置仍然可以对数据进行充分建模,或者等同地惩罚因拟合噪音而不是数据产生的复杂性的网络.
通常,权重衰减强度的最优值难以导出先验,因此应使用验证集合进行超参数搜索以找到一个好的值.
为 L2 正则化训练小值的网络:
由此产生的网络与高斯拟合很好,并且比最初的过度拟合网络表现出更好的泛化:
Dropout
第四种常见的正则化技术是脱离 (dropout). 脱离将噪声引入到网络的隐藏激活中,但是以这样的方式,在给定层上激活的总体统计不会改变. 噪声采取随机失活模式的形式,其中输入数组的一组随机分量(通常称为单位或神经元)被归零,并且其余分量的幅度被增加以进行补偿. 基本思想是脱离防止神经元过度依赖于它们下面的层中的任何特定神经元,并因此鼓励学习更鲁棒的表示.
使用 DropoutLayer 或通过指定某些层,例如,LongShortTermMemoryLayer 指定 "Dropout" 参数把脱离引入网络.
创建包括脱离的多层感知:
训练网络:
由此产生的网络对于高斯是一个可接受的拟合,并且比最初的过度拟合网络表现出更好的泛化:
批归一化
第五种正则化技术是批归一化. 它通过学习数据均值和方差来标准化其输入数据. 批归一化在实践中具有许多有用的属性:它加速了训练并提供了正规化. BatchNormalizationLayer 通常插入在 LinearLayerConvolutionLayer 及其激活函数之间.
创建包括 BatchNormalizationLayer 的多层感知器:
训练网络:
得到的网络是高斯的可接受拟合,并证明比原始的过度拟合网更好的泛化: