仅针对聚类和采样的方式对方法进行改进,统一使用对模型所有错误样本的标签进行修改,保留前25个epoch重训练得到的模型,共1000个。
    特征向量表示方式
    如果使用最后softmax层的cos相似度替代原来0/1表示,其实几乎没有什么差别,不能细化测试用例之间的差距
    🌟🌟🌟对于某个测试用例,如果它的值在变异模型和原始模型上的预测结果不同,应该分类讨论,如果它在原始模型上的pcs值比较低,那么它结果的改变就很有可能是因为它是一个边缘样本而非错误样本
    1.先统计现有的一组方法最后从每簇中选择出的样本的pcs值的分布
    以k=2为例
    2.如果继续使用KMeans,那么在类内采样时,可以先多选r%的样本,然后再根据pcs或者其他的metric进一步筛选样本

    🌟🌟🌟使用最后一层隐藏层的cos相似度代替原来的0/1(现有的测试用例选择和排序方法几乎都是提取的测试用例在最后一个隐藏层上的信息)
    🌟🌟🌟使用softmax层的欧氏距离代替原来的0/1(记得归一化)
    🌟🌟🌟使用softmax层的曼哈顿距离代替原来的0/1(记得归一化)

    1.利用现有的0/1表示向量和KMeans算法聚类的效果

    cifar10_vgg16 cifar10_reset20 mnist_lenet5
    2 8512 0.9591 348
    1488 0.3878 911
    8101 0.9801 161
    1899 0.6224 717
    9755 0.9975 24
    245 0.5755 104
    3 8022 0.9733 214
    966 0.6542 334
    1012 0.2974 711
    7101 0.9913 62
    1796 0.8597 252
    1103 0.4887 564
    9631 0.9989 11
    234 0.8803 28
    135 0.3407 89
    4 7765 0.9778 172
    846 0.7435 217
    735 0.2299 566
    654 0.5352 304
    6438 0.9944 36
    1698 0.9211 134
    1086 0.7716 248
    778 0.4087 460
    9519 0.9992 8
    236 0.9322 16
    135 0.8148 25
    110 0.2818 79
    5 7492 0.9818 136
    807 0.8116 152
    624 0.2083 494
    567 0.649 199
    510 0.4549 278
    6026 0.9959 25
    1014 0.8531 149
    1633 0.9498 82
    739 0.6779 238
    588 0.3469 384
    9429 0.9993 7
    124 0.879 15
    98 0.7857 21
    240 0.9708 7
    109 0.2844 78
    6 7271 0.9858 103
    773 0.8499 116
    509 0.7132 146
    552 0.192 446
    434 0.5806 182
    461 0.423 266
    5697 0.997 17
    963 0.8962 100
    1454 0.9663 49
    737 0.8128 138
    616 0.6429 220
    533 0.3358 354
    9370 0.9994 6
    129 0.8915 14
    257 0.9844 4
    103 0.8641 14
    48 0.625 18
    93 0.2258 72
    7 7131 0.9879 86
    739 0.8525 109
    450 0.78 99
    517 0.1779 425
    392 0.6454 139
    405 0.3975 244
    366 0.571 157
    5579 0.9971 16
    956 0.9069 89
    1461 0.9719 41
    534 0.706 157
    417 0.5228 199
    676 0.8373 110
    377 0.2944 266
    9329 0.9995 5
    95 0.8737 12
    233 0.9828 4
    82 0.8902 9
    125 0.936 8
    45 0.6 18
    91 0.2088 72
    8 7124 0.9881 85
    732 0.8579 104
    443 0.7765 99
    296 0.3345 197
    370 0.6568 127
    305 0.4721 161
    301 0.588 124
    429 0.1562 362
    4987 0.998 10
    1403 0.9815 26
    745 0.8913 81
    949 0.9557 42
    521 0.6987 157
    417 0.5252 198
    603 0.8358 99
    375 0.2933 265
    9329 0.9995 5
    82 0.878 10
    233 0.9828 4
    87 0.8851 10
    121 0.9339 8
    39 0.6667 13
    71 0.0986 64
    38 0.6316 14
    9 7003 0.9894 74
    717 0.8703 93
    421 0.8076 81
    332 0.747 84
    284 0.3415 187
    271 0.6015 108
    291 0.4639 156
    252 0.5476 114
    429 0.1562 362
    4967 0.998 10
    1391 0.9813 26
    730 0.9014 72
    920 0.9576 39
    437 0.7666 102
    375 0.632 138
    315 0.4698 167
    561 0.8307 95
    304 0.2467 229
    9328 0.9995 5
    50 0.9 5
    71 0.8592 10
    232 0.9828 4
    59 0.8475 9
    119 0.958 5
    34 0.6176 13
    71 0.0986 64
    36 0.6389 13
    10 6909 0.9897 71
    404 0.8416 64
    290 0.7379 76
    256 0.3008 179
    702 0.8889 78
    261 0.6935 80
    272 0.4191 158
    243 0.535 113
    269 0.5985 108
    394 0.1574 332
    4754 0.9979 10
    1342 0.9873 17
    488 0.8709 63
    904 0.9668 30
    648 0.9228 50
    415 0.7542 102
    357 0.6246 134
    312 0.4744 164
    304 0.2467 229
    476 0.834 79
    9190 0.9998 2
    72 0.9028 7
    254 0.9803 5
    56 0.875 7
    148 0.9797 3
    91 0.9231 7
    52 0.8654 7
    30 0.5667 13
    71 0.0986 64
    36 0.6389 13

    如果如果仅仅在k=2时对现有的测试用例聚类,然后在较小的簇中采样,50~500,观察错误样本所占的比例

    50 100 150 200 250 300 350 400 450 500
    mnist_lenet5 0.36 0.29 0.34 0.375
    cifar10_vgg16 0.62 0.6 0.567 0.59 0.588 0.593 0.589 0.57 0.584 0.574
    cifar10_resnet20 0.34 0.33 0.36 0.335 0.348 0.35 0.351 0.348 0.347 0.332

    如果k的数量增加,在除去最大簇的其他簇按比例采样然后观察错误样本所占的比例,不如k=2时。

    按离中心的距离选有一定的效果,但依然有改进的空间。
    当k=2时,对于较大的簇(正确样本所占比例较大),尽可能使得选出的都是正确样本
    对于较小的簇(错误样本所占比例较大),尽可能使得选出的都是错误样本

    • 按与聚类中心的距离选(减少噪声的影响)
    • 按pcs值由高到低选(pcs越低越有可能是因为它是一个边缘样本才被分到这个簇中)
    • 按kill_rate来选,kill_rate越高意味着杀死变异模型的数量越多,越有可能是一个错误样本
    • 参照pace中使用过的基于mmd-critic的原型采样方法

    ❗️❗️❗️❗️❗️
    在较小的簇中采样时,当根据整个簇大小的10%、20%、……、100%采样时,错误样本所占的比例如下表:

    排序方式 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
    mnist_lenet5 distance 0.417 0.367 0.342 0.296 0.287 0.333 0.345 0.367 0.400 0.424
    pcs⬇️ 0.083 0.122 0.247 0.265 0.279 0.333 0.351 0.362 0.386 0.424
    pcs⬆️ 0.750 0.673 0.603 0.561 0.574 0.531 0.497 0.500 0.464 0.424
    killnum⬇️ 0.250 0.122 0.096 0.122 0.148 0.204 0.228 0.301 0.364 0.424
    killnum⬆️ 0.958 0.918 0.890 0.755 0.697 0.626 0.567 0.500 0.445 0.424
    mmd 0.500 0.510 0.479 0.469 0.443 0.435 0.439 0.429 0.427 0.424
    cifar10_vgg16 distance 0.568 0.589 0.587 0.590 0.599 0.600 0.609 0.617 0.633 0.612

    pcs⬇️ 0.459 0.512 0.525 0.529 0.546 0.550 0.575 0.594 0.603 0.612
    pcs⬆️ 0.703 0.684 0.697 0.704 0.679 0.667 0.649 0.638 0.629 0.612
    killnum⬇️ 0.419 0.407 0.410 0.434 0.458 0.491 0.512 0.552 0.582 0.612
    killnum⬆️ 0.885 0.852 0.845 0.793 0.766 0.732 0.698 0.664 0.633 0.612

    mmd 0.777 0.717 0.679 0.650 0.632 0.621 0.614 0.618 0.613 0.612
    cifar10_resnet20 distance 0.344 0.348 0.346 0.341 0.335 0.344 0.333 0.325 0.332 0.378

    pcs⬇️ 0.037 0.098 0.132 0.169 0.209 0.242 0.274 0.307 0.342 0.378
    pcs⬆️ 0.698 0.660 0.619 0.581 0.547 0.517 0.483 0.448 0.415 0.378
    killnum⬇️ 0.159 0.158 0.169 0.190 0.213 0.231 0.259 0.298 0.331 0.378
    killnum⬆️ 0.799 0.699 0.654 0.598 0.543 0.503 0.467 0.432 0.402 0.378
    mmd 0.598 0.485 0.457 0.422 0.406 0.395 0.386 0.380 0.382 0.378

    上述的结果和我一开始的想法相悖,反而那些pcs值较小的或者能杀死的变异模型数量较少的测试用例更有可能是揭错样本,在较大的簇中时,规律相同。

    在较多的簇中采样时,当采样的个数为50,100,……,500时,其中错误样本的个数(因为错误样本个数较少,而簇本身较大,展示比例可能区别不明显)如下表所示:

    排序方式 50 100 150 200 250 300 350 400 450 500
    mnist_lenet5 distance 0 0 0 0 0 0 0 0 0 0
    pcs⬇️ 0 0 0 0 0 0 0 0 0 0
    pcs⬆️ 5 9 11 11 13 13 15 15 18 18
    killnum⬇️ 0 0 0 0 0 0 0 0 0 0
    killnum⬆️ 7 11 14 15 17 17 18 18 20 20
    mmd
    cifar10_vgg16 distance 4 10 12 17 20 21 23 28 32 32

    pcs⬇️ 0 0 1 3 3 3 3 3 3 4
    pcs⬆️ 12 19 28 38 50 62 71 82 89 94
    killnum⬇️ 0 0 0 0 0 0 1 1 1 1
    killnum⬆️ 18 34 47 55 70 83 97 112 125 136

    mmd
    cifar10_resnet20 distance 1 2 2 2 3 3 3 4 5 5

    pcs⬇️ 0 0 0 0 0 0 0 0 0 0
    pcs⬆️ 12 15 29 39 52 60 70 77 80 84
    killnum⬇️ 0 0 0 0 0 0 0 0 0 0
    killnum⬆️ 6 11 16 25 28 37 44 47 50 58
    mmd

    假设k=2,然后对较大的簇依据killnum从大到小选样本(选出来的就是正确样本)
    然后对较小的簇依据killnum从小到大选样本(选出来的都是错误样本)

    测试用例数量 大簇的大小 大簇中正确样本个数 大簇中错误样本个数 小簇的大小 小簇中正确样本个数 小簇中错误样本个数
    50 49 49 0 1 0 1
    100 98 98 0 2 0 2
    150 146 146 0 4 0 4
    200 195 195 0 5 1 4
    250 244 244 0 7 1 6
    300 293 293 0 7 1 6
    350 341 341 0 9 1 8
    400 390 390 0 10 1 9
    450 439 439 0 11 1 10
    500 488 488 0 12 1 11

    最初的设想是尽可能在较大的簇中选择正确样本,在较小的簇中选择错误样本。(几乎可以实现,但问题在于采样的时候是根据簇的大小按比例采样,即使实现了上述的设想最后我选择出的 正确样本:错误样本 其实就相当于 size(较大的簇):size(较小的簇))