Transformer

CNN 与 RNN 的问题

CNN和RNN代表了这样一个深度学习时代,将人类的先验知识直接在模型中完全的表达出来。于是人类关于图像信息的平移不变性先验和在动物视觉研究得到的关于视觉皮层的理解被凝结到了CNN中,而关于序列信息的序列性先验和条件概率的思想被凝结到了RNN中。
这种先验置入直接来讲是很有效的,CNN和RNN似乎准确表达了对于图像数据和序列数据的直接行为,但是先验同样也是限制。CNN的卷积核只能处理邻近卷积区域的内容,即使是深度CNN在结构上也是最终有限的。而RNN的序列结构对信息传播形成顺序强制,即使是Attention机制也只能在结构上缓解这种有限性。
诚然CNN和RNN已经发展到这样一个状态,为了减弱CNN的问题产生了Deep CNN用来形成巨大的感受野和特征提取级次,由此派生出来Batch Normalization用以解决训练稳定问题,ShortCut用以解决退化问题;为了优化RNN产生了Encoder-Decoder用以职责解耦,产生了LSTM和GRU解决长程依赖问题,产生了Attention用以解决顺序强制问题。于是,当所有思路已经尽力后,CNN和RNN的的主要的问题就转向了自己,即架构本身。
于是,扬弃先验注入结构的思路,放弃CNN和RNN的结构,成为了最疯狂也是最合理的选择,Transformer机制横空出世。

注意力机制

缩放点积注意力

我们已经知道了在传统Attention机制中,attention指的是注意力权重,它表达着解码器中序列的第项解码时对由BidiRNN编码的隐藏层关注的程度,从而计算出上下文向量。
因此中同时编码了查询者和被请求者的指称和它们的关系,这在RNN中是合理的因为有稳定的序列结构,但是如果我们要抛弃RNN的结构,我们必须解耦这个结构为两个独立的可分离的向量,称为Query和Key向量,并且将隐层理解为数据本身,即Value。这就是QKV的出发点。
在经典 Attention 中,注意力分数通常由一个小神经网络计算出来,这叫加性注意力。它的形式是 ,其中:
这里 是解码器当前状态,可以理解为“我现在想找什么信息”; 是编码器第 个位置的隐藏状态,可以理解为“这个位置提供了什么信息”。为了判断二者是否匹配,模型先用 和 把它们变换到同一个比较空间,再相加、过 ,最后用 压成一个标量分数。
所以加性注意力的本质是:给定两个隐藏状态,用一个小网络判断它们的相关程度。
Transformer 换了一种更清晰的拆分方式。它不再直接拿两个隐藏状态去做复杂比较,而是把每个 token 的表示投影成三种角色:
  • (Query):表示当前位置想要寻找什么信息。
  • (Key):表示当前位置可以被怎样的查询匹配到。
  • (Value):表示当前位置真正提供的信息内容。
这样一来,注意力计算就被分成两件事:先用 和 计算“该看谁”,再用得到的权重去加权汇总 中的信息。也就是说, 主要负责匹配关系, 才负责被传递的信息内容。
因此,Transformer 中的注意力分数可以直接用点积表示:
如果 和 方向相近,点积就大,说明第 个位置应该更多关注第 个位置;如果方向不相近,点积就小,注意力权重也会更低。
写成矩阵形式,就是:
再用这个注意力矩阵加权汇总信息:
这就是乘性注意力,也叫点积注意力。考虑防止 的数值过大,还需要除以缩放因子 ,得到:
注意到的是,此时 是一个 的矩阵,其中 是序列长度,也就是 token 的个数。我们取 softmax 时是按 Query 的维度取的,即对同一行的所有项取 softmax。
更具体地说,假设输入序列有 个 token,每个 token 的表示维度是 ,于是输入矩阵可以写成:
通过三个线性变换得到:
因此:
这个矩阵就是注意力分数矩阵。第 行第 列的元素表示:第 个 token 作为 Query 时,对第 个 token 的 Key 有多关注。经过 softmax 后,第 行所有数加起来等于 1,表示第 个 token 要从所有 token 处分别读取多少信息。
最后再乘以 :
也就是说,输出仍然有 行,每一行对应一个 token 的新表示,只是这个新表示已经融合了它从其他 token 读取的信息。
举一个很小的例子。假设一句话有 3 个 token:
那么 是一个 矩阵:
第一行表示“我”这个位置分别关注“我”“喜欢”“学习”多少;第二行表示“喜欢”这个位置分别关注三个词多少;第三行表示“学习”这个位置分别关注三个词多少。
如果经过 softmax 后得到:
那么第二行 的意思是:在更新“喜欢”这个 token 的表示时,模型从“我”读取 10% 的信息,从“喜欢”自己读取 30% 的信息,从“学习”读取 60% 的信息。这个例子不代表真实语言规律,只是说明注意力矩阵每一行的含义。
再举一个维度例子。若一句话长度 ,模型维度 ,单头注意力里取 ,那么:
于是:
这说明注意力矩阵描述的是 token 与 token 之间的关系,而输出向量描述的是每个 token 融合上下文后的新特征。
总之这就是 Transformer 的 Scaled Dot-Product Attention。
notion image
这里 Mask 是掩码矩阵,用于切断 之间的某些连接,强制让注意力不能看到某些位置。它最重要的用途之一是自回归训练。
在自回归语言模型中,模型要学习:
也就是说,预测当前位置时,只能看到当前位置之前的 token,不能偷看未来 token。可是训练时为了并行计算,我们通常会把整句话一次性输入 Transformer。这样如果不加限制,第一个位置就可能看到第二个、第三个位置的信息,训练目标就被破坏了。
因此需要使用 causal mask(因果掩码)。它的作用是:第 个 token 只能关注第 个位置及其之前的位置,不能关注未来位置。
例如序列为:
如果按行表示 Query 位置,按列表示 Key 位置,那么不加 mask 时,每个 token 都可以看所有 token:
这里的 表示不屏蔽。为了做自回归训练,需要屏蔽未来位置,mask 矩阵可以写成:
第一行表示“我”只能看“我”,不能看未来的“喜欢”和“学习”;第二行表示“喜欢”可以看“我”和“喜欢”,但不能看未来的“学习”;第三行表示“学习”可以看前面所有 token。
计算时把这个 mask 加到注意力分数上:
由于 ,被 mask 的位置在 softmax 后权重会变成 0,也就不会参与信息读取。这样,Transformer 虽然一次性并行处理整句话,但每个位置仍然只能使用它在自回归生成时应该能看到的信息。

多头注意力

这种注意力机制能够提升效率和有效性的关键在于多头注意力。它的意思是:对于同一个输入,不只计算一次注意力,而是让模型从多个不同的子空间中分别计算注意力。每一个子空间由一个头 完成。
这里直接从输入矩阵 出发:
第 个注意力头有自己独立的三组投影矩阵:
于是第 个头先构造自己的 Query、Key、Value:
然后输入缩放点积注意力:
每个头的输出维度为:
如果一共有 个头,把它们在特征维度上拼接起来,就得到:
然后再通过一个输出矩阵 混合:
其中:
因此最终输出维度为:
这里 用来把多个头的信息重新整合回模型的表示空间。
notion image

交叉注意力与自注意力

  • Cross Attention
传统Attention是一种Cross Attention,的形成来源于Decoder,而来源于Encoder。
因此:
因此Cross Attention是一种高效的解码器,在Transformer的解码器结构中,核心模块就是交叉注意力。
以往的解码器,对于RNN without attention,输入会被在推进过程中被污染和破坏,造成长程关联弱,对于CNN,利用的是全连接层,是稠密的没有稀疏结构。
Cross Attention保证了信息的无损性,且不需要连续推进过程,一次完成,可以并行,注意力机制构造了FFN没有的稀疏指向结构。
  • Self Attention
只有当Q,V解耦,扬弃RNN后才会产生自注意力机制,对于输入,直接构造:
通常自注意力机制是作为一个高效的编码器存在的,例如在Transformer的编码器结构中,核心的模块就是自注意力机制。
以往的编码器,对于RNN,需要顺序的传递序列信息,通常造成长程关联弱,对于RNN,需要不断加深网络来建立大尺度连接,而对于Self Attention,信息的互访是一步完成的。
并且Self Attention机制的拥有极其领先的自指思想。

Implementation

值得注意的是,代码中为了减少计算成本我们是一次性计算qkv:
再做多头分解:

Transformer in NLP

Transformer让自然语言处理进入一个新时代,从Transformer(2017)开始几乎所有的自然语言方向的架构都基于Transformer的变种。

Transformer 架构

位置编码

Transformer 的直接问题是,由于不采用 RNN 的递推结构,数据的序列性先验没有自然注入到模型中。对于自注意力层,我们有:
其中 , 是 token 数量, 的每一行表示一个 token 的向量。 作用在特征维度上,而不是作用在 token 位置上。
更准确的说法是:不带位置编码的 self-attention 对 token 顺序具有置换等变性。设 是一个置换矩阵,用来交换输入 token 的顺序,那么:
于是:
同理:
接下来考虑注意力矩阵。设原始注意力分数矩阵为:
交换输入顺序后,新的注意力分数矩阵为:
代入 和 :
由于 ,所以:
这说明注意力矩阵并没有保持完全不变,而是行和列都按照同一个置换被重新排列了。直观地说,如果输入 token 的顺序被交换,那么“谁查询谁”的关系表也会跟着交换。
再看注意力输出。忽略缩放和 softmax 的细节,原始输出可以写成:
交换后有:
由于置换矩阵满足 ,得到:
也就是说,输入顺序被置换后,输出也只是按照同样方式被置换。交换并没有被“抵消”成原来的结果,而是一路传递到了输出中。
这就是置换等变性的含义:如果输入顺序改变,输出顺序也随之改变。更直观地说,假设我们已经知道原输入 的输出是 ,那么当输入变成 时,我们甚至不需要重新推理,也能知道输出一定是 ,也就是把原输出按同样方式交换即可。
这说明不带位置编码的 self-attention 并没有真正利用 token 的绝对顺序。它会处理 token 之间的内容关系,但没有额外机制知道“这个 token 原本在第几个位置”。因此,如果任务需要区分不同词序,模型就必须获得某种位置信息。
因此没有位置编码时,Transformer 无法区分同一组 token 的不同排列。对于序列文字“技术之本质只是缓慢地进入白昼”和“白昼之本质只是缓慢地进入技术”,如果不额外提供位置信息,模型只能看到相同 token 的集合,很难区分它们的先后结构。
为了解决这个问题,必须对数据做一次处理,这个处理传入了数据的位置先验,称为Positional Encoding,考虑在加上项以破坏交换对称性:
这样交换对称性就被破坏了。有许多方法构建矩阵。
  • Sinusoidal PE
这正是Transformer自己使用的思路:
这里就是词的位置(索引),而是特征向量(例如embedding)的维度索引,是特征向量的维度数,故。
这个编码的优势在于它是平移变换幺正的:
这一性质保证了,位置移动不会改变PE矩阵的范数,不会在过程中发生衰减或者爆炸,保证训练稳定性和保证能量与信息量的稳定性。并且模型有能力学会相对位置关系,即学习相对的相位。
最后我们考虑当时保持不变的情况,这意味着编码相同,可以导出满足的条件为:
这意味着只有在在前期可能有相同编码,并且由于证书限制,这个概率是更小的。
但是这种编码的特性是加性编码,它将PE直接加到Embedding上去,这在一定程度上破坏了语义,后来发展起来的RoPE解决了这个问题,保留了幺正变换特性。
  • Rotary Positional Encoding
为了不破坏Embedding,RoPE考虑的是对注意力矩阵做Rotate,考虑,此时每一行代表一个position,因此取出第行和第行,分别旋转度和度:
其中是旋转矩阵:
可以看到如果,那么当时就完成了一个周期,这在长文本是非常不利的,因此我们同样引入正余弦位置编码中的频率项:
  • 可学习PE:通过将PE当做一个linear层,缺陷是必须指定大小。

架构

现在我们就容易得到整体的Transformer architecture:
notion image
对于编码器部分,每一层主要由多头自注意力和前馈网络组成。多头自注意力负责让不同 token 之间交换信息,前馈网络负责对每个 token 自身的特征表示做非线性增强。每个子层都会配合残差连接和 LayerNorm,而不是 BatchNorm。
对于解码器部分,每一层多了一个结构:先使用掩码多头自注意力,保证自回归生成时当前位置不能看到未来 token;然后使用交叉注意力,让解码器读取编码器输出;最后再经过前馈网络。每个子层同样配合残差连接和 LayerNorm。
我们最后需要关注的是 Feed Forward 层。它通常称为 position-wise feed-forward network,也就是说,它对每个 token 独立应用同一个 MLP。这里输入 是一整段序列的表示矩阵,形状为:
其中 是 token 数量, 是每个 token 的特征维度。 的每一行代表一个 token,因此可以写成:
通常有:
所以中间层形状为:
最终输出又回到:
等价地,对第 个 token 的表示 ,有:
这说明 FFN 不负责 token 之间的信息融合;token 之间的信息融合已经由 attention 完成。FFN 的作用是在每个 token 自身的特征维度上做表达增强:先用 把 投射到更高维度,经过非线性激活后,再用 投射回 。
这个结构类似于 CNN 中的 卷积:它不直接混合空间位置,而是在每个位置上独立加工通道特征。Transformer 的 FFN 也是类似的,它不直接混合 token 位置,而是在每个 token 上独立加工特征维度。

自回归语言建模与 GPT

GPT-1 与预训练微调

OpenAI在2018年提出了GPT 1
传统的NLP有许多监督/自监督任务用于训练模型,哪种方法最优尚未达成共识。并且,通过这些方法学习到的表征如何运用到具体的任务也为形成统一。GPT 1的思路是,使用自监督的预训练和监督微调。
在预训练阶段,对海量文本进行顺序自回归语言建模,只使用transformer的decoder,并且带有掩码注意力:
notion image
注意到,GPT将batch norm换成了layer norm,这是因为
1.在大规模训练中文本长度是动态的,而在batch GD中通常用0填补,而batch norm在这种行为中会收到干扰。
2.大模型的一个batch样本量通常是非常小的,batch norm的稳定性不够
而到了微调阶段,则使用以下任务规划:
notion image
即分类任务,蕴含任务(前提和假设),相似性判断,多选择,这些任务被编排成相同的形式。
我们曾在CNN的迁移学习提到过,微调的基本机制是信息高斯先验,在大模型这里,预训练阶段学习到的是语言模式中普遍的信息,得到的平滑解具有极高的泛化性,当我们进行微调时,我们不是觉得这个任务的模式和预训练的模式是接近的,而是我们希望完成这个任务的模式应当仅仅通过学习残差来完成,从而继承泛化性,同时具有解决特殊问题的能力。
但是这样的结果是,由于一定程度上偏离了平滑解,因此造成相当严重的“遗忘”问题,这意味着一个通才变成了一个专家。而GPT 1通过让模型同时训练无监督来抵抗这种遗忘:
这里是监督任务损失函数,是无监督任务损失函数。并且消融实验表明,同时进行无监督学习是很重要的:
We observe that the lack of pre-training hurts performance across all the tasks, resulting in a 14.8% decrease compared to our full model.
预训练微调机制的关键问题在于,尽管我们已经预训练出了高效编码的语言模型,为了解决每一个特别的问题,我们需要单独微调一个模型出来,这是十分低效的

GPT-2 与预训练 Prompt

为了更进一步解决GPT 1的预训练-微调范式带来的低效率问题,以及更进一步缓解由微调造成的遗忘问题,OpenAI在2019年提出了GPT 2:
[PDF] Language Models are Unsupervised Multitask Learners | Semantic Scholar
It is demonstrated that language models begin to learn these tasks without any explicit supervision when trained on a new dataset of millions of webpages called WebText, suggesting a promising path towards building language processing systems which learn to perform tasks from their naturally occurring demonstrations. Natural language processing tasks, such as question answering, machine translation, reading comprehension, and summarization, are typically approached with supervised learning on taskspecific datasets. We demonstrate that language models begin to learn these tasks without any explicit supervision when trained on a new dataset of millions of webpages called WebText. When conditioned on a document plus questions, the answers generated by the language model reach 55 F1 on the CoQA dataset matching or exceeding the performance of 3 out of 4 baseline systems without using the 127,000+ training examples. The capacity of the language model is essential to the success of zero-shot task transfer and increasing it improves performance in a log-linear fashion across tasks. Our largest model, GPT-2, is a 1.5B parameter Transformer that achieves state of the art results on 7 out of 8 tested language modeling datasets in a zero-shot setting but still underfits WebText. Samples from the model reflect these improvements and contain coherent paragraphs of text. These findings suggest a promising path towards building language processing systems which learn to perform tasks from their naturally occurring demonstrations.
[PDF] Language Models are Unsupervised Multitask Learners | Semantic Scholar
GPT 2使用的模型为改进版的Transformer,将Layer Normalization提到shortcut之前,改进shortcut的初始化。
GPT2的关键贡献是直接抛弃原有的预训练微调架构,提出预训练-提示架构。这是因为研究人员发现,当数据规模到达一定程度的时候,模型能够学会那些语言结构中相当高级的规律和语义行为。因此,我们只需要让模型在推理过程中自回归任务模式即可。
GPT-2 的关键变化是进一步弱化“为每个任务单独设计监督微调格式”的思路,转而强调 few-shot prompting:许多 NLP 任务都可以被改写成语言模型续写问题。也就是说,只要把任务描述、输入和期望输出组织成一段文本,模型就可以通过继续生成文本来完成任务。
这就是 prompt 的基本思想:不一定改变模型结构,也不一定为每个任务重新训练一个分类头,而是通过自然语言提示,把任务变成模型已经熟悉的“根据上下文预测后续文本”。
第一个 few-shot 例子是情感分类:
模型如果继续生成:
就相当于完成了情感分类。
第二个 few-shot 例子是翻译。它的形式不是只写一句“请翻译”,而是先给出少量示范,例如:
这就是说,我们重复几次相同的模式,例如中文1-英文1,中文2-英文2,中文3-英文3,当我们再输入中文4时,模型将会找到前三个对应当中的模式结构,给出英文4,我们称这种方式为提示(Prompt)。
这两个例子说明,few-shot prompting 的核心不是训练新参数,而是把少量示范直接放进上下文,让模型通过上下文学习任务格式。Prompt 的本质不是一个额外的算法,而是一种任务表达方式:把原来需要专门建模的任务,转写成语言模型可以直接续写的文本格式。GPT-2 的重要意义就在于,它展示了大规模预训练语言模型可以通过 prompt 在许多任务上表现出一定的 zero-shot 能力。
这种思路看似很简单,但是在那个时代,人们对语言模型的理解还在外推语法结构的语义连续性上,对于非常高级的逻辑和推理是几乎没有理解的。并且,通过更新权重来学习任务能力是主导思路。通过自回归Prompt来实现多任务是一次根本的范式转换,但是不难理解,相比于微调模型,GPT 2(1.5B参数量)的精度是远远不够的。

GPT 3 and Scaling Law

一种直接的想法就是,扩大模型的规模和训练集的规模,看看模型是否在这个过程中任务的准确率是否会有提升,这就是OpenAI在2020年提出GPT 3的思路:
模型上它在GPT2的基础上引入稀疏注意力以减少计算量。通过训练8个模型观察scaling规律,它直接给出了这样一个实验数据:
notion image
可以看到,对于1.3B Params的模型,在对话中给予prompt带来的提升是不大的。但是对于更大的模型,就开始有稳定的提升,而对于175B这样的超大模型,你会看到自然语言prompt会增强prompt的效果,即自然语言本身的结构信息进一步传入了。
GPT3在验证scaling law的同时也发现了无限制的scaling会带来的严重问题:
  • 社会偏见与毒性:模型不仅会统计到语言的高级规律,也会统计到社会偏见,会被数据集中的错误信息污染
  • 幻觉:模型在外推时会创造一些统计相似的但是虚假的信息
  • 仍然缺乏推理,逻辑等更加抽象和根本的功能,这说明了纯粹文本统计结构的有限性和边际效益递减

掩码语言建模与 BERT

掩码语言建模将语言建模为
其中 表示第 个 token 被遮挡,模型需要根据其余上下文恢复它。这个思路最成功的实现之一就是 BERT。BERT 只使用 Transformer 的编码器,因此它本质上是一个编码模型,而不是像 GPT 那样的生成模型。

掩码重建

BERT 被训练为一个编码器,它的直接输出不是下一个词,而是一组上下文特征表示。
在掩码重建任务中,模型需要把被遮挡位置还原成词表中的某个 token。因此 BERT 会在编码器输出之后接一个线性层和 softmax 层,把隐藏表示投射回词表空间。
notion image
除此之外,BERT 还通过 NSP(Next Sentence Prediction,下一句预测)任务训练编码器,让编码器形成更强的全局语义视野。NSP 的形式是给出两个句子 A 和 B,让 BERT 判断 B 是否真的是 A 的下一句。
当 BERT 被微调用于下游任务时,通常保留编码器主体,只把输出头换成具体任务需要的形式。
把预训练、任务头替换和下游微调三个过程合在一起,就得到如下流程:
notion image

Segment Embeddings

为了同时支持掩码重建和下一句预测两个任务,BERT 扩展了 Embedding 的含义。
除了用于提供词语语义空间的 Token Embedding,以及告诉模型序列位置的 Position Embedding,BERT 还引入 Segment Embeddings,用来告诉模型:当前输入中包含两个不同的句子片段。
notion image
在微调阶段,Segment Embeddings 也可以用来区分不同输入片段,例如在问答任务中区分问题和段落。

分类 token

许多任务,包括 NSP,并不需要输出一个完整序列,而是只需要输出一个概率或一个类别。这意味着模型需要把整段序列的特征汇总成一个全局表示。
一个直接想法是用全连接层汇总所有 token 的 embedding,但 BERT 使用的是 CLS token。CLS 可以理解为一种通过自注意力学习出来的隐式序列摘要。
CLS 是每个输入序列开头的特殊 token,用来承载全局信息。通过自注意力机制,所有 token 都会与 CLS 发生交互。因此,如果任务要求 CLS 具有全局视野,例如 NSP,训练过程会推动 CLS 学会汇总整段输入的信息。
同时,其他 token 也可以从 CLS 中读取全局信息,这在一定程度上有助于表示学习。
不过,后续研究表明,CLS token 本身并不一定带来很大的性能提升,它更像是一种简洁的全局读出设计。

Transformer In CV

Transformer在MLP领域取得一定成功后,就有人开始将其迁移到计算机视觉领域,形成了CONV和Self Attention的混合架构,也有人完全抛弃了CONV,但是它们由于使用了稀疏注意力,导致计算效率低下,因此ResNet在大部分时间内仍然是SOTA。为什么NLP的成功如此难以迁移到图像,我们从自回归图像的发展过程就可以看出来。

AutoRegressive Image

自回归图像早有历史,早在2017年就Google就尝试过使用RNN,并且像素级别回归图像,但是受限于RNN架构本身的限制,未能取得理想成果。
2018年,Image Transformer用Transformer来进行回归,但是计算量过大,同样有限。
Open AI将图像下采样,在采样后的图像上自回归以缓解困难,提出了iGPT,但是牺牲了图像质量
这一切的问题都在于,对于同等语义量,图像的tokens长度远远长于文本,自回归虽然在自然语言成功了,在图像方面则不是这样,仅仅使用Tranformer解码器是根本不够的。
并且,图像结构并不保证具有良好的顺序条件概率结构,这种建模在本质上是一种扭曲的近似。

视觉 Transformer

架构

2020年Google团队提出Vision Transformer,通过引入Patch思路,使用最基本的全局注意力架构,取得了成功:
基本思路是,将图像切成nxn份,对每一份展平为向量,并linearly embed,可学习PE,然后把个当作tokens传入正常的transformer编码器中,如下图
notion image
可以看到,这是一个监督学习任务,结构中采用Pre-LayerNorm,激活函数使用GELU(Gauss Error Linear Unit),它是现代发现的在某些问题上比RELU更好的激活函数,定义为,为高斯分布的概率累计函数,图像为
notion image
可以看到在0点是非奇异的。

更高分辨率

假设模型是在 224x224 分辨率、16x16 的 Patch 上预训练的(序列长度 = (224/16)^2 = 196)。在微调或推理时,如果输入图像是 384x384,我们仍然使用 16x16 的 Patch。此时,序列长度变为 (384/16)^2 = 576。这比预训练时的 196 要长得多。
Transformer 本身可以处理更长的序列(只要算力允许),但问题在于位置嵌入。在预训练中,模型为序列中的 前 196 个位置 学习了特定的位置编码。现在序列长度变成了 576,第 197 到第 576 个位置 没有对应的、经过训练的位置编码。
ViF的思路是,位置编码应该对应于图像中的空间位置,而不是序列中的索引。将预训练的位置嵌入矩阵视为一个低分辨率的 2D 网格,然后,使用 2D 插值算法(如双线性插值)将这个 14x14 的网格上采样到目标分辨率所需的网格大小(例如 24x24,因为 384/16=24)。 这样,每个 Patch 的位置编码都根据其在原始图像 2D 空间中的实际位置进行了重新计算,保持了空间关系的连续性。
这就是ViF最关键的图像结果先验的嵌入。

Scaling

想要证明ViF的成功性,必须表明,尽管数据量少时可能无法击败CNN的SOTA,但是数据量大时,可以具有非常优良的增长。
notion image
并且Vision Transformers appear not to saturate within the range tried, motivating future scaling efforts.

学会成为更好的 CNN

首先对于底层的Attention的PCA分析表明,它们在关注基础视觉元素
notion image
并且在embedding矩阵的相似度分析中发现,Transformer仅仅通过PE学到了行列结构
notion image
这就是为什么hybrid效果一般甚至更差,因为CNN的结构先验其实被网络自己学到了。然后通过注意力距离分析发现,即使在早期层,注意力也已经非常长程化了,而不需要CNN的下采样的感受野扩大过程。
notion image
以上结果都表明,ViF再次验证了弱架构先验的中心思路。

掩码自编码器

掩码自编码器并不是稀奇的技术,在Bert那里就已经这样做了,通过遮挡一部分文字,然后让编码器编码未被遮挡的文字,用Linear+Softmax解码全部的文字。MAE的创新在于他解决了图像和语言两种信息的差异性所导致的问题。

高比例掩码

  • Information density is different between language and vision
文字是高精度编码的,图像数据是高度冗余的,这使得a missing patch can be recovered from neighboring patches with little high-level understanding of parts, objects, and scenes。
He Kaiming的解决方法是掩码大部分区域:
notion image
即让模型需要花费更多的功夫恢复图像,从而建立更高级的表征。这造成一个双赢局面,高度掩码减小了内存占用,并且同时提高了训练效果。
并且得到
notion image
这就是为什么He Kaiming说:
The model infers missing patches to produce different, yet plausible, outputs (Figure 4). It makes sense of the gestalt of objects and scenes, which cannot be simply completed by extending lines or textures. We hypothesize that this reasoning-like behavior is linked to the learning of useful representations.
同样文章还研究了不同掩码方法的影响
notion image
很容易理解,随机掩码的效果最好,模型不会因为学习到掩码规律而偷懒。

轻量级解码器

  • The autoencoder’s decoder, which maps the latent representation back to the input, plays a different role between reconstructing text and images
这指的是bert仅仅通过线性层+softmax就可以讲特征投射回语言空间,因为文字是离散的,这是个classification问题,而对于图像,需要引入完整的transformer decoder,但是必须是不对称的,our decoder is lightweight and reconstructs the input from the latent representation along with mask tokens如下图
notion image
效果是显著的 With a vanilla ViT-Huge model, we achieve 87.8% accuracy when finetuned on ImageNet-1K. This outperforms all previous results that use only ImageNet-1K data.

Scaling 扩展

最后是Scaling方面
notion image
性能仍然在增长,这表明了强大的scaling前景。
 
Chapter 6 生成模型Chapter 4 循环神经网络
Loading...