文章目录
- VIT
- TNT
太…完整了!同济大佬唐宇迪博士终于把【Transformer】入门到精通全套课程分享出来了,最新前沿方向
学习笔记
VIT
eg,图片分块,10x10x3 的 patch 通过 conv 拉成向量,就无缝对接了
位置编码可以多种方式,一维序号,二维坐标,无
位置编码 0 这里的 token,为分类任务设计的,encoder 堆叠后(self-attention),0 位置上的 token 已有了全局信息,最后把 0 位置上的特征向量作为分类特征就行
分类仅用到了 encoder,检测任务中会用到 decoder
CNN 的缺点
层多,每一层需要设计
需要的数据比较多,比较难训练
eg, patch P 为 14*14,C 为 256, D 为 512
Epos 是位置编码
MSA 是 multi-head self-attention
LN 是 layer normalization
多层共用一个位置编码即可,不用每层都用
仅能反应分类任务的规律,检测可能 2D 位置编码还是更好
下面跟随数据的维度和代码(我也没有,哈哈)看看整体流程
(1)embedding
输入 [16,3,224,224]
cls token = [16,1,768]
- 768 超参, hidden size
patch = 16,划分的方式如下。输入通道 3,输出通道 768,kernel size =16, stride = 16 的 conv 把图片分成 patch,[16,768,14,14]
- 16x14 = 224
拉长一下成向量,[16,768,196],transpose 一下成 [16,196,768]
- batch 16,每个 batch 196 个 token,每个 token 的特征维度是 768
加上 position embedding,维度为 [16,197,768]
每个 batch 的位置编码一样,所以第一个维度是 1
(2)encoder
LN [16,197,768]
query (fc)[16,197,768]
key (fc)[16,197,768]
value(fc)[16,197,768]
q,k,v transpose for score [16,197,768]->[16,197,12,64]->[16,12,197,64],12 表示共有 12 个 multi-head attention,197 个 token,每个 token 64 维的特征
q,k 内积 attention score [16,12,197,197],197 个 token 间相互的关系
归一化,消除数量的影响
再接一个 softmax 计算出来权重
权重乘以 v,重构了特征得到 [16,12,197,64],还原回去得到 [16,197,768]
再来个 fc 层,和输入来个 res 结构
[16,197,768]
继续
再来个 layer norm + MLP + res
重复执行 L 次,输出选第 0 个 token 作为预测
接个 fc 得到 logits,eg:[16,197,768]->[16,768]->[16,10] 十分类
TNT
conv 是基于每个空间位置进行的,相比于来说 patch 过于大了,可以把patch 进一步细分,
类似于 focus,eg
16
∗
16
∗
3
16*16*3
16∗16∗3 变成
4
∗
4
∗
28
4*4*28
4∗4∗28
内部 transformer 得到的结果和外部 transformer 得到的结果相加
T-SNE 蓝色特征更发散一些(更能分得开)
方差越大,特征越鲜明,越容易区分