ViT和Transformer

Attention Is All You Need

Vit

在图像领域直接使用transformer,如果将2d图像直接转为一维向量,会面临参数两过大的问题。后来会思考在卷积之后再使用transformer,例如resNet50模型中,最后一层仅为14×14大小的矩阵。而本文是直接采用transformer模型,只需要对图片做一下预处理。ViT是将图像分为多个16×16的patch
ViT和Transformer_第1张图片
一张图像可以被分成多个小的图像块,这样的一个图像块就像nlp领域中的一个单词,和NLP不同的是ViT是一个有监督的训练。

ViT和Transformer_第2张图片

其中,‘*’ 为class Embedding ,每一个token都会和任意一个token做交互,认为clsss token能够从其他token中的到相关信息,把这个作为我们最后做分类的依据。

中间的Linear projection of Flattened Patches叫做线性投射层,其实就是一个全连接层。例如一个224×224的图像,被分为196个patch,每个patch线性展开为16×16×3=768。全连接层的输入为196乘768,输出也为196×768,再给每个Token加上位置编码和额外一个class Token,得到197×768。其中位置编码维度也为768,且是直接和Token相加,而不是拼接,所以最后的大小仍然197×768。
位置编码是通过学习来的,需要体现出各个位置之间的相关性。

ViT和ResNet相比:

  • ViT在大规模数据集中表现更好,因为ViT没有使用先验知识和归纳偏置,需要更多的图片学习
  • ViT的参数量更少,学习更快 。

你可能感兴趣的:(transformer,深度学习,人工智能)