Transformer相关理解

本文详细介绍了注意力机制在视觉Transformer(如ViT和Swin-Transformer)中的作用,涉及图片分类中的编码器结构、位置编码、Transformer组件及存在的问题。讨论了如何通过改进位置编码和注意力机制应对图片尺寸变化和计算效率,并重点提到了Swin-Transformer的窗口注意力解决方案。

1.何为注意力机制

人生来就有Attention注意力机制,看任何画面,我们会自动聚焦到特定位置特定物体上。对于输入给网络的任何模态,不管是图像、文本、点云还是其他,我们都希望网络通过训练能够自动聚焦到有意义的位置,例如图像分类和检测任务,网络通过训练能够自动聚焦到待分类物体和待检测物体上。

2.图片分类

图片分类中通常不需要解码器模块,所以我们只需要关注编码器部分,其中主要是位置编码模块 Positional Encoding、多头自注意力模块 Muti-Head Attention、前向网络模块 Feed Forward 以及必要的 Norm、Dropout 和残差模块。

  • 位置编码模块 Positional Encoding 用于给输入的序列增加额外的位置信息。
  • 多头自注意力模块 Muti-Head Attention 用于计算全局空间注意力。
  • 前向网络模块 Feed Forward 用于对通道维度信息进行混合。
  • 必要的 Norm、Dropout 和残差模块提供了更好的收敛速度和性能。

3.步骤

  • 将图片分成无重叠的固定大小 Patch (例如 16x16),然后将每个 Patch 拉成一维向量, n 个 Patch 相当于 NLP 中的输入序列长度(假设输入图片是 224x224,每个 patch 大小是 16x16,则 n 是 196),而一维向量长度等价于词向量编码长度(假设图片通道是 3, 则每个序列的向量长度是 768)。
  • 考虑到一维向量维度较大,需要将拉伸后的 Patch 序列经过线性投影 (nn.Linear) 压缩维度,同时也可以实现特征变换功能,这两个步骤可以称为图片 Token 化过程 (Patch Embedding)。
  • 为了方便后续分类,作者还额外引入一个可学习的 Class Token,该 Token 插入到图片 token 化后所得序列的开始位置。
  • 将上述序列加上可学习的位置编码输入到 N 个串行的 Transformer 编码器中进行全局注意力计算和特征提取,其中内部的多头自注意模块用于进行 Patch 间或者序列间特征提取,而后面的 Feed Forward(Linear+ GELU+Dropout+ Linear+ Dropout) 模块对每个 Patch 或者序列进行特征变换。
  • 将最后一个 Transformer 编码器输出序列的第 0 位置( Class Token 位置对应输出)提取出来,后面接 MLP 分类后,然后正常分类即可。

4.存在的问题

  • 不采用超大的 JFT-300M 数据集进行预训练,则效果无法和 CNN 媲美,原因应该是 Transformer 天然的全局注意力计算,没有 CNN 这种 Inductive Bias 能力,需要大数据才能发挥其最大潜力。
  • ViT 无法直接适用于不同尺寸图片输入,因为 Patch 大小是固定的,当图片大小改变时,序列长度就会改变,位置编码就无法直接适用了,ViT 解决办法是通过插值,这种做法一般会造成性能损失,需要通过 Finetune 模型来解决,有点麻烦。
  • 因为其直筒输出结构,无法直接应用于下游密集任务。

5.技术改进

  • 隐式位置编码对于图片长度改变场景更加有效,因为其是自适应图片语义而生成。
  • 论文 How much position information do convolutional neural networks encode? 中已经证明 CNN 不仅可以编码位置信息,而且越深的层所包含的位置信息越多,而位置信息是通过 zero-padding 透露的。既然 Conv 自带位置信息,那么可以利用这个特性来隐式的编码位置向量。大部分算法都直接借鉴了这一结论来增强位置编码。
  • 注意力机制的最大优势是没有任何先验偏置,只要输入足够的数据就可以利用全局注意力学到泛化性能不错的特征。注意力机制还有一个比较大的缺点:因为其全局注意力计算,当输入高分辨率图时候计算量非常巨大。

6.Swin-Transformer

Swin Transformer 算法在解决图片尺度增加带来的巨大计算量问题上有不错的解决方案,但移位窗口注意力模块 Shifted window based Self-Attention (SW-MSA)存在以下问题:

  • 为了能够高效计算,SW-MSA 实现过于复杂
  • SW-MSA 对 CPU 设备不友好,难以部署
  • 或许有更简单更优雅的跨窗口交互机制

基于上述问题,有学者提供了诸多改进方式:

  • 抛弃 SW-MSA,依然需要全局注意力计算模块,意思是不再需要 SW-MSA,跨窗口交互功能由全局注意力计算模块代替,当然这个全局注意力模块是带有减少计算量功能的,典型的如 Twin 和 Imporved MViT。
  • 抛弃 SW-MSA,跨窗口信息交互由特定模块提供,典型的如 Shuffle Transformer 和 MSG-Transformer 等。
  • CSWin Transformer 提出一种新的十字形局部窗口划分方式,具备跨窗口局部注意力计算能力,而不再需要分成 W-MSA(Window based Self-Attention) 和 SW-MSA 两个模块,性能优于 Swin Transformer。

7.Vision Transformer

ViT 的核心在于 Attention,但是整个架构也包括多个组件,简单将 ViT 结构分成 6 个部分:

  • Token 模块,其中可以分成 Image to Token 模块 和 Token to Token 模块, Image to Token 将图片转化为 Token,通常可以分成非重叠 Patch Embedding 和重叠 Patch Embedding,而 Token to Token 用于各个 Transformer 模块间传递 Token,大部分方案都和 Image to Token 做法一样即 Patch Embedding。
  • 位置编码模块,其中可以分成显式位置编码和隐式位置编码,显式位置编码表示需要手动设置位置编码,包括绝对位置编码和相对位置编码,而隐式位置编码一般是指的利用网络生成自适应内容的位置编码向量,其主要目的是为了解决显式位置编码中所遇到的当图片尺寸变化时候位置编码插值带来的性能下降的问题。
  • 注意力模块,早期的自注意力模块都是全局注意力,计算量巨大,因此在图片领域会针对性设计减少全局注意力,典型做法是降低 KV 空间维度,但是这种做法没有解决根本问题,因此 Swin Transformer 中提出了局部窗口自注意力层,自注意力计算仅仅在每个窗口内单独计算,不再存在上述问题。
  • FFN 模块,其改进方向大部分是引入 DW 卷积增强局部特征提取能力,实验也证明了其高效性。
  • Normalization 模块位置,一般是 pre norm。
  • 分类预测模块,通常有两种做法,额外引入 Class Token 和采用常规分类做法引入全局池化模块进行信息聚合
### 三级标题:Transformer模型的趣味解读 Transformer模型以其独特的架构和高效的并行处理能力,彻底改变了自然语言处理领域。为了更好地理解它,我们可以将其比喻成一场音乐会[^1]。 在传统的RNN中,演奏者(处理单元)只能一个接一个地演奏音符(处理数据),而Transformer则像是一个交响乐团,所有乐器(处理单元)可以同时演奏(并行处理)[^1]。 - **自注意力机制**:这是Transformer的核心,可以想象成指挥家让不同的乐手根据演奏的需要调整自己的音量。每个位置的输出都与输入序列中的所有位置有关,这种机制允许模型在处理当前词时考虑上下文中的其他词[^1]。 - **位置编码**:由于Transformer模型没有内置的顺序感,因此它使用位置编码来为模型提供序列中每个元素的位置信息。这就像给每个乐手一张纸条,上面写着他们在乐谱中的位置,以便他们知道何时开始演奏。 - **前馈神经网络**:在Transformer中,每个位置的数据都会通过一个完全连接的前馈网络。这就像每个乐手在演奏时还负责调整自己的乐器,以确保声音和谐[^1]。 - **多头注意力**:通过多头注意力机制,模型可以在不同的表示子空间中并行地关注输入的不同部分。这类似于指挥家让不同的乐器组(如弦乐组和铜管组)专注于不同的音乐段落,从而增强整体的表现力[^1]。 ### 三级标题:Transformer模型的通俗理解 要通俗地理解Transformer模型,我们可以把它看作是一个高效的团队协作系统。在这个系统中,每个成员(处理单元)都能快速地与团队中的其他成员交流,以确保每个人都能根据最新的信息做出决策。 - **并行处理**:与传统的序列处理方法不同,Transformer允许所有处理单元同时工作,这大大提高了处理速度。想象一下,如果一个项目的所有团队成员都能同时贡献他们的想法,而不是等待轮流发言,那么项目的进展将会更快。 - **灵活的上下文理解**:Transformer的自注意力机制让它能够灵活地关注到输入序列中的任何部分。这意味着当处理一个词时,模型可以回顾整个文档来获取更多的上下文信息,从而做出更准确的判断。 - **适应性强的模型结构**:通过多头注意力机制,Transformer能够从多个角度分析数据,这种结构使得模型更加灵活,能够适应各种不同的任务需求[^1]。 ```python # 示例代码:使用Hugging Face Transformers库创建一个文本分类Pipeline from transformers import pipeline # 创建一个文本分类器 classifier = pipeline('sentiment-analysis') # 对文本进行分类 result = classifier("I love using the Transformer model for natural language processing tasks.") print(result) ``` ### 三级标题:相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caoyy686868

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值