对比学习
我们完全搞懂对比学习了吗?
在实验室做了一年多的眼底图像课题,主要是研究如何无监督的进行疾病分级。无监督的图像分类(分级)其实在自然图像已经研究了很长时间,但是医学图像和自然图像不同,往往尺寸超级大而且大小不一,然后图像的特征都很相似,比如一张疾病的眼底图像和健康的眼底图像,其实结构和大体特征是一样的,病灶区域通常很小。
一般来说通常做法是统一大小,然后让分类模型自己学习病灶特征,显然其中有很多问题,这不是今天要讨论的。
今天想总结的是当无监督式对比学习应用到其他领域,诸如眼底图像时,所引起我对对比学习的思考。
首先一个大问题就是:怎样的视角对于对比学习来说是好的视角,或者说如何设计对比学习才是有益的?
好与坏,这是一个定性问题,当我想把这个问题定量化时,出现了很大的问题。对比学习是一种无监督的方法,最终模型获得的是特征representation,本来我打算通过做一个下游任务量化这种特征表达能力。但是上游特征提取的好,下游病灶分级就一定有提升吗?或者说下游病灶分级有提升,就能反过来证明特征表达能力有提高吗?对于自然图像或许是,但是对于眼底,其实并不。
我们可以简单将眼底特征理解为结构特征+域特征+病灶特征。域特征或者叫域差异其实可以不考虑,因为对于同一张眼底来说,用两份数据增强做出两个视角,其实就相当于是人为制造两个差异域了,对比学习不正擅长从这两个差异域中学到核心不变特征吗?
但是结构特征就是一个令人头疼的问题,如何让对比学习少学甚至不学结构特征,更关注于小区域的病灶呢?目前我做的方法是完全打破眼底结构,让对比学习无法轻易学结构信息,大体上就是分patch。那么如何让对比学习学病灶信息呢?就是相近位置的眼底patch,健康和病灶patch对比。这样一来可以学病灶信息,二来不学结构信息,第三还可以免去整张图像输入模型对比学习batchsize小的烦恼。
因此,我们寻求具有足够不变性的表示,以对无关紧要的变化具有鲁棒性,但而不是丢弃下游任务所需的信息。而视角的选择控制了特征表示中包含的信息,在对比学习中,我们通常关注于视角之间的相同信息。视图通常是不同的感觉信号,如照片和声音,或不同的图像通道或时间中的切片,但也可能是相同的数据张量的不同的“增强”版本。如果共享的信息很小,那么学习到的表示可以丢弃更多关于输入的信息,并对有害的变量实现更大程度的不变性。我们如何才能找到正确的观点平衡,只分享我们需要的信息,不多也不少?
一组良好的视图是那些共享在下游任务中执行良好所需的最小信息的视图。这一想法与最小充分统计量和信息瓶颈理论的思想有关,这已经在表示学习文献中阐明。这一原则也补充了已经流行的“InfoMax原则”,该原则指出,表征学习的目标是要尽可能多地获取关于刺激的信息。我们认为,最大化信息只有在信息与任务相关的情况下才有用。除此之外,学习抛出关于讨厌变量信息的表示是更好的,因为它可以提高泛化效果,并降低下游任务的样本复杂性