在本节中,我们首先回首广泛使用的基于 softmax 的对比丧失。然后我们先容成对 sigmoid 丧失并讨论其有效实现。
给定一个小批量 B = ( I 1 , T 1 ) , ( I 2 , T 2 ) , . 。 B = {(I_1 , T_1 ), (I_2 , T_2), . 。} B=(I1,T1),(I2,T2),.。对于图像-文本对,对比学习目标鼓励匹配对 ( I i , T i ) (I_i , T_i ) (Ii,Ti)的嵌入相互对齐,同时将不匹配对 ( I i , T j ≠ i ) (I_i , T_{j{\neq}i} ) (Ii,Tj=i)的嵌入推开。出于实际目标,假设对于所有图像 i,与差别图像 j 关联的文本与 i 不相关,反之亦然。这种假设通常是有噪声的且不完美的。
基于图像-文本对,可以发现正例只有N个,而负例有N*(N-1)个,存在严峻的loss不均衡状态
3.1. Softmax loss for language image pre-training
由于 softmax丧失的不对称性,softmax函数需要盘算两次:image->text softmax ; text-> image softmax
3.2 Sigmoid loss for language image pre-training
我们提出基于 sigmoid 的丧失独立处理每个图像文本对,有效地将学习问题转化为所有对组合数据集上的尺度二元分类,并为匹配对提供正标签( I i , T i I_i ,T_i Ii,Ti)和所有其他对的负标签 ( I i , T j ≠ i ) (I_i , T_{j{\neq}i} ) (Ii,Tj=i)。它的定义如下:
其中 z i , j z_{i,j} zi,j是给定图像和文本输入的标签,假如它们配对则等于 1,否则等于 1。在化过程中,来自许多负面因素的严峻不平衡在丧失中占主导职位,导致大量的初始优化步骤试图纠正这种偏差。
为了缓解loss不均衡,我们引入了一个额外的可学习偏差项 b ,类似于温度 t。我们将 t 和 b 分别初始化为 log 10 和- 10。这确保练习开始时大抵靠近先前的练习,而且不需要大量的过度校正。算法1 提出了用于语言图像预练习的 sigmoid 丧失的伪代码实现。
这里提出对sigmoid函数进行修改,制止loss不均衡;基于可学习参数对x进行缩放,并设置可学习参数b作为偏置项
3.3. Efficient “chunked” implementation
对比练习通常利用数据并行性。 在D个装备之间拆分数据时盘算丧失需要收集所有具有昂贵全收集的嵌入[59],更紧张的是,内存密集型|B| × |B|成对相似性矩阵。
然而,sigmoid 丧失特殊适合内存高效、快速和数值稳定的实现,以改善这两个问题。将每个装备批量大小表示为 b = |B|/D ,丧失重新表述为:
这对于 sigmoid 丧失来说特殊简单,因为每一对都是丧失中的独立项。图 1 阐明了这一点。换句话说,我们首先盘算对应于正对和 b−1 负对的丧失分量。然后我们跨装备排列表示,因此每个装备从其相邻装备中获取负值(和 B 的下一次迭代)。然后盘算该块的丧失(总和 C)。这是在每个装备中独立完成的,以便每个装备盘算相对于其当地批次b 的丧失。然后可以简单地将所有装备的损耗相加(总和 A)。单独的团体排列(对于总和 B)很快(事实上,D 团体排列通常比 D 装备之间的两次全聚集更快),而且任何给定时刻的内存本钱都从 ∣ B ∣ 2 |B|^2 ∣B∣2 降低至 b 2 b^2 b2 (对于总和 C)。通常 b 是常数,如缩放|B|这是通过增长加速器的数量来实现的。由于与批量大小成二次方,普通丧失盘算很快成为扩展的瓶颈。这种分块方法可以在相对较少的装备上进行批量大小超过 100 万的练习.