Vit Transformer的网络结构
时间: 2025-05-16 11:53:55 浏览: 16
### Vision Transformer (ViT) 网络架构详解
Vision Transformer (ViT) 是一种基于 Transformer 的视觉模型,其核心思想是将图像分割为固定大小的 patches 并将其视为 token 序列输入到 Transformer 中[^2]。以下是 ViT 的主要组成部分及其工作原理:
#### 图像分块与嵌入
为了适应 Transformer 对序列数据的要求,ViT 首先会将输入图像划分为多个不重叠的小块(patches),这些小块会被展平并映射为一维向量表示。随后,每个 patch 向量都会被加上位置编码以保留空间信息[^1]。
```python
import torch
from einops import rearrange
def image_to_patches(image, patch_size=16):
"""
将图像切分成固定的patch大小。
参数:
image: 输入图像张量 (B, C, H, W)
patch_size: 单个patch的高度和宽度
返回:
patches: 切割后的patch序列 (B, N, D),其中N为patch数量,D为单个patch维度
"""
B, C, H, W = image.shape
assert H % patch_size == 0 and W % patch_size == 0, "Image dimensions must be divisible by the patch size."
num_patches_h = H // patch_size
num_patches_w = W // patch_size
patches = rearrange(image, 'b c (h p1) (w p2) -> b (h w) (c p1 p2)', p1=patch_size, p2=patch_size)
return patches
```
接着,在每个 patch 嵌入的基础上附加一个可训练的位置编码矩阵来捕捉像素的空间关系[^3]。
---
#### 多头自注意力机制
Transformer 编码器的核心部分之一是多头自注意力(Multi-head Self-Attention)。它允许模型关注不同区域之间的全局依赖关系而无需显式的卷积操作。具体来说,给定一组查询 Q、键 K 和值 V,计算如下公式实现注意力权重分配:
\[
\text{Attention}(Q,K,V)= \text{softmax}(\frac{QK^\top}{\sqrt{d_k}})V
\]
在实际应用中,通常采用缩放点乘法作为相似度衡量标准,并通过多组独立的线性变换提升表达能力。
---
#### Feed Forward Network (FFN / MLP Block)
除了注意力模块外,每一层还包含前馈神经网络 FFN 或称为 Multi-Layer Perceptron (MLP)。该子结构由两个全连接层组成,中间夹有 GELU 激活函数以及 Dropout 正则化技术防止过拟合现象发生:
1. **扩展通道数**: 使用第一个线性投影增加特征维度至四倍;
2. **非线性激活**: 经过 GELU 函数引入非线性特性;
3. **压缩回原尺寸**: 第二个线性层恢复初始维度完成最终输出。
```python
class MlpBlock(torch.nn.Module):
def __init__(self, dim, mlp_dim, dropout_rate=0.1):
super().__init__()
self.fc1 = torch.nn.Linear(dim, mlp_dim)
self.gelu = torch.nn.GELU()
self.dropout = torch.nn.Dropout(dropout_rate)
self.fc2 = torch.nn.Linear(mlp_dim, dim)
def forward(self, x):
x = self.fc1(x)
x = self.gelu(x)
x = self.dropout(x)
x = self.fc2(x)
return x
```
---
#### Classification Token 及 Head 输出
类似于自然语言处理中的 [CLS] 标记,ViT 在序列开头加入了一个特殊的 classification token 。随着后续各层运算推进,此标记逐渐融合整幅图片的信息用于最后预测类别标签。经过一系列 Encoder 层后提取得到对应隐藏状态并通过额外定义好的 Linear Layer 转换成目标分类数目概率分布形式得出结果。
---
#### 总结
综上所述,ViT 结构主要包括以下几个关键组件:
1. 图片切割与嵌入;
2. 加入位置编码;
3. Transformer Encoder 层堆叠;
4. 分类头部设计。
这种新颖的设计使得纯 Transformer 架构能够直接应用于计算机视觉领域取得优异表现的同时也揭示了一些潜在挑战比如大规模预训练需求等问题待解决。
阅读全文
相关推荐


















