文章目录
softmax
下面是softmax的公式:
y ^ + = softmax ( z + ) = exp ( z + ) ∑ i = 0 k exp ( z i ) (1) \hat{y}_{+}=\operatorname{softmax}(z+)=\frac{\exp (z+)}{\sum_{i=0}^k \exp \left(z_i\right)} \quad \tag{1} y^+=softmax(z+)=∑i=0kexp(zi)exp(z+)(1)
交叉熵损失函数如下:
L ( y ^ ) = − ∑ i ∈ K y i log ( y ^ i ) (2) L(\hat{y})=-\sum_{i \in K} y_i \log \left(\hat{y}_i\right)\quad \tag{2} L(y^)=−i∈K∑yilog(y^i)(2)
在有监督的学习中,标签是一个one-hot向量,将softmax出来的结果取 − log -\log −log,再和标签想成,即得到如下交叉熵损失:
− log exp ( z + ) ∑ i = 0 k exp ( z i ) (3) -\log \frac{\exp (z+)}{\sum_{i=0}^k \exp \left(z_i\right)}\quad \tag{3} −log∑i=0kexp(zi)exp(z+)(3)
上面的 k k k在有监督学习里指的是这个数据集一共有多少类别,比如cifar-10数据集,则k=9;ImageNet数据集有1000类,则k=999。
对于ImageNet数据集来说,此数据集有128万张图片,我们使用数据增强手段(比如,随机裁剪,随机颜色失真,随机高斯模糊)来产生对比学习正样本对,每张图片就是单独的一类,那$k$就是128万类,而不是1000类了
, 有多少张图就有多少类。
对于对比学习来说,理论上也可以用上面的公式去计算loss,但实际上是行不通的。为什么?
因为每张图只和自己增强的图算正样本对。
在使用对比学习的方法时,尤其是当采用如ImageNet这类大规模数据集时,每张图片会与其经过数据增强后生成的图像形成正样本对。这意味着每张图片实际上会在特征空间中与其增强版本形成一个正样本对,而与其他所有图片生成的特征表示会成为负样本对。
具体分析
- 正样本对:
- 对于每张原始图片 x i x_i xi,我们通过各种数据增强手段(如随机裁剪、颜色失真、模糊等)生成多个增强图像。例如,如果我们对每张图片生成两张增强图像,那么每张图片 x i x_i xi 会形成三个图像之间的正样本对:原始图像和两个增强图像。
- 负样本对:
- 每张图片的增强图像会与数据集中其他图片的特征表示形成负样本对。这意味着,如果数据集中有 N N N 张图片,那么每张图片的增强版本会与其他 N − 1 N-1 N−1 张图片的增强版本形成负样本对。
- 类别数:
- 在这种对比学习的框架下,每张图片及其增强版本被视为一个单独的类别。因此,对于ImageNet数据集中的128万张图片,类别数 k k k 实际上是128万,而不是数据集中原始的1000类。这是因为在对比学习的上下文中,每张图片及其增强版本被视为一个类别,这种方法利用了所有图像之间的对比信息。
损失函数中的类别数
在 InfoNCE 损失函数中:
L InfoNCE = − 1 N ∑ i = 1 N log exp ( sim ( z i , z i + ) ) exp ( sim ( z i , z i +