视图预测 View Prediction (Cross modal-based)
视图预测任务一般用在数据本身拥有多个视图的情况下。
在 [23] 中,anchor和它的正样本图片来自同时发生的视角下,它们在嵌入空间中应当尽可能地近,与来自时间线中其他位置的负样本图片尽可能地远。
在 [24] 中,一个样本的多视角被当作正样本(intra-sampling),其余的inter-sampling当作负样本。
图八:从视频帧序列中学习表示
确定对的前置任务
选择什么样的前置任务取决于你所要解决的任务。
尽管已经有很多类型的前置任务在对比学习中提出来了,但是选择哪种前置任务依旧没有一个理论支撑。
选择正确的前置任务对表示学习有非常大的帮助。
前置任务的本质是:模型可以学习到数据本身的一些转换(数据转换之后依然被认作是原数据,转换后到数据和原数据处于同一嵌入空间),同时模型可以判别其他不同的数据样本。
但是前置任务本身是一把双刃剑,某个特定的前置任务可能对某些问题有利,对其他问题有害。
图九:两张图片的形状差不多。但是,很多低阶的细节是不一样的。在这里使用正确的前置任务是非常重要的。
在 [26] 中,作者专注于选取正确的前置任务的重要性。
图十:一个例子:为什么旋转前置任务有时候表现不好
3.架构
对比学习依赖于负样本的数量,来生成好的表示。
它有时候可以看作是一个字典查询任务,字典有时候是整个训练集,有时候是训练集的子集。
有时候对比学习可以根据如何采样负样本来进行分类。
我们将对比学习的架构分为以下四类(见图十一)。
图十一:(a)端到端训练,一个encoder用来生成正样本的表示,一个encoder用来生成负样本的表示;(b)使用一个memory bank来存储和抽取负样本;(c)使用一个momentum encoder当作一个动态的字典查询来处理负样本;(d)额外使用一个聚类机制
端到端学习
端到端学习是一种复杂的基于梯度的学习系统,其中所有的模块都是可微的。这种架构偏好于大的batch size来存储更多的负样本。除了原图片和其增强的图片,其余的batch中的图片被当作负样本。这种架构包含两个encoder:一个query一个key(见图十一a)。
这两个encoder可以是一样的,也可以是不一样的。
使用一个对比损失,模型会让正样本的表示相近,让负样本和正样本的表示相远。
最近,一种端到端的模型 [15] SimCLR 获得了很大成功。他们使用了非常大的batch size(4096)训练了100个epochs。SimCLR证明了一种简单机制的模型也可以获得非常好的效果。
图十二:SimCLR的效果
另外一种端到端的模型 [21] CPC从高维的时序数据中学习表示,其使用对比损失来预测将来。
端到端学习中的负样本与batch size有关。而batch size的大小受限于GPU/TPU 内存,所以这里有一个计算资源的限制,而且如何优化大batch训练也是一个问题。
使用 Memory Bank
端到端依赖于大的batch(译者:存疑,某些任务可能不需要),所以一种可行的解决方案是使用 memory bank。
Memory bank:的作用是在训练的时候维护大量的负样本表示。所以,创建一个字典来存储和更新这些样本的嵌入。Memory bank M 在数据集 D 中对每一个样本 存储一个表示 。该机制可以更新负样本表示,而无需增大训练的batch size。
图十三:PIRL中的memory bank
PIRL [17] 是一种使用了 Memory bank 来学习图像表示的方法。
但是,在训练的时候维护一个大的memory bank是一个很复杂的任务。这种策略的一个缺点是更新表示的计算复杂度很高。