多模态大模型:算法、应用与微调
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.2 ViT模型架构

ViT受Transformer模型在NLP领域的可扩展性启发,将一个标准的Transformer模型直接作用于图像,尽量做最少的修改。这样做的好处之一是可以开箱即用地使用Transformer模型在NLP领域的体系结构和高效实现。

为了解决序列太长的问题,如图1-32所示,ViT将一个图像切分成多个小的图像块(patch,或称补丁),然后通过一个嵌入层对这些小块进行线性投影,使一个小块对应输入序列中的一个元素,然后将其输入Transformer的编码器中。输入图像的分辨率为224×224像素,切分后的图像小块的分辨率为16×16像素,此时的序列长度为(224/16)×(224/16)=196,每个元素的维度就是16×16×3=768,这对于一般的机器来说是可以接受的训练Transformer模型的长度。

切分这个操作可以通过卷积来实现,虽然原论文中并没有这样实现,但是通过卷积进行维度变换是一个很巧妙的操作。如上述,我们的目的是将一个224×224×3的矩阵变换成一个196×768的矩阵,那么可以通过对原图进行卷积操作来实现,卷积核大小为16×16×3,步长为16,padding为0,经过卷积运算后,会得到维度为14×14×768的特征图,然后按照前面两个维度进行展开,就得到了196×768的矩阵。

在输入Transformer模型之前,ViT借鉴了BERT的分类方法,在输入序列的前面拼接了一个特殊的可以学习的词元(CLS)来表示分类结果。之所以这样做,是因为ViT只有编码器而没有解码器,因此编码器也要起到一定的解码器输出的作用,那么额外添加的这个词元就可以理解为开启解码的标志,类似于标准的Transformer解码器在对输入进行嵌入时右移一位的操作。由于在计算注意力时是所有元素之间两两计算,因此这个特殊的词元在训练的过程中也能够提取到图像全局的特征。最终输入Transformer模型的矩阵维度为(196+1)×768,而输出时则通过切片操作将第一个CLS词元取出,其维度是1×768,接着通过一个简单的MLP头进行分类即可。

图1-32 ViT模型架构

在计算注意力分数时,输入元素两两之间都需要进行计算,所以说得到的注意力矩阵并不存在顺序问题。但是对于图像来说,它是一个整体,切分后的图像也是有位置信息的,并不能随意组合。类似于NLP任务,ViT在对图像进行分块映射时,也加入了位置编码(Position Embedding,或称位置嵌入)。

最终ViT的模型结构如图1-32所示,ViT中的编码器层与Transformer中的编码器层类似。分块图像的嵌入或者上一个编码器层的输出,首先会通过一个标准化层,然后通过一个多头注意力层,在这之后会加入一个残差连接,再通过一个标准化层和一个MLP层,最后再加入一次残差连接。

在形式上,对于任意一个图像,其中(HW)表示图像的分辨率,C表示颜色通道的数量,首先需要将其切分成的图像块序列,其中(PP)表示图像块的分辨率,表示切分后图像块的个数。对于每个图像块,还需要通过线性变换将其转换成向量的形式,并且拼接上表示分类的词元,最后加上位置编码,即

其中D表示向量维度。接下来就是L层编码器操作,在每一层中,“标准化+多头注意力+残差连接”可以表示为

再经过“标准化+MLP+残差连接”,表示为

经过多次编码提取特征后,我们对最后一层的输出进行切片,取第一个词元的向量,再经过一次标准化后分类:

编码器的每一层会重复L次,每次在注意力层都对输入序列中的每个图像块进行上下文相关的特征编码,捕获图像块之间丰富的空间关系。在图像上应用注意力机制使得ViT能够整合整个图像的信息,如图1-33所示,根据多头注意力权重计算图像空间中信息整合的平均距离,类似于卷积神经网络中的感受野大小。可以发现,在刚开始时,有的注意力头之间的距离很近,而有的注意力头之间的距离很远,这说明一开始模型可以关注全局信息。随着网络深度的增加,多头之间的距离在变大,这说明网络已经不再通过邻近像素点获取特征,而是已经学习到了高层的语义信息。

图1-33 ViT中多头注意力权重对应的空间信息整合距离随网络深度变化示意

整体来看,ViT的模型架构也是相当简洁的,它的特殊之处就在于把图像处理为Transformer编码器能够接收的输入序列。