实验一:每次仅对占训练集总数1%的错误样本的标签进行随机更改继而进行finetune,看是否能够在训练集拟合得很好的情况下测试集上的相关性还能维持一个很高的数值。
结论:结果和对全部的错误样本的标签进行随机更改的结果没有任何区别
生成的200个模型在训练集和测试集上相关性的差异
mnsit_lenet1 | mnist_lenet4 | mnist_lenet5 | cifar10_vgg16 | cifar10_resnet20 | fashion_lenet5 | svhn_lenet5 | |
---|---|---|---|---|---|---|---|
train | 0.882351 | 0.951596 | 0.953634 | 0.859670 | 0.954885 | 0.835543 | 0.820054 |
test(200) | 0.842707 | 0.741060 | 0.658740 | 0.528593 | 0.469978 | 0.532665 | 0.669940 |
test(2000) | 0.879725 | 0.860613 | 0.756482 | 0.547242 | 0.485414 | 0.561964 | 0.689395 |
vgg16、resnet20、fashion的普遍问题都在于模型在测试集上的效果相较于在训练集上拟合的效果要差很多。正确样本杀死的模型偏多,而错误样本杀死的模型较少。
实验二:同时使用mutate得到的模型和retrain得到的模型
现在可以确定的是
1.效果会随着相关性的提升而提升,但相关性低并不意味着效果一定不好
2.在选择retrain之后的模型时,选择在模型上错误样本和正确样本的通过率的差值越大的topk的模型并不能实现相关性的最大化。
mnsit_lenet1 | mnist_lenet4 | mnist_lenet5 | cifar10_vgg16 | cifar10_resnet20 | fashion_lenet5 | svhn_lenet5 | |
---|---|---|---|---|---|---|---|
model个数 | 499 | 860 | 721 | 436 | 775 | 919 | |
仅retrain | 0.906459 | 0.878620 | 0.800778 | 0.524624 | 0.689149 | 0.599964 | |
仅mutate | 0.7080 | 0.6721 | 0.5662 | 0.6144 | 0.6085 | 0.5522 | |
相关性 | 0.676932 | 0.855191 | 0.756167 | 0.667828 | 0.616170 | 0.573932 |
结论:模型结合之后,mnist_lenet4和mnist_lenet5的效果非常非常好!其余的效果和原来仅只用mutate得到的模型差不多。根本原因还是在于相关性比较高,但是相关性肯定不是唯一的重要的因素。
实验三:寻找影响效果的其他重要因素
以fashion为例,之前按照阶梯式分布的规则选择的模型的相关性不足0.5,retrain得到的模型的相关性接近0.6,但是效果差距非常大。
模型个数 | 相关性 | 错误样本未通过比例前50 | 错误样本未通过比例后50 | 错误样本在所有模型上未通过率的均值(按常理越高越好) | 正确样本未通过比例前50 | 正确样本未通过比例后50 | 正确样本在所有模型上未通过率的均值(按常理越低越好) | 在每个模型上错误样本和正确样本通过率的差值top50 | |
---|---|---|---|---|---|---|---|---|---|
阶梯式分布 | 1776 | 0.489075 | 0.65-1 | 0.018329-0.235109 | 0.418360 | 0.765685-0.981670 | 0-0.35 | 0.581639 | -0.094439-0.023677 |
retrain | 2000 | 0.561964 | 0.542071-0.565445 | 0.385984-0.447811 | 0.496175 | 0.552188-0.614015 | 0.434554-0.457928 | 0.503824 | -0.005430—0.004946 |
观察正确样本和错误样本在retrain和mutate的模型上的相关数据,有以下结论和猜想:
- ratrain得到的模型在相关性、错误样本在所有模型上未通过率的均值、正确样本在所有模型上未通过率的均值上都比mutate得到的模型有优势,但是mutate得到的模型上正确样本和错误样本的表现差异较大(虽然有的错误样本几乎通过了所有的模型,也有正确样本几乎没有通过所有的模型)❗️❗️❗️但我们的目的不是把测试集的每一个样本都通过我们的方法判定为是正确样本还是错误样本,只需要找到一部分有代表性的正确样本和一部分有代表性的错误样本
- 但是retrain得到的模型上(自己和自己比),错误样本的正确样本之间在未通过率上差别微乎其微
实验四:细化retrain的过程
- 将错误样本的标签改变为confidence第2、3、4……的label而非随机更改(❌)
- 能否找到一些错误样本对其标签更改之后retrain给模型带来的变化较小(让retrain之后的模型在测试集上也能让一部分典型的正确样本和一部分典型的错误样本凸显出来)
- 仅对pcs值高的错误样本或只对pcs值低的错误样本进行label的修改 (❌)
结论:从做过的实验来看,对相关性影响最大的并不是训练的epoch数,也不是选择哪些错误样本重置label进行retrain,而是retrain的参数设置,尤其是learning_rate,以vgg16为例,把learning_rate从1e-4改为1e-3相关性就提升了0.1左右。
实验五:验证fashion和cifar10的训练集和测试集是否独立同分布
- 将测试集中错误样本的一半混入训练集
- 将测试集中全部的错误样本混入训练集
- 直接使用测试集进行retrain
结论:在训练集中混入测试集后相关性有了小幅度的提升,但并不明显;retrain之后的模型在很容易被正确样本杀死。