将图像输入到transformer的思想
把每个像素点按照顺序拿出来,作为token,这样做的话输入参数规模是:假如是1通道的灰度图: 224x224x1=50176,bert才512,是bert的100倍。
改进方法:
VIT模型架构图
步骤二:linear Projection of Flattened Patches
把图片切分成一个一个的Patch,这些patch不能直接作为transformer的输入,要把patch转为固定维度的embedding。
比如一个patch是16x16,直接展平=256
假如transformer要求的输入是768。那么就需要Linear Projection of Flattened Patchs将256维映射成768维。
步骤三:位置embedding 和 tokens embedding相加
1.生成一个cls的token Embedding
2.生成所有序列的位置编码
位置编码是紫色。patch对应的embedding是粉色。
3.token + 位置编码
由于内容是一起输入到transformer中的,没有先后和位置之分,所以需要位置编码。如果没有位置编码,模型不知道谁在前谁在后。
4.Transformer Encoder
5.MLP_head
MLP Head 是指位于模型顶部的多层感知机(Multi-Layer Perceptron)网络,通常用于对来自 Transformer 编码器的特征进行降维和映射,以便进行最终的分类或回归任务。
MLP Head 的作用有以下几个方面:
特征映射和降维:由于 Transformer 编码器输出的特征通常是高维的,MLP Head 通过多层感知机来映射这些特征到更低维的表示。这有助于减少模型的参数数量和计算复杂度,同时保留重要的特征信息。
非线性建模:MLP Head 中的激活函数引入了非线性性质,使模型能够学习更复杂的特征表示和决策边界,从而提高模型的表现能力。
任务适应性:MLP Head 可以根据具体的任务需求来设计。例如,对于分类任务,最后一层通常包括一个 softmax 激活函数来生成类别概率分布;对于回归任务,最后一层可以是一个线性层来输出连续值。
patch + Position Embedding
补充
token的中文意思?解释transformer的token
“Token” 这个词在中文中的意思是 “标记” 或者 “令牌”。在计算机科学和自然语言处理领域,“token” 通常指的是文本中的最小单元,可以是一个单词、一个字符或者其他一些文本片段,根据特定的上下文和任务而定。在 Transformer 模型中,“token” 是指输入文本被拆分成的最小单位,通常是一个单词或一个子词(subword)。
nn.LayerNorm()和nn.BatchNorm()的区别?
1.具体实现的差别:
Batch Normalization 是在每个批次(mini-batch)的数据上进行归一化。
Layer Normalization 是在每个输入特征的维度上进行归一化。
如下图:
BN、LN可以看作横向和纵向的区别。
2.适用情况的差别
BatchNorm适用于CV领域。
LayerNorm适用于NLP领域。
归一化的好处
经过归一化再输入激活函数,得到的值大部分会落入非线性函数的线性区,导数远离导数饱和区,避免了梯度消失,这样来加速训练收敛过程。
BatchNorm这类归一化技术,目的就是让每一层的分布稳定下来,让后面的层可以在前面层的基础上安心学习知识。
BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来。LayerNorm则是通过对Hidden size这个维度归一。
优点:
这意味着 Layer Normalization 不依赖于批次的大小,因此在训练和推理时都更加稳定。
参考链接:
https://blog.csdn.net/weixin_42392454/article/details/122667271