VIT transformer 论文讲解

首先将图片分为16*16的小格

 

如果直接将图片作为transformer的输入,会有一个问题,序列长度太大,vit将很多图片打成了16*16的patch ,将一个patch作为一个元素

图片224*224

 

vit 的全局图

 vit = position embedding + class embedding + patch + transformer 

也可以用global average pooling 获取全局图片的特征然后分类。但本文用class 输出分类

vit encoder 公式:

 

MLP:输入层,输入几维向量就有几个神经元

         隐藏层,函数f 可以是常用的sigmoid函数或者tanh函数:具体实现方法,查找表法或cordic算法

    输出层,可以将隐藏层到输出层看成一个多分类的逻辑回归即softmax函数

    所以整个的单隐藏层MLP 输出=G(b2+w2(s(b1+X·W1)))

输入和输出都固定,唯一能设置隐藏层有多大,好像是2048

加激活函数目的:防止输出线性化,若线性化后就成了单层感知机

一般为sigmoid函数(0-1) 也有tanh函数(-1,1)

若是多隐藏层一般设置先多后少的维度,单隐藏层一般先多

 

上面一部分是输入层-隐藏层模块,下面是隐藏层-输出层模块。

 ???

adder_ready,

done, lut_layer_done, Y_sample,
output wire [3:0] addr_img_I, 

output wire [9:0] addr_byte_I_byte_W1;

output wire [7:0] addr_img_W1_byte_W2;
output wire done;

 output wire [15:0] lut_output1,lut_output2;

 以上是顶层模块的外部信号,

接下来是顶层模块的内部信号

注意力层对应的输出512维度向量,w1投影成2048,再残差连接w2投影成512,只有一个MLP,每个MLP的权重是一样的,作用于不同的向量

 VITMLP:一个像素点就对应一个神经元

      w矩阵n_in行,n_out列

 

 

利用梯度下降确定参数

 

1.将整体图片分割

2.将每个图片先拉成一维(拉到patch_dim维度,patch_dim = channel * patch_height *patch_width),其次通过linear层(例如将256映射到758上)embedding size = 758

3.①先生成一个cls符号的token embedding ②生成所有序列的位置编码 ③token embedding + 位置编码    为什么位置编码:1)为了确保输出固定

2)位置编码为什么可以和patch embedding 相加 记住就行

4.encoder

5.将cls拿出进行多分类化

posted @ 2022-04-26 19:20  十点三十睡觉  阅读(1035)  评论(0编辑  收藏  举报