Hhu-Dusseldorf-表示学习笔记-全-

Hhu Dusseldorf 表示学习笔记(全)

001:表示学习导论 🧠

在本节课中,我们将要学习表征学习的基本概念、其重要性以及一些经典方法。我们将从定义开始,探讨什么是好的表示,并介绍几种学习表示的不同视角。

概述

表征学习的目标是学习数据的表示,使得从数据中提取有用信息以构建分类器或预测器变得更容易。我们通常不直接从原始数据域学习预测函数,而是先学习一个表示函数,将数据映射到一个中间表示空间,然后在该空间上训练简单的模型来完成各种任务。这种方法可以利用更多数据,并加速新任务的训练过程。

什么是表征学习?

通常,我们有一些数据 (X),例如图像、文本等。我们希望学习对这些数据的预测。预测空间 (Y) 可以是类别标签,例如将图像分类为猫、狗或房屋,或者对句子进行情感分析。

在传统的机器学习中,我们学习一个从数据域空间直接到预测空间的函数 (F: X \rightarrow Y)。

表征学习则不同。我们学习一个表示函数 (G: X \rightarrow Z),将数据映射到某个中间空间 (Z)(也称为表示空间、嵌入空间或潜在空间)。然后,我们在该表示之上训练分类器 (H: Z \rightarrow Y)。整个过程可以表示为 (H(G(x)))。

我们这样做是因为,对于一个数据域(如图像),我们可以训练一个或多个表示函数 (G)。之后,对于许多不同的任务,我们只需在该表示之上训练简单的小模型即可。这加快了训练速度,并且使我们能够利用更多数据,因为表示函数可以使用无标签数据或混合标签数据来学习。

好的表示应具备的特性

一个好的表示函数应具备多种理想特性。以下是几个关键方面:

  • 平滑性:如果两个输入点非常接近,那么它们的表示也应该非常接近。这是机器学习模型的一个基本先验。
  • 半监督或无监督学习能力:一个好的表示学习方法应该能够处理无标签数据或混合数据,从而利用所有可用数据。
  • 不变性:表示应对输入中不重要的变化保持不变。例如,对于图像,轻微的旋转或颜色变化应产生相似的表示。
  • 自然聚类:对于与类别变量相关的数据,好的表示应能将相同类别的数据点聚集在一起,不同类别的数据点分离开。
  • 多解释因子:每个任务不需要所有潜在的解释因子。我们希望表示能恢复许多潜在的、对下游任务可能有用的因子,同时忽略无关的噪声因子。
  • 解耦性:理想情况下,表示向量的每个维度应对应于数据中有意义的、独立的变异因素。例如,在人脸图像表示中,一个维度可能控制头部左右转动,另一个控制是否微笑。
  • 层次性:表示应能反映特征的层次结构,例如从低级的“是否有皮毛”到高级的“是什么动物”。不过,当前方法很少能完全实现这一点。
  • 稀疏性:对于许多数据点,只有少数解释因子是活跃的。因此,表示向量中大多数维度应为零或接近零。
  • 简单依赖关系:表示空间中的因子应具有简单的依赖关系,以便在其上训练的模型(通常是线性模型)能够轻松学习。

如何评估表示的好坏?

评估表示质量最流行的方法是线性探测。

我们首先在一个(可能无标签的)数据集上学习表示函数 (G)。然后,我们取另一个较小的、有标签的数据集,在其表示 (Z = G(X)) 之上仅训练一个简单的线性分类器(例如,使用交叉熵损失)。最后,我们在测试集上测量该分类器的准确率。准确率越高,通常认为表示越好。

重要的是,不能仅通过表示学习模型本身的训练损失来判断表示质量,因为损失低并不直接等同于在下游任务上表现好。

学习表示的方法

有多种不同的视角和方法来学习表示。本节我们将介绍几种经典方法。

1. 深度学习与迁移学习

在深度学习中,模型通常是由多个层(如 (F_1, F_2, ..., F_L))堆叠而成。我们可以先在某个有标签的任务(例如 ImageNet 图像分类)上训练一个深度神经网络。训练完成后,去掉网络的最后一层(或多个层),剩下的部分就可以作为一个表示函数 (G)。

因为深度学习在训练过程中会为特定任务学习有用的中间表示,所以这些表示通常也包含了对其他任务有用的信息。这本质上是迁移学习。靠近输入的层学习低级特征(如边缘、颜色),而更深的层学习更抽象的特征。

2. 最大似然估计方法

这类方法假设数据 (x) 来自某个分布 (P(x)),并且我们有一个固定的先验潜在分布 (P(z))(例如标准正态分布)。我们通过一个参数化的解码器函数 (P_\theta(x|z)),将潜在变量 (z) 映射回数据空间。

目标是最大化数据的边际似然:(P_\theta(x) = \int P_\theta(x|z) P(z) dz)。

然而,我们通常需要的是后验分布 (P(z|x)) 或一个能将 (x) 映射到 (z) 的编码器函数。计算后验分布通常非常困难,特别是当解码器 (P_\theta(x|z)) 是一个复杂的神经网络时。变分自编码器(VAE)通过引入一个近似后验 (Q_\phi(z|x)) 来优化边际似然的下界,从而部分解决了这个问题,并同时得到了一个编码器。

主成分分析(PCA)可以看作一个简单的概率模型特例,其中先验和后验都是高斯分布,且映射是线性的。

3. 自编码器

自编码器是本周练习的重点。它由两个网络组成:一个编码器 (G_\phi: X \rightarrow Z) 和一个解码器 (D_\theta: Z \rightarrow X)。目标是让解码后的输出 (D_\theta(G_\phi(x))) 尽可能接近原始输入 (x),通过最小化重构损失(如均方误差)来实现。

为了防止编码器学习恒等映射,最常见的约束是使潜在空间 (Z) 的维度低于输入空间 (X) 的维度,这称为欠完备自编码器。PCA 可以视为使用线性编码器/解码器和均方误差损失的自编码器的最优解。

自编码器存在一个问题:它试图精确重构所有细节,包括不重要的噪声,因此可能无法学习到对微小变化(如平移、旋转)具有不变性的表示。

去噪自编码器

为了解决上述问题,去噪自编码器在输入数据 (x) 上添加噪声(例如高斯噪声),得到 (\tilde{x}),然后要求网络从 (\tilde{x}) 重构出干净的原始数据 (x)。这迫使网络学习到数据流形的结构,并将被噪声推离流形的点拉回。通过选择噪声类型(如高斯噪声、随机旋转),可以控制希望表示具有哪些不变性。

稀疏自编码器

通过在损失函数中添加对表示 (z) 的稀疏性惩罚项(如 L1 范数 (|z|_1)),可以鼓励学习到的表示中大部分元素为零。这符合“每次只有少数因子活跃”的直觉。

收缩自编码器

收缩自编码器在损失函数中添加编码器 Jacobian 矩阵的弗罗贝尼乌斯范数作为惩罚项。这鼓励编码函数是“收缩”的,即对输入的小变化不敏感,从而使得邻近的输入点映射到表示空间中更接近的点。其效果与使用特定噪声的去噪自编码器类似,但无需采样噪声数据。

4. 流形学习

流形假说认为,真实的高维数据实际上位于一个低维流形上。这个低维对应于有意义的解释因子数量。流形学习方法(如等距特征映射、局部线性嵌入)试图发现并学习这个低维流形结构。

在流形上,沿着切向方向移动对应于改变有意义的解释因子(如改变人脸表情),而沿着法向移动则会离开数据流形,产生无意义的数据。

然而,许多经典的流形学习方法是非参数的,它们为训练集学习一个嵌入,但难以泛化到新的数据点,因此不太适合作为通用的表示学习函数。

总结

本节课我们一起学习了表征学习的核心思想:学习数据的中间表示以方便下游任务。我们探讨了理想表示应具备的特性,如平滑性、不变性、解耦性等,并介绍了线性探测这一重要的评估方法。接着,我们回顾了几种经典的表示学习方法:基于深度学习的迁移学习、最大似然估计方法(以PCA和VAE为例),以及各种自编码器(标准、去噪、稀疏、收缩)。最后,我们简要提到了流形学习的理念。其中,自编码器,特别是欠完备和去噪自编码器,是理解表征学习基础的重要范例。从下周开始,我们将深入探讨更具体的现代表示学习主题。

002:视觉自监督学习方法概述

在本节课中,我们将回顾视觉自监督学习的发展历程。我们将从深度学习与表征学习的联系开始,逐步介绍从早期到最新的自监督学习方法,并理解其核心思想、优势与挑战。

上一节我们讨论了深度学习与表征学习的联系,本节中我们来看看视觉自监督学习的具体发展脉络。

深度学习与表征学习的联系

深度学习与表征学习紧密相连。即使在监督学习场景中,模型的某些初始层也会隐式地学习数据的表征,而无需进行显式的特征工程。我们只是将原始数据(如文本或图像)输入模型。

自监督学习概述

自监督学习的概念在20世纪90年代的一篇论文中被首次提出。它是一个比无监督学习更具体的术语。在自监督学习中,我们没有数据标签(即输入X和标签y的配对),但我们会通过一些“技巧”从数据本身创建标签,并使用诸如重构损失或交叉熵等目标函数进行训练。标签本身是从数据中获得的。

发展时间线回顾

2012年,AlexNet论文的发表标志着深度学习和计算机视觉新时代的开始。从2012年到2016年,视觉表征学习主要通过监督学习,特别是监督迁移学习来实现。

以下是关键的发展阶段:

  • 2012-2016:监督迁移学习主导:通常在一个大规模标注数据集(如ImageNet)上进行预训练,然后在同一领域(如自然图像)的小规模目标任务(下游任务)上进行微调。
  • 2016年左右:手工设计前置任务的兴起:研究者开始设计各种手工前置任务。网络通过解决这些任务来学习有用的表征,即使这些任务本身可能没有直接的实用价值。
  • 2020年:转折点:视觉Transformer和对比学习(如SimCLR)的出现带来了重大突破,极大地推动了自监督学习的发展。
  • 2023年及以后:大规模预训练:最新的进展包括使用超大规模数据和模型(如220亿参数的视觉Transformer)进行预训练,并在下游任务上取得了卓越的性能。

前置任务与下游任务

理解自监督学习需要明确两个核心概念:

  • 前置任务:网络在预训练阶段被设计去解决的任务。目标是让网络在解决这个任务的过程中,隐式地学习到对下游任务有用的特征。
  • 下游任务:我们最终希望解决的实际任务(如图像分类、目标检测)。最优的前置任务取决于下游任务的需求。

早期自监督方法示例

以下是2016年左右提出的一些经典前置任务示例:

  • 图像着色:输入一张灰度图像,要求网络输出其彩色版本。这通常使用U-Net类型的编码器-解码器架构。
  • 拼图游戏:将图像分割成多个块并打乱顺序,要求网络预测正确的排列顺序。这可以表述为一个分类问题,旨在鼓励网络学习物体部件和位置信息。
  • 图像修复:随机掩码掉图像的一部分,要求网络重建被掩码的区域。这通常使用U-Net架构和像素级重建损失(如L2损失)。直接使用L2损失可能导致输出模糊,因此有时会结合对抗性损失来使生成内容更逼真。

对抗性损失的公式(针对判别器)如下:
L_adv = E[log D(x)] + E[log(1 - D(G(x)))]
其中,D是判别器,G是生成器(如U-Net),x是真实图像。在训练判别器时,需要对生成器的输出进行梯度截断。

  • 视频帧顺序预测:对于视频数据,一个简单的前置任务是判断采样出的两帧图像是否是连续帧。这可以表述为一个二分类问题,旨在学习与动作识别相关的时序表征。

简单而有效的方法:旋转预测

2018年提出的旋转预测方法非常简单却出奇有效。其做法是:将输入图像旋转0°、90°、180°或270°,然后训练一个网络(如ResNet加一个分类头)来预测所应用的旋转角度。这个四分类任务迫使网络学习物体的高级特征和部件间的相对位置关系。

半监督学习与一致性损失

半监督学习旨在同时利用少量标注数据和大量未标注数据。一种常见的方法是一致性损失。其核心思想是:对同一张未标注图像应用不同的随机数据增强(如裁剪、色彩变换),并强制模型对这两个增强版本产生一致的预测。

其目标函数通常包含两部分:
L_total = L_supervised + λ * L_consistency
其中,L_supervised是在标注数据上的标准交叉熵损失,L_consistency是在未标注数据上衡量两个增强视图预测一致性的损失(如KL散度)。为了防止模型坍缩(例如对所有输入预测相同输出),训练时常对其中一个分支应用梯度截断。

对比学习:一个关键的转折点

以SimCLR为代表的对比学习是2020年后的主流范式。其核心思想是:拉近同一图像不同增强视图的表征(正样本对),同时推远不同图像的表征(负样本对)

对于一个批次内的图像,SimCLR的损失函数(NT-Xent损失)针对一个正样本对(i, j)计算如下:
L_{i,j} = -log [exp(sim(z_i, z_j) / τ) / Σ_{k≠i} exp(sim(z_i, z_k) / τ)]
其中,z_iz_j是同一图像两个增强视图经过编码器和投影头后的特征,sim是余弦相似度,τ是温度超参数,分母求和涵盖了所有负样本(包括另一个视图来自其他图像的情况)。该损失要求大批次训练以提供足够的负样本。

自监督学习的特性与总结

根据大规模实验研究,我们可以总结出视觉自监督学习的几个关键特性:

  1. 表征依赖于下游任务:没有一种前置任务能在所有下游任务上都表现最佳。最优的前置任务高度依赖于最终要解决的具体问题。
  2. 特征可迁移性强:相较于监督迁移学习,在大规模无标注数据上训练的自监督模型学习到的特征通常具有更好的跨领域、跨任务迁移能力。
  3. 架构与性能:自监督方法的性能也与模型架构有关。尽管近期Vision Transformer成为主流,但不同方法在不同架构上的表现并不总是一致。
  4. 缓解过拟合与校准:在一些下游任务上,基于自监督特征训练的线性分类器往往表现出更好的校准性(预测置信度更准确)和更弱的过拟合倾向。

本节课中我们一起学习了视觉自监督学习的发展脉络。我们从其与深度学习的联系出发,回顾了从早期手工设计前置任务(如着色、拼图)到简单有效的方法(如旋转预测),再到现代主流范式(如对比学习)的演进过程。我们明确了前置任务与下游任务的区别,并理解了自监督学习在获得可迁移、泛化能力强的特征方面的潜力和当前面临的挑战。

003:BERT - 自然语言表示学习 🧠

在本节课中,我们将要学习自然语言处理中的核心模型——BERT。我们将从如何处理文本数据的基础知识开始,逐步深入到Transformer架构,并最终理解BERT如何通过特定的预训练任务来学习强大的文本表示。


自然语言处理基础

上一节我们介绍了课程的整体框架,本节中我们来看看如何处理文本数据。文本数据与图像数据有本质区别。

  • 维度与结构:图像是二维(或三维,包含通道)的网格数据,可以调整大小。文本是一维的序列数据,长度可变,无法直接调整。
  • 数据性质:图像像素值是连续的数值。文本由离散的符号(单词或字符)组成。
  • 数据增强:对图像可以进行旋转、缩放、裁剪等变换。对文本进行类似的语义保持变换非常困难。
  • 下游任务:图像的典型任务包括分类、分割。文本的典型任务则更多样,例如:
    • 翻译(序列到序列)
    • 情感分析(分类)
    • 文本摘要(序列到序列)
    • 命名实体识别(序列标注)

此外,文本常与其他模态(如图像、语音、视频)结合,构成多模态学习的基础。


从文本到数字:分词

在深入模型之前,我们需要将文本转化为神经网络可以处理的数值形式。这个过程称为分词。

分词器将句子拆分为更小的单元(词元)。常见词汇通常作为一个词元,不常见的词汇则被拆分为子词。例如,句子 “Does ChatGPT understand language?” 可能被分词为:[‘Does’, ‘Chat’, ‘##G’, ‘##PT’, ‘understand’, ‘language’, ‘?’]。其中 ## 表示这是一个子词。

然后,每个唯一的词元被分配一个ID(例如0到30,000之间的整数)。这样,任何文本都可以被转化为一个整数序列。WordPiece是BERT使用的分词算法之一,它通过在大规模语料库上统计来优化词表,以实现高效的压缩。


文本的表示学习目标

我们已经了解了如何将文本转化为序列,现在来定义表示学习模型的目标。

对于图像,输入是固定尺寸的张量(例如 3 x H x W),输出通常是一个固定长度的向量。对于文本,输入是可变长度的向量序列。那么,输出应该是什么形式?

一个单一的向量来表示整个文本通常不够好,原因有二:

  1. 信息密度不均:文本不同部分的信息重要性差异很大。
  2. 任务需求:许多任务(如命名实体识别)需要在词元级别进行预测。

因此,理想的文本表示模型应该为输入序列中的每个词元都输出一个对应的表示向量。同时,我们通常还需要一个特殊的汇总向量(例如序列开头的 [CLS] 词元表示)来服务于句子级别的分类任务。


处理序列的神经网络架构

上一节我们明确了模型的输入输出,本节中我们来看看有哪些神经网络架构可以处理可变长度的序列输入。

循环神经网络(RNN) 按顺序处理词元,并将隐藏状态传递给下一步。但它存在两个主要问题:

  1. 长程依赖:相距较远的词元间信息难以传递。
  2. 梯度消失/爆炸:在长序列上训练时,梯度可能变得极小或极大。

一维卷积网络(CNN) 使用固定大小的窗口在序列上滑动。它同样难以捕获长距离的依赖关系。

解决这些问题的关键在于让模型能够学习词元之间的关联,这正是注意力机制的核心思想。


注意力机制与Transformer

注意力机制允许序列中的每个位置直接关注到序列中的所有其他位置,从而有效建模长程依赖。

其核心计算如下:对于每个输入向量 x_i,我们通过线性变换得到查询向量 q_i、键向量 k_i 和值向量 v_i

q_i = W_q * x_i
k_j = W_k * x_j
v_j = W_v * x_j

然后,计算位置 i 对位置 j 的注意力分数,通常使用点积并缩放:

score_{ij} = (q_i · k_j^T) / sqrt(d_k)

接着,对所有 j 的分数应用softmax函数,得到注意力权重 α_{ij}。位置 i 的输出 z_i 就是所有值向量的加权和:

z_i = Σ_j (α_{ij} * v_j)

为了增加模型的表达能力,我们使用多头注意力:并行运行多组独立的注意力机制,然后将它们的输出拼接起来,再通过一个线性层进行融合。

一个完整的 Transformer块 通常包含:多头注意力层、残差连接、层归一化、前馈神经网络。通过堆叠多个这样的块,就构成了Transformer编码器。


BERT的预训练任务

Transformer本身是双向的,但最初的GPT模型采用自回归(从左到右预测下一个词)的方式训练,这限制了其上下文理解能力。BERT为了学习双向的深度表示,设计了两个巧妙的预训练任务。

任务一:掩码语言模型(MLM)

这个任务类似于完形填空。我们随机掩盖输入序列中15%的词元,然后用一个特殊的 [MASK] 标记替换它们。模型的目标是根据上下文预测被掩盖的原始词元。

以下是具体的操作流程:

  1. 随机选择15%的词元用于预测。
  2. 对于这些被选中的词元:
    • 80%的概率替换为 [MASK]
    • 10%的概率替换为一个随机词元。
    • 10%的概率保持不变。
  3. 模型最终只对被选中的词元位置进行预测(使用该位置的输出向量接一个分类层)。

这样设计是为了缓解预训练(总是看到[MASK])与微调(从不看到[MASK])之间的不一致性,并防止模型简单地学习预测高频词。

任务二:下一句预测(NSP)

这个任务旨在让模型理解句子间的关系。我们输入两个句子A和B,模型需要判断B是否是A的下一句。

在实现上,我们在输入序列前添加 [CLS] 标记,在两句之间和结尾添加 [SEP] 标记。模型利用 [CLS] 标记的最终输出向量进行二分类(是/否)。此外,我们还引入了段落嵌入,为第一个句子和第二个句子的所有词元分别学习一个额外的嵌入向量,以帮助模型区分它们。


BERT的输入表示

现在,我们将所有部分组合起来,看看BERT的完整输入是如何构建的。每个输入词元由三种嵌入相加而成:

  1. 词元嵌入:将词元ID映射为稠密向量。这比独热编码更高效,并且能学习到词义之间的相似性。
  2. 位置嵌入:为每个位置(0, 1, 2...)学习一个向量。因为Transformer本身没有顺序概念,这为模型提供了序列顺序信息。原始BERT使用可学习的位置嵌入,长度有限(如512)。
  3. 段落嵌入:用于区分两个句子,属于第一句的词元加一个向量,属于第二句的词元加另一个向量。

为什么是相加而不是拼接?
在高维空间中,随机向量几乎总是正交的,相加导致信息混淆的风险很低。拼接会使向量维度翻倍,降低计算效率。更重要的是,相加允许模型在学习过程中建立词义、位置和段落信息之间的交互。

相加后的结果通常会经过一层归一化,然后送入Transformer编码器。


BERT模型总结与应用

将上述所有组件——Transformer编码器、MLM和NSP预训练任务、以及特殊的输入表示——组合起来,就得到了 BERT(来自Transformer的双向编码器表示)。

BERT-base模型有12层Transformer块,隐藏层维度768,12个注意力头,参数量约1.1亿。它在庞大的文本语料(如BooksCorpus和英文维基百科)上进行预训练。

如何使用BERT?

  1. 特征提取:将文本输入预训练的BERT,直接使用其输出的词元向量或 [CLS] 向量作为特征,在其上训练一个简单的分类器(线性探测)。
  2. 微调:在特定下游任务的数据集上,以较小的学习率继续训练整个BERT模型以及添加的任务特定层。这通常能获得更好的性能,但需要更多计算资源。

BERT在GLUE等多个自然语言理解基准测试上取得了突破性进展,显著超越了之前的模型。此后,出现了许多变体,如:

  • RoBERTa:移除了NSP任务,使用更大批次、更长时间、更多数据训练,效果更好。
  • ALBERT, DistilBERT:通过参数共享、知识蒸馏等技术,在保持不错性能的同时大幅减小了模型尺寸和提升了速度。

BERT的思想不仅限于自然语言,也被成功应用于DNA/RNA序列等其它序列数据的学习。


本节课中我们一起学习了BERT的核心思想。我们从文本处理的基础开始,探讨了Transformer的注意力机制,详细分析了BERT通过掩码语言模型和下一句预测任务进行双向预训练的原理,最后了解了其输入表示和实际应用方式。BERT证明了通过大规模无监督预训练学习通用文本表示的巨大潜力,为后续的自然语言处理研究奠定了重要基础。

004:对比学习与基于互信息的证明 🔍

在本节课中,我们将学习对比学习的核心思想,特别是SimCLR框架。我们将从直观的表示不变性目标出发,探讨其潜在的问题,并引入互信息作为更严谨的理论基础。我们将推导用于估计互信息的变分下界,并最终将其与实践中使用的对比损失函数联系起来。


从直观目标到互信息最大化

上一节我们介绍了表征学习的基本目标。本节中我们来看看如何形式化地定义“好的表示”。

我们希望学习到的表示对于图像的某些变换(如裁剪、模糊)具有不变性。给定一张图像 (X),我们对其应用两种随机变换,得到 (X_1) 和 (X_2)。一个理想的表示函数 (f) 应满足:
[
f(X_1) \approx f(X_2)
]
一个直接的想法是最大化两个变换后表示的相似度:
[
\max_f \mathbb{E}_{X_1, X_2} [\text{sim}(f(X_1), f(X_2))]
]
其中 (\text{sim}) 可以是余弦相似度等度量。

然而,仅此目标会导致一个平凡的崩溃解:将所有输入映射到同一个常数向量,相似度自然最高,但我们丢失了所有信息。因此,我们需要在保持不变性的同时,确保区分性

对比学习的核心思想应运而生:我们不仅要拉近来自同一图像的不同变换的表示(正样本对),还要推远来自不同图像的表示的相似度(负样本对)。一个初步的损失函数构想如下:
[
\mathcal{L} = -\text{sim}(f(X_1), f(X_2)) + \frac{1}{K} \sum_{i=1}^{K} \text{sim}(f(X_1), f(Y_i))
]
其中 (Y_i) 来自其他图像。我们最小化此损失。

为了更严谨地推导出最终的损失函数,我们需要借助信息论中的互信息概念。互信息衡量两个随机变量之间的依赖程度。我们的目标是最大化原始图像 (X) 与其表示 (f(X)) 之间的互信息 (I(X; f(X))),同时要求表示对变换具有不变性。这等价于最大化来自同一图像的两个变换视图的表示之间的互信息 (I(f(X_1); f(X_2)))。

互信息的定义如下,对于随机变量 (X) 和 (Y):
[
I(X; Y) = \int p(x, y) \log \frac{p(x, y)}{p(x)p(y)} dx dy = D_{KL}(p(x, y) \ || \ p(x)p(y))
]
其性质包括:(I(X; Y) \geq 0),且当且仅当 (X) 与 (Y) 独立时等于 0。

直接计算和最大化互信息通常是不可行的,因为我们需要知道数据的真实分布 (p(x, y))。因此,我们需要找到互信息的一个可计算的下界,并对其进行优化。


推导互信息的变分下界

上一节我们明确了目标是最大化互信息。本节中我们来看看如何通过变分方法构造一个可优化的下界。

我们首先介绍变分下界。对于互信息 (I(X; Y)),我们可以引入一个变分分布 (q(x|y)) 来近似真实的后验分布 (p(x|y))。通过数学推导(具体步骤涉及琴生不等式和KL散度的性质),我们可以得到:
[
I(X; Y) \geq \mathbb{E}_{p(x, y)}[\log q(x|y)] + H(X)
]
其中 (H(X)) 是 (X) 的微分熵,与变分分布 (q) 无关。这个不等式对于任意的 (q(x|y)) 都成立,并且当 (q(x|y) = p(x|y)) 时取等号。这被称为 BA(Barber-Agakov)下界

然而,这个下界仍然包含难以处理的项。为了便于优化,我们进一步参数化变分分布。我们定义一个“批评函数” (F(x, y)),并构造如下形式的分布:
[
q(x|y) = \frac{p(x) e^{F(x, y)}}{Z(y)}, \quad \text{其中 } Z(y) = \mathbb{E}{p(x)}[e^{F(x, y)}]
]
将其代入BA下界,经过推导和简化(利用 (H(X) = -\mathbb{E}
[\log p(x)])),我们可以得到 非归一化BA下界
[
I(X; Y) \geq \mathbb{E}{p(x, y)}[F(x, y)] - \mathbb{E}[\log Z(y)]
]
这个下界的关键优势在于,它不再需要显式地建模一个归一化的概率分布 (q(x|y)),而是直接优化一个标量函数 (F(x, y))。


从NWJ估计到噪声对比估计(NCE)

上一节我们得到了非归一化BA下界。本节中我们来看看如何通过进一步的近似和转换,得到实践中常用的损失函数。

非归一化BA下界中的 (\log Z(y) = \log \mathbb{E}{p(x)}[e^{F(x, y)}]) 项,其蒙特卡洛估计的方差可能很高。为了获得更稳定的估计,我们使用不等式 (\log(a) \leq a - 1) 对其进行放缩。将其应用于 (\log Z(y)),我们可以推导出 NWJ(Nguyen-Wainwright-Jordan)下界
[
I(X; Y) \geq 1 + \mathbb{E}
[F(x, y)] - \mathbb{E}_{p(x)p(y)}[e^{F(x, y)}]
]
这个下界可以通过从联合分布 (p(x, y)) 和乘积分布 (p(x)p(y)) 中分别采样来估计。最优的批评函数 (F^(x, y)) 满足 (e{F(x, y)} = \frac{p(x|y)}{p(x)})。

然而,NWJ估计量在实践中方差仍然较大。为了降低方差,我们引入多个负样本。具体地,我们采样 (K) 个独立的负样本 (x_2, ..., x_K \sim p(x)),它们与 (y) 独立。同时,我们限制批评函数具有一种特殊的对称形式:
[
F(x_1, ..., x_K, y) = 1 + \log \frac{e^{f(x_1, y)}}{\hat{Z}}, \quad \hat{Z} = \frac{1}{K} \sum_{i=1}^{K} e^{f(x_i, y)}
]
其中 (f) 是一个双变量函数。将这个形式代入NWJ下界并进行推导,我们最终得到 噪声对比估计(NCE) 损失:
[
I(X; Y) \gtrsim \mathbb{E} \left[ \frac{1}{K} \sum_{i=1}^{K} \log \frac{e^{f(x_i, y_i)}}{\frac{1}{K} \sum_{j=1}^{K} e^{f(x_i, y_j)}} \right]
]
在这个期望中,((x_i, y_i)) 是来自联合分布 (p(x, y)) 的正样本对(即相关的),而 ((x_i, y_j)_{j \neq i}) 构成了负样本对(即从边际分布乘积中采样的,不相关的)。当批量大小 (K) 趋向无穷大时,这个估计量会变得无偏。

这个形式正是许多对比学习损失函数的核心。它直观地要求正样本对的相似度 (f(x_i, y_i)) 远高于它与同一批次内所有其他样本(负样本)的相似度 (f(x_i, y_j))。


SimCLR:实践中的对比学习框架

上一节我们从理论推导出了NCE损失。本节中我们来看看如何将其具体应用于图像表示学习,即SimCLR框架。

SimCLR的流程非常清晰:

  1. 数据增强:对每张输入图像 (x),应用两种随机变换(如裁剪、颜色扰动、模糊等),得到两个增强视图 (x_i) 和 (x_j)。
  2. 编码:通过一个编码器网络 (f(\cdot))(如ResNet)提取表示向量 (h_i = f(x_i), h_j = f(x_j))。这是我们最终想要获得的表示。
  3. 投影:将表示向量通过一个小的投影头网络 (g(\cdot))(通常是一个或多个全连接层),映射到另一个空间得到 (z_i = g(h_i), z_j = g(h_j))。这个投影头仅在训练时使用,为了提供一个更丰富的空间来计算相似度,下游任务只使用 (h)。
  4. 对比损失:对于一个批次内的所有样本对,计算损失。对于正样本对 ((z_i, z_j)),其损失为:
    [
    \ell_{i,j} = -\log \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)}
    ]
    其中 (\text{sim}(u, v) = u^T v / |u||v|) 是余弦相似度,(\tau) 是一个温度超参数,(N) 是原始批量大小(因此总共有 (2N) 个增强样本)。最终损失是所有正样本对的平均。

SimCLR的成功依赖于几个关键设计:

  • 强大的数据增强组合:特别是随机裁剪颜色扰动的组合至关重要。颜色扰动能防止模型走捷径,仅依赖颜色直方图等简单特征来判断两个视图是否来自同一图像。
  • 大的批量大小:为了获得足够多的负样本以降低NCE估计的偏差,需要很大的批量大小(如4096)。
  • 非线性投影头:在编码器后使用一个带有非线性激活函数的投影头(如MLP),能显著提升学到的表示质量,因为它为批评函数 (f(x, y)) 提供了更强的表达能力。

总结

本节课中我们一起学习了对比学习的理论基础和实践框架。

  1. 我们从学习不变且具有区分性的表示这一直观目标出发。
  2. 引入了互信息最大化作为更严谨的优化目标。
  3. 通过变分方法推导了互信息的BA下界NWJ下界,最终得到了实用的噪声对比估计(NCE) 损失。
  4. 将NCE损失具体化为 SimCLR 框架,并分析了其成功的关键因素:强大的数据增强大的批量大小非线性投影头

对比学习通过无需人工标注的方式,最大化数据本身不同视图间的一致性,成为了自监督表征学习中的一个强大范式。理解其背后的互信息原理,有助于我们更好地设计模型和损失函数。

005:理解对比学习、MoCo与图像聚类(第1-3部分)

在本节课中,我们将要学习对比学习的核心机制,特别是MoCo(动量对比)方法的工作原理。我们将从对比学习的目标函数出发,探讨其与分类问题的联系,理解归一化与温度参数的作用,并最终分析MoCo如何通过引入动态队列和动量编码器来解决大批量训练的需求。

对比学习目标回顾

上一节我们介绍了对比学习的下界证明及其实现。本节中,我们将更深入地观察在这个预训练任务中实际发生了什么。

对于两个视图和一个包含N张图像的批次,我们有一个相似度矩阵。我们希望该矩阵中的某些元素(即正样本对)具有高相似度。在这个设置中,我们通过以下方式获取正样本对:取一张图像,对其应用相同的随机变换流程,得到两种不同的增强视图。最重要的变换是随机裁剪后调整大小(出于实际原因),以及颜色抖动(即扭曲像素的统计均值),以防止模型通过简单地匹配颜色直方图来进行“捷径学习”。

对比学习作为分类问题

如果你阅读相关论文,会发现它们通常将对比学习目标表述为一个分类问题。在监督学习设置中,我们有一个网络,它输出未归一化的 logits(记作 z),其维度对应于不同的类别数量。在应用 softmax 函数后,这些 logits 被转换为一个概率分布。Softmax 的作用是强化较大的 logits 值,从而增加其对应的概率。

在对比学习设置中,我们需要确定分类的类别数量。以一个4x4的相似度矩阵为例,如果我们排除对角线元素,那么每一行中,我们有一个正样本对和多个负样本对。因此,分类的类别数量是 2N - 1(其中N是批次大小)。这里的 logits 就是样本对之间的相似度得分。我们希望通过 softmax 使得正样本对的相似度概率接近1。

以下是该分类问题的简化表示:

# 假设 sim_matrix 是相似度矩阵,形状为 [batch_size, batch_size]
# 对于第 i 个样本,其正样本是 j
logits = sim_matrix[i] # 形状: [batch_size]
# 目标标签是正样本 j 的位置
loss = cross_entropy_with_softmax(logits, target=j)

这个损失函数促使正样本对的相似度远高于负样本对。

归一化与温度参数的重要性

在对比学习中,我们如何衡量两个向量之间的相似度?通常使用点积。但这里存在一个问题:如果不对向量进行归一化,点积的值可能会变得非常大,其方差与向量维度 D 成正比。这会导致 softmax 函数过度关注那些具有极大点积值的样本对,而忽略了角度相似性本身。

因此,我们采用 L2 归一化,将所有特征向量投影到一个单位超球面上。这样,向量只能通过改变方向(即夹角)来靠近,其模长被固定为1。点积此时就等于余弦相似度:sim(u, v) = u · v / (||u|| ||v||) = cos(θ)

此外,我们还在 softmax 函数中引入了一个温度参数 τsoftmax(sim / τ)。温度参数控制着概率分布的尖锐程度。较小的 τ(如0.1)会使分布更加“尖锐”,即模型对正样本的预测置信度更高;较大的 τ 则使分布更平滑。在实践中,τ 通常设置为0.1左右。

对比学习的效果分析

那么,训练后究竟发生了什么?来自MIT团队的研究通过实验和理论分析表明:

  1. 特征在超球面上近似均匀分布
  2. 来自同一图像的不同增强视图(正样本对)的特征会被拉得很近。

他们定义了两种度量:

  • 对齐损失:衡量正样本对之间的距离,希望其越小越好。
  • 均匀性损失:衡量所有特征向量在超球面上分布的均匀程度。

理想情况下,一个好的表征应该同时具有低的对齐损失和低的均匀性损失,这意味着正样本对紧密聚集,而不同样本的表征则均匀地分散在球面上,便于后续的线性分类。

MoCo:解耦批次大小与负样本数量

在之前的讨论中,负样本的数量受限于批次大小(约为 2N-2)。为了获得更好的性能,我们需要大量的负样本,但这需要极大的批次大小,对计算资源要求很高。

MoCo 的核心思想是解耦批次大小与负样本数量。它通过维护一个动态队列(Memory Bank) 来实现:

  • 队列长度 K 远大于批次大小(例如 K=65536,批次大小为256)。
  • 队列中存储的是过去批次中样本的特征向量(称为“键”)。
  • 当前批次的样本特征作为“查询”,与队列中的所有“键”计算对比损失。
  • 队列遵循先进先出原则,当前批次的新特征被入队,最老的特征被挤出。

然而,直接使用当前编码器的输出更新队列会导致训练不稳定,因为编码器参数更新太快。为此,MoCo 引入了动量编码器(或称教师网络)。

以下是其关键机制:

  • 学生网络(编码器):使用梯度下降正常更新。
  • 教师网络(动量编码器):其参数是学生网络参数的指数移动平均(EMA)。更新公式为:θ_teacher = m * θ_teacher + (1 - m) * θ_student,其中 m 通常取0.99或更高。
  • 队列中的“键”由教师网络生成,这使得队列中的特征表示更加一致和稳定。

MoCo 的对比损失可以写为:

# 查询特征: q (形状: [batch_size, feature_dim])
# 队列中的键特征: queue (形状: [K, feature_dim])
# 计算相似度矩阵
logits = torch.matmul(q, queue.T) # 形状: [batch_size, K]
# 应用温度参数并计算对比损失
loss = ContrastiveLoss(logits / temperature)

通过这种方式,MoCo 能够利用海量的负样本(队列大小K)进行对比学习,同时保持相对较小的批次大小,极大地提升了训练效率和最终表征的质量。

工程细节:同步批归一化

在大规模分布式训练中,可能会遇到一个工程上的问题:模型可能利用单个GPU本地批次内的统计信息进行“捷径学习”。为了解决这个问题,需要使用同步批归一化。它会在所有GPU间同步计算批归一化所需的均值和方差,确保归一化统计量基于全局批次,从而避免模型从局部信息中泄露信号。

总结

本节课我们一起学习了对比学习从理论到实践的关键步骤。我们首先回顾了对比学习目标,并将其理解为一个特殊的分类问题。接着,我们探讨了特征归一化和温度参数对于稳定训练和提升性能的核心作用。然后,我们分析了对比学习期望达到的效果——在超球面上实现特征的对齐与均匀分布。最后,我们深入讲解了MoCo方法,它通过动态队列和动量编码器,巧妙地解耦了负样本数量与批次大小,使得能够利用海量负样本进行高效训练,并成为对比学习领域的里程碑工作。理解这些概念为后续学习更复杂的自监督学习方法奠定了坚实基础。

006:理解对比学习、MoCo与图像聚类(第2-3部分)📚

在本节课中,我们将深入探讨对比学习中的一些关键实现细节与扩展概念。我们将学习批归一化在对比学习中的作用、处理小批量数据的方法、损失函数的对称化,以及对比学习如何扩展到多模态数据。

批归一化与信息泄露 🔍

上一节我们介绍了对比学习的基本框架,本节中我们来看看一个关键的实现细节:批归一化。

在卷积网络中,每个通道的输出会进行标准的逐通道均值和标准差计算。公式如下:

output = (input - mean) / std

其中均值和标准差是可训练的参数,但为了分析,我们暂时忽略它们。这些统计量通常从小批量数据中计算。在分布式数据并行训练中,你有两种选择:

  • 在本地聚合统计量(例如,每个GPU基于自己的128个样本计算)。
  • 在不同GPU间同步统计量,从而基于更多样本(如256个)获得对均值和标准差更好的估计。

MoCo论文中使用了同步版本的批归一化。这里他们用了另一个技巧:他们取动量编码器(教师网络)的输出,并对其应用停止梯度操作。另一种方式是使用标签平滑,但这与本文方法并非直接相关。只有处理好这些微小细节,你才能看到这些方法的有效性。因此,这些细节并非完全独立。

关于层归一化的说明:对于了解序列模型和Transformer中层归一化的同学,请注意视觉与自然语言处理中的层归一化有所不同。

  • 在视觉的卷积网络中,进行层归一化时,我们在不同的通道和空间维度上计算平均值,而不是在批次维度上。
  • 在Transformer中,我们只在最后一个维度(模型维度 d_model)上计算统计量,不会在不同词元或序列元素之间平均统计量。

处理小批量与内存库策略 💾

我们找到了一种方法,用于在计算资源有限或数据量非常大的情况下处理小批量问题。

例如,在Jülich研究中心,他们处理巨大的脑部扫描数据。专家发现,为了学习两个脑部扫描切片之间有意义的特征,他们需要裁剪出大量切片。他们无法使用128个裁剪块并最大化其相似性,而需要将批量大小提升到约2000。因此,可能存在许多用例,你或者没有足够资源,或者你想要进行表征学习的数据量太大。

那么,如果我们只追求最优性能,这种策略是否必要?答案是否定的。大约一年半后,研究者们引入了两个技巧(实际上是三个,但他们放弃了队列)。为了在标准视觉基准上获得尽可能高的性能,他们放弃了MoCo中的队列。由于没有计算限制,他们可以用128个GPU和4096的批量大小进行训练。

损失函数的对称化 ⚖️

另一个需要注意的细节是损失函数的对称化。

到目前为止,我们讨论的对比学习框架中有一个编码器。但在接下来的课程中,我们会经常看到两种不同的架构:学生网络和教师网络,它们通过指数移动平均更新,因此不是相同的网络。在SimCLR的目标函数中,对称化没有意义,但如果这两个模型不同,我们就可以进行对称化操作。

具体做法是:我们生成数据增强视图,将数据加载到GPU。除了将视图1输入学生网络、视图2输入教师网络并计算损失外,我们还可以交换这两个视图,将视图2输入学生网络、视图1输入教师网络,再计算相同的损失。这就是我们所说的对称化。然后我们可以对这两个损失取平均值。这在论文中对应 simclrCTR(代表交叉熵)损失计算行。

对比学习的多模态扩展 🌐

现在,我们非常简要地说明,对比学习并不局限于RGB图像。

这里有一篇来自MIT研究者的论文。他们不是使用同一图像的不同增强视图,而是采用一个场景的多个传感器数据(如深度传感器或不同传感器的不同视图),并最大化它们之间的互信息,同时将其他场景的视图视为负样本。由于他们以此方式创建预训练任务,这将产生对视角变化不变的表示。

如果你拥有的不是两个视图,而是一组M个视图,那么会有多少对正样本呢?对于一个4x4的网格(共16个元素),你基本上有下三角或上三角部分的所有配对,数量是 M*(M-1)/2。所以当你有M个视图时,就有 M*(M-1)/2 个配对,所有这些配对都被视为正样本。

他们采取了两种不同的方法:

  1. 以RGB图像作为参考点,并计算RGB与所有其他视图之间的对比损失。
  2. 将这个问题表示为图,希望学习所有配对之间的连接关系。在这种情况下,他们利用所有可能的正样本连接进行对比学习。

在视觉中处理这类问题时,下游任务通常是分割。在他们的实验研究中,他们只改变编码器的权重(使用解码器在下游任务上训练),比较了从随机初始化编码器、使用RGB作为参考的编码器、使用所有可能视图的编码器进行微调的效果。最后一种情况是编码器和解码器都改变的随机初始化微调。

这是一种我们将在大约三周后涵盖的方法的扩展:从对比学习扩展到多模态学习。在这种情况下,我们最大化图像和文本之间的相似性。

课程总结 📝

本节课中我们一起学习了:

  • 批归一化的重要性:了解了为什么需要它,以及它如何可能导致信息泄露。
  • 对比损失的影响:理解了特征如何在超球面上均匀分布的本质。
  • 内存库策略:学习了即使在没有足够计算资源,或问题要求必须使用小批量时,如何解决问题(尽管在单纯追求性能时并非最优,但现实需求通常更复杂)。
  • 工程细节的影响:认识到类似于批归一化导致信息泄露的工程问题,我们应该尽可能清楚正在发生什么。
  • 对比学习的广度:明白了对比学习不限于RGB图像或单一模态。我们将在接下来的课程中涵盖最后一种称为CLIP的方法。

(休息10分钟后,我们将切换到讨论EMMa课程的相关内容。)

007:理解对比学习、MoCo与图像聚类

在本节课中,我们将要学习图像聚类这一无监督任务,并探讨如何利用对比学习(如MoCo)获得的表征来提升聚类性能。我们将分析聚类任务中的核心挑战,并介绍两种先进的深度聚类方法:SCAN和一种基于师生框架的改进方法。

概述

上一节我们讨论了对比学习中可能出现的表征崩溃问题。本节中,我们将看看如何利用学习到的表征来解决一个经典的无监督任务——图像聚类。我们将从定义和挑战开始,逐步深入到具体的算法。

图像聚类的定义与挑战

图像聚类任务是指:给定一组图像数据集,我们预先知道其中包含K个不同的类别,但不知道每张图像具体属于哪个类别。目标是将图像自动划分到这K个簇中。

这是一个极具挑战性的任务。一个典型问题是模型可能将所有图像都预测到同一个类别(即“崩溃”),或者将预测概率均匀地分散到所有类别上,而无法形成有意义的簇结构。

深度图像聚类的简单基线

在深度图像聚类中,我们通常分两步走:

  1. 使用深度学习模型从图像中学习特征表示
  2. 在这些学习到的特征上应用聚类算法,预测类别分配

一个最直接的基线方法是:首先使用对比学习(如MoCo、SimCLR)在无标签数据上预训练一个编码器,然后在其输出的特征上直接应用K-Means算法。

代码示例:K-Means基线

# 伪代码示意
pretrained_encoder = load_moco_model() # 加载预训练模型
features = pretrained_encoder(images) # 提取图像特征
cluster_assignments = KMeans(n_clusters=K).fit_predict(features) # 应用K-Means

研究表明,这种“预训练+K-Means”的两步法,其性能可以超越许多试图端到端联合学习特征和聚类的复杂方法。然而,K-Means本身存在局限性,例如它倾向于产生类别不平衡的簇,这与我们通常假设数据类别均匀分布的期望不符。

SCAN:一种改进的深度聚类方法

为了改进简单的K-Means基线,研究人员提出了SCAN方法。其核心思想是:在特征空间中,相邻的样本很可能共享同一标签。SCAN利用这一特性,通过拉近特征空间中最近邻样本的表示来学习聚类分配。

以下是SCAN方法的核心组件介绍:

SCAN的损失函数由两部分组成:

  • 最近邻聚类损失:促使样本与其在特征空间中的最近邻拥有相似的预测分布。公式为:
    L_nn = - (1/|N|) * Σ log(exp(z_i · z_j / τ) / Σ exp(z_i · z_k / τ))
    其中z_iz_j是样本i及其最近邻j的特征,N是最近邻集合。
  • 熵正则化项:用于防止所有样本崩溃到单个簇。它鼓励模型对每个簇的预测概率分布尽可能均匀。公式为:
    L_entropy = - Σ p_avg(c) * log(p_avg(c))
    其中p_avg(c)是批次中所有样本被预测为类别c的平均概率。

总损失是这两项的加权和:L_total = L_nn + λ * L_entropy。超参数λ用于平衡两项,但其最优值难以确定。

基于师生框架的改进方法

为了克服SCAN中超参数敏感等问题,后续研究提出了一种基于师生框架的改进方法。

该方法同样利用特征空间中的最近邻关系,但构建了一个更稳定的学习目标:

  1. 教师网络:其参数是学生网络参数的指数移动平均(EMA)。它为目标样本生成“软”标签(概率分布)。
  2. 学生网络:学习去预测其最近邻样本的教师网络输出。

其损失函数设计如下:
L = - log( exp(z_i_s · z_j_t / τ) / (exp(z_i_s · z_j_t / τ) + Q^β) )
其中:

  • z_i_s 是学生网络对样本i的特征。
  • z_j_t 是教师网络对样本i的最近邻j的特征。
  • Q 是教师网络历史预测分布的指数移动平均,用于防止崩溃。
  • β 是一个超参数,用于调节防崩溃项的权重。

这种方法通过对称化和利用教师网络的稳定输出,减少了对平衡超参数的依赖,在实践中取得了更好的性能。

聚类评估方法

由于聚类是无监督的,而评估需要标签,因此我们需要一个映射步骤。我们使用匈牙利算法(或称线性分配算法)在预测的簇标签和真实标签之间找到最优的一一映射。基于此映射,我们才能计算聚类准确率等指标。

总结

本节课中我们一起学习了:

  1. 图像聚类是一个在已知类别数但无具体标签下的无监督任务。
  2. 使用对比学习预训练模型提取特征,再应用K-Means是一个强大且简单的基线方法。
  3. SCAN方法通过拉近特征空间中最近邻的预测来改进聚类,并引入熵正则化来防止崩溃,但其性能受超参数影响较大。
  4. 一种基于师生框架的改进方法利用指数移动平均的教师网络提供稳定目标,并设计了更鲁棒的损失函数,在多个数据集上显著缩小了无监督聚类与有监督学习之间的性能差距。
  5. 聚类结果的评估依赖于匈牙利算法在预测簇与真实类别间建立最优映射。

这些方法展示了如何利用自监督学习获得的高质量表征,来解决更具挑战性的无监督视觉任务。

008:视觉Transformer与知识蒸馏

在本节课中,我们将要学习两个核心主题:视觉Transformer(Vision Transformer)和知识蒸馏(Knowledge Distillation)。我们将首先探讨如何将原本为自然语言处理设计的Transformer架构应用于图像数据,然后学习如何将一个大型、复杂模型的知识“蒸馏”到一个小型、高效的模型中。

视觉Transformer

上一节我们介绍了Transformer的基本概念,本节中我们来看看如何将其应用于视觉领域。视觉Transformer的核心挑战在于,Transformer的输入是一个序列(Sequence),而图像是一个具有高度(H)、宽度(W)和通道数(C)的三维张量。

从图像到序列

Transformer期望的输入是一个序列,其中每个元素是一个向量。对于图像,最简单的想法是将每个像素视为一个独立的token。然而,这会带来巨大的计算量,因为自注意力(Self-Attention)的计算复杂度是序列长度M的平方(O(M²)),对于高分辨率图像来说这是不可行的。

因此,解决方案是考虑不重叠的图像块(Patches)。我们将图像分割成固定大小的块(例如16x16像素),然后将每个块视为一个token。

以下是计算token数量的方法:

  • 图像尺寸:高(H)x 宽(W)x 通道(C)
  • 块尺寸:P x P
  • 序列长度(M):M = (H / P) * (W / P)

每个块包含 P * P * C 个像素值。为了将其转换为一个向量,我们使用一个线性投影层(Linear Projection Layer)。这个操作将每个块的维度从 P² * C 投影到一个固定的模型维度 D_model。

以下是这个过程的描述:

  1. 将图像分割成 N 个不重叠的 P x P 块。
  2. 将每个块展平为一个长度为 P² * C 的向量。
  3. 通过一个可训练的线性层,将所有向量投影到 D_model 维度。

与卷积神经网络的联系

这个“分块+线性投影”的过程是否让你想起了其他模块?实际上,它与卷积层(Convolutional Layer)非常相似。

以下是两者的比较:

  • 视觉Transformer的初始步骤:使用大小为P、步长(stride)为P的卷积核进行卷积操作,输出通道数为 D_model。
  • 传统卷积层:通常使用重叠的、较小的卷积核(如3x3)。

关键区别在于,视觉Transformer在第一个“卷积”层之后,会使用自注意力机制让所有图像块(token)进行全局交互,而CNN则通过堆叠多个局部卷积层来逐步扩大感受野。

视觉Transformer的架构

完成图像到序列的转换后,后续流程就与标准的Transformer编码器一致了。

以下是视觉Transformer的基本架构步骤:

  1. 输入嵌入:将投影后的图像块向量作为token嵌入。
  2. 位置编码:添加可学习的位置嵌入(Positional Embeddings),因为自注意力机制本身不考虑顺序。
  3. Transformer编码器:将嵌入序列输入到由多头自注意力层和前馈网络(MLP)层堆叠而成的编码器中。
  4. 分类头:在序列开头添加一个可学习的[CLS] token,其最终输出状态用于图像分类任务(通过一个MLP头)。

块大小与归纳偏置

块大小(Patch Size)是一个关键的超参数。

以下是块大小的影响:

  • 计算复杂度:序列长度 M 与 (1/P²) 成正比。更小的块意味着更多的token和平方级增长的计算开销。
  • 模型能力:小块能保留更精细的局部信息,有利于需要细粒度理解的任务(如目标检测、语义分割)。大块则计算效率更高,可能更适合图像分类等高层任务。

与卷积神经网络(CNN)相比,视觉Transformer的归纳偏置(Inductive Bias)更弱。

  • CNN的强归纳偏置:局部性(Locality)和平移等变性(Translation Equivariance)。它假设相邻像素关联紧密,并通过权重共享强制学习平移不变的特征。
  • 视觉Transformer的弱归纳偏置:其初始的“分块”操作引入了有限的局部性。但随后的自注意力层允许所有块之间进行全局交互,模型必须从数据中学习所有空间关系,而不是被架构预先约束。然而,其前馈网络(MLP)层是token-wise且权重共享的,这本身也提供了一种平移等变性。

知识蒸馏

上一节我们介绍了视觉Transformer这一强大的模型,本节中我们来看看知识蒸馏技术。在实际部署中,我们常常面临模型大小、速度和精度的权衡。知识蒸馏旨在将一个大型、复杂模型(教师模型)的知识转移到一个小型、高效模型(学生模型)中。

核心思想与应用场景

知识蒸馏的核心思想是让学生模型不仅学习真实的数据标签,还模仿教师模型的行为(如输出概率分布)。

以下是知识蒸馏的几个主要应用场景:

  • 模型压缩:将大型模型的知识蒸馏到小型模型中,以便在资源受限的设备(如手机、嵌入式系统)上部署。
  • 迁移学习:将在源领域(如自然图像)上预训练的模型知识,迁移到目标领域(如医学图像)的学生模型上。
  • 模型集成:将多个模型(集成)的知识蒸馏到单个模型中,在保持性能的同时大幅减少推理时的计算成本和内存占用。

蒸馏方法:软目标与硬目标

如何定义“知识”并让学生模型学习是关键。通常,我们比较教师模型和学生模型的输出。

以下是两种主要的输出目标:

  • 硬目标(Hard Targets):使用真实的one-hot标签(例如,对于类别“猫”,标签是[0, 1, 0, ...])。直接让学生模型拟合硬目标容易导致过拟合。
  • 软目标(Soft Targets):使用教师模型输出的概率分布(例如,[0.05, 0.85, 0.1, ...])。这个分布包含了类别间的相似性信息(例如,“猫”和“狗”可能比“猫”和“汽车”更相似),这种信息被称为“暗知识”(Dark Knowledge),能帮助学生模型更好地泛化。

温度缩放

为了获得更“软”、信息更丰富的概率分布,Hinton等人引入了温度缩放(Temperature Scaling)的概念。

以下是温度缩放的公式:
softmax(z_i) = exp(z_i / T) / Σ_j exp(z_j / T)
其中,z_i 是模型对于类别 i 的logit(未归一化的分数),T 是温度参数。

  • T = 1:标准的softmax函数。
  • T > 1:概率分布变得更加平滑,不同类别之间的差异被缩小,暗知识更突出。
  • T -> 0:概率分布趋近于one-hot形式。

在知识蒸馏中,我们用较高的温度 T 来计算教师模型的软目标,然后用温度 T=1 让学生模型去匹配这个软目标,同时也要匹配真实的硬标签。

损失函数

知识蒸馏的总损失函数通常是两个损失的加权和。

以下是损失函数的构成:

  • 蒸馏损失(Distillation Loss):让学生模型的输出(经温度T缩放后)与教师模型的软目标(经温度T缩放后)之间的KL散度(Kullback-Leibler Divergence)最小化。这让学生模型学习教师模型的暗知识。
  • 学生损失(Student Loss):让学生模型的输出(T=1)与真实硬标签之间的标准交叉熵(Cross-Entropy)最小化。这确保学生模型学习正确的任务。

总损失函数可以表示为:
L_total = α * L_hard + (1 - α) * L_soft
其中,L_hard 是学生损失,L_soft 是蒸馏损失,α 是平衡两者权重的超参数。

总结

本节课中我们一起学习了视觉Transformer和知识蒸馏。

  • 视觉Transformer:通过将图像分割成块并线性投影为序列,成功将Transformer架构应用于计算机视觉任务。它通过全局自注意力机制建模图像块间关系,相比CNN具有更弱的归纳偏置,但展现了强大的性能。
  • 知识蒸馏:是一种有效的模型压缩和知识迁移技术。它通过让学生模型模仿教师模型的“软目标”输出(通常结合温度缩放),来传递比单纯硬标签更丰富的类别间关系信息,从而帮助小模型获得更好的性能。

理解这两项技术,对于掌握现代深度学习模型的设计、优化与部署至关重要。

009:视觉Transformer与知识蒸馏(第二部分)

在本节课中,我们将深入探讨知识蒸馏的核心概念、不同实现方式及其在视觉Transformer中的应用。我们将学习如何通过知识蒸馏提升模型性能,并理解其背后的原理。

概述

上一节我们介绍了知识蒸馏的基本思想。本节中,我们将具体探讨知识蒸馏的实现细节、不同变体以及如何将其与视觉Transformer架构结合。

知识蒸馏的实现与变体

知识蒸馏的核心在于让学生模型学习教师模型输出的“软标签”概率分布,而不仅仅是真实的“硬标签”。

标签平滑与知识蒸馏

以下是标签平滑的一个示例:假设原始标签对某个类别的概率是100%,通过标签平滑,我们可以将其降低到90%,并将剩余的10%均匀分配给其他类别。这是一种在监督学习中有效的正则化技术。

公式: 修改后的标签向量 y_smooth 可以表示为:
y_smooth = (1 - epsilon) * y_onehot + epsilon / K
其中 epsilon 是平滑系数,K 是类别总数。

我们可以发现,这种在所有输出类别间构建的“软分布”,与知识蒸馏中让学生模型匹配教师模型输出的做法有相似之处。

模型集成与知识蒸馏

模型集成(Ensemble)通过结合多个独立训练的模型的预测结果,通常能获得比任何单一模型更好的性能。其工作原理仍然是一个值得研究的问题。

我们使用完全相同的架构训练多个模型(例如10个),然后在预测时结合它们的输出概率分布。

代码示例(概念性):

# 假设有10个模型的预测概率列表 predictions_list
ensemble_prediction = np.mean(predictions_list, axis=0)

在一项实验中,10个独立模型的平均准确率为81.51%,而将它们集成后平均预测的准确率提升到了84.87%。这是一个显著的性能提升。

一个关键问题是:为什么匹配一个集成模型的输出,有时比直接匹配真实数据标签效果更好?实验表明,让学生模型学习集成模型的“软目标”分布,确实能带来更好的泛化能力。

在“集成知识蒸馏”的实验中,训练一个单一模型去匹配集成模型的平均输出,其性能显著优于独立训练的单个模型,虽然略低于集成模型本身。

这引出了一个实践优势:部署时,你只需要部署那个学习了集成模型输出的单一学生模型,而无需维护整个庞大的集成模型,同时还能获得显著的性能提升。

关于集成为何有效的理论解释,一种观点是将其类比于“多视角”学习。就像从不同角度拍摄同一物体(如电脑)会得到不同的图像,不同的模型(如不同的CNN)可能会捕捉到数据中不同的高级特征(例如,一个模型关注车的轮子,另一个关注车灯),但它们都能正确分类。集成结合了这些多样化的“视角”。

自蒸馏与在线蒸馏

下一个问题是:是否总是需要先训练一个大型教师模型,再将其知识蒸馏到小模型?答案是否定的。

“自蒸馏”或“在线蒸馏”方法表明,即使不依赖外部的大型教师模型,也能实现知识蒸馏。例如,“Be Your Own Teacher”这篇论文提出,可以在同一网络的不同深度插入多个分类器,让浅层分类器模仿深层分类器的输出,同时匹配特征和概率分布。这种方法不仅能带来性能增益,还能加速训练。

另一种自蒸馏的形式是我们上节课提到的MoCo方法中的动量编码器,即模型参数的指数移动平均(EMA),也可以被视为一种自蒸馏。

KL散度:知识蒸馏中的损失函数

现在我们来讨论知识蒸馏中常用的损失函数——KL散度。

KL散度用于衡量两个概率分布P和Q之间的差异。我们有意不使用“距离”这个词,因为在数学上,距离通常是对称的,而KL散度是非对称的。

公式: 从分布P到分布Q的KL散度定义为:
KL(P || Q) = Σ_i P(i) * log(P(i) / Q(i))

KL散度可以分解为两项:
KL(P || Q) = H(P, Q) - H(P)
其中 H(P, Q) 是交叉熵,H(P) 是分布P的熵。

为了更直观地理解其非对称性,考虑一个例子:假设真实数据分布P是一个双峰高斯混合分布。如果我们用一个单峰高斯分布Q去近似它,最小化 KL(P || Q) 会使Q试图覆盖P的两个模式(“模式覆盖”);而最小化 KL(Q || P) 则会使Q倾向于聚焦于P的其中一个模式(“模式寻求”)。

在监督学习的知识蒸馏中,P通常是教师模型的输出分布,Q是学生模型的预测分布。当我们对学生模型的参数求梯度时,由于P是固定的(教师模型已训练好),H(P) 项没有梯度,因此优化 KL(P || Q) 等价于优化交叉熵 H(P, Q)

那么,在知识蒸馏中应该使用哪个方向?这取决于目标。有时我们希望学生捕获教师分布的全部信息(模式覆盖),有时可能只希望聚焦于主要模式(模式寻求)。在实践中,对于本课程即将进行的练习,两种方向(KL(教师||学生)KL(学生||教师))的性能差异可能不大,但值得尝试。通常,训练好的教师模型输出分布更“尖锐”(置信度高),而随机初始化的学生模型输出接近均匀分布。如果使用 KL(教师||学生),学生将努力匹配教师的尖锐峰值。

特征空间的知识蒸馏

除了在输出概率空间进行蒸馏,我们还可以在特征空间传递知识。这对于一些没有明确分类头的预训练模型尤其有用。

一种方法是使用对比学习。将学生模型和教师模型对同一图像提取的特征视为一个正样本对,通过对比学习目标拉近它们的距离。

公式(概念性): 对于一个学生特征 f_s 和教师特征 f_t,对比损失鼓励 sim(f_s, f_t) 增大,同时使 sim(f_s, f_neg) 减小,其中 f_neg 是其他图像的特征。

这种方法甚至可以扩展到多个教师模型集成的情况。将每个教师模型的特征视为一个独立的“视角”,学生模型需要与所有这些视角的特征拉近。这可以看作是在特征空间应用了对比学习思想的知识蒸馏。

视觉Transformer与知识蒸馏的结合

最后,我们将知识蒸馏与视觉Transformer架构结合起来。Transformer的灵活性为知识蒸馏带来了新的技巧。

蒸馏令牌

在Vision Transformer中,除了用于分类的[CLS]令牌,我们可以额外添加一个随机初始化的“蒸馏令牌”。这个令牌在Transformer层中与其他所有令牌(图像块令牌和[CLS]令牌)进行交互。训练时,我们让这个蒸馏令牌的输出去匹配另一个预训练教师模型(可以是CNN或其他Transformer)的输出。

实验表明,对于Vision Transformer,直接使用教师模型预测的“硬标签”(即经过argmax的one-hot向量)进行蒸馏,有时效果比使用“软标签”更好。这再次说明没有一成不变的答案。

基于掩码图像建模的蒸馏

当前最先进的方法不仅匹配[CLS]令牌的输出,还匹配所有图像块令牌的特征表示。具体做法是为教师模型和学生模型都添加一个额外的“投影头”,将每个图像块的特征映射到一个共享的高维离散空间(例如,包含数千个类别的词汇表)。然后,学生模型需要预测每个图像块在教师模型词汇表中的类别,即对所有图像块表示进行交叉熵损失计算并求平均。

这种方法被称为“掩码图像建模”思想在蒸馏中的应用(移除了掩码操作)。它能非常高效地将超大模型(如10亿参数)的知识蒸馏到较小模型(3亿参数)中,几乎不损失性能。

Transformer的灵活性在于其工作在令牌序列上,我们可以方便地添加各种特殊令牌(如[CLS]、蒸馏令牌),并利用自注意力机制让它们交互,这为实现更复杂的蒸馏和表示学习技术(如掩码建模)提供了便利。

总结

本节课我们一起学习了知识蒸馏的多种实现方式及其原理。我们了解到:

  1. 模型集成能提升性能,而知识蒸馏可以捕捉这种集成带来的好处。
  2. 自蒸馏允许我们在没有大型外部教师模型的情况下进行知识迁移。
  3. KL散度是衡量概率分布差异的关键工具,其方向性选择取决于具体目标。
  4. 知识蒸馏不仅可以在输出概率空间进行,还可以在特征空间通过对比学习实现。
  5. 视觉Transformer的架构特性,如可添加的蒸馏令牌和图像块级表示,为知识蒸馏提供了新的、更高效的途径,特别是结合掩码图像建模思想后,能实现大规模模型的高效压缩。

通过结合知识蒸馏与先进的架构,我们能够训练出更强大、更高效或具备特定归纳偏好的视觉模型。

010:无负样本的自蒸馏视觉表示学习

概述

在本节课中,我们将回顾已学的自监督学习方法,并探讨如何将它们与知识蒸馏的概念相结合。我们将重点关注一种新的技术方向:无需依赖大批次或显式负样本的自监督视觉表示学习。我们将详细解析BYOL和DINO这两种代表性方法的核心思想与实现机制。

课程回顾与连接

上一节我们深入探讨了SimCLR及其对比损失函数、批次大小与负样本的对应关系。本节中,我们将在此基础上更进一步,看看近年来视觉领域自监督表示学习的最新进展,特别是那些不依赖于大批次和显式负样本的方法。

以下是我们在本课程中已学习过的自监督方法概览:

  • 去噪自编码器:其直觉是编码器与解码器之间的瓶颈表示能学习到数据的压缩版本,可作为下游任务的预训练。但在实践中,模型很难区分数据中的噪声与信号,低层统计信息足以完成图像重建,因此难以学到对下游任务重要且相关的语义特征。
  • 图像修复:这类方法要求模型完成更困难的生成任务,例如预测被遮盖部分的像素值。L2重建损失会产生模糊的预测。虽然可以通过GAN等损失使预测更真实,但无法保证所学特征与下游任务的相关性,且模型需要学习大量对表示学习无用的细节。
  • 旋转预测:该方法通过预测应用于图像的变换来学习。虽然直觉上能学习高级概念,但缺乏理论保证。存在许多反例,例如切片橙子无论怎么旋转,预测旋转角度的任务并不一定能让模型学到关于橙子的知识。
  • 对比学习:我们深入研究了信息论,以及如何通过对比损失最大化两个视图之间的互信息下界。我们创建来自同一图像的不同视图作为正样本对,并在特征空间中将它们拉近。这导致特征空间中图像均匀分布,且同一图像的不同视图特征对齐。其局限性在于对批次大小和负样本的依赖,我们看到了如MoCo中使用动量编码器和动态字典等技术来解决。

知识蒸馏简介

接下来,我们接触了另一个主题:知识蒸馏。这似乎与上一讲的内容完全不同。

知识蒸馏是指我们有一个(或多个)模型,通常是一个大模型或模型集合,我们试图将其知识提炼并转移到另一个(通常更小的)单一模型中。

我们看到了几种不同的知识蒸馏方法:

  • 基于交叉熵/KL散度的方法:这是最通用、简单的方法,利用教师模型的软目标(soft targets)与学生模型的预测计算损失。
  • 对比式知识蒸馏:使用对比学习目标,但不是拉近同一图像的不同视图,而是拉近学生模型与一个或多个教师模型的特征。
  • 特定于视觉Transformer的方法:例如仅使用教师模型输出的argmax(硬目标)进行蒸馏。
  • 掩码图像建模:这与最新的自监督学习相关,我们将在下一讲深入探讨。

连接知识蒸馏与自监督学习

现在,我们尝试将这两个最初看似无关的主题联系起来。

知识蒸馏中:

  • 假设存在一个预训练的教师模型(监督或无监督)。
  • 我们尝试将教师模型的知识传递给学生模型,因此教师模型通常更大。
  • 输入到两个模型的数据是相同的(无论是否使用数据增强)。

自监督学习中(我们即将探讨的新方向):

  • 开始时没有预训练的教师模型。
  • 我们的目标是动态地在训练过程中创建一个教师。
  • 学生和教师模型接收不同的信息(通常教师看到的信息更完整),这为教师提供了优势。
  • 通过一种动态机制,学生和教师模型在训练中共同改进,即使它们架构相同。

构建动态教师:指数移动平均

那么,在没有预训练教师的情况下,我们如何构建一个教师?

答案是使用学生模型参数的指数移动平均作为动态教师。

其更新公式为:
ξ ← τξ + (1−τ)θ
其中,ξ是教师参数,θ是学生参数,τ是一个接近1的超参数(例如0.99)。

这个动态教师不是通过梯度更新的,而是缓慢地跟随学生参数的变化。这为学生提供了一个稳定且略微滞后的监督信号。

BYOL:引导你自己的潜在表示

基于上述思想,我们来看第一个方法:BYOL。

BYOL在SimCLR的基础上进行了几项关键改动,以实现无需负样本的学习:

  1. 引入动量教师:使用上述指数移动平均更新一个教师网络。
  2. 不对称的信息输入:教师网络通常接收信息更完整的视图(例如更少的图像裁剪或颜色抖动)。
  3. 停止梯度:教师网络的参数不通过损失函数的梯度进行更新。
  4. 额外的预测头:在学生网络的特征投影层后,增加了一个额外的MLP(称为预测器)。

BYOL的损失函数是学生预测与教师目标之间的均方误差(在L2归一化后,等价于余弦相似度)。

一个关键发现是,不对称性(预测头和停止梯度)对于防止模型崩溃(即所有输出坍缩为相同表示)至关重要。此外,网络中的批归一化层也隐式地引入了批次信息,有助于防止崩溃。

DINO:无标签的知识蒸馏

接下来,我们看一个在BYOL之后提出的方法:DINO。

DINO进一步调整了BYOL的框架:

  1. 移除预测头:学生网络不再需要额外的预测MLP。
  2. 使用交叉熵损失:不再直接最大化特征相似度,而是将问题转化为一个分类任务。学生和教师网络都输出一个在某种“原型”或“聚类中心”上的概率分布(通过softmax实现)。学生模型的目标是使其输出分布与教师模型的输出分布相匹配(使用交叉熵损失)。

这种转变非常巧妙。教师模型的输出分布可以被视为为图像分配了软聚类标签。学生模型则学习预测相同的聚类分配。这本质上是一种自蒸馏过程,教师模型通过指数移动平均保持稳定,并为学生提供训练目标。

总结

本节课中,我们一起学习了如何将知识蒸馏的思想融入自监督学习,从而发展出不依赖于显式负样本和大批次的新方法。

我们首先回顾了知识蒸馏与自监督学习的联系,并介绍了构建动态教师的核心技术——指数移动平均。接着,我们深入分析了两个代表性工作:BYOL和DINO。BYOL通过引入动量教师、不对称结构和预测头来避免模型崩溃。DINO则进一步简化为一个自蒸馏的分类框架,让学生模型学习匹配教师模型输出的聚类概率分布。

这些方法展示了自监督学习领域的创新思路:通过精心设计的学生-教师互动架构,即使没有人工标注的负样本,也能学习到强大的视觉表示。

011:无负样本的自蒸馏视觉表示学习(第二部分)

在本节课中,我们将深入探讨自监督学习中的自蒸馏方法,特别是如何在不使用负样本的情况下避免模型崩溃。我们将重点分析BYOL和DINO等方法的核心理念,并解释其关键技术组件。

概述

上一节我们介绍了自监督学习的基本挑战,本节中我们来看看如何通过自蒸馏架构(如BYOL和DINO)来避免使用负样本,并学习到有效的视觉表征。我们将详细解析其损失函数设计、避免崩溃的机制,以及如何将其应用于视觉Transformer。

避免崩溃的关键:中心化与锐化

在自蒸馏方法中,避免所有输出坍缩到同一个点(即模型崩溃)是核心挑战。BYOL通过引入动量编码器和预测头的不对称设计来解决,而DINO则明确提出了“中心化”与“锐化”两种操作。

中心化

中心化的目的是防止模型将所有输出都分配给同一个类别(即产生零熵分布)。其操作是对教师网络的输出特征进行移动平均,然后将其减去。

公式
centered_output = teacher_output - moving_average(teacher_output)

具体而言,我们维护一个中心向量 C,它是教师网络输出特征在多次迭代中的指数移动平均值。在每一步,我们将教师的输出特征减去这个中心向量。这有助于鼓励输出特征在类别上呈现更均匀的分布(即更高的熵)。

锐化

锐化操作则是在Softmax函数中引入一个温度参数 τ。较低的 τ 值会使输出分布更“尖锐”,即概率更集中于某一个类别;较高的 τ 值则使分布更平缓。

公式
P = softmax(output / τ)

在DINO中,教师网络和学生网络使用不同的温度参数:教师网络的温度 τ_teacher 更低(例如0.04经过预热升至0.07),学生网络的温度 τ_student 则相对较高(例如0.1)。这种不对称性确保了教师网络能提供更确定、更“自信”的目标来指导学生网络,同时防止学生网络过早地坍缩。

动量更新与指数移动平均

为了在教师和学生网络之间建立稳定的目标,我们采用动量更新机制。学生网络的参数通过常规的反向传播更新,而教师网络的参数则是学生网络参数的指数移动平均。

公式
θ_teacher ← m * θ_teacher + (1 - m) * θ_student

其中,m 是动量系数,通常接近1(例如0.99)。这意味着教师网络的更新缓慢,依赖于学生网络过去多个步骤的状态,从而为目标提供了稳定性,这是避免崩溃的关键。

与批量归一化的关系

早期的对比学习方法严重依赖批量归一化来避免崩溃。然而,批量归一化在大规模分布式训练中存在缺陷:

  • 它对批次大小敏感,小批次会导致统计量估计噪声大。
  • 在多GPU训练中,同步批次统计量会带来巨大的通信开销。

DINO等方法通过中心化和锐化操作,减少了对批量归一化的依赖,使得使用更小的批次大小训练成为可能,并且首次成功地将自监督学习应用于视觉Transformer。

聚类视角与原型分配

DINO的损失函数可以看作一种在线聚类。模型需要将图像特征分配到一系列“原型”或“类别”上,而这些原型的数量(例如65,000个)远大于下游任务的实际类别数(如ImageNet的1,000类)。

以下是模型可能面临的三种输出分布情况:

  1. 均匀分布:所有类别的概率相等,熵最大。这通常发生在只使用中心化操作时。
  2. 单峰分布:无论输入是什么,所有概率都集中在一个类别上,熵为零。这通常发生在只使用锐化操作(且温度极低)时。
  3. 平衡分布:这是理想情况。通过结合中心化(鼓励多样性)和适度的锐化(通过不对称温度提供明确目标),模型能学到有意义的、区分性的特征,对应下游任务中真实的类别结构。

多裁剪策略

为了提升性能,一种称为“多裁剪”的数据增强策略被广泛采用。不再仅为每张图像生成两个标准尺寸(如224x224)的视图,而是生成:

  • 2个全局裁剪:覆盖图像较大区域(如50%-100%)。
  • 多个局部裁剪:覆盖图像较小区域(如5%-25%),并缩放到更小的尺寸(如96x96)。

这种方法为学生网络提供了更多样化的局部视图,同时教师网络仍处理全局视图,从而学习到更鲁棒的特征。这一技巧能稳定地提升大多数自监督模型的性能。

方法总结与比较

让我们回顾自监督视觉表征学习的发展脉络:

  1. ** pretext任务**:如预测图像旋转角度,需要人工设计代理任务。
  2. 对比学习:如SimCLR,通过对比正负样本对学习,但需要大量负样本。
  3. 自蒸馏(无负样本):如BYOL和DINO,通过非对称的师生网络架构和动量更新,避免了负样本的使用,并解决了模型崩溃问题。

DINO的贡献在于:

  • 明确了通过中心化锐化避免崩溃的机制。
  • 减少了对批量归一化的依赖。
  • 首次成功用自监督方法训练了视觉Transformer。
  • 引入了多裁剪等实用技巧来提升性能。

与视觉Transformer的结合

视觉Transformer将图像分割为一系列图像块(Patch),并添加一个特殊的[CLS]令牌。这个[CLS]令牌通过自注意力机制与所有图像块交互,最终其输出表征用于分类等下游任务。

在DINO等自蒸馏方法中,教师和学生网络输出的正是这个[CLS]令牌的特征。通过让学生的[CLS]特征去匹配教师的[CLS]特征(经过中心化和锐化),模型学会了整合全局信息,形成有效的图像表征。

数据增强的局限性与领域适应性

当前自监督学习在视觉上的成功,严重依赖于为自然图像(RGB)精心设计的数据增强组合(如裁剪、颜色抖动、翻转等)。这些增强编码了“什么是不变的”这一强先验知识。

然而,当应用于其他领域时(如医学影像、深度图、多通道显微图像),这些预设的增强策略可能不再有效,甚至有害。例如,在细胞显微图像中,随机裁剪可能会破坏与细胞大小相关的关键生物学特征。因此,将自监督学习迁移到新领域时,必须根据数据特性重新思考和设计数据增强策略。

总结

本节课中我们一起学习了自监督学习中无负样本的自蒸馏方法。我们深入探讨了BYOL和DINO如何通过动量更新的师生架构中心化与锐化操作来避免模型崩溃。我们还分析了其如何减少对批量归一化的依赖,从而成功训练视觉Transformer,并讨论了多裁剪策略对性能的提升。最后,我们指出了当前方法对数据增强的依赖性及其在不同应用领域中的局限性。理解这些原理,是设计和应用下一代自监督学习模型的基础。

012:基于掩码的视觉表示学习(第1-2部分)

在本节课中,我们将要学习如何利用掩码技术进行视觉表示学习。我们将探讨如何借鉴自然语言处理领域的思路,摆脱对图像增强的依赖,并深入理解几种核心方法的工作原理。

从判别式学习到掩码学习

上一节我们介绍了通过图像增强和判别式学习来获取视觉表示的方法。本节中,我们来看看如何利用掩码作为替代方案。

在判别式学习中,我们通常需要图像增强。例如,我们取一张图像,生成其不同的视图,并用同一个网络(如BYOL)或师生动态网络(如DINO)进行处理。在这种学习中,增强是必要的。

然而,我们可以从自然语言处理的进展中汲取灵感,尝试引入掩码策略。掩码是摆脱图像增强的另一种途径。当我们提到增强时,通常指的是不同尺度的随机裁剪(例如从5%到100%)或颜色抖动(即改变图像的亮度、对比度等统计特性)。对于自然图像,还可以调整饱和度。

掩码自编码器 (MAE)

首先,我们介绍一种相当简单的方法,称为掩码自编码器。如果你还记得前两周的内容,我们讨论过自编码器的概念。

自编码器通常由两个网络组成:编码器和解码器。输入图像经过某种扰动(如高斯噪声或掩码),然后通过一个视觉变换器或卷积神经网络,得到一个压缩的、连续的潜在空间表示。解码器网络则负责从这个潜在空间重建回初始的图像空间,并在原始图像空间上计算损失。

这种方法的核心在于,它表明我们可以通过直接在图像空间(即像素强度)上进行模仿来学习表示。

此方法最吸引人的部分在于,它可以与视觉变换器相结合。视觉变换器将图像视为一个序列(或集合)进行处理。其巨大优势在于,如果将图像视为序列,我们可以丢弃序列中的某些元素(即令牌),而无需在编码器网络中处理它们。

编码器网络不处理被掩码的图块(用灰色小方块表示)。掩码的图块越多,计算复杂度就越低。在极端情况下,如果掩码99%的图块,编码器只需处理1%的未掩码图块。这种设计使得方法具有高度可扩展性。另一个特点是网络结构不对称,编码器的参数数量通常远多于解码器。

需要注意的是,我们无法完全避免这些未掩码的图块,解码器仍然需要它们来重建所有令牌。因此,我们不能盲目地掩码图块,需要记住序列中哪些位置被掩码了,然后在正确的位置将它们添加回去。这类似于在解码器的变换器层中添加可训练的特殊令牌。

如何选择掩码比例?

一个非常重要的问题是:如何选择最优的掩码比例?我们的直觉和选择依据是什么?

让我们回到自然语言处理领域寻找类比,因为这类方法很大程度上建立在自然语言的改进之上。图像和自然语言都可以被视为具有不同特性的信号。

在自然语言处理中,例如BERT模型,掩码比例大约是多少?大约是15%。在自然语言中,序列的令牌是词嵌入,代表词汇表中的单词。我们取一个句子,将其单词映射为向量,然后掩码其中15%的词,并用一个特殊的掩码令牌替换。之后,我们尝试预测被掩码的单词,这本质上是一个带有交叉熵损失的分类任务。

那么,图像信号和自然语言信号的根本区别是什么?图像具有固定的网格结构。此外,图像的“词汇表”是像素强度值,这是一个有限的范围(例如0到255),本质上是连续数据。卷积神经网络利用的归纳偏置是图像信息的空间局部性,即信息在网格上是结构化的。

关键区别在于信号之间的冗余度不同。对于图像,即使我们将信息量减少七倍(如下采样),人类通常仍能识别图像内容。但对于文本,如果移除70%的信息,我们很可能无法理解其含义。这种差异表明图像信号具有更高的冗余度。视频的冗余度则更高。

因此,在视觉任务中,我们可以使用更大的掩码比例。MAE的作者进行了广泛分析,尝试了从10%到90%的掩码比例。他们发现,对于这种方法,最优掩码比例大约在75%左右。需要注意的是,这个结论是针对特定方法和数据集的。对于不同的数据(例如显微镜下的细胞图像),最优掩码比例可能更小,因为冗余度更低。

模型是在记忆数据吗?

有人可能会问:这个网络只是在记忆数据吗?一个大模型能否只是记住一百万张图像并学会重建它们?

为了回答这个问题,我们可以检查模型在验证集(即训练时未见过的数据)上的重建效果。MAE能够在验证图像上生成看似合理的结果,尽管这些结果不一定完全对应真实的类别。这表明模型并非简单记忆,而是学到了一些泛化能力。

另一个问题是:为什么重建图像看起来如此模糊?这是因为训练目标使用了均方误差损失。当直接在图像空间上使用L1或L2损失进行重建时,网络倾向于生成平均化的、模糊的预测。不过,我们并不太在意这一点,因为掩码重建只是一个 pretext 任务,我们真正关心的是编码器学习到的中间表示,我们将用这些表示来进行图像分类。

还有一个直觉是:由于我们使用的是无标签数据,随机掩码的图块并不一定对应于有语义的物体实体。掩码可能覆盖了物体的一部分,也可能没有。虽然这种随机掩码没有先验知识表明它一定对下游任务有益,但作者认为,编码器仍然可以学习到有用的隐藏表示。

另一种方法:BEiT

接下来,我们看看另一种借鉴自自然语言的方法:BEiT。其思路与MAE略有不同。

在BEiT中,我们不再直接依赖图像空间作为重建目标,而是尝试将每个图像图块分配到一个视觉词汇表中的特定条目。这类似于自然语言处理中,我们将每个单词映射到词汇表中的一个条目。这里,我们有一个视觉词汇表的概念,目标是为每个图块分配一个离散的类别。

这就引出了一个关键问题:我们如何将图像图块分配给视觉词汇表中的离散值?神经网络在优化过程中通常不喜欢离散的东西。

BEiT使用了一个前置任务来建立这个视觉词汇表。它训练一个自编码器(编码器-解码器结构)来重建图像。但这里的关键是,我们不会保留这个自编码器的表示用于下游任务,而是利用它来推断出一个词汇表,用于将连续的潜在空间映射到一组离散的视觉词汇上。

那么,如何实现这种离散化呢?问题在于,如果我们直接在优化过程中对潜在空间进行离散化,由于离散化操作是不可微的,梯度将无法反向传播。

BEiT的第一个版本使用了一种称为Gumbel-Softmax松弛的数学方法来解决这个问题。然而,更流行和有效的方法出现在其第二个版本中,它采用了一种称为向量量化变分自编码器的技术。

这种方法的核心是定义一个可学习的码本,其中包含K个向量(例如K=10000),每个向量的维度为D。对于编码器输出的每个令牌表示,我们计算它与码本中所有向量的余弦相似度,找到最接近的那个向量。然后,我们用这个码本向量替换原始的令牌表示,并输入给解码器。

为了实现梯度回传,这里使用了一个技巧:虽然前向传播时使用了码本向量,但在反向传播时,直接将解码器传来的梯度复制给原始的编码器输出表示。这样,整个过程就变得可微了。这是一种非常实用的技术,也是当前对潜在空间进行离散化的先进方法。

一旦我们有了这个离散的视觉词汇表,pretext任务就变得和BERT非常相似了:我们掩码一部分图像图块,通过编码器处理,然后使用交叉熵损失来预测被掩码图块对应的视觉词汇表条目。

BEiT v2还尝试将这种掩码建模方法与DINO式的判别式学习目标结合起来,创造了一种混合方法。虽然简单地结合这两个目标本身并未带来显著的性能提升,但这为后续研究指明了方向。


本节课中我们一起学习了基于掩码的视觉表示学习的基本思想。我们首先了解了如何用掩码替代图像增强,并深入探讨了掩码自编码器的工作原理及其优势,特别是与视觉变换器结合带来的计算效率。接着,我们讨论了如何根据信号冗余度选择掩码比例。最后,我们介绍了BEiT方法,它通过构建视觉词汇表,将自然语言处理中的掩码语言建模思想成功迁移到视觉领域,并利用向量量化技术解决了离散化带来的梯度传播难题。这些方法为学习更高效、更强大的视觉表示开辟了新的途径。

013:基于掩码的视觉表示学习(第二部分)

在本节课中,我们将继续探讨基于掩码的视觉表示学习方法,特别是BEiT、iBOT等模型的核心思想、技术细节及其性能差异。我们将重点关注这些方法如何通过不同的策略学习视觉词汇,以及它们在下游任务中的表现。

概述

上一节我们介绍了掩码自编码器(MAE)的基本原理。本节中,我们来看看如何将自然语言处理中的掩码语言建模思想更巧妙地应用于视觉领域,特别是BEiT和iBOT方法。这些方法的核心挑战在于如何为图像块分配离散的标签或词汇条目。

BEiT v2:集成视觉词汇分配

BEiT版本二(BEiT v2)是一种更智能地集成视觉词汇分配思想的方法。其核心是学习一个视觉码本(visual codebook)。

公式/代码描述:模型的目标是学习一个映射函数 f: 图像块 -> 词汇表索引

与从头开始训练相比,这种设计能带来更快的性能提升。同时,由于在预训练阶段使用了掩码策略,它在诸如语义分割等下游任务上也表现优异。

需要注意的是,上述比较仅针对“Base”规模的模型。BEiT v2的掩码编码器(mask encoder)设计使其能够更容易地扩展到如“Large”等非常大的模型,这是一个显著的优势。

iBOT:一步式的自监督学习

接下来,我们将BEiT式的训练解耦为两个步骤:1) 预训练一个分词器来分配视觉词汇;2) 使用这些标签进行训练。而iBOT方法则尝试将这两个步骤集成到一步中,进行自监督学习,且不依赖于提供标签的预训练分词器。这是目前最前沿的方法之一。

iBOT的架构包含两个相同的网络(学生网络和教师网络),采用自蒸馏方法。教师网络是学生网络参数的指数移动平均(EMA),因此其参数不通过梯度更新。

两个网络都有两个头:

  • 响应头(Response Head):用于分类。
  • 投影头(Projection Head):用于产生对比学习所需的特征。

如果移除投影头及其对应的损失,该方法就简化为我们之前讨论过的DINO方法。

以下是iBOT方法的核心流程:

  1. 视图匹配(不同视图):取同一图像的两个不同增强视图(图中以不同颜色表示)。将这两个视图分别输入学生网络和教师网络。我们最小化它们从响应头输出的分类概率分布之间的交叉熵损失。这类似于DINO的目标。
  2. 掩码图像建模(同一视图):对于同一图像视图,在学生网络输入端对部分图像块进行掩码,而教师网络输入端则不掩码。然后,我们让学生网络投影头输出的、对应于被掩码位置的特征,去预测教师网络投影头输出的、对应位置的特征。这同样通过交叉熵损失实现。

公式描述

  • 目标一(视图匹配)L1 = CE(Student_Response(View1), Teacher_Response(View2))
  • 目标二(掩码建模)L2 = Σ_{i in MaskedPatches} CE(Student_Projection(View1_masked)[i], Teacher_Projection(View1_unmasked)[i])

第一个目标试图匹配同一图像的不同视图。第二个目标则试图匹配同一视图的掩码与非掩码表示。

iBOT的主要优势在于,教师模型通过指数移动平均动态更新,使得视觉词汇的分配在整个训练过程中共同学习,而不是像BEiT那样依赖于一个固定的、预训练的分词器性能上限。

方法对比与线性探测分析

以下是几种掩码学习方法的对比:

  • MAE:在像素空间重建图像,使用L2损失,掩码率为75%。
  • BEiT:依赖于预训练分词器分配的码本,掩码率为40%。
  • iBOT:基于自蒸馏的掩码图像建模,预定义词汇表大小为8192,但词汇分配在训练中学习,掩码率约为30%。

一个重要的观察点是线性探测(linear probing)微调(fine-tuning) 性能之间的差异。在微调场景下,这些方法的性能通常处于相似范围。然而,在线性探测场景下,基于生成式任务(如掩码重建)的方法(如MAE、BEiT)的性能,通常显著低于基于判别式任务(如DINO、iBOT)的方法。

一种推测是:重建整个图像(尤其是高掩码率时)需要模型在中间特征中保留大量信息,其中可能包含许多对下游分类任务冗余的细节。而像DINO/iBOT这样基于交叉熵匹配分布的方法,可能迫使网络学习更精炼、判别性更强的特征,从而在线性分类时表现更好。

DINOv2:工程改进与最新进展

最后,我们简要介绍如何以iBOT为基线,通过一系列工程技巧达到新的state-of-the-art精度,即DINOv2方法。我们强调其中最重要的两部分改进。

1. 替换中心化操作:Sinkhorn-Knopp归一化

在原始DINO中,使用特征中心化(centering) 来避免模式坍塌。DINOv2将其替换为Sinkhorn-Knopp归一化。这可以看作是在批次维度上应用行和列归一化,以平衡小批量(mini-batch)内特征的分布,其本质是最优传输问题的一种特例。

虽然直接性能提升可能不明显,但这种方法带来了更稳定的训练行为,使得能够使用更大的批次尺寸并进行更少的超参数调优。

2. 特征空间正则化:KoLeo正则化

正则化的目的是限制模型解的空间,防止过拟合,并引导学习过程。DINOv2引入了一种新颖的KoLeo正则化到特征空间。

其动机是:像SimCLR这样的对比损失理论上能保证特征均匀分布在超球面上,且同一图像的不同视图特征会彼此靠近。但DINO/iBOT中使用的交叉熵自蒸馏损失没有这种理论保证。

KoLeo正则化通过一个巧妙的损失项,只将特征空间中最接近的配对推开。

公式描述L_koleo = (1/N) * Σ_i log(min_{j≠i} ||f_i - f_j||)
其中,f_if_j 是学生网络输出的特征。

这个损失鼓励特征在批次内保持一定的分离度。如果不使用 min 操作而推开所有配对,可能导致特征过于均匀分散,反而损害判别性。因此,只推开那些容易靠得太近的特征对至关重要。

在DINOv2的消融实验中,KoLeo正则化对K近邻(KNN)分类精度提升最大,而增大批次尺寸配合Sinkhorn-Knopp归一化则极大地提升了训练稳定性。其他改进多为工程性调整。

鲁棒性评估

除了在ImageNet验证集上评估,我们还需要关注模型表示的鲁棒性。未来课程中,我们将使用以下数据集来评估模型在面对分布外或具有挑战性样本时的表现:

  • ImageNet-A:自然对抗样本,模型容易错误分类的图像。
  • ImageNet-O:分布外样本,与训练数据语义或统计特性差异大的图像。
  • ImageNet-R:使用不同风格渲染(如艺术、抽象)的ImageNet图像,测试风格不变性。
  • ImageNet-C:包含算法生成的腐蚀图像(如噪声、模糊、亮度变化)。
  • ImageNet-Sketch:人类手绘的草图图像。

这些评估有助于我们理解不同学习方法所得表征的稳健程度。

总结

本节课中,我们一起学习了:

  1. BEiT v2 通过集成视觉码本学习,改进了掩码图像建模。
  2. iBOT 通过一步式的自蒸馏框架,将掩码建模与视觉词汇分配统一学习,摆脱了对预训练分词器的依赖。
  3. 分析了生成式与判别式掩码学习方法在线性探测性能上的差异。
  4. 探讨了DINOv2中的关键改进:Sinkhorn-Knopp归一化 用于稳定训练,以及 KoLeo正则化 用于提升特征判别性。
  5. 简要介绍了用于评估模型鲁棒性的各类数据集。

这些方法展示了如何通过精心设计的预训练任务和正则化策略,从大量无标签图像中学习强大且通用的视觉表示。

014:多模态表示学习、鲁棒性与视觉异常检测(第1-2部分)

在本节课中,我们将要学习多模态表示学习的基本概念,特别是如何结合视觉与语言信息来学习更强大的特征表示。我们还将探讨模型鲁棒性的重要性,并初步了解视觉异常检测的背景。

概述

到目前为止,我们已经学习了如何从自然语言中无监督地学习表征,并重点讨论了用于自然图像的对比学习方法。这些方法能学习到相当好的表征。然而,视觉和语言并非唯一的领域,这些方法可以推广到其他领域,例如生物序列(如蛋白质和RNA)。本节课,我们将聚焦于结合不同模态信息的方法,即多模态学习,具体是结合自然语言和视觉信息。这种方法适用于任何拥有配对数据的领域。

从鲁棒性谈起

上一节我们介绍了对比学习,本节中我们来看看模型表征的鲁棒性。鲁棒性是衡量模型表征在数据受到扰动时是否依然有意义的重要方式。

什么是鲁棒性?

鲁棒性是指模型在面对数据扰动时,其性能保持稳定的能力。扰动可以有很多种形式,例如:

  • 遮挡:图像部分被遮盖。
  • 模糊:图像变得不清晰。
  • 分布外数据:模型遇到与训练数据分布差异很大的新数据。
  • 对抗性攻击:攻击者通过微调输入数据(如图像像素),使模型做出错误预测,而这些改动对人眼可能不可见。

鲁棒性总是相对于特定类型的扰动来定义的。我们可以定义模型对遮挡、模糊、自然扰动或对抗性攻击的鲁棒性。其衡量标准通常是:在施加扰动后,模型性能下降了多少。

为何关注鲁棒性?

鲁棒性对于表征学习至关重要。如今的目标是:在大量、多样的数据上训练一次大型模型(即基础模型),然后将其重用于成百上千个不同的下游任务。我们希望这些模型对各种扰动都具有鲁棒性。

研究表明,更大的模型不仅在原始数据上表现更好,在面对数据损坏时也往往更鲁棒。然而,传统的监督式预训练模型学到的表征,在面对与训练集(如ImageNet)分布不同的新数据集时,泛化能力可能很差。这是因为模型被激励去学习数据集中所有有助于分类的特征,但这些特征可能并不通用。

评估表征的通用性

我们注意到,使用线性探测(仅训练最后一层分类器)和微调(训练整个模型)来评估预训练模型时,结果存在显著差异。这促使我们思考:为特定分类器学习的表征到底有多通用?它们能应用到其他领域吗?

为了深入探究,我们需要引入一些更细致的评估设定:

少样本学习

少样本学习 是指在下游任务中,我们只有非常有限的标注样本(例如,每个类别只有1%的数据可用)。这能帮助我们评估表征在数据极少时的迁移能力。

零样本学习

零样本学习 则更具挑战性。模型需要在不进行任何微调的情况下,直接对从未见过的图像类别进行分类。为此,模型需要一些额外的辅助信息(例如类别的文本描述),来建立视觉特征和语义概念之间的联系。

多模态学习(尤其是我们即将讨论的方法)为实现强大的零样本学习提供了天然途径。

多模态表示学习:CLIP方法

前面我们讨论了评估需求,现在让我们看看如何利用多模态数据学习通用表征。我们将重点介绍 CLIP 方法。

动机与数据

传统的监督学习需要大量人工标注的数据集(如ImageNet),这成本高昂且类别有限。此外,模型学到的表征可能过于特定,难以迁移。

多模态学习的核心思想是利用互联网上大量天然配对的图文数据。例如,一张图片通常配有描述它的文本(标题、alt文本等)。这种数据是弱监督的,我们不知道文本具体对应图像中的哪个物体,但知道它们在语义上相关。这种数据规模巨大、多样性丰富。

CLIP的核心思想

CLIP 代表 对比语言-图像预训练。其目标是学习一个共享的特征空间,使得匹配的图像和文本对的特征彼此接近,而不匹配的则彼此远离。

以下是其工作流程:

  1. 编码:使用一个图像编码器(如ViT)和一个文本编码器(如Transformer)分别处理一批图像和一批文本。
  2. 特征提取:每个图像生成一个特征向量,每个文本生成一个特征向量(通常使用[CLS]令牌的输出来聚合整个句子的信息)。
  3. 计算相似度:计算所有图像特征和所有文本特征之间的余弦相似度,得到一个相似度矩阵。
  4. 对比损失:训练目标是最大化配对的图像-文本对(矩阵对角线)的相似度,同时最小化非配对对(非对角线)的相似度。这本质上是一个对称的交叉熵损失。

图像编码器损失:对于每张图像,将其对应的文本作为正样本,该批次中所有其他文本作为负样本。
L_i = -log(exp(sim(I_i, T_i)/τ) / Σ_{j=1}^{N} exp(sim(I_i, T_j)/τ))

文本编码器损失:对于每个文本,将其对应的图像作为正样本,该批次中所有其他图像作为负样本。
L_t = -log(exp(sim(T_i, I_i)/τ) / Σ_{j=1}^{N} exp(sim(T_i, I_j)/τ))

总损失是图像损失和文本损失的平均值。这里,sim 是余弦相似度,τ 是可学习的温度参数。

CLIP的优势:零样本预测

CLIP 最强大的能力之一是零样本分类。预训练后,文本编码器已经见过海量文本,很可能包含下游数据集的类别名称。

进行零样本预测的步骤如下:

  1. 构建提示:将数据集的每个类别名称嵌入到一个提示模板中(例如,“一张[类别]的照片”)。
  2. 文本特征:用文本编码器提取所有类别提示文本的特征。
  3. 图像特征:用图像编码器提取待分类图像的特征。
  4. 计算与匹配:计算图像特征与所有类别文本特征的相似度。
  5. 预测:选择相似度最高的文本对应的类别作为预测结果。

通过巧妙的提示工程(设计更好的提示模板),可以显著提升零样本性能。这种方法无需任何下游任务训练数据,实现了真正的零样本迁移。

总结

本节课中我们一起学习了多模态表示学习的基础。我们首先探讨了模型鲁棒性的重要性,它衡量了表征在面对数据扰动时的稳定性。接着,我们了解了少样本学习零样本学习这两种评估表征通用性的重要设定。最后,我们深入介绍了CLIP模型,它通过对比学习在庞大的图文配对数据上训练,将图像和文本映射到共享的特征空间。CLIP 的关键优势在于其强大的零样本分类能力,无需下游标注数据即可执行新任务,这为构建更通用、更灵活的人工智能系统开辟了道路。

015:多模态表示学习、鲁棒性与视觉异常检测

概述

在本节课中,我们将学习多模态表示学习模型(如CLIP)的鲁棒性优势,并深入探讨一个重要的下游任务——视觉异常检测。我们将了解异常检测的基本概念、常用方法以及如何利用预训练模型的特征空间来有效识别分布外样本。


多模态模型的鲁棒性优势

上一节我们介绍了多模态表示学习模型。本节中我们来看看这类模型,特别是像CLIP这样的模型,所展现出的显著鲁棒性优势。

CLIP等模型在零样本设置下,即使没有针对特定任务进行任何训练,也能展现出强大的性能。这种能力在处理来自不同分布的数据时尤其有价值。

以下是三个模型性能不佳的典型场景示例:

  • 需要基于视觉的信息,但难以从背景中获取。
  • 图像来自显微镜。
  • 模型在特定领域数据稀缺时表现不佳。

下图展示了模型在不同数量标注训练数据下的性能。其中,“Parahood care”曲线表示模型在拥有越来越多数据时,其性能渐近地接近监督学习的表现。可以看到,即使在零样本情况下,CLIP也取得了与使用4个标注样本的监督模型相似的性能。这表明此类零样本方法非常有效。

模型的优势不仅体现在ImageNet验证集的图像分类准确率上,更在于其鲁棒性。左侧图表进行了更定性的说明,右侧则提供了更定量、更原则性的分析。

右侧图表展示了图像分类准确率,以及模型在7个分布显著不同的数据集上的平均准确率。其核心思想是衡量模型性能是否受数据分布变化的影响。理想情况下,模型在不同分布上应保持相同的准确率。

图中比较了监督学习模型和零样本CLIP模型。同一个监督模型在ImageNet上可能达到85%的准确率,但在其他分布的数据集上可能骤降至约70%。图表清晰地以定量方式说明了CLIP模型在分布变化下的鲁棒性更强。图中不同的点代表不同的视觉Transformer架构,它们都使用相同的对比语言-图像目标进行训练。


异常检测简介

现在,我们将讨论一个全新的主题:异常检测。到目前为止,我们讨论的任务如图像分类,其类别是预先定义好的。我们尝试将图像映射到这1000个类别中,而无需配对的标注数据。

现在我们要做一些不同的事情。我们假设模型已经学习到了一个良好的低维特征表示。我们可以想象,通过监督学习或自监督学习,模型已经学习到了数据的某种表示。

这里,我们不再区分预训练数据分布和下游数据分布。我们有一组训练数据用于训练模型。在实践中,这可能是来自特定医院、特定设备型号的X光片数据集。

我们将这些可用的图像视为分布内数据。我们的目标是能够检测分布外的样本。例如,我们有一个性能优秀的分类器或分割模型,但我们需要确保它只处理来自相同分布(如同一个医院)的图像。我们希望在数据输入分类器之前就能检测出异常值。

这是因为模型可能因为遇到分布外数据而产生不可预测的行为。例如,如果来自另一家医院的X光片输入模型,可能会影响其预测。在数据规模有限的情况下,这种泛化问题尤其突出。因此,我们希望有能力检测出异常值。

这个任务被称为异常检测分布外检测新颖性检测。我们的目标是识别可能是异常值的样本。

这个任务面临一些普遍挑战:

  • 数据分布可能以多种方式发生偏移。
  • 样本被判定为分布内或分布外的阈值难以确定。
  • 偏移是否与标签相关(如协变量偏移与标签偏移)。

基于分类器的异常检测方法

2016年,有研究者通过经验观察发现,对于一个训练好的分类器,一个非常好的指标来区分分布内外样本是使用最大软概率

具体来说,在测试时,分类器会输出一个逻辑值向量,然后通过Softmax函数转换为各类别的概率分布。最大软概率方法就是直接取这个概率分布中的最大值。例如,如果模型对“飞机”类别的预测概率最高,为0.8,那么0.8就是这个样本的异常分数。

研究表明,在监督训练后,模型倾向于给分布内样本分配更高的最大软概率。通过绘制分布内和分布外样本的最大软概率值的归一化直方图,可以观察到分布内样本的值通常更高。

另一种方法是马氏距离。这种方法利用了监督分类器倾向于将同一类别的样本在特征空间中进行聚类的事实,这些聚类接近高斯分布。

其做法是为每个类别拟合一个高斯分布。我们需要知道每个样本的类别标签(监督信息),然后计算每个类别的特征均值和一个所有类别共享的协方差矩阵。

马氏距离分数计算的是测试样本特征与每个类别均值之间的马氏距离,然后取最小值。这个距离考虑了特征空间的整体几何结构。

这两种方法(最大软概率和马氏距离)都需要一个使用标注数据预训练好的分类器。


无监督异常检测:最近邻方法

如果数据完全没有标签,一个非常简单且效果不错的方法是最近邻方法。

我们利用训练集和测试样本在特征空间中的相似性。我们有一组分布内的训练数据,以及需要分类的测试数据(包括分布内和潜在的分布外样本)。

基本思想是:对于每个测试样本,我们计算其与训练集中所有样本的特征距离(例如余弦相似度或欧氏距离),然后取最近邻的距离作为该样本的异常分数。

距离越远(或相似度越低),该样本越可能被认为是分布外样本。通过设定一个阈值,我们可以根据这个距离来决定样本属于分布内还是分布外。

我们也可以计算到K个最近邻的平均距离作为分数。

以下是三种基本的异常分数:

  1. 最大软概率:需要监督分类器。
  2. 马氏距离:需要监督分类器及类别标签来计算类均值。
  3. 最近邻距离:仅需要特征表示,无需任何标签。

异常检测的评估指标

异常检测可以被形式化为一个二分类任务,两个类别分别是“分布内”和“分布外”。因此,我们可以使用二分类的评估指标。

我们通常关注两个重要指标:

  • 真阳性率:给定样本确实是分布内的,模型将其正确判定为分布内的比例。
  • 假阳性率:给定样本是分布外的,模型错误地将其判定为分布内的比例。

在实际应用中,我们需要设定一个阈值来做出判定。不同的应用场景(如医疗诊断与图像分割)对错误的容忍度不同,因此阈值的选择至关重要。

我们希望找到一种与阈值无关的评估方式。这就是接收者操作特征曲线

ROC曲线的绘制方法是:遍历所有可能的阈值,计算每个阈值下的真阳性率和假阳性率,然后将这些点连接起来。这条曲线下的面积称为AUROC

AUROC是一个介于0到1之间的标量,它综合了所有可能阈值下的性能,因此是阈值无关的。其解释是:一个完美的分类器的AUROC为1.0,而一个随机猜测的分类器的AUROC为0.5。我们的目标是使分类器的性能曲线尽可能远离对角线(随机线),向左上角凸出。


预训练模型与异常检测

现在,我们来看如何利用预训练模型进行异常检测。在监督情况下,我们可以使用最大软概率和马氏距离。

我们将重点讨论最后一种情况:利用基于CLIP等模型的特征表示进行无监督异常检测,因为我们想展示这些表示的有效性。

这是一个快速示例:一个在ImageNet上预训练的模型,其特征空间中的不同类别(如猫、飞机、狗)会形成聚类。通过计算测试样本与分布内训练集最近邻的余弦相似度,我们可以观察到,分布内外样本的相似度分布直方图分离得越开,二分类(内外)的性能就越好。

2021年的一篇重要论文通过PCA可视化发现:

  1. 如果直接在目标分布数据上从头训练一个监督模型,其特征空间的类别分离程度一般。
  2. 如果在一个大规模数据集(如ImageNet-21k)上预训练模型,其特征空间的聚类分离得更好,从而能获得更好的异常检测器。
  3. 如果在此基础上,再在目标数据上进行监督微调,聚类会变得更加紧密,异常检测性能进一步提升。

因此,预训练模型为我们提供了一个非常好的特征空间起点。接下来的问题是:如果没有标注样本,我们如何改进特征空间以用于无监督异常检测? 这正是我们将要使用CLIP模型和文本编码器来完成的工作。


总结

本节课中,我们一起学习了以下内容:

  1. 多模态模型的鲁棒性:CLIP等模型在零样本设置下对不同数据分布展现出强大的泛化能力。
  2. 异常检测任务:识别与训练数据分布不同的样本,对于确保模型安全可靠至关重要。
  3. 主要方法
    • 基于分类器的方法:如最大软概率和马氏距离,需要监督信号。
    • 无监督方法:如最近邻距离,仅依赖于特征表示。
  4. 评估指标:重点掌握了阈值无关的评估指标AUROC及其ROC曲线。
  5. 预训练模型的作用:大规模预训练模型提供了良好的特征空间基础,其紧密的类别聚类有助于提升异常检测性能。CLIP等模型因其强大的多模态对齐能力,成为异常检测的可靠工具。

通过结合预训练模型的特征和适当的异常分数(如最近邻相似度),我们可以在无监督或半监督设置下有效地执行异常检测任务。

016:学习表示的新兴特性与扩展定律(第1-2部分)

在本节课中,我们将深入探讨表征学习,特别是不同预训练模型和目标函数的影响。我们将从上一讲结束的地方开始,分析CLIP模型成功的关键因素,并研究模型和数据规模扩展的规律。

从CLIP模型回顾开始

上一讲我们详细介绍了CLIP模型。现在,我们将更深入地研究其表征能力,以及不同的预训练模型和目标函数。

我们上次讨论的核心思想是,并非总是需要在预训练模型之上进行线性探测或微调整个模型来训练分类头。CLIP的方法是:从网络上收集成对的(图像,文本)数据,并在此基础上训练一个图像编码器和一个文本编码器。

以下是其工作原理的高层次概述:

  • 我们为每个句子提取一个单一的文本表征。
  • 我们为每张图像提取一个单一的图像表征。
  • 我们计算一个批次(mini-batch)内所有图像和文本表征之间的相似度,形成一个方阵。
  • 我们采用对比学习的目标:最大化对角线元素(正确配对)的相似度,并将批次内所有非对角线元素视为负样本。

这种方法的主要优势在于它支持零样本学习。例如,在图像分类任务中,我们只需提供类别名称(如“狗”、“猫”),文本编码器就能即时生成这些标签的表征,从而对单张图像进行预测。因此,这类模型在文献中被称为开放词汇模型,因为它们是在句子配对数据集上训练的,没有固定的、有限的词汇表。

我们上周讨论的一个难点是:用户在进行分类预测时,需要设计合适的文本提示。研究表明,通过精心设计文本提示(例如,对于卫星图像使用“一张卫星图像,内容是...”,对于花卉数据集使用“一朵带有[标签]的花”),而不是简单地提供类别名称,可以显著提升CLIP模型的性能,平均提升可达5%,且无需进行任何微调或训练分类器。

探究成功与鲁棒性的根源

这些结果非常出色,但我们想知道:CLIP模型成功的关键因素是什么?其对于自然分布偏移(如素描、卡通)表现出强大鲁棒性的根源又是什么?

2022年的一项后续研究试图分析CLIP模型成功的所有可能因素,包括训练数据规模、数据分布、语言监督以及对比损失本身。这项大规模研究的结论是:目标函数本身并不重要,重要的是拥有一个非常多样化的训练数据分布

研究团队通过一系列小规模对照实验来证明这一点。他们使用了ImageNet的图像及其在线原始描述,以及最大的图像标注数据集YFCC。实验表明,无论是使用监督学习、基于CLIP的对比学习,还是图像标注方法,只要数据分布足够多样,模型在自然分布偏移下的鲁棒性表现趋势是相似的。数据集的获取、筛选和构建(如构建4亿个配对数据)才是关键

扩展定律:规模的影响

既然我们看到基于语言监督的预训练严重依赖于大数据集,那么如果我们能使用更大的模型,是否可能获得更好的零样本ImageNet分类性能呢?

最近,一个遵循CLIP训练原则的开源版本模型OpenCLIP被提出。它使用了不同的数据筛选方法(基于预训练模型相似度过滤),并创建了包含20亿个英文图像-文本描述对的数据集。

研究者们探索了当扩大计算资源(以compute表示,即处理单张图像的计算复杂度乘以模型训练期间看到的图像总数)和模型规模时,零样本性能的变化。他们发现,在双对数坐标图上,性能(错误率)与计算规模之间呈现出线性趋势。这种可预测的趋势被称为幂律扩展定律

用公式可以表示为:
错误率 ∝ (计算量)^-α
其中α是斜率。在双对数坐标下,这表现为一条直线:
log(错误率) = -α * log(计算量) + 常数

研究中有两个关键发现:

  1. 更陡峭的斜率更理想:它意味着用更少的计算量就能使错误率下降得更快。OpenAI使用的数据集产生的曲线斜率更陡。
  2. 可预测的鲁棒性:在ImageNet自然分布偏移子集(如卡通、素描)上,错误率下降的斜率与原始ImageNet上的斜率非常接近(例如0.11 vs 0.13)。这意味着我们可以根据模型在原始数据上的表现,相对可靠地预测其在分布偏移数据上的鲁棒性。

扩展中的瓶颈与协同缩放

通过更详细的实验表格,我们可以观察到扩展中的瓶颈。例如,使用最小的Vision Transformer模型时,即使将训练样本从130亿增加到340亿,性能也会达到饱和,因为模型的学习容量不足。同样,在固定训练迭代次数的情况下,仅将数据集从4亿样本扩大到20亿样本,性能也会饱和。

这些扩展定律研究的主要结论是:数据规模、模型参数量和计算量这几个关键参数需要协同缩放。如果只缩放其中一两个维度,很快就会遇到收益递减的瓶颈。

扩展定律的实践意义与局限性

基于在双对数坐标上拟合出的直线,我们可以进行外推预测,即预测更大模型、更多计算量下的性能。这在实践中非常重要,因为大规模训练成本极高(可达数十万美元)。通过进行少量小规模实验来预测大规模实验的结果,可以节省巨大的计算成本和试错时间。

然而,外推预测有其局限性:预测点距离现有实验数据点越远,预测的不确定性就越大。幂律关系在极大范围内可能不再严格成立。因此,在实际应用中,需要根据可用的计算资源、成本预算以及对预测置信度的要求,来权衡并决定最终的模型与数据规模。

与自然语言处理的联系

这种扩展定律在自然语言处理领域也有强烈体现。通过控制数据集大小、模型参数量和计算量,在语言模型的测试损失上也观察到了类似的幂律关系。一个反直觉但一致的发现是:更大的模型往往具有更高的样本效率,即它们学习更快,需要更少的训练样本就能达到更低的测试误差。这与过去十年学术界认为“小模型更高效”的观点相反。

理解模型的敏感性:一个互动实验

为了更直观地理解CLIP模型学到了什么、对什么敏感,我们可以看一些有趣的互动实验。例如,有人通过简单的图像编辑来测试模型。

考虑一个二分类任务:类别是“杯子”和“鸡蛋”。

  1. 在图像中写上单词“cup”,模型以96%的概率预测为“鸡蛋”。这表明模型对图像内的字符内容非常敏感。
  2. 画一个杯子的素描,模型以93%的概率预测为“鸡蛋”。这说明模型对素描这种分布偏移形式也有很强的识别能力,但可能仍优先关注了某些局部特征。
  3. 将一个真实鸡蛋图片的底部移除,模型预测为“杯子”的概率显著上升(但仍不是100%)。这表明模型理解物体的整体形状和结构
  4. 在复杂背景前放置一个鸡蛋,模型仍能以98%的高概率正确识别。这暗示模型在一定程度上理解了前景与背景的概念。
  5. 将一个杯子放在鸡蛋旁边,模型仍能以99%的概率正确识别鸡蛋。这表明模型能处理多个物体的场景。
  6. 结合案例3和5(即一个被切掉底部的鸡蛋旁边放一个杯子),模型仍以80%的概率预测为“鸡蛋”。这显示了模型判断的复杂性。

这些实验并非严谨的科学结论,但生动地说明了理解现代视觉表征模型的决策依据仍然是一个开放且具有挑战性的问题。当前的模型通常被强制在给定的类别集中做出选择(概率和为100%),缺乏“我不知道”或“不适用”的选项,这也是异常检测和分布外检测成为重要研究方向的原因。

对抗性攻击:算法层面的操纵

除了人工编辑,研究者还通过算法来操纵图像,即对抗性攻击。具体方法是,在ImageNet等数据集的验证图像上,通过梯度上升来最大化模型的交叉熵损失(即让模型预测错误)。实验表明,即使这种分布偏移在自然世界中不会出现,经过此类算法攻击的图像也能将模型的性能降低到接近随机猜测的水平。这揭示了当前模型在面对精心设计的、非自然扰动时的脆弱性,是安全性和可靠性方面的一个重要关注点。

总结

本节课中,我们一起学习了表征学习中的几个关键概念。我们从分析CLIP模型成功的关键因素出发,认识到多样化的训练数据比特定的目标函数更为重要。接着,我们深入探讨了扩展定律,理解了模型性能如何随数据、模型和计算量的协同缩放而提升,并掌握了利用幂律进行外推预测以指导大规模实验的方法。我们还通过互动实验,直观感受了现代视觉表征模型的决策敏感性和复杂性。最后,我们提到了模型在面对对抗性攻击时的脆弱性。这些知识为我们理解、应用和开发大规模预训练模型奠定了重要的基础。

017:学习表示的新兴特性与扩展定律(第2-2部分)

在本节课中,我们将探讨表征学习模型,特别是视觉变换器(ViT)与卷积神经网络(CNN)在鲁棒性、可扩展性以及它们处理信息方式上的核心差异。我们将分析对抗性攻击、形状与纹理偏置、模型缩放定律以及特征可迁移性等关键概念。

对抗性鲁棒性与训练权衡

上一节我们讨论了模型扩展的基本规律,本节中我们来看看模型在实际应用中的鲁棒性问题。一个开放性的问题是:通过特定方法获得的鲁棒性,是否能在真实世界的自然图像上同样有效。

尽管如此,研究人员仍在进行相关训练。我们取一个训练子集,以对抗性的方式操纵图像,然后训练模型,这被称为对抗性训练。模型对这种特定攻击的鲁棒性会有所提升,例如,蓝线与红线之间的性能下降差距会缩小。

但当我们尝试通过微调模型来识别对抗性样本时,会发生什么?模型的鲁棒性确实提高了,但这是以模型遗忘已学习的原始图像和表征为代价的。性能差距虽然缩小,但模型在原始数据分布(蓝线)上的得分也显著下降,这体现了一种权衡

以下是我们实验室的一些研究结果,我们将图像分类中的对抗性思想迁移到了分布外检测任务中:

  • 我们有一个基线方法,即在练习课中使用的基于最近邻相似性的分布外检测器,在两个数据集上达到了86分。
  • 我们选取一个分布外图像(如左上角的鹿)和一个随机分布内图像(如苹果),然后操纵像素,最大化这两个类别完全不同的图像在模型特征空间中的相似性。
  • 中心图像虽然人眼难以察觉变化,但经过微小像素改动后,其特征与目标图像匹配。对于模型而言,这个被操纵的图像变成了“分布内”样本。
  • 此处展示了像素级的欧几里得距离差异,这些微小变化就能完全欺骗模型,而人类却无法分辨。

这表明,不仅在分类任务上,在检测任务上模型也存在对抗性脆弱性。视觉变换器模型很容易被欺骗。有人知道图中这些方块表示什么吗?因为它们是基于视觉变换器的,这些方块很可能代表了图像块。对于14x14或16x16的图像块大小,我们可以看到一些前景信息,但主要是图像块边界周围的区域被显著操纵了。

因此,我们尝试添加平滑约束,使图像上的梯度扰动更均匀,并正则化扰动使其不聚焦于图像块的边界。然而,即使这样,模型仍然可能被欺骗。在二元分类中,随机猜测的准确率是50%。而经过对抗性攻击后,模型的性能甚至比随机猜测还要差,仅仅略高于机会水平。

扩展定律与模型鲁棒性总结

现在我们对这一部分进行总结:

  1. 预训练数据集是最关键的因素:在大规模预训练中,训练数据分布是影响性能最重要的因素,且预训练数据的选择是任务依赖的,对不同任务的影响会相互交换。
  2. 扩展定律需要协同缩放:为了获得一致的性能提升和幂律行为,我们需要协同缩放三个重要参数:模型参数量数据量计算量(相当于训练时长)。
  3. 性能外推:如果我们训练了需要巨额成本的大型模型,可以应用线性外推法来预测更大规模实验下模型的性能。
  4. 对抗性鲁棒性不足:模型对于对抗性攻击并不真正鲁棒。有时,模型甚至难以区分经过微小扰动的不同类别。

回顾监督学习中的表征分析

由于对比学习模型相对较新,我们现在退一步,尝试理解监督学习世界中相应的文献和分析,这些分析在视觉变换器出现之前就已存在。

我们从识别一些关键论文开始。在2018年,一个神经科学团队发现了一个重要现象。下图展示了他们的分析:模型能以一定概率预测图像类别。当将一张图像的纹理与另一张图像的形状叠加时,模型更倾向于根据纹理而非形状进行分类。这与人类的感知方式不同。

那么,纹理和形状分别对应高频还是低频特征呢?纹理通常对应于高频特征,而形状则被认为对应于低频特征。2018年的所有现有模型(主要是ResNet等卷积网络)都对图像的纹理超级敏感。大量研究表明,人类更倾向于关注物体的形状

为什么人类会这样?因为形状对于不同的光照条件、视角、噪声等扰动具有不变性,而纹理则更容易被这些因素扭曲。我们希望学习到的表征也具有这种对形状的偏置,因为形状在不同环境中更稳定。

下图中的条形图显示了人类与2018年几种CNN模型的对比。模型在识别对人类来说很明显的物体形状(如轮廓)时表现极差。这表明当时的模型缺乏形状偏置。

视觉变换器与卷积神经网络的本质差异

接下来,我们看看视觉变换器在这些方面表现如何。首先,重申一下CNN和ViT的核心模块的根本区别:

  • 卷积模块:有一个带权重的卷积核(如3x3),通过点积运算并在二维网格上滑动。它受限于卷积核大小,主要捕获局部信息
  • 自注意力模块:即使是在网络的浅层,每个图像块也能关注到序列中所有其他图像块的信息,从而获得更全局的信息范围。

下图是另一个高级示意图。我们对ViT和ResNet进行对抗性攻击,通过最大化交叉熵(使模型输出均匀分布)来观察输入图像的变化。可以再次看到ViT中基于图像块边界的行为,这与之前讨论的结果类似。这表明两者处理信息的方式不同。

直到2021年,研究者才进一步调查了现有ResNet和ViT在形状偏置上的不同行为。下图显示,人类对形状的偏置很高(90-100%)。ResNet的形状偏置得分较低,而ViT(特别是仅用交叉熵损失训练的)则表现出更高的形状偏置。模型越大,在同一数据集上训练出的形状偏置也越高。所有ViT都比当时的ResNet更具形状偏置。

对遮挡的鲁棒性

我们现在研究模型对遮挡的鲁棒性,即模拟信息部分缺失(如大雨、大雪)的情况。通过随机移除图像部分或像素来实现。下图展示了在ViT和CNN上进行分块掩码的结果。需要注意的是,由于ViT以块为单位处理信息,它不会“看到”被移除的块,而CNN仍需要处理这些被掩码的空区域,因此这个对比并非完全公平。

他们测量了无遮挡与50%遮挡情况下模型预测的相关性,理想相关性是100%。研究发现,具有高形状偏置的大型ViT,平均能达到约80%的相关性。这意味着即使丢失50%的信息,模型仍能保持较好的性能,这在工业应用中非常有用。

特征可迁移性

接下来,我们研究监督预训练模型特征在分布外分类数据集上的可迁移性。我们取ResNet和ViT的中间层特征,在其上训练一个线性分类器(线性探测)。

在多个分布外数据集(如不同场景的图片)上,我们观察到相同的行为:ViT的特征比ResNet的特征更具可迁移性。这表明在监督学习场景下,ViT的特征也更容易迁移到未见过的数据分布。

先进CNN与ViT的对比

那么,最先进的卷积网络能否跟上ViT的进展呢?我们测试了ConvNeXt,这是一个融合了2016年后诸多技巧的现代卷积架构。在参数量相当(约1亿)的情况下,我们发现:

  • 相同数据分布(ImageNet)上进行聚类任务时,ConvNeXt的冻结特征甚至优于最好的ViT。
  • 然而,当迁移这些特征到另一个数据分布(如CIFAR-100)时,ConvNeXt的性能出现巨大下降,而ViT则保持了良好的泛化能力。

这种行为在文献中通常被称为分布外泛化。这表明,尽管ViT在分布外泛化上表现惊人,但ConvNeXt并不遵循同样的趋势。根据应用需求,如果希望模型在未见分布上不要泛化得太好,或许可以选择不同的架构。

监督学习中的模型缩放

最后,我们看看监督学习中的模型与数据缩放。从2020-2021年开始的研究表明:

  1. ImageNet准确率是模型鲁棒性的一个良好预测指标。
  2. 视觉变换器随着模型规模和数据集大小的扩大,性能提升效果远好于CNN。无论是用100万、1400万还是谷歌的3亿张私有图像进行监督训练,ViT的缩放曲线都更优。
  3. 2022年的后续研究在更大规模上(数亿到数十亿参数)验证了这一行为。仅通过缩放模型深度、宽度、前馈网络维度和注意力头数这四个参数,并配合更大规模的数据和计算,就能持续提升性能。
  4. 一项近期工作将ViT缩放到了220亿参数,使用40亿图像和3000个标签进行训练。结果表明,无论是用对比学习、图像-文本匹配还是监督学习,只要拥有高质量的训练数据分布和充足的计算资源,都能获得类似的缩放效果。
  5. 这个220亿参数的模型经过ImageNet微调后,在线性探测和形状偏置测试中都达到了最高水平。同时,在ImageNet与多个自然分布外数据集的分类任务上,也呈现良好的线性关系,表明通过微调提升ImageNet性能的同时,也能提升对自然分布外数据的分类能力。

课程总结

本节课中我们一起学习了以下核心内容:

  • 注意力机制是决定ViT鲁棒性的核心:即使ConvNeXt在相同数据分布上表现优异,但其特征可迁移性不如ViT。
  • CNN的扩展性不如ViT:在模型参数量和数据集大小方面,CNN的缩放效果不如ViT。
  • ViT更偏向形状而非纹理:这使其感知更接近人类。
  • ViT对遮挡具有良好鲁棒性:即使信息部分缺失也能保持性能。
  • ViT在自然分布变化上表现稳健:这对于实际应用至关重要。

总而言之,视觉变换器架构及其核心的自注意力机制,在可扩展性、鲁棒性和学习到更接近人类视觉偏置的表征方面,展现出了显著的优势。

018:探索自监督学习获得的表示(第1-2部分)

在本节课中,我们将要学习如何分析自监督学习模型获得的表示,并探讨其在不同任务和领域(特别是医学影像领域)中的表现与局限性。

上一节我们介绍了基于对比学习的模型(如CLIP)的分析,本节中我们来看看自监督学习方法的特性。

自监督与监督学习的比较

我们首先需要考虑,何时应选择监督学习作为预训练方法。这主要取决于两个因素:预训练数据与下游任务数据之间的分布差异,以及下游任务数据的规模。

以下是基于2021年多项研究的结论:

  • 当预训练与下游任务的分布非常相似时,监督迁移学习是很好的选择。
  • 当下游任务的数据样本非常有限时,监督迁移学习仍然是一个值得考虑的选项。

接下来,我们探讨自监督预训练模型在不同下游任务上的表现。我们固定预训练数据为ImageNet,然后改变下游任务和数据。

以下是不同任务上的表现趋势:

  • 图像分类:在ImageNet上的性能可以很好地预测模型在其他自然图像分类任务上的表现。
  • 目标检测与语义分割:对于需要定位信息的任务(如目标检测和语义分割),自监督学习特征的表现与ImageNet分类性能的相关性较低。目标检测需要模型定位物体位置(例如用边界框的四个坐标 (x1, y1, x2, y2) 表示),而语义分割需要为每个像素预测一个类别标签。
  • 通用性:目前没有一种表示方法能在所有考虑的数据集和任务规模上成为明确的赢家。尽管最新的模型(如DINOv2)通过结合多种目标在大规模数据上预训练,显示出更通用的潜力。

最后,我们比较不同方法学习到的特征本身。这是一个开放的研究领域,很难量化特征差异。现有证据表明,自监督和监督学习获得的信息是互补的。例如,有研究发现自监督特征对颜色统计信息不敏感,而监督学习特征则保留了更多此类信息。这可能是因为自监督学习中的数据增强(如颜色扰动)使模型学会了忽略颜色变化。

视觉Transformer的自监督学习

现在我们将焦点转向视觉Transformer,并探究其在自监督设置下学到了什么。

第一项研究将对比学习(如MoCo)应用于视觉Transformer,并发现:

  • 减小图像块尺寸能显著提升性能,但也会急剧增加计算复杂度。因为序列长度 N 增加,导致自注意力层的计算复杂度变为 O(N^2)
  • 视觉Transformer的自监督学习可以匹配甚至超越ResNet的性能。
  • 位置嵌入在视觉任务中不如在自然语言处理中那么重要。

另一项重要工作是DINO。它结合了视觉Transformer和一种基于交叉熵的聚类式自监督目标,产生了非常出色的结果。这些模型学到的特征在特征空间中已经形成了良好的聚类,无需为每个特定任务训练线性分类层即可直接使用(例如通过K近邻进行分类)。这对于难以获取标注数据的领域非常有用。

可视化表明,DINO模型能够无监督地学习到与物体前景相关的注意力图,这可以看作是一种无监督的分割掩码。这种行为在监督训练的视觉Transformer或卷积神经网络中并不常见。

自监督学习在医学影像中的应用

医学影像是自监督学习的一个重要应用领域,因为标注成本极高,数据规模无法与自然图像相比。此外,医学影像的许多假设(如物体居中)与自然图像不同。

在医学影像中应用自监督学习,我们需要思考几个问题:

  1. 从自然图像预训练的模型在医学下游任务上表现如何?
  2. 是使用自然图像预训练的模型更好,还是在特定医学领域(如X光片)上从头训练自监督模型更好?
  3. 如何为特定医学领域设计合适的数据增强策略?

以下是相关研究的发现:

  • 自监督学习特征(即使来自ResNet)在大量医学影像任务上的迁移性能优于监督学习特征。
  • 如果有足够的数据,在特定医学领域(如X光片)上训练自监督模型,通常能获得比使用自然图像预训练模型更好的领域内性能。
  • 必须仔细考虑数据增强策略。例如,在X光片中,随机裁剪可能会丢失关键的病理信息,因此可能需要调整或避免此类增强。

设计选择与可视化

对于自监督学习,核心设计选择之一是数据增强。我们需要针对每个目标领域思考合适的增强策略。例如,在X光片中,模糊可能不利于学习纹理变化;而在某些细胞图像中,固定尺寸裁剪与随机裁剪的效果可能差异不大。

可视化有助于我们理解模型所学。例如,DINO等模型产生的注意力图可以突出图像的前景区域,这为模型决策提供了一定的可解释性,甚至可以视为一种无监督的分割结果。这种特性在视觉Transformer与自监督学习结合时尤为突出。

本节课中我们一起学习了自监督学习表示的分析方法,比较了其与监督学习的异同,探讨了视觉Transformer在自监督下的特性,并深入了解了自监督学习在医学影像等专业领域中的应用挑战与设计考量。

019:探索自监督学习获得的表示(第2-2部分)

在本节课中,我们将继续探索自监督学习模型在生物医学图像领域学到的特征表示,并对比两种主要的自监督学习方法(对比学习和掩码图像建模)在特征性质、适用任务和可扩展性方面的差异。

生物医学图像中的特征可视化

上一节我们讨论了自监督学习在自然图像上的表现,本节我们来看看它在其他领域,如生物医学图像中的应用。模型在没有使用任何人工标注(监督学习)或文本描述(如CLIP模型)的情况下,依然能够捕获到该领域我们希望学习的一些特征。

以下是来自我们研究的一些可视化结果。不同颜色代表施加于细胞的不同药物。我们知道,具有相似效果的药物应该在图谱中聚集在一起。

  • 图中展示了一个非深度学习的基线方法结果。
  • 另外两种是基于深度学习的自监督方法(MAE和DINO)的结果。
  • 我们可以看到,自监督方法学到的特征在低维空间(如t-SNE或PCA降维后)的分布与基线方法有相似之处。
  • 目前没有一种可视化方法在所有情况下都是最优的,但这些可视化有助于我们理解这些特征如何用于分类不同的细胞扰动(如基因扰动或药物作用),从而可能加速药物发现流程。

以下是另一个可视化示例。这里我们直接使用学到的特征,并应用一个预实现的、基于层次结构的分类器来对具有相似外观的生物学特性进行分类。

  • 基线方法(非深度学习,非机器学习)难以达到相同的效果。
  • 值得注意的是,这些测试数据是模型在训练时未曾见过的(属于域外数据),例如特定的基因扰动数据,这显示了模型的泛化能力。

对比不同自监督学习方法

之前我主要展示了基于DINO方法(一种图像级目标的方法)编码器学到的特征。现在,我将尝试展示并比较两种不同的自监督学习方法学到的特征,并探讨哪一种更适合计算机视觉任务。

近期有研究开始探索这个问题。例如,即使在同一任务(如分布外检测)上,仅通过切换模型所见的“分布内”和“分布外”数据,同一预训练模型的表现也可能完全不同。这表明学到的特征在同一任务的不同数据分布下并不一致。

现在,我们退一步,考虑这两种方法的基本动态和目标。

  • 对比学习(如SimCLR, DINO):通常使用标准的数据增强流程。模型接收同一图像的两个增强视图,通过一个编码器和投影头,目标是让这两个视图的表征相互接近(正样本),而与其他图像的表征远离(负样本)。其损失函数作用于整个图像的表征(例如ViT中的[CLS]令牌)。
  • 掩码图像建模(如MAE, SimMIM):随机掩码图像的一部分区块(令牌),然后让模型(编码器-解码器)尝试重建这些被掩码的像素或令牌。其损失函数作用于被掩码的令牌级别

我们可以将这两种预训练目标视为不同级别的任务:一种是图像级目标,另一种是令牌级目标。你认为哪一种是图像级,哪一种是令牌级?

由于掩码建模需要重建具体的令牌,我认为它更接近令牌级目标。优化发生在每个令牌的细节上。而对比学习关注的是整个图像的全局表征一致性,因此是图像级目标

最近的研究(如DINOv2)尝试结合这两种目标。但接下来我将介绍一项专门研究这两种预训练类型在相同数据上差异的工作。

特征性质分析

以下是两种方法学到的特征的可视化。左图基于对比学习,右图基于掩码图像建模(MIM)。这里可视化的是图像中所有令牌(如196个)在特征空间中的分布(降维后),不同颜色代表不同类别的图像。

  • 我们希望看到同一图像内部的不同令牌在特征空间中是如何分布的。
  • 可以观察到不同的趋势。一般来说,令牌分布越可分,训练分类器(如线性探测)就越容易。
  • 如果使用DINOv2,这些特征可能会显得更加分离。

理解图像频率

上周有同学问到如何理解图像的频率。这里有一个很好的可视化。我们将图像像素视为信号,观察其强度在空间维度(而非时间维度)上变化的快慢。

  • 低频:对应图像中变化缓慢、平滑的区域,如大面积的天空或山脉。它更多地与形状信息相关。
  • 高频:对应图像中强度剧烈变化的区域,如边缘、纹理和细节。例如,黑白快速交替的棋盘格就是典型的高频信号。

在生成模型中,也常将问题解耦,用不同网络分别预测图像的低频(整体结构)和高频(细节纹理)成分。

映射特征性质到学习方法

现在,我们尝试将不同的特征性质映射到对比学习或掩码建模目标上。

以下是需要映射的性质列表:

  • A. 低频 vs B. 高频
  • C. 长程/全局模式 vs D. 局部模式
  • E. 形状偏向 vs F. 纹理偏向
  • G. 令牌表征分离 vs H. 令牌表征坍缩

根据之前的讨论:

  • 低频(A)形状偏向(E) 需要全局上下文,因此更可能与图像级目标(对比学习) 相关。
  • 高频(B)纹理偏向(F) 涉及精细细节,更可能与令牌级目标(掩码建模) 相关。
  • 长程全局模式(C) 同样需要全局信息,因此也映射到对比学习
  • 令牌分布方面:对比学习没有激励不同令牌拥有分离的表征,它们可能坍缩(H),因为只要全局表征好就行。而掩码建模要求模型能区分并重建不同令牌,因此其令牌表征必须是分离的(G)。

下游任务适用性

那么,哪种方法更适合特定的下游任务呢?

  • 语义分割:需要像素级的局部预测,因此掩码建模方法可能更有优势。
  • 线性探测:在固定特征上训练一个线性分类器。对比学习方法通常在这方面表现更好。
  • 微调:对整个模型进行端到端训练。掩码建模方法在需要精细定位的任务(如目标检测、分割)上微调后表现更佳。

这解释了我们在实践中观察到的一种“分歧”:线性探测好的模型,微调后不一定最好,反之亦然。

可扩展性与能力

最后,我们讨论可扩展性和模型能力。

  • 可扩展性:指使用更大模型和更多数据的能力。掩码建模方法(如MAE)因其编码器只处理可见令牌,解码器处理全部令牌,计算效率高,可扩展性极强
  • 能力/表征层次:类似于监督CNN,网络浅层学习低级特征(边缘、纹理),深层学习高级特征(物体部件、形状)。在自监督学习中,对比学习更倾向于学习高级的、全局的特征。而掩码建模因其重建像素细节的目标,可能保留了更多低级到中级的特征,并因其避免表征坍缩的特性,能力更强

注意力距离的可视化也支持这一点:掩码建模方法的注意力距离更短,关注局部;对比学习方法的注意力距离更长,关注全局。

本节课中,我们一起学习了自监督学习在跨域任务(如生物医学图像)中的有效性,深入对比了对比学习和掩码图像建模两种范式在特征性质、任务适用性和模型扩展性上的核心差异。理解这些差异有助于我们在不同应用场景中选择合适的预训练方法。

020:蛋白质中的表示学习(第1-2部分)

在本节课中,我们将探讨表征学习和自监督学习的进展如何应用于生物序列,特别是蛋白质领域。我们将从动机出发,理解为何要研究蛋白质,并深入分析Transformer模型中的注意力机制如何捕获序列中的成对关系。最后,我们将看到如何通过大规模预训练,仅从蛋白质序列中学习到其结构和功能的重要信息。

动机:为何关注蛋白质?

蛋白质研究具有巨大的潜力和价值。一方面,我们对自然界中已存在的蛋白质了解甚少,仍有巨大的搜索空间来寻找新的蛋白质和解决方案。另一方面,生物制药行业在研发新药和加速药物发现方面投入巨大。将表征学习应用于这一新领域,可以极大地加速我们基于现有知识筛选潜在解决方案的过程。

核心:注意力机制回顾

上一节我们介绍了研究蛋白质的动机,本节中我们来看看分析蛋白质序列的核心工具——注意力机制。

Transformer模型始终处理三维张量,其维度为:批大小(batch size)、序列长度(number of tokens)和模型深度(d_model)。无论应用于视觉、自然语言还是蛋白质,输入都是三维的。模型为每个输入token输出一个表示。

注意力操作(自注意力或交叉注意力)的核心定义如下:

公式:Attention(Q, K, V) = softmax(QK^T / √d_k) V

其中,Q(查询)、K(键)、V(值)都是输入经过线性投影得到的。在自注意力中,Q、K、V来自同一输入;在交叉注意力中,Q和K、V可以来自不同输入。

对于一个头(head)和一个层(layer),注意力图(attention map)是一个 L x L 的矩阵(L为序列长度)。它捕获了序列中所有元素之间的成对关系,这也解释了其计算复杂度为 O(L²) 的原因。除以 √d_k 是为了缩放,避免大矩阵乘法导致的不稳定性和梯度饱和。

注意力权重是“快速权重”(fast weights),因为它们为每个输入序列动态计算,而不是像全连接层或卷积层的权重那样在训练后固定不变。对于一个有 M 层、每层 H 个头的Transformer,我们可以提取 M x H 个这样的注意力图。

注意力在自然语言中的表现

在深入蛋白质之前,我们先看看注意力在自然语言翻译中的表现。通过热图可视化,我们可以观察到注意力头(attention head)的不同行为模式。

以下是研究中观察到的几种注意力头类型:

  • 局部头:主要关注相邻的token。
  • 句法头:倾向于在名词与动词、形容词与名词等句法成分之间分配权重。
  • 专用头:将注意力集中在数据集中罕见或特殊的词汇上。

分析发现,专用头承担了重要的任务,而许多均匀分配注意力的头作用不大,甚至可以被剪枝以提升模型速度。

蛋白质序列基础

现在,我们将焦点转移到本讲座的核心——蛋白质序列。

蛋白质的基本单位是氨基酸。在DNA或RNA中,有四种核苷酸。通过考虑所有可能的三联体(密码子),只有20种组合在人类中是有效的,这构成了20种标准氨基酸。在本课程中,氨基酸就是我们的token(或称残基)。

我们可以从三个层次研究蛋白质:

  1. 一级结构:氨基酸的线性序列。
  2. 二级结构:由局部折叠形成的模式,如α螺旋和β折叠。
  3. 三级结构:蛋白质的整体三维空间结构。

我们的“词汇表”就是这20种氨基酸。对于DNA/RNA序列,词汇表则是4种核苷酸。

蛋白质中一个非常关键的概念是结合位点,这是蛋白质三维结构上负责与其他分子结合的特异性区域。结合位点的变化会直接影响蛋白质的功能。在自然界中,结构(特别是三维结构)与功能高度相关。

机器学习任务与目标

从机器学习的角度看,我们通常处理的目标是一个 L x L 的矩阵(L为序列长度)。主要有三种形式的目标:

  1. 距离矩阵:预测所有氨基酸对之间的精确距离(以埃为单位)。这是最理想但最难预测的情况。
  2. 距离分布图:将距离划分为若干个区间(例如,2-3埃,3-4埃),将回归问题转化为分类问题。
  3. 接触图:一个二值矩阵,如果两个氨基酸的距离小于一个阈值(通常是8埃),则视为“接触”,否则为“非接触”。这是最简单的情况。

蛋白质的预训练策略

回到Transformer模型,我们只有蛋白质的氨基酸序列。如何进行自监督预训练?我们在课程中学过的两种主要方法是:

代码示例:两种预训练范式

# 1. 自回归预训练 (如GPT)
# 使用掩码注意力,每个位置只能看到之前的token。
# 目标:预测序列中的下一个token。

# 2. 去噪自编码预训练 (如BERT)
# 使用标准注意力,但随机掩码输入序列中15%的token。
# 目标:基于所有上下文(左右两侧)预测被掩码的原始token。

在蛋白质领域,BERT式的预训练是主导方法。这是因为蛋白质中氨基酸的相互作用是高度非线性和全局性的,我们需要利用所有上下文信息。这类模型被称为蛋白质语言模型。

蛋白质序列天然适合被当作集合处理,无需像视觉任务那样进行复杂的分块和投影。

蛋白质语言模型的涌现特性

关键问题是:仅通过序列和BERT式预训练,模型能学到什么?

第一个大规模蛋白质语言模型ESM显示,即使没有任何监督标签,模型的输出表示也能根据氨基酸的物理化学性质(如带负电、带正电、疏水性等)形成有意义的聚类。

模型还能从序列中编码关于二级结构的信息。通过在线性探测(仅训练一个线性分类头,冻结主干网络)评估,发现预训练损失越低,二级结构预测性能越好,这表明更好的预训练能产生更丰富的表示。

随着模型规模扩大到150亿参数,出现了更令人惊讶的特性:直接从注意力图的平均值中,就能观察到与真实接触图高度相似的模式。这意味着关于蛋白质三级结构的关键信息,已经在无监督预训练过程中被模型捕获。

模型规模(参数量)与接触图预测性能呈正相关。最新的巨型模型甚至可以在不需要外部数据库搜索同源序列的情况下,取得优异表现。

此外,通过评估模型在617百万个未知结构的天然蛋白质序列上进行自回归推理时的困惑度,可以衡量模型对序列的“理解”置信度。置信度越高,说明模型学到的表示越可靠。


本节课中,我们一起学习了将Transformer和自监督学习应用于蛋白质序列的基本框架。我们回顾了注意力机制,了解了蛋白质序列的基础知识以及相关的机器学习任务。重点在于,通过大规模的BERT式预训练,蛋白质语言模型能够直接从序列中学习到隐含的结构和功能信息,这为蛋白质研究和药物发现提供了强大的新工具。下一节,我们将继续探讨更具体的模型和应用。

021:蛋白质中的表示学习(第2-2部分)

在本节课中,我们将深入探讨蛋白质语言模型(Protein Language Models)的内部工作机制,特别是如何利用其注意力机制(Attention)来揭示蛋白质的结构与功能信息。我们将学习如何分析注意力图谱,并将其应用于具体的生物信息学任务,如接触图(Contact Map)预测和蛋白质设计。

模型内部表征分析

上一节我们介绍了蛋白质语言模型的输出能力。本节中,我们来看看模型内部的注意力机制,这是理解模型如何“思考”的关键。

注意力图谱本质上是模型在序列处理过程中,每个氨基酸(Token)关注序列中其他所有氨基酸的概率分布。对于一个具有 L 层和 H 个头(Head)的Transformer模型,对于一个长度为 N 的输入序列,我们会得到 L × H 个大小为 N × N 的注意力图谱。

注意力图谱的生物学意义

以下是注意力图谱在生物学分析中展现出的几个关键特性:

  1. 结合位点识别:模型能够仅基于序列信息,让结合位点(Binding Site)周围的氨基酸高度关注该关键区域。这类似于视觉模型中的“前景-背景”分离。
  2. 专业化注意力头:类似于自然语言处理,研究发现某些特定的注意力头会专门关注特定的氨基酸对或结构特征。例如,某个头可能专门负责预测甘氨酸(Glycine)与脯氨酸(Proline)的相互作用。
  3. 捕获结构属性:通过分析所有测试序列的注意力图谱并计算其相关性,可以得到一个20x20的氨基酸关系热图。这个热图与通过传统生物信息学统计方法得到的“替代矩阵”(Substitution Matrix)高度相似,证明模型仅从序列数据中就捕获了结构进化信息。
  4. 高层抽象:对于接触图预测等高层次任务,最有用的、专业化的注意力头通常出现在模型的最后几层,因为那里的表征更为抽象。

从注意力图谱到具体任务预测

仅仅观察单个注意力头的作用是有限的。为了系统性地利用所有注意力图谱进行预测(如接触图预测),我们需要一套处理方法。

我们面临几个问题:

  • 问题一:对称性。真实的蛋白质接触图是对称的(位置i-j的接触等同于j-i),但模型产生的注意力图谱没有此约束。
  • 问题二:信息筛选。我们有 M × H 个注意力图谱,需要找出哪些对当前任务最有用。

处理流程

以下是处理注意力图谱以用于接触图预测的标准流程:

  1. 对称化:对每个 N × N 的注意力矩阵 A,通过计算 (A + A.T) / 2 使其对称。
  2. 去噪(APC):应用平均乘积校正(Average Product Correction, APC)来移除行列层面的噪声。对于对称化后的矩阵 S,APC计算如下:
    S_ij(APC) = S_ij - ( (sum_row_i * sum_col_j) / sum_all )
    其中,sum_row_i 是第i行的和,sum_col_j 是第j列的和,sum_all 是整个矩阵所有元素的和。
  3. 特征加权与筛选:将处理后的所有 M × H 个注意力图谱展平作为特征,训练一个逻辑回归(Logistic Regression)分类器来预测接触(1)与非接触(0)。关键点在于使用 L1正则化
    • 为什么用L1正则化? L1正则化会促使模型产生稀疏(Sparse)的权重向量 W,即让大量不重要的注意力图谱对应的权重变为0。这帮助我们自动筛选出对任务真正有用的少数注意力头。
  4. 预测与评估:使用筛选后的注意力图谱进行加权平均,得到最终的接触图预测,并与真实结构进行对比。

前沿应用:基于表示的蛋白质设计

最新的研究展示了蛋白质语言模型在生成式任务中的巨大潜力。例如,Baker实验室的工作:

  1. 从结构到序列(固定骨架设计):给定一个目标三维结构(骨架),让模型生成能折叠成该结构的氨基酸序列。
  2. 共同设计序列与结构:同时优化序列和三维结构,以设计全新的蛋白质。
  3. 方法:他们利用ESM-2模型的660个注意力图谱特征,仅在上面训练一个简单的线性层,来预测蛋白质中所有氨基酸对之间的距离分布(Distogram,将距离分为18个区间)。这个轻量级模型就能相当准确地预测结构。
  4. 实验验证:更重要的是,他们通过湿实验(在实验室中合成蛋白质)验证了模型设计出的全新蛋白质序列确实能折叠成预期的、自然界中不存在的全新结构,且序列相似性很低(可低至22%),这意味着可能产生全新的功能。

当前模型的局限性

尽管前景广阔,蛋白质语言模型仍有其局限:

  1. 计算复杂度:注意力机制的 O(N²) 复杂度限制了其处理超长蛋白质序列的能力。
  2. 序列长度外推:模型在训练时使用了固定的最大序列长度和位置编码,处理更长的序列时性能会下降。
  3. 存储开销:存储所有序列的所有注意力图谱(N × N × L × H)需要巨大的存储空间,对于大规模数据集不切实际。
  4. 缺乏物理规则约束:当前模型没有明确编码DNA/RNA碱基配对或蛋白质折叠路径等生物物理规则,可能产生不符合物理规律的结果。
  5. 稀有接触预测困难:对于在训练数据中出现频率极低的氨基酸接触模式,即使是大规模模型也难以准确预测。

总结

本节课中我们一起学习了蛋白质语言模型内部注意力机制的分析与应用。我们看到,注意力图谱能够揭示蛋白质的结合位点、捕获氨基酸间的进化关系,并通过专业化头部编码结构信息。通过对称化、APC去噪和L1正则化逻辑回归,我们可以有效地从大量注意力图谱中提取特征,用于接触图预测等任务。最后,我们探讨了该领域的前沿——利用这些模型表示进行蛋白质设计,并生成了经实验验证的全新蛋白质,同时也指出了模型在计算、泛化和物理规则融合方面面临的挑战。表征学习是预训练蛋白质语言模型的核心,为理解和设计生命分子提供了强大的新工具。

posted @ 2026-03-26 08:48  布客飞龙II  阅读(0)  评论(0)    收藏  举报