本文系作者投稿作品
作者 | Zongwei Zhou(周纵苇)
大数据文摘欢迎各类优质稿件
请联系tougao@bigdatadigest.cn
在深度学习研究应用中,有这样两个常见的场景:
一共手头有100个未标记样本,和仅仅够标记10个样本的钱,老板说,通过训练这十个标记的样本,能接近甚至达到训练100个样本的performance;手头有了一个已经在100个样本中训练完的分类器,现在又来了100个新标记的样本,老板说,只给提供够训练10个样本的计算机;或者只给你提供够训练10个样本的时间,让分类器尽快学习到新来样本的特征;
这两个情况发生的条件是完全不同的。
Situation A发生在屌丝公司,没有钱拿到精标记的数据集,却也想做深度学习;
Situation B一般发生在高富帅公司,有海量的精标记数据,但是由于目前即使是最牛逼的计算机也不能用深度学习在短时间内一次性地去处理完这些数据(e.g.,内存溢出,或者算上个几年都算不完)。
根据我的判断,当遇到两种情况的时候,这篇论文的可以非常强大的指导意义:它发表于CVPR2017(http://cvpr2017.thecvf.com),题为“Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally”。它主要解决了一个深度学习中的重要问题:如何使用尽可能少的标签数据来训练一个效果promising的分类器。
感谢你选择继续往下阅读,那么如果觉得下文所传递的思想和方法对你有帮助,请记得一定引用这篇CVPR2017的文章。Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally.
(下载:http://openaccess.thecvf.com/content_cvpr_2017/papers/Zhou_Fine-Tuning_Convolutional_Neural_CVPR_2017_paper.pdf)
@InProceedings{Zhou_2017_CVPR,
author = {Zhou, Zongwei and Shin, Jae and Zhang, Lei and Gurudu, Suryakanth and Gotway, Michael and Liang, Jianming},
title = {Fine-Tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally},
booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
month = {July},
year = {2017}
}
1. 为什么会想到去解决这个问题?
现在深度学习很火,做的人也越来越多,那么它的门槛可以说是很低的,Caffe,Keras,Torch等等框架的出现,让该领域的programming的门槛直接拆了。所以深度学习真正的门槛变成了很简单概念——钱。这个钱有两个很重要的流向,一是计算机的运算能力(GPU Power),二是标记数据的数量。这儿就引出一个很重要的问题:是不是训练数据集越多,深度学习的效果会越好呢?这个答案凭空想是想不出来的,能回答的人一定是已经拥有了海量的数据,如ImageNet,Place等等,他们可以做一系列的实验来回答这个问题。需要呈现的结果很简单,横坐标是训练集的样本数,纵坐标是分类的performance,如下图所示:
这里需要说明的一点是,训练样本数的临界点大小和这个分类问题的难度有关,如果这个分类问题非常简单,如黑白图像分类(白色的是1,黑色的是0),那么这个临界值就特别小,往往几幅图就可以训练一个精度很高的分类器;如果分类问题很复杂,如判断一个肿瘤的良恶性(良性是0,恶性是1),那么这个临界值会很大,因为肿瘤的形状,大小,位置各异,分类器需要学习很多很多的样本,才能达到一个比较稳定的性能。
FIG.1对于很多从事深度学习的无论是研究员还是企业家都是一个十分有启发性的认知改变。一般来讲,人的惯性思维会引领一个默认的思路,就是训练样本越多越好,如左图所示,这将直接导致许多工作的停滞不前,理由永远是“我们没有足够的数据,怎么训练网络!”进一步的思路是图二的红实线认知:要多少是多啊,先训着再说,慢慢的就会发现即便用自己有的一小部分数据集好像也能达到一个不错的分类性能,这个时候就遇到一个问题:自己的数据集样本数到底有没有到达临界值呢?这个问题也很关键,它决定了要不要继续花钱去找人标注数据了。这个问题我会在第三部分去回答它,这里先假设我们知道了它的答案,接下来的问题就是如何让这个临界值变小?
2. 如何让临界值变小?
解决方案就是主动学习(Active Learning),去主动学习那些比较“难的”,“信息量大的”样本(hard mining)。关键点是每次都挑当前分类器分类效果不理想的那些样本(hard sample)给它训练,假设是训练这部分hard sample对于提升分类器效果最有效而快速。问题是在不知道真正标签的情况下怎么去定义HARD sample?或者说怎么去描述当前分类器对于不同样本的分类结果的好坏?
定义:由于深度学习的输出是属于某一类的概率(0~1),一个很直观的方法就是用“熵(entropy)”来刻画信息量,把那些预测值模棱两可的样本挑出来,对于二分类问题,就是预测值越靠近0.5,它们的信息量越大。还有一个比较直观的方法是用“多样性(diversity)”来刻画labeled data和unlabeled data的相似性。这两个方法都是在“Active batch selection via convex relaxations with guaranteed solution bounds”(http://ieeexplore.ieee.org/abstract/document/7006697/)中被提出。是十分重要的两个Active Learning的选择指标。
Important Observation: To boost the performance of CNNs in biomedical imaging, multiple patches are usually generated automatically for each candidate through data augmentation; these patches generated from the same candidate share the same label, and are naturally expected to have similar predictions by the current CNN before they are expanded into the training dataset.
有了这两个指标来选hard sample,是比较靠谱了——实验结果表明,这比随机去选已经能更快地达到临界拐点了。
FIG.2 Active Learning的结构示意图。利用深度学习所带来的优势在于,一开始你可以不需要有标记的数据集。
举例来讲,假设你是一个养狗的大户,你现在想做一个非常偏的(专业化的)分类问题,如卷毛比雄犬和哈瓦那犬的分类问题,你手头有这两种狗各50条,你自己可以很轻松地区分这100条狗,现在需要做的是训练一个分类器,给那些不懂狗的人,他们拍了狗的照片然后把照片输入到这个分类器就可以很好地判断这是卷毛比雄犬还是哈瓦那犬。首先你可以给这100条狗拍照片,每条狗都有不同形态的10张照片,一共拍了1000张没有标记的照片。对于这1000张照片,你所知道的是哪10张对应的是一条狗,其他什么都不知道。
在这个实际分类问题中,你拥有绝对的数据优势,即便是Google Image也不能企及,当然一种选择是你把1000张图片从头到尾看一遍,标注好,但是你更希望是把大多数简单的分类工作交给分类器,自己尽可能少的做标记工作,并且主要是去标记那些分类器模棱两可的那几张照片来提高分类器的性能。
我们初步提供的解决方案是(参考Fig.2或者Fig.3):
用这些刚刚给了标签的样本训练深度网络N;
把剩下那些没有标签的图像用N测试,得到预测值,还是挑出来那些“最难的”,“信息量最大的”样本,你再给出他们的标签(卷毛比雄犬还是哈瓦那犬);
刚刚给了标签的样本和原来有标签的样本组成新的训练集,继续用它们来训练深度网络N;
重复步骤3,4,直到 [?]
如FIG.2所示,每次循环都用不断增加的标记数据集去提升分类器的性能,每次都挑对当前分类器比较难的样本来人为标记。
3. 这个过程什么时候可以停?