示例加权的神经网络培训

示例加权是神经网络训练的常见变体,其中训练数据中的不同示例具有不同的重要性. 简而言之,这是通过将每个示例的损失乘以与本示例相关的权重(根据 NetTrain 执行的优化过程的更高或更低重要性)来实现的.
有几种情况下这种技术可能是有益的:
在本教程中,我们给出了用于回归和分类的示例加权的样式化示例,它们应该相对容易地适应实际情况.

回归示例的权重

本示例演示如何使用示例权重来强调输入空间的特定区域. 我们首先定义一个我们训练网将尝试近似的函数.
定义一个简单的函数并绘制:
通过在规则点采样该函数创建培训数据:
我们训练一个没有示例加权的简单线性回归模型,作为我们可以比较示例加权训练的基线. 请注意,我们使用MeanSquaredLossLayer 作为损失函数;这实际上已经是默认的了,但是稍后我们必须明确地构建一个训练网络,所以我们现在突出显示损失函数的选择.
创建一个简单的线性回归模型:
使用 NetTrain 培训模型:
可视化结果:
接下来,我们执行加权训练. 我们会创建两个数据集,分别强调原点左右的范例. 我们构建一个培训网络,将先前使用的均方损失与训练权重相乘. 这种乘法会使 NetTrain 优先为具有更高权重的示例进行优化.
Create weighted datasets using the Exp function to bias either the left or the right side of the input space:
显示数据集的采样:
绘制权重:
创建使用示例加权的培训网络:
对于每个数据集,用 NetTrain 培训数据集,指定应该直接优化 "WeightedLoss" 输出,然后从最后的培训网络提取预测网络:
绘制结果网络的行为,我们可以看到左加权网络在输入空间的左半部学习了一个很好的近似,右加权网络在输入空间的右半部分学习了一个很好的近似值,未加权的网络学习了一个不偏向任何一方的近似.
绘制未加权和加权网络与它们试图近似的原始函数的预测:

分类的示例加权

此示例显示如何通过对特定类的所有示例使用更高的示例权重来偏倚歧义示例的分类.
首先,我们创建一个由两个具有一定重叠度的聚类组成的合成数据集.
合成聚类 -11 的单位方差正态分布:
绘制聚类中点的直方图:
创建适于 NetTrain 的培训数据:
我们训练一个没有示例加权的简单逻辑回归模型,作为我们可以比较示例加权训练的基线. 请注意,我们使用 CrossEntropyLossLayer 作为损失函数; 这实际上已经是默认了,但稍后我们必须明确构建一个培训网,所以我们现在突出显示它.
创建一个简单的逻辑回归模型:
培训网络:
计算两个聚类中心的概率:
绘制作为 x 函数的第一类概率:
接下来,我们执行加权训练. 这就要求训练数据强调属于第一个聚类的例子,并构建一个训练网络,将先前使用的交叉熵损失与训练权重相乘. 乘法会使 NetTrain 优先为具有更高权重的示例进行优化,在这种情况下,示例来自第一个聚类.
定义一些类权重并分配给数据:
显示加权数据的样本:
创建使用示例加权的培训网络:
NetTrain 培训网络,指定直接优化 "WeightedLoss" 输出,然后从最终培训网络提取预测:
重新附加 "Class" 解码器,它在回归网络嵌入培训网络时丢失:
计算在两个聚类中心的概率:
通过绘制加权网络学习到的概率,我们可以看到加权数据偏向网络对第一个聚类的预测,因此这两个类看起来可能相同的阈值更接近右侧.
x 的函数绘制第一类的概率:
我们还可以通过查看召回和混淆矩阵来观察差异. 未加权的网络对这两个类和一个对称混淆矩阵有着相同的召回率. 加权网络对类 1 的召回率较高,但代价是类 2 和不对称的混淆矩阵.
使用 NetMeasurements 计算召回和混淆矩阵图: