采用对抗验证删除“重要特征”(蛇长脚岂不成了龙?)

    把神经网络训练形象化为婴儿的学习,一定程度上是比较恰当的:

    训练神经网络需要给它输入数据,这些数据可以是原始的数据,也可以是经处理过的特征数据,然后告诉它这条数据对应什么内容(此处只指监督学习);训练好的网络可以去处理新的数据,包括分类、识别等。

    教小孩学东西也是,比如教小孩看图识物,你要告诉它这个东西呢,【特征】身体像一条绳子一样,是在地上爬的,有眼睛且会吐出舌头等等,然后告诉小朋友,【标签】这东西叫蛇。

    但是,如果你恰好拿到了一张如上图一样的图片(来自画蛇添足),小朋友不仅记住了你给他说的那些蛇的特征,而且还在脑海里记住了蛇有两双脚。等到下次他看到下面这张图片的时候。。


蒙圈。。怎么没有脚了,那肯定不是蛇了。。。

    第一次小朋友看到的蛇身上的两双脚(训练集有的特征,而测试集上没有),干扰了小孩的学习。

    在神经网络训练的时候,当训练集和分布和测试集的分布不一致,也会有这样的问题:在训练集上提取的特征,测试集上没有,或者相差很大,导致模型的泛化能力差。


    怎么办?

    通过对抗验证的来删除重要特征。


    什么原理?如何实现?

    对抗验证实现过程中,首先将训练集和验证集合并,分别将训练集和验证集对于的标签设置为0和1,投入网络中训练,此时,在模型的callback或者compile-metrics中加入AUC(这是一个模型评价标准,值越大,模型觉得自己越牛逼),假如我们对数据集提取了很多类型的特征(比如皮肤、尺寸、行走方式、眼睛大小等等),我们逐个将特征输入网络,记录下网络训练得到的AUC,最后我们将AUC高的特征删掉!

    为什么要将高的AUC对应的特征删除呢?

    因为AUC高,说明模型能够很好地分别训练集合测试集,说明这个特征在训练集合测试集上表现很不一样啊!此时不删更待何时。

    总结:

    “小明,你连蛇都不认识呀?上次不是给你看过图片吗?”

    “上次你给我看的蛇有脚的,这次没有!坑娃的爹!”

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容