CUT

CPC

Representation learning with contrastive predictive coding
下图是 Contrastive Predictive Coding (CPC) 论文中最核心的架构原理图。

  • \(x_t\)\(t\)时刻的原始高维输入数据(如音频波形、图像切块)。
  • \(z_t = g_{enc}(x_t)\):编码器(Encoder)输出的低维潜空间(Latent Space)向量。
  • \(c_t = g_{ar}(z_{\le t})\):自回归模型(Autoregressive Model,如 GRU)对过去所有潜向量进行压缩后得到的上下文向量
  • \(x_{t+k}\):未来第 \(k\) 步的真实观测值,作为正样本

这张图在纵向结构上分为四个主要层级:

  • 输入数据层(底部的音频波形与 \(x\)):最下方是一段连续的音频信号波形,被切分成了一系列按时间顺序排列的离散数据块:\(\dots, x_{t-3}, x_{t-2}, x_{t-1}, x_t, x_{t+1}, \dots\),这是高维的原始观测数据(Raw Observations)。
  • 编码器层(梯形 \(g_{enc}\) 与蓝色方块 \(z\)):每个时步的数据 \(x_t\) 都会输入到一个共享参数的非线性编码器神经网络 \(g_{enc}\) 中,输出对应的潜空间表征——蓝色方块 \(z_t\)\(z_t = g_{enc}(x_t)\)。它的作用是将高维、充满噪点且冗余的原始信号 \(x_t\),压缩成一个低维、紧凑的分布式向量 \(z_t\)。这使得后续的条件预测不需要面对复杂的原始高维分布。
  • 自回归聚合层(\(g_{ar}\)):当前时步 \(t\) 及之前的潜向量(\(z_{\le t}\))会横向依次输入到一个自回归模型 \(g_{ar}\)(通常是循环神经网络如 GRU)中。\(g_{ar}\) 沿着时间轴横向传递记忆,将过去所有的历史潜信息汇总。
  • 上下文表征层(\(c_t\)):自回归模型 \(g_{ar}\) 在当前时刻 \(t\) 的输出,\(c_t = g_{ar}(z_{\le t})\)。它代表了截至当前时刻 \(t\) 的全域上下文语义。在下游任务中,这个 \(c_t\)\(z_t\) 就可以直接拿来作为特征向量输入给分类器。
  • 虚线箭头(Predictions):模型正基于当前的上下文 \(c_t\),去预测未来第 1 步到第 4 步的潜表征。针对未来不同的跨度 \(k\)\(k=1, 2, 3, 4\)),模型分别使用不同的预测矩阵 \(W_k\) 进行对数双线性操作:\(f_k(x_{t+k}, c_t) = \exp(z_{t+k}^T W_k c_t)\)。图中的弧线就是这个评分/预测操作的视觉化表达。

如果只预测未来 1 步(\(z_{t+1}\)),模型很容易投机取巧,仅通过信号的局部平滑性(局部噪声或波形的连续性)就能猜对。而当被迫预测更遥远的未来(如 \(z_{t+4}\))时,局部短时信号的共享信息已经衰减完了,模型必须逼迫自己丢弃局部噪声,去提取跨越长时步的“慢特征”(Slow Features)。在音频中,这就对应了更高级的语义——比如音素(Phonemes)语调。

CPC 不能直接处理整张高分辨率图像,而是将其离散化为局部切片(Patches):

  • 图像与切片尺寸:输入是一张 256x256 px 的图像。模型使用滑窗在上面裁剪出若干个 64x64 px 的小图像块。
  • 50% 重叠(50% overlap):滑窗移动的步长(Stride)为 32 px,即相邻的图像块之间有 50% 的面积重叠
  • 7x7 网格的诞生:根据公式 \(64 + (7-1) \times 32 = 256\),这种切片方式刚好将整张大图划分为了一个 7x7 的图像块网格。图中左侧相互重叠的蓝色方块,就代表网格中前两个被裁剪出来的局部图像块。

特征编码层(中间:\(g_{enc}\) - output):目标是将像素级的图像块压缩成高阶的潜空间向量

  • 编码器 \(g_{enc}\):每一个 64x64 px 的图像块都会被输入到一个共享参数的卷积神经网络编码器 \(g_{enc}\))。
  • 潜表征网格 z:编码器提取 ResNet 第三个残差块的输出并进行空间平均池化,将每个图像块转化为一个 1024 维的特征向量 \(z\)
  • 7x7x1024 张量:左侧的 7x7 图像块网格转化为了中间展示的 7x7 的潜表征网格

在 1D 音频中,模型使用自回归网络沿着时间轴由左至右聚合历史信息。在 2D 图像中,CPC 将其转变为自上而下的空间聚合:

  • 自回归模型\(g_{ar}\):论文采用了一种 PixelCNN 风格的自回归模型。从网格的顶部开始,逐行描并整合这些特征向量 \(z\)
  • 上下文向量\(c_t\):当自回归模型扫描到第 \(t\) 行时,它会将当前行及以上所有区域的信息压缩聚合成一个上下文表征向量\(c_t\)。这个 \(c_t\) 包含了该行以上图形的全局语义信息。

对比预测层(Predictions):CPC 最核心的自监督学习驱动引擎

  • 跨行空间预测:红色的上下文向量 \(c_t\) 不去重构像素,通过黑色的虚线箭头,去预测位于它下方几行的潜表征向量
  • 目标向量(正样本):图中展示了当前列下方的 \(z_{t+2}\)\(z_{t+3}\)\(z_{t+4}\)。模型利用不同的预测矩阵 \(W_k\)\(c_t\) 做内积,去计算 \(c_t\) 与这些未来潜表征的匹配得分 \(f_k = \exp(z_{t+k}^T W_k c_t)\)
  • 空间负样本的对抗:在计算 InfoNCE 损失时,当前列下方的真实向量 \(z_{t+k}\) 作为正样本;而网格中其他位置的向量、甚至其他图片的特征向量,则作为负样本。模型通过分类游戏,迫使 \(c_t\) 准确识别出正样本。

令随机变量 \(d \in \{1, 2, \dots, N\}\) 表示“正样本在集合 \(X\) 中的索引(位置)”。由于正样本是随机放入集合 \(X\) 中的,所以在没有任何观测前,每个位置是正样本的先验概率均等:\(p(d=i \vert{} c_t) = \frac{1}{N}\)

如果已知第 \(i\) 个样本是正样本(即 \(d=i\)),那么:

  • \(x_i\) 必须来自于条件分布 \(p(x_i\vert{}c_t)\)
  • 其余所有样本 \(x_l\)(其中 \(l \neq i\))都独立地来自提议分布(边缘分布)\(p(x_l)\)

因此,整个集合 \(X\) 的联合概率联合似然为:\(p(X \vert{} d=i, c_t) = p(x_i \vert{} c_t) \prod\limits_{l \neq i} p(x_l)\)

根据贝叶斯定理:\(p(d=i \vert{} X, c_t) = \displaystyle\frac{p(X \vert{} d=i, c_t) \cdot p(d=i \vert{} c_t)}{\sum\limits_{j=1}^N p(X \vert{} d=j, c_t) \cdot p(d=j \vert{} c_t)} = \frac{p(x_i \vert{} c_t) \prod\limits_{l \neq i} p(x_l)}{\sum\limits_{j=1}^N p(x_j \vert{} c_t) \prod\limits_{l \neq j} p(x_l)}= \frac{\displaystyle\frac{p(x_i \vert{} c_t)}{p(x_i)}}{\sum\limits_{j=1}^N \displaystyle\frac{p(x_j \vert{} c_t)}{p(x_j)}}\)

InfoNCE 损失本质上是分类器预测正确正样本位置的交叉熵损失。当模型训练到最优状态时,模型的输出评分 \(\displaystyle\frac{f_k(x_i, c_t)}{\sum\limits_j f_k(x_j, c_t)}\) 应当等于真实的后验概率 \(p(d=i \vert{} X, c_t)\)。对比两个公式的结构,可以得出:

\[f_k(x, c_t) = C \cdot \frac{p(x\vert{}c_t)}{p(x)} \]

\(C\) 是任意不依赖于 \(x\) 的常数(在 Softmax 中会被消去)。这证明了最小化 InfoNCE 损失确实能让模型学到真正的密度比

当模型达到最优时,我们将最优解 \(f_k(x, c_t) = \frac{p(x\vert{}c_t)}{p(x)}\) 代入损失函数中。设真正的正样本为 \(x_{t+k}\),剩余 \(N-1\) 个负样本集合为 \(X_{neg}\)。直接代入最优评分函数:

\[\mathcal{L}_{N}^{opt} = -\mathbb{E}_{X} \left[ \log \frac{\frac{p(x_{t+k}\vert{}c_t)}{p(x_{t+k})}}{\frac{p(x_{t+k}\vert{}c_t)}{p(x_{t+k})} + \sum_{x_j \in X_{neg}} \frac{p(x_j\vert{}c_t)}{p(x_j)}} \right]= \mathbb{E}_{X} \left[ \log \left( 1 + \frac{p(x_{t+k})}{p(x_{t+k}\vert{}c_t)} \sum_{x_j \in X_{neg}} \frac{p(x_j\vert{}c_t)}{p(x_j)} \right) \right] \]

由于负样本 \(x_j\)(N-1个) 是独立地从小分布 \(p(x)\) 中采样出来的,当样本量较大时,求和项可以用期望来近似:

\[\sum_{x_j \in X_{neg}} \frac{p(x_j\vert{}c_t)}{p(x_j)} \approx (N-1) \cdot \mathbb{E}_{x_j \sim p(x)} \left[ \frac{p(x_j\vert{}c_t)}{p(x_j)} \right]=(N-1)\int p(x_j) \frac{p(x_j\vert{}c_t)}{p(x_j)} dx_j = N-1 \]

带入得到公式:\(\mathcal{L}_{N}^{opt} \approx \mathbb{E}_{X} \left[ \log \left( 1 + \displaystyle\frac{p(x_{t+k})}{p(x_{t+k}\vert{}c_t)} (N-1) \right) \right]\)。需要证明:\(1 + \frac{p(x_{t+k})}{p(x_{t+k}\vert{}c_t)}(N-1) \ge \frac{p(x_{t+k})}{p(x_{t+k}\vert{}c_t)} N\)

令简写 \(A = \displaystyle\frac{p(x_{t+k})}{p(x_{t+k}\vert{}c_t)}\),展开不等式:

\[1 + AN - A \ge AN \implies 1 - A \ge 0 \implies A \le 1 \]

因为 \(A = \frac{p(x_{t+k})}{p(x_{t+k}\vert{}c_t)}\),而在自监督学习中,上下文 \(c_t\) 包含了预测未来的强大线索,所以真实的未来样本在有条件下的概率远大于无条件下的边缘概率,即 \(p(x_{t+k}\vert{}c_t) \ge p(x_{t+k})\)。由此可得 \(A \le 1\) 几乎总是成立的。因此,不等式放缩成立:

\[\begin{aligned} \mathcal{L}_{N}^{opt} &\ge \mathbb{E}_{X} \left[ \log \left( \frac{p(x_{t+k})}{p(x_{t+k}\vert{}c_t)} N \right) \right]\\ &= \mathbb{E}_{X} \left[ \log \frac{p(x_{t+k})}{p(x_{t+k}\vert{}c_t)} + \log N \right] \\ &= \mathbb{E}_{x_{t+k}, c_t} \left[ \log p(x_{t+k}) - \log p(x_{t+k}\vert{}c_t) \right] + \log N \\ &= -\mathbb{E}_{x_{t+k}, c_t} \left[ \log \frac{p(x_{t+k}\vert{}c_t)}{p(x_{t+k})} \right] + \log N = -I(x_{t+k}; c_t) + \log N \end{aligned} \]

因为对任意未达到最优的模型,其真实的 InfoNCE 损失 \(\mathcal{L}_N \ge \mathcal{L}_{N}^{opt}\),移项后我们得到:

\[I(x_{t+k}; c_t) \ge \log N - \mathcal{L}_{N}^{opt} \ge \log N - \mathcal{L}_N \]

这就是 CPC 最具核心美感的数学结论:最小化 InfoNCE 损失 LN​,实际上就是在最大化上下文与未来观测值之间互信息的数学下界。 同时,公式也指出,负样本数量 \(N\) 越大,这个互信息的下界被推得越高。

SimCLR

A simple framework for contrastive learning of visual representations

  • \(x\):代表输入的原始数据样本(即原始图像)。
  • \(t \sim \mathcal{T}\)\(t' \sim \mathcal{T}\)\(\mathcal{T}\) 代表同一个数据增强操作族。框架会从这个增强族中随机采样出两个独立的增强操作 \(t\)\(t'\)
  • \(\tilde{x}_i\)​ 和\(\tilde{x}_j\):原始图像 \(x\) 分别经过 \(t\)\(t'\) 的处理后,生成了两个相关的视图(即增强后的图像),分别记为 \(\tilde{x}_i\)\(\tilde{x}_j\)。在框架中,这两个由同一张图像衍生出来的视图被视为一个正样本对 (positive pair)。论文在实现时,主要依次应用了三种简单的增强方法:随机裁剪(随后调整回原始尺寸)、随机颜色扭曲以及随机高斯模糊。
  • \(f(\cdot)\):这是一个神经网络基础编码器,用于从增强后的数据样本中提取表示向量。该框架允许自由选择各种网络架构而没有任何限制。
  • \(h_i\)​ 和 \(h_j\):编码器分别处理两个视图后输出的特征表示向量。它们是 ResNet 网络中平均池化层之后的输出结果。
  • \(g(\cdot)\):这是一个小型的神经网络投影头,它的作用是将特征表示映射到另一个空间,对比损失正是在这个空间中被计算和应用的。
  • \(z_i\)​ 和 \(z_j\):经过投影头计算出的最终向量。将对比损失定义在 \(z_i\) 上,能够显著提升网络学习到的特征表示(即投影头之前的 \(h_i\))的质量。 \(z_i = g(h_i) = W^{(2)}\sigma(W^{(1)}h_i)\),其中 \(\sigma\) 是 ReLU 非线性激活函数。
  • Maximize agreement:在获取了 \(z_i\)\(z_j\) 之后,模型的目标是通过对比损失函数来最大化这两个同源向量之间的一致性(即让它们在潜在空间中尽可能接近)。
  • 实线矩形(Solid Rectangles):代表原始的完整输入图像。
  • 虚线矩形(Dashed Rectangles):代表从原始图像中随机裁剪出来的不同区域(即不同的视图 View)。

在过去的方法中(如 DIM/AMDIM),为了实现图 (a) 全局与局部视图的预测,通过严格限制网络每一层的感受野来强行提取局部特征。而 SimCLR 证明了,只要随机裁剪的尺度范围合理,模型在随机采样时有很大几率会直接产生这种“大框套小框”的样本对,从而天然地迫使模型学习全局与局部之间的语义关联。

在以往的方法中(如 CPC v1/v2),实现图 (b) 相邻视图预测需要非常繁琐的操作——先用固定的规则把图像切成规则的网格切片(Patches),然后通过一个复杂的上下文聚合网络(如 PixelCNN)按顺序去预测相邻切片的特征。SimCLR 同样用随机裁剪化繁为简:当随机采样的两个框刚好落在不同位置时,就自动形成了一个相邻区域对比任务

SimCLR 的核心思想是:给定一张图像 \(x\),通过随机数据增强产生两个不同的视图 \(\tilde{x}_i\)\(\tilde{x}_j\)。这两个视图来自同一张图像,因此被称为正样本对。模型(编码器 \(f\) + 投影头 \(g\))将这两个视图映射到潜在空间,得到表示向量 \(z_i\)\(z_j\)在潜在空间中,让正样本对 (\(z_i\)​ 和 \(z_j\)​) 尽可能靠近,同时让它们与批次中其他图像产生的特征向量(负样本)尽可能远离

为了衡量两个表示向量的距离,SimCLR 使用了余弦相似度。给定两个向量 \(u\)\(v\),它们的余弦相似度定义为:

\[\text{sim}(u, v) = \frac{u^T v}{\Vert{}u\Vert{} \Vert{}v\Vert{}} \]

余弦相似度的值域在 \([-1, 1]\) 之间,值越大表示两个向量的方向越一致(越相似)。假设我们在训练时采用了一个大小为 \(N\) 的小批量图像。对这 \(N\) 张图像中的每一张进行两次数据增强,我们会得到 \(2N\) 个数据点。对于这 \(2N\) 个数据点中的某一个数据点 \(i\)(特征向量为 \(z_i\)),它在同一个批次中:

  • 有且仅有 1 个正样本 (Positive sample):即与它来自同一张原始图像的另一个增强视图 \(j\)(特征向量为 \(z_j\))。
  • 有 2(N−1) 个负样本 (Negative samples):即批次中来自其他所有 \(N-1\) 张图像的 \(2(N-1)\) 个增强视图。

现在的任务变成了一个多分类问题:给定数据点 \(i\),我们需要模型在总共 \(2N - 1\) 个候选者(1 个正样本 + \(2N-2\) 个负样本)中,正确识别出那 1 个正样本 \(j\)

为了解决上述的多分类问题,最自然的选择是使用 Softmax 函数结合交叉熵损失 (Cross-Entropy Loss)

对于数据点 \(i\),它与点 \(j\) 是正样本对的概率(基于特征相似度)可以表示为:

\[P(i, j) = \frac{\exp(\text{sim}(z_i, z_j))}{\sum\limits_{k=1}^{2N} \mathbb{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k))} \]

  • 分子 \(\exp(\text{sim}(z_i, z_j))\) 代表正样本对的相似度得分(取指数保证为正)。
  • 分母 \(\sum\limits_{k=1}^{2N} \mathbb{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k))\) 是归一化项,它计算了点 \(i\) 与批次中所有其他数据点 \(k\) 的相似度得分之和。
  • 指示函数 \(\mathbb{1}_{[k \neq i]}\) 的作用是:当 \(k=i\) 时值为 0,否则为 1。它的目的是在计算分母时,排除掉点 i 与自身的相似度

SimCLR 在计算相似度时引入了一个标量参数 \(\tau\) (tau)。将原本的相似度 \(\text{sim}(u, v)\) 替换为 \(\text{sim}(u, v) / \tau\)

\[P(i, j) = \frac{\exp(\text{sim}(z_i, z_j) / \tau)}{\sum_{k=1}^{2N} \mathbb{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k) / \tau)} \]

\(\tau\) 的作用非常关键: 它控制了 Softmax 分布的平滑程度(或称为尖锐度 Sharpness)。当 \(\tau\) 较小(如论文中推荐的 0.1 或 0.5)时,\(\text{sim} / \tau\) 的值会被放大,Softmax 函数会更加关注那些最难区分的负样本(即那些与 \(z_i\) 最相似、最容易混淆的负样本),使得梯度的更新更加集中在区分困难样本上。

由于我们的目标是使得正确类别(即正样本 \(j\))的预测概率 \(P(i, j)\) 尽可能接近 1,可以应用标准的负对数似然损失(交叉熵),得到NT-Xent (Normalized Temperature-scaled Cross Entropy) 公式:

\[\ell_{i, j} = -\log P(i, j)= -\log \frac{\exp(\text{sim}(z_i, z_j) / \tau)}{\sum\limits_{k=1}^{2N} \mathbb{1}_{[k \neq i]} \exp(\text{sim}(z_i, z_k) / \tau)} \]

CUT

Contrastive learning for unpaired image-to-image translation

  • G (Generator / 生成器):中间的沙漏状结构。输入马的图像经过 \(G_{enc}\) 提取特征,再通过 \(G_{dec}\) 渲染出斑马。
  • \(G_{enc}\)​ (Encoder / 镜像编码器):在计算对比损失时,生成的斑马图像也会被送入这个相同的编码器来提取特征。
  • Discriminator (判别器):右下角的模块。用于判断生成的斑马是否足够真实,负责传统的对抗损失(GAN Loss)。

将图像切分成一个个小的区域(Patch,图像块),并在特征空间中对它们进行比较:

  • Query (查询样本 \(z\))深蓝色方框。源自生成斑马的头部区域。这是我们当前要研究和约束的对象。
  • Positive (正样本 \(z^+\))天蓝色方框。源自输入马的头部区域。注意,它的空间位置与查询样本完全一致
  • Negatives (负样本 \(z_1^−\)​,\(z_2^−\)​,\(z_3^−\)​)黄色方框。源自输入马的其他随机位置
  • 拉近正样本(双向箭头 ↔):生成的斑马头部的特征 \(z\),与输入的马头部的特征 \(z^+\) 非常相似。
  • 推开负样本(被切断或远离的箭头):生成的斑马头部的特征 \(z\),与原图中马腿、草地等特征 \(z^-\) 保持遥远的距离。
  • \(Gen_c^l\)​(编码器): 直接复用生成器的前半部分编码器网络。这里的上标 \(l\) 代表网络的第 \(l\) 层。CUT 会在网络的多个不同层级(从浅层纹理到深层语义)同时提取特征张量。
  • \(H_l\)​(多层感知机 MLP): 一个小型的两层线性投影头。从 \(G_{enc}^l\) 提取出的原始特征不会直接用于计算损失,而是先通过 \(H_l\) 投影到一个共享的嵌入空间。这样做可以过滤掉与对比任务无关的冗余信息,大幅提升特征匹配的质量。

经过前一步的提取后,图像被转化为了三维的特征张量(Feature Tensor)(维度通常为 \(C \times H \times W\)):

  • 图像上的每一个小方框(Patch),在特征张量中就对应了一条沿着通道(Channel)方向的长条特征向量
  • 下方的立方体中提取出了查询向量(Query Vector)
  • 上方的立方体中在相同坐标处提取出了正样本向量(Positive Vector),并在其他任意坐标处提取出了 \(N\)负样本向量(Negative Vector)

拿到这组特征向量后,算法将其转化为一个\((N+1)\) 类的分类问题:

  1. 矩阵乘法/点积: 将深蓝色的查询向量,分别与天蓝色的正样本向量以及 \(N\) 个黄色的负样本向量计算内积(相似度)。
  2. 相似度向量: 产生一个长度为 \(N+1\) 的列向量(最右侧彩色条)。最上面一格是查询样本与正样本的相似度(得分),下面 \(N\) 格是与各个负样本的相似度(得分)。
  3. Softmax 交叉熵损失(Softmax cross-entropy): 我们的目标是让查询样本与正样本的相似度尽可能高,而与所有负样本的相似度尽可能低。因此,将这个相似度向量通过 Softmax 转化为概率分布,并使用标准的交叉熵损失进行优化。在数学表达上,这被称为 InfoNCE 损失

\[\ell(v, v^+, v^-) = -\log \left[ \frac{\exp(v \cdot v^+ / \tau)}{\exp(v \cdot v^+ / \tau) + \sum_{n=1}^N \exp(v \cdot v_n^- / \tau)} \right] \]

  1. 相似度度量 (\(v \cdot v^+\)):这里的点积代表余弦相似度。点积值越大,代表两个向量在空间中越接近。
  2. \(\tau\):这是一个缩放超参数。它的作用是放大相似度的差异,使模型对难负样本(Hard Negatives)更加敏感。
  3. Softmax 概率分布:括号内部的分式,实际上就是一个标准的 Softmax 函数。代表:在 N+1 个样本中,网络准确找出那个唯一的正样本的概率。
  4. 负对数似然 (\(- \log\)):当模型能够 \(100\%\) 找出正样本时,损失最小。反之,如果概率很低,损失就会变得极大。

将上述的 InfoNCE 损失应用到具体的图像生成任务中,就形成了论文独创的 PatchNCE Loss。网络不仅仅在输出的最终图像上做对比,而是在编码器 \(G_{enc}\) 的多层特征图(Feature Maps)上同时进行。假设我们选取了 \(L\) 层网络,在第 \(l\) 层,其特征图拥有 \(S_l\) 个空间位置(Spatial locations,即图像块)。首先,提取特征并经过两层感知机 \(H_l\) 进行投影:

  • 输入图像的特征(作为正/负样本)\(z_l = H_l(G_{enc}^l(x))\)
  • 生成图像的特征(作为查询样本)\(\hat{z}_l = H_l(G_{enc}^l(G(x)))\)

对于第 \(l\) 层的某一个特定空间位置 \(s \in \{1, \dots, S_l\}\)

  • 查询样本为 \(\hat{z}_l^s\)
  • 正样本为 \(z_l^s\)(完全相同坐标位置的特征)
  • 负样本为 \(z_l^{S \setminus s}\)(这一层其他所有 \(S_l - 1\) 个位置的特征)

将所有层、所有位置的损失累加,得到 PatchNCE 损失函数

\[\mathcal{L}_{\text{PatchNCE}}(G, H, X) = \mathbb{E}_{x \sim X} \sum_{l=1}^L \sum_{s=1}^{S_l} \ell(\hat{z}_l^s, z_l^s, z_l^{S \setminus s}) \]

对比损失只负责“保留内容”,但不能保证“风格转移”。要让马看起来像斑马,依然需要依靠经典的 GAN 损失。

\[\mathcal{L}_{\text{GAN}}(G, D, X, Y) = \mathbb{E}_{y \sim Y}[\log D(y)] + \mathbb{E}_{x \sim X}[\log(1 - D(G(x)))] \]

为了进一步稳定训练,防止生成器胡乱改变图像,作者还引入了一个身份保留机制。即:如果我们直接把一张斑马的图片 y 输入给“马变斑马”的生成器 G,它应该输出原图,不作任何改变。为此将同样的 PatchNCE 损失应用到了目标域 \(Y\) 上:

\[\mathcal{L}_{\text{PatchNCE}}(G, H, Y) = \mathbb{E}_{y \sim Y} \sum_{l=1}^L \sum_{s=1}^{S_l} \ell(\hat{z}_l^s, z_l^s, z_l^{S \setminus s}) \]

将上述所有的模块组合在一起,就得到了 CUT 模型的最终优化目标公式:

\[\mathcal{L}_{\text{CUT}}(G, D, H) = \mathcal{L}_{\text{GAN}}(G, D, X, Y) + \lambda_X \mathcal{L}_{\text{PatchNCE}}(G, H, X) + \lambda_Y \mathcal{L}_{\text{PatchNCE}}(G, H, Y) \]

我们要最小化 G 和 H,同时最大化 D:即 \(\arg \min\limits_{G, H} \max\limits_D \mathcal{L}_{\text{CUT}}(G, D, H)\)

其中\(\lambda_X\)\(\lambda_Y\) 是控制对比损失权重的超参数。

NEGCUT

Instance-wise Hard Negative Example Generation for Contrastive Learning in Unpaired Image-to-Image Translation

正样本与查询样本的提取与归一化公式:

\[k^+ = \frac{H_s^i(F_i^X)}{\vert{}\vert{}H_s^i(F_i^X)\vert{}\vert{}_2} \quad , \quad q = \frac{H_s^i(F_i^Y)}{\vert{}\vert{}H_s^i(F_i^Y)\vert{}\vert{}_2} \]

  • \(F_i^X, F_i^Y\):分别是源图像 \(X\) 和生成的图像 \(Y\) 在编码器第 \(i\) 层的特征图(Feature Map)。
  • \(H^i(\cdot)\):第 \(i\) 层的表达网络(2层 MLP),用于将卷积特征映射到对比学习的度量空间。
  • 下标 \(s\):代表空间位置索引。
  • \(\vert{}\vert{} \cdot \vert{}\vert{}_2\):L2 范数(向量长度)。

难负样本的生成 (Hard Negative Generation)公式:

\[k_{adv,n}^- = \frac{N^i \left( \overline{H^i(F_i^X)} ; z_n \right)}{\vert{}\vert{}N^i \left( \overline{H^i(F_i^X)} ; z_n \right)\vert{}\vert{}_2} \]

  • \(N^i(\cdot)\):作用于第 \(i\) 层的负样本生成器
  • \(\overline{H^i(F_i^X)}\):注意顶部的横线(bar),这代表全局空间平均池化 (Spatial Average Pooling)
  • \(z_n\):从标准高斯分布中采样的随机噪声向量。

对抗对比学习的 Min-Max 博弈机制:

\[\min_{Enc} \max_{NegGen} l(q, k^+, k_{adv}^-) = - \log \left[ \frac{\exp(q \cdot k^+ / \tau)}{\exp(q \cdot k^+ / \tau) + \sum_{n=1}^N \exp(q \cdot k_{adv,n}^- / \tau)} \right] \]

  • \(\min\limits_{Enc}\)​(极小化):对于主干网络来说,它希望这个 Loss 越小越好。这意味着它要拉近 \(q\)\(k^+\),并推开 \(k_{adv,n}^-\)
  • \(\max\limits_{NegGen}\)​(极大化):对于负样本生成器来说,它希望这个 Loss 越大越好。为了让 Loss 变大,它必须让分母变大,也就是要让 \(q \cdot k_{adv,n}^-\) 变大。这迫使它生成与 \(q\)极其相似的“难负样本(Hard Negatives)”。

针对上述的 Min-Max 问题,具体的梯度更新公式如下:

\[\theta_{N^i} \leftarrow \theta_{N^i} + \eta_N \frac{\partial l(q, k^+, k_{adv}^-)}{\partial \theta_{N^i}} \quad \quad \theta_{H^i} \leftarrow \theta_{H^i} - \eta_{\mathcal{H}} \frac{\partial l(q, k^+, k_{adv}^-)}{\partial \theta_{H^i}} \]

总对抗对比损失如下:

\[\mathcal{L}_{AdCont} = \mathbb{E}_{x \sim X} \sum_{l=1}^L \sum_{s=1}^{S_l} l(q_{l,s}, k_{l,s}^+, k_{adv,l,s}^-) \]

图像生成器的更新 (链式法则)如下:

\[\theta_G \leftarrow \theta_G - \eta_G \sum_{i=0}^L \left( \frac{\partial l(\dots)}{\partial F_i^X} \frac{\partial F_i^X}{\partial \theta_G} + \frac{\partial l(\dots)}{\partial F_i^Y} \frac{\partial F_i^Y}{\partial \theta_G} \right) \]

生成对抗网络容易遇到“模式崩溃”问题(不论输入什么噪声,生成一样的结果)。为此引入了多样性损失(Diversity Loss)。

\[\mathcal{L}_{div} = - \vert{}\vert{} N^i(\overline{H^i(X_i)}, z_1) - N^i(\overline{H^i(X_i)}, z_2) \vert{}\vert{}_1 \]

  • \(z_1, z_2\):对同一个源图像特征,输入两个不同的随机噪声。
  • \(\vert{}\vert{}\cdot\vert{}\vert{}_1\):L1 范数(曼哈顿距离)。
  • 如果我们输入了不同的噪声 \(z_1 \neq z_2\),我们希望生成的负样本 \(k_{adv,1}^-\)\(k_{adv,2}^-\) 的差异尽可能大。

I2I (Image-to-Image) 任务还需要确保生成的图像看起来像是目标域的真实图像,引入LSGAN(最小二乘 GAN)损失:

\[\mathcal{L}_{gan}^D = \mathbb{E}_{x_r}[(1 - D(x_r))^2] + \mathbb{E}_{x_f}[D(x_f)^2] \quad \quad \mathcal{L}_{gan}^G = \mathbb{E}_{x_f}[(1 - D(x_f))^2] \]

  • \(x_r\):目标域的真实图像 (Real)。
  • \(x_f\):生成的图像 (Fake)。
  • \(D\):判别器。

三方博弈的总体损失函数组合

\[\mathcal{L}_{\mathcal{H}} = \mathcal{L}_{AdCont} \quad \quad \mathcal{L}_G = \mathcal{L}_{AdCont} + \lambda_1 \mathcal{L}_{gan}^G \quad \quad \mathcal{L}_{\mathcal{N}} = -\mathcal{L}_{AdCont} + \lambda_2 \mathcal{L}_{div} \]

  • 对于表达网络 H:只负责拉近正负样本距离,目标是最小化 \(\mathcal{L}_{AdCont}\)
  • 对于主干生成器 G:既要满足特征一致性(最小化 \(\mathcal{L}_{AdCont}\)),又要骗过判别器(最小化 \(\mathcal{L}_{gan}^G\))。\(\lambda_1\) 是权重。
  • 对于负样本生成器 N:目标是最大化对比损失(最小化 \(-\mathcal{L}_{AdCont}\)),同时要保证生成的多样性(最小化 \(\lambda_2 \mathcal{L}_{div}\))。

QS-Attn

QS-attn: Query-selected attention for contrastive learning in I2I translation

特征图 \(F_x\) 是构建注意力的核心。它被分解为注意力的三个基本组件:

  • Value V (源域值): 橙色块,从 \(F_x\) 通过 "reshape" 操作得到,\(V \in \mathbb{R}^{HW \times C}\)
  • Query Q: 紫色块,也是从 \(F_x\) 通过 "reshape" 得到。\(Q \in \mathbb{R}^{HW \times C}\)
  • Key K: 浅蓝色块,从 \(F_x\) 通过 "reshape and transpose" 得到,\(K \in \mathbb{R}^{C \times HW}\)

对于 \(A_g\) 中的每一行,计算其分布的熵作为“显著性”度量。熵值越小,表示该查询越“独特”或越具代表性。将 \(A_g\) 的各行根据显著性指标进行排序(由橙色虚线箭头 \(\dots\dots\rightarrow\) 表示),并选择Top-N 行。这产生一个简化的注意力矩阵 \(A_{QS}\)(形状为 \(N \times HW\)),其中只包含最显著查询的注意力权重。这强制网络将对比注意力集中在包含更多域特定信息的特征上。

QS-Attn(Query-Selected Attention,查询选择注意力机制) 核心目标是在未配对的图像到图像(I2I)翻译任务中,通过最大化源域与目标域之间的互信息来保留图像内容。为了实现这一目标,模型构建了一套从全局自注意力机制计算显著性查询选择,再到跨域值路由以及最后的补丁对比损失(Patch Contrastive Loss)的完整数学框架。以下是该模型中涉及的所有核心公式的详细拆解、物理意义解释与推导:

利用矩阵乘法 \(\otimes\) 计算任意两个空间位置之间的成对相似度(点积):\(M = Q K\)

对于矩阵 \(M \in \mathbb{R}^{HW \times HW}\) 中的任意一个元素 \(M_{i,j}\)(第 \(i\) 个位置的查询与第 \(j\) 个位置的键之间的关联度),计算公式为:

\[M_{i,j} = q_i \cdot k_j^T \]

其中 \(q_i \in \mathbb{R}^{1 \times C}\)\(Q\) 的第 \(i\) 行,\(k_j \in \mathbb{R}^{1 \times C}\)\(K\) 的第 \(j\) 列(即转置前的第 \(j\) 行)。

为了将得分转化为概率分布,对矩阵 \(M\) 的每一行应用 Softmax (S) 函数,得到全局注意力矩阵 \(A_g \in \mathbb{R}^{HW \times HW}\)

\[A_g(i, j) = \frac{\exp(q_i \cdot k_j^T / \tau_a)}{\sum\limits_{m=1}^{HW} \exp(q_i \cdot k_m^T / \tau_a)} \]

  • \(\tau_a\) 是缩放因子(或者是注意力机制中的温度超参数,通常为 \(\sqrt{C}\),用于防止点积过大导致梯度消失)。
  • 归一化后,每一行满足 \(\sum\limits_{j=1}^{HW} A_g(i, j) = 1\),代表第 \(i\) 个位置对全图所有位置的注意力权重分布。

传统的对比学习方法(如 CUT)是随机采样图像中的补丁(Patches)。而本论文的核心创新在于有意地选择显著性区域。为此,论文引入了香农信息熵(Shannon Entropy)来评估每个查询行(即每个空间位置)的显著性(Significance)。

对于全局注意力矩阵 \(A_g\) 中的第 \(i\) 行,其注意力分布可以看作一个离散概率分布。该位置的显著性度量\(H(i)\) 定义为:

\[H(i) = - \sum_{j=1}^{HW} A_g(i, j) \log A_g(i, j) \]

  • 高熵值(均匀分布): 如果第 \(i\) 个位置是背景(如天空、草地等平坦区域),它与图中许多地方的相似度都差不多,\(A_g(i, j)\) 的分布会非常平缓趋于均匀。此时 \(H(i)\) 极大,说明该位置信息量低,不具显著性。
  • 低熵值(尖锐分布): 如果第 \(i\) 个位置包含关键的结构或纹理,它只会对图中特定的相关区域产生极高的注意力,而对其他区域注意力几乎为零。此时 \(H(i)\) 极小,说明该分布非常专注,包含丰富的域特征信息。

模型计算出所有 \(HW\) 个位置的熵值后,对其进行升序排序(即显著性降序排列),挑选出最显著的 Top-N 个行。这 \(N\) 个选定的行组成了简化的注意力矩阵 \(A_{QS} \in \mathbb{R}^{N \times HW}\),模型将其作为“路由表”,分别对源域和目标域的 Value (V) 矩阵进行加权映射,以提取对比学习所需的特征向量。

\(A_{QS}\) 与源域内容矩阵 \(V_x \in \mathbb{R}^{HW \times C}\) 相乘,得到路由后的源域特征 \(\hat{V}_x \in \mathbb{R}^{N \times C}\)

\[\hat{V}_x = A_{QS} V_x \]

对于第 \(i\) 个被选中的显著位置,其提取出的源域特征向量(用作对比损失的基准参考)为:

\[\hat{v}_{x, i} = \sum_{j=1}^{HW} A_{QS}(i, j) v_{x, j} \]

  • 与当前位置对应的特征 \(\hat{v}_{x, i}\) 被定义为正样本 (Positive, \(k_i^+\)​)
  • 来自其他被选位置的特征 \(\hat{v}_{x, n}\) (其中 \(n \neq i\))则作为负样本 (Negatives, \(k^-\))

对于生成图形来说生成域特征和生成域特征向量也是这样:

\[\hat{V}_y = A_{QS} V_y \quad \quad \hat{v}_{y, i} = \sum_{j=1}^{HW} A_{QS}(i, j) v_{y, j} \]

对比损失的核心是借用 InfoNCE Loss 的变体,通过在特征空间中“拉近正样本,推开负样本”来最大化源域与目标域在显著区域的互信息。对于选定的 \(N\) 个显著特征点,整体的补丁对比损失函数 \(L_{con}\) 公式为:

\[L_{con}(q, k^+, k^-) = \frac{1}{N} \sum_{i=1}^{N} -\log \left( \frac{\exp(q_i \cdot k_i^+ / \tau)}{\exp(q_i \cdot k_i^+ / \tau) + \sum\limits_{n \in \mathcal{M}_i} \exp(q_i \cdot k_{i, n}^- / \tau)} \right) \]

  • \(q_i\)​ (Anchor): 目标域生成的第 \(i\) 个显著路由特征补丁(即 \(\hat{v}_{y, i}\))。
  • \(k_i^+\)​ (Positive): 源域中与锚点相同空间位置的路由特征补丁(即 \(\hat{v}_{x, i}\))。我们希望 \(q_i\)\(k_i^+\) 的点积尽可能大。
  • \(k_{i, n}^-\)​ (Negatives): 源域中除正样本以外的其他不匹配位置的特征补丁。我们希望 \(q_i\) 与它们的点积尽可能小。
  • \(\tau\) 对比损失的温度超参数(Temperature parameter),用于调节惩罚负样本的粒度。

为了同时保证图像风格转换的真实性与内容的完整性,模型将对抗损失\(L_{adv}(G, D)\)与上述对比损失进行联合优化。

最终,整个网络(包括生成器 \(G\) 和编码器 \(E\))通过以下复合目标函数进行端到端训练:

\[L_{total}(G, D, E) = L_{adv}(G, D) + \lambda L_{con}(G, E) \]

在计算 \(L_{con}\) 时,源域特征 \(k^+\)\(k^-\) 的梯度通常被截断,对比损失的梯度仅通过锚点 \(q\) 反向传播回生成器 \(G\)。这确保了网络只去调整生成器以适应源域的内容结构,而不会破坏编码器 \(E\) 提取源域特征的稳定性。

posted @ 2026-07-29 19:03  鸭鸭呀鸭鸭  阅读(17)  评论(0)    收藏  举报