ViT
盖朗厄尔峡湾位于挪威,两岸耸立着海拔1500米以上的群山。
前言
在阅读相关 diffusion 论文时,经常会遇见许多自己之前不了解的知识,这是很正常的现象。既不用过度担心,也不要躺平,而是要在空闲的时候把不会的知识补上。
这里学习的是关于 Attention is all you need. 论文在视觉方向的应用 ViT。关于 Attention,最主要学习的内容就是 self-attention 实现细节,以及 Multi-Head self-attention。
这里的学习内容主要参考的是:
Attention 回顾
self-attention 回顾
在这里首先回顾一下 self-attention 的实现。图片参考文章。
首先我们要在脑海中始终清楚一件事:self-attention 信息处理流程:
借助矩阵并行化,我们可以把权重矩阵 q k v 实现上写作一个矩阵 W,并且 W 针对不同的序列而言是共享的存在,例子中的两个序列 和 与 W 作矩阵乘法得到序列自己的 q k v.
每一个 都要与其他的 进行匹配,再除以序列维数开根号,最终得到序列个数的 ,随后将 进行归一化得到 ,将归一化得到的结果与 相乘并全部相加得到输出。
最后使用此图作为总结:
此图中值得注意的地方是 的计算结果是累加和。
multi-head self-attention
多头分割。同样是把嵌入向量输入 qkv 矩阵,不过在得到 之后根据 head 的个数将其均分。这里一共有两个 head,所以把 均分为 和; 进行同理分割。
不同的映射方案。根据上图可以看出 head1 的两个分量分别来自两个嵌入输入序列 的第一个分量计算 qkv 之后的结果,并将这两个结果拼接(这里尚未展示拼接),同理可以推断出 head2 的两个分量分别来自 第二个分量计算 qkv 之后的结果拼接。
这张图说明个什么事呢?还是上面阐述的解释,例如 就是 head2 第一个分量。只要记住了形式,实现起来便不难,但是这样做的好处、优势,还得是看论文才能知道。
至此,Attention 内容复习完成。
pytorch 搭建 ViT 模型
既然要搭建,不得不学习模型结构,有了模型结构,一切便了然于心。