Transformer与注意力机制解析III | 豆包MarsCode AI 刷题

90 阅读2分钟

前两篇文章讲述了注意力机制的由来以及自注意力和多头注意力机制。这篇文章将继续更新,到了激动人心的Transformer架构。

前言

我们知道最初的Transformer架构被应用于文本分析,可以有效缓解由于token的存储空间有限造成的模型理解能力限制,之后研究计算机图形学的学者们发现,将Transformer架构移动到CV(Computer Vision)上面也取得了很好的效果,也就是ViT。

处理文本的Transformer和处理图像的Transformer在架构上略有不同,但是总体思路类似都是利用注意力机制。我们只需要对图像进行切片处理,即将图像切割成一个个的patch,再加上一些pos_embedding,不就形成了与文本类似的输入了吗?

经典的Transformer结构

transformer结构

从上图中我们可以看出Transformer的架构,Transformer编码器由多个相同层堆叠而成,每一层包含两个子层,其中一个是多头注意力池化,另一个是逐位置的前馈神经网络,并且每个子层周围都是用来残差链接。

Transformer解码器同样由多个相同层堆叠而成。相比于编码器,解码器还在两个子层之间插入了第三个子层,称为Encoder-Decoder Attention。

位置编码position embedding

通常使用: pi,2j=sin(i100002j/d)p_{i,2j}=\sin (\frac{i}{10000^{2j/d}}) pi,2j+1=cos(i100002j/d)p_{i,2j+1}=\cos (\frac{i}{10000^{2j/d}})

因为它具有平移不变性这个很好的特性。 其中i表示第i行,2j或是2j+1表示列。

ViT的结构

image.png

对比上面提到的两个网络,我们可以观察到,ViT(Vision Transformer)在处理输入数据时采用了不同的顺序。具体来说,ViT首先对输入进行归一化(Normalization),然后再通过多头注意力机制(Multi-Head Attention)进行特征提取。这种先归一化后应用注意力机制的策略,有助于提高模型在处理复杂数据时的稳定性和性能。

Patch Embedding

在这一部分,ViT的主要任务是将输入图像切片(Patch)进行展平(Flatten)。具体来说,这个过程涉及将每个切片转化为一个一维向量,从而将其转换为适合后续处理的格式。这种展平操作不仅有助于保留每个切片的局部特征,还为后续的特征学习和注意力机制提供了必要的输入。通过这种方式,ViT能够更有效地捕捉图像中的重要信息,并为后续的深度学习过程打下良好的基础。

尾言

因为是我自己学习的笔记,所以讲得比较粗糙,仅作抛砖引玉。 欢迎交流讨论。