ViT学习笔记(一) 基本的原理和框架结构

原论文地址:https://arxiv.org/pdf/2010.11929

首先大致通读一下原论文,这是很有必要的,但不必完全读懂,因为会有高手给我们解读,比如:

【Transformer系列】深入浅出理解ViT(Vision Transformer)模型-CSDN博客

解决图像分类任务的利器------Vision Transformer

以下是综合各种知识来源,我的笔记:

基本原理:

Vision Transformer (ViT) 是一种基于Transformer架构的图像分类模型,它通过将图像分割成小块(patches)并将其转换为序列,相当于二维的图像数据转换为类似文本中单词序列的一维数据形式,以便输入到 Transformer Encoder 中进行处理然后输出,从而实现图像分类任务。

以下是ViT模型的详细工作原理:

1. 图像分块(Patch Partition)

• 原始图像:假设输入的图像大小为 H x W x C,其中 H 和 W 是图像的高度和宽度,C 是通道数(通常为3,即RGB)。

• 分块:图像被划分为固定大小的 P x P 的图像块。假设每个图像块的大小为 P x P,那么图像将被划分为 (H/P) x (W/P) 个图像块。

2. 图像块线性嵌入(Patch Embedding)

• 展平图像块:每个图像块被展平为一维向量。假设每个图像块的大小为 P x P x C,那么展平后的每个图像块将是一个长度为 P^2C 的向量。

• 线性映射层:展平后的图像块向量通过一个线性映射层(全连接层),将其映射到一个指定的embedding维度 D。这个线性映射层的作用是将每个图像块的原始维度 P^2C 转换为一个较低维度的向量,通常称为embedding向量。

3. 添加位置编码(Position Embedding)

• 位置编码:为了给图像块添加位置信息,模型会为每个embedding向量加上一个可学习的位置编码(position embedding)。位置编码的形式可以是可学习的向量,通常与embedding向量具有相同的维度 D。

• 拼接序列:所有图像块的embedding向量加上位置编码后,形成一个序列,这个序列将作为Transformer编码器的输入。

4. 类别标记(Class Token)

• 类别标记:为了进行图像分类,ViT模型在输入序列的最前面添加一个特殊的类别标记(class token)。这个类别标记是一个可学习的向量,与embedding向量具有相同的维度 D,并且在训练过程中会与图像的类别信息相关联。

5. Transformer编码器

• Transformer编码器:输入序列(包括类别标记和图像块embedding向量)被送入Transformer编码器。Transformer编码器由多个相同的层组成,每个层包括多头自注意力机制(Multi-Head Self-Attention)和前馈神经网络(Feed-Forward Neural Network),并且在每个子层后都应用层归一化(Layer Normalization)和残差连接(Residual Connection)。

• 自注意力机制:在自注意力机制中,每个输入向量(包括类别标记和图像块embedding向量)都会与其他所有输入向量进行交互,捕捉全局上下文信息。

• 前馈神经网络:每个位置的向量通过一个两层的前馈神经网络进行非线性变换。

6. 分类

• 类别输出:在经过Transformer编码器处理后,类别标记(class token)对应的输出向量被提取出来。这个向量包含了整个图像的全局信息。

• 分类器:类别标记的输出向量通过一个线性层和一个softmax层进行分类,得到图像属于各个类别的概率分布。

7. 训练与推理

• 训练:在训练过程中,模型通过最小化交叉熵损失函数来优化参数,目标是使模型能够准确地预测图像的类别。

• 推理:在推理过程中,输入图像经过上述步骤后,模型输出预测的类别概率,最终选择概率最高的类别作为预测结果。

总结来说,ViT模型通过将图像划分为小块并转换为序列,利用Transformer编码器处理这些序列,最终实现图像分类任务。其核心在于利用Transformer的全局自注意力机制来捕捉图像的全局上下文信息。

概念解析:

全局自注意力机制

Transformer 的全局自注意力机制是一种在 Transformer 架构中使用的重要机制。它允许模型在处理序列数据时,对整个输入序列中的所有位置进行关注,从而能够捕捉到不同位置之间的长距离依赖关系。

全局自注意力机制通过计算每个位置与其他所有位置之间的注意力权重,来确定每个位置在当前任务中的重要程度。然后,根据这些注意力权重对输入序列中的所有位置进行加权求和,得到每个位置的新表示。这种机制使得 Transformer 能够有效地处理长序列数据,并且在自然语言处理等领域取得了非常出色的效果。例如,在机器翻译、文本生成、问答系统等任务中,全局自注意力机制可以帮助模型更好地理解输入文本的语义和结构,从而生成更准确和流畅的输出。

Transformer编码器中的前馈神经网络

在Transformer编码器中,前馈神经网络(Feed-Forward Neural Network, FFN)是一个关键组件,它在每个Transformer层中都存在,并且在多头自注意力机制(Multi-Head Self-Attention)之后应用。前馈神经网络的主要作用是对输入数据进行非线性变换,从而增强模型的表达能力。以下是前馈神经网络的详细介绍:

1. 结构

前馈神经网络通常由两个线性变换层和一个非线性激活函数组成。具体结构如下:

  • 第一层线性变换 :输入向量 x 首先通过一个线性变换层,将其映射到一个中间维度 d_ff(通常比输入维度 d_model 大)。这个线性变换可以表示为:

    [

    x' = W_1 x + b_1

    ]

    其中,W_1 是权重矩阵,b_1 是偏置向量。这一步与CNN常见的中间隐藏层的作用异曲同工。

    • 为什么中间维度 d_ff通常比输入维度 d_model 大?

      增加模型的表达能力

      当中间维度比输入维度大时,网络能够学习到更复杂的特征表示。例如,在自然语言处理中,如果输入是一个单词的低维向量表示(),通过将其映射到一个更高维的空间(),模型就有更多的 "自由度" 来捕捉单词之间潜在的语义关系和语法结构。就好像在一个更大的 "画布" 上描绘更细致的内容,能够挖掘出输入数据中隐藏的、低维空间难以表示的信息。
      避免信息瓶颈

      如果中间维度小于输入维度,可能会导致信息瓶颈。假设输入数据包含丰富多样的信息,而中间层维度过小,在信息传递过程中,很多有用的信息可能会丢失。以图像识别为例,输入是一张包含大量细节(如纹理、形状、颜色等)的图像,其维度代表了这些信息。如果中间层维度过小,在映射过程中,图像的某些重要特征可能无法被有效传递和处理,就像把一幅大画通过一个过小的通道,部分画面会被遮挡或丢失。
      有利于梯度传播

      较大的中间维度可以使梯度在反向传播过程中有更广阔的 "空间" 来流动。在神经网络的训练中,梯度用于更新网络的参数。如果中间层维度过小,梯度可能会很快消失或变得不稳定。而足够大的可以为梯度提供一个相对稳定的传播环境,使得网络能够更有效地学习。例如,在深度神经网络中,中间层的梯度就像是在一个复杂的管道系统中流动的水流,足够大的管道可以让水流(梯度)更顺畅地传播,避免堵塞(梯度消失)或泛滥(梯度爆炸)的情况。

  • 非线性激活函数 :在第一层线性变换之后,通常会应用一个非线性激活函数,如ReLU(Rectified Linear Unit):

    [

    x'' = \text{ReLU}(x') = \max(0, x')

    ]

  • 第二层线性变换 :经过非线性激活函数处理后的向量 x'' 再通过一个线性变换层,将其映射回原始维度 d_model

    [

    y = W_2 x'' + b_2

    ]

    其中,W_2 是权重矩阵,b_2 是偏置向量。

2. 作用

前馈神经网络的主要作用包括:

  • 非线性变换:通过非线性激活函数(如ReLU),前馈神经网络能够捕捉输入数据中的复杂模式和非线性关系。
  • 特征提取:前馈神经网络在每个Transformer层中对输入数据进行进一步的特征提取,增强模型的表达能力。
  • 信息整合:前馈神经网络通过两个线性变换层和非线性激活函数,将输入数据映射到不同的空间,并在这些空间中进行信息整合。

3. 残差连接与层归一化

在Transformer编码器中,前馈神经网络通常与残差连接(Residual Connection)和层归一化(Layer Normalization)结合使用,以提高模型的训练稳定性和性能。具体步骤如下:

  • 残差连接 :在前馈神经网络的输出 y 与输入 x 之间添加残差连接,即:

    [

    y_{\text{residual}} = x + y

    ]

    残差连接有助于缓解梯度消失问题,并允许模型更容易地学习恒等映射。

  • 层归一化 :在残差连接之后,应用层归一化,对每个样本的特征进行归一化处理,以稳定训练过程:

    [

    y_{\text{normalized}} = \text{LayerNorm}(y_{\text{residual}})

    ]

  • **残差连接与层归一化的概念复习:**残差连接是一种在神经网络中常用的结构,它将输入直接与经过若干层处理后的输出相加,使得网络可以更容易地学习输入和输出之间的残差,有助于解决深度网络中的梯度消失和梯度爆炸问题,提高模型的训练效果和性能。层归一化是对一层中的神经元的激活值进行归一化处理。它可以使得数据的分布更加稳定,加速模型的训练过程,提高模型的泛化能力。比如在自然语言处理任务中,层归一化可以对词向量或者中间层的输出进行归一化,使得模型对不同的输入数据具有更好的适应性。

4. 实现细节

在实际实现中,前馈神经网络的中间维度 d_ff 通常是输入维度 d_model 的4倍,即 d_ff = 4 * d_model。这种设计选择是为了在保持模型复杂度的同时,提供足够的非线性变换能力。

5. 总结

前馈神经网络在Transformer编码器中扮演着重要角色,通过非线性变换和特征提取,增强了模型的表达能力。结合残差连接和层归一化,前馈神经网络能够有效地处理输入数据,并在Transformer层中进行信息整合,从而提升模型的性能。

相关推荐
bohu8316 分钟前
sentinel学习笔记5-资源指标数据统计
笔记·sentinel·statisticslot
海棠AI实验室24 分钟前
机器学习基础算法 (一)-线性回归
人工智能·python·机器学习
璞~25 分钟前
MQTT 课程概览 (学习笔记)02
笔记·学习
星霜旅人26 分钟前
均值聚类算法
人工智能·机器学习·支持向量机
Asiram_26 分钟前
大数据机器学习与计算机视觉应用08:反向传播
大数据·机器学习·计算机视觉
长风清留扬28 分钟前
机器学习中的密度聚类算法:深入解析与应用
人工智能·深度学习·机器学习·支持向量机·回归·聚类
看星猩的柴狗30 分钟前
机器学习-正则化技术
人工智能·机器学习
程序员非鱼30 分钟前
深度学习任务简介:分类、回归和生成
人工智能·深度学习·分类·回归·生成
dwjf32132 分钟前
机器学习(二)-简单线性回归
人工智能·机器学习·线性回归
AI_Mind33 分钟前
Gemini 2.0:面向智能体时代的全新 AI 模型
人工智能·搜索引擎