提升模型精度之加入先验知识

1.前言

在很久之前看过一篇文章是写如何给模型加入先验知识,具体链接是给模型加入先验知识 - 知乎

那时候只觉得真妙啊,还能这样训练模型,并且很有道理的样子,不像其他对模型的改进方式(比如加注意力机制)这种玄学操作看命。今天重新看这篇文章时感受又加深了一些。于是想记录下来。

2. 具体做法

在这只介绍一些对二分类网络可以提升的先验知识。首先文章中举了一个栗子,说现在有个任务是要在所有的鸟类中识别出一种萌萌的鹦鹉,这种鹦鹉有一个非常强的特征就是不会飞。

按常规步骤我们应该是根据硬件需求寻找合适的图像分类网络,加载预训练模型把分类类别设成2就行。但仔细分析就会发现有几个潜在的问题:

1. 如果这种鹦鹉在外观上只有部分地方是具有区分性的,要么其实网络很难做出判断。

2. 世界上的鹦鹉其实有很多种,如果其他种的鹦鹉有一些特征特别强(比如有些种类脖子很长、有些种类嘴很大等)。而把他们都划分成一类和这种萌萌的鹦鹉区别开,这也有难度。

因此如何解决以上问题从而去改善一些badcase,

文章就提出,比如如果这种萌萌的鹦鹉的腿很长,那么就把腿单独的截出来,即把整个鸮鹦鹉和它的腿部作为一个网络的两路输入,在网络的后端再把两路输入的信息融合。这么做的目的其实就是让网络多学一点我们想要它注意到的特征。这其实和kaggle之前有个海豚细粒度分类是一样的,其中比赛方让大家注意海豚的脊部是一个很明显的区分点。但是这也有个缺点。模型两路输入太麻烦,而且增加的计算量让人感觉很不爽。文章又提出了可以让模型通过一个生成网络的支路来生成一个鸟类头部位置的Mask。个人觉得这个方法其实也比较麻烦。

然后就是第二个问题的解决,文章也提出了一个方法,虽然我没有去实践,但是个人感觉很有道理!(hhh) 就是引用一个自监督的方法来进行辅助学习,具体采用的是基于maxl[2]的方案(https://github.com/lorenmt/maxl)

还有一个点我们没有利用起这种萌萌的鹦鹉不会飞!,这就说明你不能通过背景来判断一只未知的鸟是鸮鹦鹉,但是你能通过背景来判断一只未知的鸟肯定不是鸮鹦鹉,所以假如说获取了一张输入图片的激活图(包含背景的),那么这张激活图的鸟类身体部分肯定包含了鸮鹦鹉和其他鸟类的激活,但是鸟类身体外的背景部分只可能包含其他鸟类的激活。这些也是文章里的原话。具体解决方案是基于激活图,通过限制激活图的激活区域,加入目标先验

 

3. 总结

个人觉得往模型中加入合适的先验知识就像kaggle比赛中做好数据的特征工程就成功了一半。只有仔细分析数据特性,对数据进行合理清洗,这才是训练好模型最好的前提。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值