交叉注意(Cross-Attention):连接不同序列与模态的注意力机制详解
在人工智能领域,“注意力”(Attention)机制的出现被认为是继深度学习之后的又一革命性突破。它模拟了人类认知过程中“选择性聚焦”的能力——当我们阅读一篇文章时,会不自觉地将注意力集中在关键信息上;当我们观察一幅图像时,会优先关注前景物体而非背景细节。2017年,论文《Attention Is All You Need》首次提出“纯注意力模型”(Transformer),彻底摆脱了循环神经网络(RNN)和卷积神经网络(CNN)的依赖,仅通过注意力机制就实现了序列建模的突破性性能。
在Transformer的众多变体中,交叉注意(Cross-Attention) 扮演着连接不同序列、不同模态的关键角色。与自注意力(Self-Attention,Q、K、V来自同一序列)不同,交叉注意允许模型从一个序列(或模态)中生成“查询”(Query),并从另一个序列(或模态)中获取“键”(Key)和“值”(Value),从而建立两个独立数据单元之间的关联。这种机制使得模型能够处理跨模态任务(如图像-文本交互)、序列转换任务(如机器翻译)以及多源信息融合任务(如问答系统),成为现代AI模型(如GPT、CLIP、DALL-E)的核心组件。
本文将从基础概念出发,系统解析交叉注意的原理、架构、应用场景、实现细节及未来趋势,帮助读者全面掌握这一关键技术。
目录#
1. 注意力机制基础#
在深入交叉注意之前,我们需要先理解注意力机制的核心概念。注意力机制的本质是通过计算“相关性权重”来动态聚焦于输入数据中的关键信息,其灵感来源于人类的注意力分配过程。
1.1 注意力机制的直观理解#
想象你正在阅读一本书:当你看到“苹果”这个词时,你的大脑会自动联想到它的颜色、形状、味道,甚至相关的记忆(如“苹果公司”“牛顿的苹果”)。这种“根据当前信息(查询)主动关联其他信息(键值)”的过程,就是注意力机制的核心逻辑。
在AI模型中,注意力机制通过三个核心元素实现这一过程:
- 查询(Query, Q):当前需要关注的“问题”或“上下文”(如“苹果”这个词的表示);
- 键(Key, K):用于匹配查询的“候选信息”(如所有可能与“苹果”相关的概念);
- 值(Value, V):与键对应的“具体内容”(如“红色”“圆形”“水果”等属性)。
注意力机制的目标是:根据查询与键的相似度(相关性),为每个值分配一个权重,最终输出加权求和后的值(即“聚焦后的信息”)。
1.2 缩放点积注意力(Scaled Dot-Product Attention)#
2017年,Transformer论文《Attention Is All You Need》提出了缩放点积注意力(Scaled Dot-Product Attention),成为现代注意力机制的标准范式。其计算公式如下:
其中:
- :查询矩阵,包含 个查询向量,每个向量维度为 ;
- :键矩阵,包含 个键向量,维度与查询一致;
- :值矩阵,包含 个值向量,维度为 ;
- :缩放因子,用于缓解高维度下点积结果过大导致的softmax梯度消失问题;
- :将相关性得分归一化为权重(和为1)。
计算步骤:
- 计算相似度:通过 计算查询与每个键的点积(相似度得分);
- 缩放:除以 避免数值过大;
- 归一化:通过softmax将得分转换为权重;
- 加权求和:用权重对值向量加权求和,得到注意力输出。
1.3 自注意力(Self-Attention):注意力机制的“内部聚焦”#
自注意力是注意力机制的一种特殊形式,其核心特点是查询、键、值来自同一输入序列。例如,在处理句子“我爱机器学习”时,自注意力会让每个词(如“爱”)关注其他词(如“我”“机器学习”),从而捕捉句子内部的依赖关系(如“我”是“爱”的主语,“机器学习”是“爱”的宾语)。
自注意力的公式与缩放点积注意力一致,区别仅在于输入来源: 均由同一序列通过线性变换生成(即 ,其中 是输入序列的嵌入表示, 是可学习参数)。
自注意力的优势在于能够建模序列内部的长距离依赖关系,这也是Transformer在NLP任务中超越RNN的关键。然而,当需要处理两个不同序列或模态(如“图像”与“文本”、“源语言”与“目标语言”)时,自注意力就显得无能为力——此时,交叉注意应运而生。
2. 交叉注意的定义与核心思想#
2.1 定义:连接两个独立序列的注意力#
交叉注意(Cross-Attention)是注意力机制的一种变体,其核心特征是:查询(Q)来自一个序列(或模态),而键(K)和值(V)来自另一个序列(或模态)。
通俗地说,自注意力是“自己关注自己”( intra-sequence attention),而交叉注意是“自己关注别人”( inter-sequence attention)。通过这种设计,交叉注意能够显式地建模两个独立数据单元之间的关系,实现信息的跨序列/跨模态流动。
2.2 核心思想:打破模态壁垒,实现信息交互#
交叉注意的核心思想可以概括为**“跨域关联建模”**:
- 跨序列关联:如在机器翻译中,将“中文句子”(源序列)与“英文句子”(目标序列)关联,实现语言转换;
- 跨模态关联:如在图像 captioning 中,将“图像特征”(视觉模态)与“文本描述”(语言模态)关联,实现视觉到语言的映射。
这种关联能力使得模型能够融合不同来源的信息,解决单一模态无法完成的复杂任务。例如,在视觉问答(VQA)中,模型需要同时理解图像内容(“图像中有几只猫?”)和问题文本,而交叉注意正是连接图像特征与问题特征的桥梁。
2.3 交叉注意的符号表示#
为了与自注意力区分,交叉注意通常用 、、 表示,其中 和 是两个不同的序列或模态。其计算公式与缩放点积注意力类似,但输入来源不同:
例如,在Transformer的编码器-解码器结构中:
- 来自解码器的隐藏状态(目标序列);
- 和 来自编码器的输出(源序列)。
3. 交叉注意的工作原理#
交叉注意的工作流程可以分为输入准备、注意力计算、输出融合三个阶段。我们以Transformer的编码器-解码器结构为例,详细解析其工作原理。
3.1 场景:Transformer编码器-解码器中的交叉注意#
Transformer是首个大规模应用交叉注意的模型,其核心架构包含编码器(Encoder)和解码器(Decoder):
- 编码器:处理输入序列(如源语言句子),输出包含序列语义信息的特征矩阵(作为后续交叉注意的 和 );
- 解码器:生成输出序列(如目标语言句子),在生成过程中通过交叉注意“查询”编码器的输出,实现对源序列的关注。
在解码器的每个层中,通常包含两个注意力子层:
- 自注意力子层:解码器内部的自注意力,用于建模目标序列内部的依赖关系(如生成英文句子时,“I”与“love”的关联);
- 交叉注意力子层:即本文的主角,用于关注编码器输出的源序列信息(如生成英文单词时,关注对应的中文单词)。
3.2 工作流程详解#
步骤1:输入准备(Query、Key、Value的生成)#
- Key和Value的生成:编码器对源序列(如中文句子“我爱机器学习”)进行处理,输出特征矩阵 ( 是源序列长度, 是模型维度)。 通过线性变换生成 和 ( 是可学习参数)。
- Query的生成:解码器在生成目标序列(如英文句子“I love machine learning”)时,当前时刻的隐藏状态 ( 是目标序列的时间步)通过线性变换生成 ( 是可学习参数)。
步骤2:注意力计算(相关性权重的分配)#
-
相似度得分计算:计算查询 与每个键 ()的点积,得到相似度得分矩阵 。例如,若 对应英文单词“love”,则 中的每个元素表示“love”与中文源序列中每个词(“我”“爱”“机器学习”)的相关性。
-
缩放与归一化:对得分矩阵 进行缩放(除以 , 是 和 的维度),再通过softmax归一化得到权重矩阵 。此时, 表示目标词“love”对源词 的关注度(权重和为1)。
例如,若 ,则“love”主要关注中文源序列中的“爱”(权重0.8)。
步骤3:输出融合(加权求和与残差连接)#
-
加权求和:用权重矩阵 对值矩阵 加权求和,得到交叉注意的输出 ( 是 的维度)。 包含了源序列中与目标词“love”最相关的信息(如“爱”的语义特征)。
-
残差连接与层归一化:为了缓解深层网络的梯度消失问题,交叉注意的输出会与原始查询 进行残差连接(),再通过层归一化(Layer Normalization)得到最终输出,作为解码器下一层的输入。
3.3 多头部交叉注意(Multi-Head Cross-Attention)#
与自注意力类似,交叉注意也通常采用“多头部”设计(Multi-Head Attention):将 分割为 个并行的子空间(“头”),每个头独立计算注意力,最后将结果拼接并通过线性变换融合。
多头部交叉注意的优势在于:
- 捕捉多样化关联:不同头可以关注不同类型的关系(如一个头关注“语义匹配”,另一个头关注“位置对应”);
- 增强模型表达能力:并行计算多个注意力分布,提升模型对复杂关联的建模能力。
其计算公式为:
其中,, 是第 个头的投影矩阵, 是最终的融合矩阵。
4. 交叉注意与自注意力的区别#
交叉注意与自注意力是Transformer中最核心的两种注意力机制,二者的区别主要体现在输入来源和功能定位上,具体对比如下表:
维度 | 自注意力(Self-Attention) | 交叉注意(Cross-Attention) |
---|---|---|
输入来源 | 均来自同一序列(如单个句子) | 来自序列A, 来自序列B(不同序列/模态) |
核心功能 | 建模序列内部的依赖关系(如句子中词与词的关联) | 建模序列之间的依赖关系(如源语言与目标语言的对齐) |
典型应用 | 文本理解(如BERT)、单模态序列建模 | 序列转换(如翻译)、跨模态任务(如图文交互) |
信息流向 | 内部信息聚合 | 跨域信息交互 |
计算复杂度 | ( 是序列长度) | ( 是Q长度, 是K/V长度) |
示例对比#
- 自注意力:在处理句子“我爱机器学习”时,“学习”通过自注意力关注“机器”,形成“机器学习”这一短语的语义融合;
- 交叉注意:在将“我爱机器学习”翻译成英文时,生成“I”的过程中,交叉注意会关注中文的“我”,生成“love”时关注“爱”,实现双语对齐。
5. 交叉注意的典型应用场景#
交叉注意的跨域关联能力使其在序列转换、跨模态融合、多源信息处理等任务中发挥着不可替代的作用。以下是几个典型应用场景:
5.1 自然语言处理(NLP):序列到序列转换#
5.1.1 机器翻译(Machine Translation)#
机器翻译是交叉注意的“成名作”。在Encoder-Decoder架构中,编码器处理源语言句子(如中文),解码器通过交叉注意持续“查询”编码器的输出,生成目标语言句子(如英文)。
交叉注意的作用:实现源语言与目标语言的单词对齐。例如,在翻译“我爱中国”时,解码器生成“I”时,交叉注意权重集中在“我”;生成“love”时,权重集中在“爱”;生成“China”时,权重集中在“中国”。这种对齐机制显著提升了翻译的准确性。
5.1.2 文本摘要(Text Summarization)#
文本摘要任务需要将长文本(如新闻文章)压缩为短摘要。此时,编码器处理原始文本(源序列),解码器生成摘要(目标序列),交叉注意用于从原始文本中提取关键信息(如“事件主体”“核心观点”)。
案例:在摘要“Transformer模型通过注意力机制实现了长距离依赖建模”中,交叉注意会引导解码器关注原始文本中“Transformer”“注意力机制”“长距离依赖”等关键词。
5.2 计算机视觉(CV):视觉-语言交互#
5.2.1 图像Captioning(图像描述生成)#
图像Captioning任务要求模型为图像生成文本描述(如“一只猫坐在沙发上”)。此时,图像特征提取器(如CNN)将图像编码为视觉特征序列(),语言解码器生成文本描述时,通过交叉注意查询视觉特征,实现“看图说话”。
交叉注意的作用:将文本单词与图像区域对齐。例如,生成“猫”时,交叉注意权重集中在图像中猫的区域;生成“沙发”时,权重集中在沙发区域。
5.2.2 视觉问答(Visual Question Answering, VQA)#
VQA任务要求模型根据图像回答自然语言问题(如“图中有几只狗?”)。此时,问题文本作为 ,图像特征作为 ,交叉注意用于定位图像中与问题相关的区域(如“狗”的位置)。
案例:对于问题“图中最大的物体是什么?”,交叉注意会引导模型关注图像中尺寸最大的区域(如“桌子”),并结合问题语义生成答案。
5.3 多模态融合:跨模态理解与生成#
5.3.1 CLIP:文本-图像跨模态对齐#
OpenAI的CLIP模型通过交叉注意实现了文本与图像的深度对齐。其核心思想是:将文本编码器的输出作为 ,图像编码器的输出作为 ,通过交叉注意学习“文本描述”与“图像内容”的关联,从而实现零样本图像分类(如用“一只戴着帽子的猫”直接匹配图像)。
5.3.2 DALL-E:文本到图像生成#
DALL-E(及后续的DALL-E 2、3)能够根据文本 prompt 生成图像。其解码器在生成图像时,通过交叉注意持续查询文本 prompt 的特征(),确保生成的图像与文本描述一致(如“一只穿着宇航服的猫在火星上”)。交叉注意在此过程中扮演“导航”角色,引导图像生成的语义准确性。
5.4 其他领域#
- 语音识别:将音频特征()与文本序列()对齐,实现语音到文本的转换;
- 视频理解:将视频帧序列()与文本描述()关联,实现视频 captioning 或视频问答;
- 推荐系统:将用户行为序列()与商品特征序列()关联,通过交叉注意捕捉用户兴趣与商品属性的匹配关系。
6. 交叉注意的实现细节与技巧#
在实际应用中,交叉注意的实现需要注意输入处理、效率优化、训练稳定性等问题。以下是一些关键细节和实践技巧:
6.1 输入处理:序列长度与模态对齐#
6.1.1 序列长度不匹配问题#
交叉注意的 和 通常来自不同序列,长度可能差异很大(如长文本与短图像特征)。此时需注意:
- 填充(Padding):对短序列进行填充(如用0向量),并通过注意力掩码(Attention Mask)忽略填充部分的权重(避免模型关注无意义的填充值);
- 截断(Truncation):对超长序列进行截断(如BERT限制输入长度为512 tokens),或采用滑动窗口等策略处理长序列。
6.1.2 模态差异处理#
不同模态的特征空间可能存在差异(如文本是离散符号,图像是连续像素)。需通过以下方式对齐:
- 特征标准化:对 进行层归一化(LayerNorm),确保数值分布一致;
- 模态嵌入:将不同模态的特征映射到同一维度空间(如通过线性层将图像特征从2048维压缩到512维,与文本嵌入维度一致)。
6.2 效率优化:降低计算复杂度#
交叉注意的计算复杂度为 ( 是 的长度, 是 的长度),当 和 较大时(如 ),复杂度会达到 ,导致模型训练和推理缓慢。以下是常用优化方法:
6.2.1 稀疏交叉注意#
通过限制注意力的作用范围,将 复杂度降为 或 :
- 局部注意力:仅允许 关注 中局部窗口内的元素(如每个 只关注前后5个 );
- 随机注意力:随机采样部分 与 计算相似度(如Performer模型的“随机特征映射”);
- 结构化注意力:通过预设模式(如带状、对角线)限制注意力权重的非零区域。
6.2.2 序列压缩#
对 序列进行压缩,减少 的大小:
- 池化(Pooling):对 序列进行平均池化或最大池化,将长度 压缩为 ;
- 聚类(Clustering):通过聚类算法(如K-means)将 聚合成 个中心,用中心向量替代原始序列。
6.3 训练技巧:提升模型性能#
6.3.1 注意力正则化#
防止模型过度依赖某些 元素(如训练集中的噪声):
- 注意力 dropout:在softmax之后对权重矩阵 应用dropout,随机丢弃部分注意力权重;
- 权重稀疏化:通过L1正则化鼓励 中的大部分元素为0,增强模型的可解释性。
6.3.2 多头部优化#
多头部交叉注意中,不同头可能学习到冗余信息。可通过以下方式提升头部多样性:
- 头部 dropout:训练时随机丢弃部分头部的输出,迫使剩余头部学习不同特征;
- 任务导向头部划分:在多任务学习中,为不同任务分配专用的注意力头(如一个头用于对齐,一个头用于语义融合)。
6.4 代码实现示例(PyTorch)#
以下是用PyTorch实现交叉注意的简化代码(基于 nn.MultiheadAttention
):
import torch
import torch.nn as nn
class CrossAttentionLayer(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
# 多头部交叉注意(需指定kdim和vdim,若与qdim不同)
self.cross_attn = nn.MultiheadAttention(
embed_dim=d_model, # Q的维度
num_heads=num_heads,
kdim=d_model, # K的维度(若与Q不同,需显式指定)
vdim=d_model # V的维度(若与Q不同,需显式指定)
)
self.norm = nn.LayerNorm(d_model) # 层归一化
self.dropout = nn.Dropout(0.1) # dropout层
def forward(self, q, k, v, attn_mask=None):
# q: [seq_len_q, batch_size, d_model](查询,如解码器隐藏状态)
# k: [seq_len_k, batch_size, d_model](键,如编码器输出)
# v: [seq_len_v, batch_size, d_model](值,如编码器输出)
# attn_mask: [seq_len_q, seq_len_k](注意力掩码,忽略填充)
# 交叉注意计算
attn_output, _ = self.cross_attn(
query=q, key=k, value=v, attn_mask=attn_mask
)
# 残差连接 + dropout + 层归一化
output = self.norm(q + self.dropout(attn_output))
return output
# 测试
d_model = 512
num_heads = 8
batch_size = 2
seq_len_q = 10 # Q的长度(目标序列)
seq_len_kv = 20 # K/V的长度(源序列)
# 随机生成输入
q = torch.randn(seq_len_q, batch_size, d_model) # Q: [10, 2, 512]
k = torch.randn(seq_len_kv, batch_size, d_model) # K: [20, 2, 512]
v = torch.randn(seq_len_kv, batch_size, d_model) # V: [20, 2, 512]
cross_attn = CrossAttentionLayer(d_model, num_heads)
output = cross_attn(q, k, v) # 输出: [10, 2, 512]
print(output.shape) # torch.Size([10, 2, 512])
7. 交叉注意面临的挑战与解决方案#
尽管交叉注意能力强大,但在实际应用中仍面临诸多挑战,以下是主要问题及应对方案:
7.1 挑战1:长序列计算成本过高#
问题:当 和 的长度均为 时,交叉注意的计算复杂度为 ,远超硬件算力上限(如GPU显存不足)。
解决方案:
- 稀疏化注意力:如FlashAttention(2022)通过分块计算和显存优化,将长序列注意力的速度提升2-4倍,显存占用降低5-10倍;
- 序列压缩:如使用“瓶颈编码器”将长序列 压缩为固定长度的向量(如ViT中的CLS token),再进行交叉注意;
- 混合精度训练:采用FP16或BF16精度,减少显存占用和计算量。
7.2 挑战2:跨模态对齐困难#
问题:不同模态的特征空间差异大(如文本是离散的符号序列,图像是连续的像素矩阵),导致交叉注意难以准确建立关联(如“红色”与图像中红色区域的对齐)。
解决方案:
- 对比学习(Contrastive Learning):如CLIP通过“文本-图像对”的对比损失(Contrastive Loss),将文本和图像特征拉到同一语义空间;
- 模态桥接嵌入:设计专用的跨模态嵌入层(如将图像特征通过视觉语言预训练模型(如ALBEF)映射到文本嵌入空间);
- 引导式注意力:在训练中引入先验知识(如人工标注的“文本-图像区域对齐”标签),指导交叉注意的权重分配。
7.3 挑战3:注意力权重可解释性差#
问题:交叉注意的权重矩阵 被认为具有一定的可解释性(如“关注哪个区域”),但在深层模型中,权重分布往往模糊不清(如多个头的权重叠加后难以解读),导致模型决策过程不透明。
解决方案:
- 注意力可视化:将权重矩阵 热力图与原始输入(如图像、文本)叠加,直观展示关注区域(如在图像captioning中,将“猫”对应的权重热力图叠加在猫的区域);
- 结构化注意力设计:如使用“硬注意力”(Hard Attention,仅选择一个或少数几个 元素),使权重分布更稀疏、更易解释;
- 注意力蒸馏:训练一个简单模型(如线性层)模拟交叉注意的权重分布,通过简化模型反推决策逻辑。
7.4 挑战4:训练不稳定性#
问题:交叉注意的softmax层对输入敏感,当 与 的点积值过大时,softmax容易饱和(梯度接近0),导致模型收敛困难。
解决方案:
- 缩放因子优化:除了标准的 ,可设计自适应缩放因子(如根据 和 的方差动态调整);
- 温度参数(Temperature):在softmax中引入温度参数 (),通过调整 控制权重分布的“尖锐度”( 越小,权重越集中);
- 梯度裁剪(Gradient Clipping):限制交叉注意层的梯度范数,防止梯度爆炸。
8. 未来发展趋势#
随着AI技术的发展,交叉注意作为跨域关联的核心机制,其应用场景和技术形态将不断扩展,以下是几个值得关注的趋势:
8.1 多模态交叉注意的深度融合#
未来的模型将支持更多模态(文本、图像、音频、视频、3D点云等)的交叉注意。例如:
- 视频-文本-音频融合:在视频理解任务中,同时引入音频特征(如“狗叫声”)和文本问题(如“视频中狗在做什么?”),通过多模态交叉注意定位视频帧、音频片段和文本关键词的关联;
- 3D场景理解:将3D点云(如房间布局)与文本指令(如“把桌子移到窗户边”)通过交叉注意对齐,实现机器人的空间导航。
8.2 动态交叉注意:自适应调整注意力策略#
当前交叉注意的结构(如头数、窗口大小)通常是固定的,未来可能发展为“动态策略”:
- 任务自适应注意力:根据任务类型(如翻译 vs 摘要)自动调整头数和稀疏程度;
- 上下文自适应注意力:根据输入序列的长度、复杂度动态调整窗口大小(如长文本用稀疏注意力,短文本用密集注意力);
- 学习式注意力策略:通过强化学习训练“注意力控制器”,自主决策关注哪些 元素。
8.3 交叉注意与外部知识融合#
将外部知识库(如知识图谱、百科全书)作为 引入交叉注意,增强模型的推理能力:
- 检索增强生成(RAG):在生成文本时,通过交叉注意查询外部数据库(如维基百科),动态引入事实性知识(如“爱因斯坦出生于哪一年?”→ 查询知识库后生成答案);
- 知识图谱交叉注意:将知识图谱中的实体和关系作为 ,文本作为 ,实现“文本-知识”的深度关联(如推理“小明喜欢苹果”中“苹果”是“水果”还是“公司”)。
8.4 高效交叉注意硬件加速#
随着交叉注意在大模型中的广泛应用(如GPT-4的多模态能力),专用硬件加速将成为必然趋势:
- 芯片级优化:设计支持稀疏矩阵乘法的专用AI芯片(如NVIDIA的Hopper架构对Transformer的优化);
- 内存高效计算:通过FlashAttention等技术进一步优化显存访问模式,实现TB级序列的交叉注意计算。
9. 总结#
交叉注意作为注意力机制的重要变体,通过“查询来自A,键值来自B”的设计,打破了序列和模态之间的壁垒,成为连接不同数据域的核心桥梁。从机器翻译到图文生成,从语音识别到自动驾驶,交叉注意的跨域关联能力推动着AI模型向更复杂、更智能的方向发展。
本文系统梳理了交叉注意的基础原理、工作机制、应用场景、实现技巧及未来趋势。我们看到,尽管交叉注意面临长序列成本、跨模态对齐等挑战,但其在多模态融合、知识推理等领域的潜力是无限的。随着技术的进步,交叉注意将继续作为AI模型的“神经中枢”,助力构建更强大、更通用的人工智能系统。
10. 参考文献#
- Vaswani, A., et al. (2017). Attention is all you need. Advances in Neural Information Processing Systems.
- Devlin, J., et al. (2018). BERT: Pre-training of deep bidirectional transformers for language understanding. NAACL.
- Carion, N., et al. (2020). End-to-end object detection with transformers. ECCV.
- Radford, A., et al. (2021). Learning transferable visual models from natural language supervision. ICML.
- Parmar, N., et al. (2018). Image transformer. ICML.
- Dao, T., et al. (2022). FlashAttention: Fast and memory-efficient exact attention with IO-awareness. NeurIPS.
- Lewis, M., et al. (2020). Retrieval-augmented generation for knowledge-intensive NLP tasks. NeurIPS.
- Lu, J., et al. (2019). VilBERT: Pretraining task-agnostic visiolinguistic representations for vision-and-language tasks. NeurIPS.
- Krizhevsky, A., et al. (2012). ImageNet classification with deep convolutional neural networks. NeurIPS.
- Wang, L., et al. (2022). Scaling vision-language pre-training with masked autoencoders. ICML.