如何评价Kaiming He的Momentum Contrast for Unsupervised?

https://arxiv.org/pdf/1911.05722.pdf
关注者
1,833
被浏览
273,435
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

Update: 实现了一下Momentum Contrast和Instance Discrimination, 代码分享出来一并放在CMC的repo下面了, 感兴趣的可以戳这里.

我把文中很多地方提到的Kaiming改成了Kaiming及合作者,或者MoCo. Kaiming是主要作者,但credit应该是所有作者的.

============================

趁着作业写得痛苦的间隙,来分享个人一些小小的想法。

利益相关:Accuracy/Tradeoff图中的CMC (contrastive multiview coding) 是我们的工作, 很欣慰暂时还在Kaiming及合作者的曲线上面,代码有release.

Kaiming的很多工作总是一如既往地硬核,总是非常solid地在解决实际问题!超越supervised pretraining一直是我们做unsupervised的动力之一,很出色的成绩.

但罗马并不是一天就建成的.先介绍一些contrastive learning的背景吧,lecun2007的论文提出的contrastive 的想法(有可能还有更早的)是把positive match在一起,negative分开,不过他的办法是基于margin的(需要设置)

最近大家讨论更多的contrastive loss (包括kaiming及合作者的论文),据我所知,是NIPS 2016率先提出的k-pair loss, "Improved Deep Metric Learning with Multi-class N-pair Loss Objective", NIPS 2016,用在metric learning中:

(但这个k-pair loss很简单, 就是softmax + negative log likelihood, 相似的想法在我的学长Yi Sun的一些face recognition工作中也用到了, 虽然形式并不是完全一样. "Deep Learning Face Representation from Predicting 10,000 Classes" CVPR 2014, "Deep Learning Face Representation by Joint Identification-Verification" NIPS 2014.).

然后包括后来Tong Xiao他们的person re-id也用到了这个loss.但这个loss真正work的关键点就是你要sample很多negative,mini-batch很小又没有办法怎么办呢?Zhirong Wu和Yuanjun Xiong的instance discrimination非常机智地引入了memory bank机制,并且真正地把这个loss用到了unsupervised learning而且还把参数都调好了,可以说是这一波的开篇之作,非常赞.后来的CPC, CPC V2, AMDIM也都是用的这个k-pair contrastive loss来学特征,但更进一步地提出了数学上面的insight, 即是maximize mutual information.(我觉得CPC挺好的,但貌似这次他们的CPC V2投ICLR悲剧了,openreview说他们比cpcv1没有太多novelty,但问题是cpcv1也被拒了至今还没中,这还让不让人发表了:( )

总结起来,以上这些contrastive loss的工作(可能有遗漏,我这里主要梳理了重点的几篇), 包括凯明的工作,都可以理解成你有两个variable, XY ,并且你有一堆从相应的联合分布采集的sample \{x_i, y_i\}_{i=1}^{N} ,给定一个 x_i , 现在从y这边去选择,对应的 y_i 就是正样本,不对应的 y_{j \neq i} 就是负样本.然后对每一个这样本,我们都配对N个负样本去学习一个softmax loss.

有了这么个框架,那么instance discrimination可以把 x_i 理解成当前的第i张图片的随机crop, y_i 理解成过去epochs对第i张图片的smooth aggregation(或者第i张图片的另一个crop). CPC, CPCv2就可以把一个image patch理解成 x , 把他的context理解成 y .我们的CMC可以把一个modality,比如rgb, 理解成 x ,另外一个modality,比如光流,理解成 y .这个框架也启发我做了一个Knowledge Distillation的side project ("contrastive representation distillation"), 可以把teacher理解成 x , 把student理解成 y .同样的MoCo里面的两个encoder,也可以其中一个理解成 x ,另外一个是 y .关于怎么样选取x和y,我们的CMC论文里面有讨论,我们的猜测是应该有一个很有意思的sweet point,感兴趣的可以看看我们的论文.

所以有了这样的背景,就可以大概看出其中的key, query只是取的名字而已,本质只是x和y.并且大家之前已经explore很多了.我认为MoCo这篇最创新的地方,就是解决了一个非常重要但以前又没有思路的工程问题,就是怎么节省内存节省时间搞到大量的negative sample。之前的memory bank虽然机智,但是必须存下来整个数据集,空间开销O(N),所以处理不了Instagram级别的数据,这个问题困扰我很久而且我没找到有效策略,我试过跟MoCo一样用一个queue,也是存过去m个batch的sample,这个其实很容易想到,但我发现效果不好,问题就是我只有一个encoder,我没有像他一样在不断update这个encoder的同时保存一个它的历史smooth的版本。这点说透了后听起来就没那么复杂, 但在他们发现这点之前这个办法并不显然, kaiming在这些地方总是尤为厉害, 哎真的学不来。 (又跟同学学习了一下, 这个相似trick在Q-learning里面就很多被用到, 大家update Q-function的时候就是用类似的momentum去做的,看来是我学得太少)。以后有了MoCo这个momentum encoder机制,大家就又可以放开刷了, 应该可以跟其他方法互补。另外一个重大的贡献就是我觉得他系统性地研究了这样的pre-training在各种downstream task下面transfer的效果, 间接帮做自监督学习的人验证了目前的进展. 以前大家的自监督方法,比如旋转和上色, 都很难超过imagenet预训练的模型. 最近的Contrast方法确实work,但在前面pretraining这步训练就耗得半死, 大家都没有精力太去测各种task的transfer. 只能说羡慕FAIR.

MoCo的工作一出来,我心情挺复杂的.一来这篇因为作者们的名气会引起大家更多地关注unsupervised learning,更多人投入进来也能把这个领域做的更加出色.另外一方面可能自己辛苦搞了很久的工作又要被忽视了,其实我觉得如果完全公平地比较,CMC应该在imagenet比MoCo好,并且transfer也应该比MoCo好.不过遗憾的是我自己一个人拿着学校的4卡机器慢慢跑所有实验(此处要感谢学校同学有时候让出的资源),太累了,也没有精力去试试transfer.希望还是不要太快被淹没在历史的潮流里面 , ICCV被拒,这重投又似乎要被拒,太难了,kaiming他们这么一搞,以后有可能发不出去了.

最后关于以后可以做的,我个人还是觉得Multimodal representation learning是值得尝试的方向,并且相信老板对multiview的sense是对的.其实在cognition以及developmental psychology领域,大家都讨论了很多关于婴儿如何利用multimodal的redundancy去teach不同modal的neural system去学习的话题.另外一个关于contrastive loss的研究方向,我觉得还可以尝试新的采样的策略,我个人认为之所以从1百万到1亿的数据增加并没有带来太多的提高,也是因为负样本都是随机选取的,所以从1亿里面取的并没有更有信息量太多,可能这里需要结合聚类来做. 初步的探索已经包括: Local Aggregation of unsupervised learning of visual embeddings.