学习范式

对比学习(contrastive learning)

/ kun-TRAS-tiv LER-ning /

假设你学会「狗」长什么样,靠的不是标签,而是整理一堆照片:同一只狗的两张快照该归在一起,狗和自行车则该分开。这样做上几百万次,你就在没人给任何东西起过名字的情况下,建立起对视觉相似性的强烈感觉。对比学习就是这样教机器的——在它的内部表示里,把相似的东西拉近,把不同的东西推远。

从机制上看,你取一个例子,造出一对「正样本」——通常是同一项的两个变体,比如把一张照片用两种不同方式裁剪、变色——它们应当映射到相近的点。这一批里的其他项是「负样本」,应当映射得远远的。模型训练的目标,就是把正样本对之间的距离压小、把它到负样本的距离拉大。这里的标签是免费且自动的(配对是你自己造的),这使对比学习成为自监督学习的一种主流形式,也成了从无标签数据中学好表示的主力。

它的回报,是那些有意义地聚成簇的表示,于是下游任务只需一丁点带标签数据——甚至完全不要——就够用了。它驱动着当今的图像模型和图文模型。诚实地说说工程上的事:它对你怎样造对很敏感(糟糕的数据增强会教出错误的「不变性」);它通常需要大量负样本才好用(大批量,吃内存);而且如果方法本身没设计好去防范,它会塌缩成一个没用的捷径——把所有东西都映射到同一个点上。

取一张猫的照片,造出两个版本——一个裁剪并调亮,一个翻转并改色。训练模型把这两者映射得很近(毕竟是同一只猫),又把它们与同一批里一张汽车照片映射得很远。经过几百万次这样的比对,模型的表示就把猫聚到猫的附近、汽车聚到汽车的附近,而全程从未提供过任何标签。

把同一事物的两个视角拉近,把不同事物推远。

对比学习成败全系于它的「配对」:你选的数据增强,决定了模型把什么当成「相同」。它还需要防塌缩的保护机制,否则一切都映射到同一个点,表示就废了。

又称
对比学习對比學習contrastive representation learning