目录
结构
输入
可训练的参数[class]token、Position Embedding
Dropout
结构
Linear
+tanh激活函数
+Linear
组成。Linear
即可Transformer:NLP,input:token(向量)序列,即二维矩阵[num_token, token_dim]
Vision Transformer:CV,input:图像数据数据格式为[H, W, C]三维矩阵
将输入图片(224x224)按照16x16大小的Patch进行划分, (224/16)^2=196个Patches。
通过线性映射将每个Patch映射到一维向量中(后面都直接称为token),
每个Patche数据shape为[16, 16, 3]通过映射得到一个长度为768的向量。[16, 16, 3] -> [768]
(3为图像通道数)
直接使用一个卷积核大小为16x16,步距为16,卷积核个数为768的卷积来实现。
通过卷积[224, 224, 3] -> [14, 14, 768],(224/16=14)
把H以及W两个维度展平即可[14, 14, 768] -> [196, 768],
此时正好变成了一个二维矩阵,正是Transformer想要的。
参考BERT,
专门用于分类的[class]token是一个长度为768的向量,与tokens拼接在一起,
Cat([1, 768], [196, 768]) -> [197, 768]。
Position Embedding(1D Pos. Emb.),直接叠加在tokens(add),shape要一样
拼接[class]token后shape是[197, 768],那么Position Embedding的shape也是[197, 768]。
如果模型的参数太多,而训练样本又太少,会出现过拟合
“过拟合”会导致模型的“泛化”(通用能力)能力太差,训练的模型如果只能适用于某种特定条件,那么这个模型可用的范围,所能承受的抗干扰性(鲁棒性)就太差了
即模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。
为了解决过拟合问题,一般会采用模型集成的方法,即训练多个模型进行组合
Dropout一种正则化trick,减少过拟合现象。
在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0)。
减少特征检测器(隐层节点)间的相互作用(某些检测器依赖其他检测器才能发挥作用)。
即在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,
这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图1所示。
(1)在训练模型阶段
无可避免的,在训练网络的每个单元都要添加一道概率流程。
标准网络和带有Dropout网络的比较
对应的公式变化如下:
. 没有Dropout的网络计算公式:
. 采用Dropout的网络计算公式:
上面公式中Bernoulli函数是为了生成概率r向量,也就是随机生成一个0、1的向量。
代码层面实现让某个神经元以概率p停止工作,其实就是让它的激活函数值以概率p变为0。
比如某一层网络神经元的个数为1000个,其激活函数输出值为y1、y2、y3、......、y1000,dropout比率选择0.4,这一层神经元经过dropout,1000个神经元中会有大约400个的值被置为0。
注意:训练 经过上面屏蔽掉某些神经元,使其激活值为0以后,
还需要对向量y1……y1000进行缩放(rescale),也就是乘以1/(1-p)。
否则在测试的时候,就需要对权重进行缩放,操作如下。
(有p的概率参与训练,(1-p)的概率丢弃,那么它输出的期望是px+(1-p)0=px)
(2)在测试模型阶段
预测模型的时候,每一个神经单元的权重参数要乘以概率p。
预测模型时Dropout的操作
测试阶段Dropout公式:
全连接网络大量利用Dropout,而且一般认为设置为0.5或者0.3,
卷积网络隐藏层中由于卷积自身的稀疏化以及稀疏化的ReLu函数的大量使用等原因,Dropout策略在卷积网络隐藏层中使用较少。
参考链接:
Vision Transformer详解_太阳花的小绿豆的博客-CSDN博客_vit详解
ViT论文逐段精读【论文精读】 - 哔哩哔哩
正则化-最通俗的解释_Vip__Miracle的博客-CSDN博客_正则化的通俗解释
深度学习中Dropout原理解析_Microstrong0305的博客-CSDN博客_dropout
VIT 的复仇 !!
不重要的token可以提前停止计算!英伟达提出自适应token的高效视觉Transformer网络A-ViT,提高模型的吞吐量!