VIT (Vision Transformer) 模型论文+代码从零详细解读,看不懂来打我_哔哩哔哩_bilibili公众号【NLP从入门到放弃】后台回复【VIT】获取对应的PPT和代码https://www.bilibili.com/video/BV1Uu411o7oY?spm_id_from=333.999.0.0
1 NLP结构
编码器部分
1 汉字->数字->token embedding 向量
2 位置编码
3 多头
自注意力层-残差-
-前馈神经网络-残差
解码器部分
1 汉字->数字->token embedding 向量
2 位置编码
3 多头
自注意层(mask自注意力层)-残差-
交互注意力层(Q来自解码器,KV来自编码器)-残差-
-前馈神经网络-残差
2 En
汉字->数字->token embedding 向量->加位置编码
3 用于图像(模仿NLP将图且为 我 爱 你)
1 彩色图假设为灰色图(1x224x244),
将每个像素点作为token来对应3 5 7(我爱你),
然后变成embeeding
3 解决办法
1)局部注意力:2只和 7, 39(邻近的)
2)改仅attention公式
3)
上述过于复杂
因此切分图
4 ViT架构图
1 切分
2.1 patch变成固定维度embedding
一种是flatten将其一个patch(16x16)变成1维(256)
2.2
(方法1)利用Linear层将256映射到transfermer需要的embedding维度
(方法2)实现方式还可以使用768个16x16的卷积得到[768,1,1]->768
3.1 生成cls符号的token embedding 对应 *星号(extra learnable (class)embedding)
其他粉色是图片patch token embedding
3.2 生成所有序列的位置编码0,1,....,9(紫色)
3.3 token embedding 和 位置embedding相加
为什么加cls?
保持与原NLP一致,其实这个是出现在BERT中出现(而不是TRM),实验说明加不加效果一样。
表明所有句子的一个语义信息
cls作用 : 加入cls能让任务1和2在训练中保持一定独立性,ViT没涉及MLM这类任务,因此不是必须的。
上述视频作者理解
为什么需要位置编码?
为什么位置编码可以和patch embedding相加?
VIT中的位置编码
为什么可以partch embdding和位置编码相加?
cat计算量会大
效果比较
5 TRM编码和VIT编码的差异
1 norm变了位置
2 在NLP中序列长度不一致,要添加pad符号。
在VIT中,不同的图片大小(224x224,256x256)做resize就可以都是224了,因此没有pad(补零符号)
VIT串讲
1 Flatten->做映射到768
2 生成一个768的cls的初始化的token embedding
3 位置编码(posision embeding)和切片编码(patch token embedding) 对应位置相加得到 input embedding
4 编码(norm-多头-残差-norm-mlp-残差)
5 每个token都是一个768的输出
做多分类任务