参考:
[1]. https://aistudio.baidu.com/aistudio/projectdetail/2025419?channelType=0&channel=0
Attention
个人认为所谓 attention机制,其实只是一种启发自人类的“注意力”的结构。至于有没有“注意力”的实际作用,那不好说,反正加进去了,模型有效果,就行。
1.2 self-attention
根据参考[1]中列出的图片,其实可以这样理解:假定输入为a,那么进行如下计算:
得到的b就是attention的值
1.3 multi-attention
其实就是把self-attention变得更加复杂了。这里就不搬运了,可以直接看参考[1]
Transformer整体结构及编码器、解码器
下面是我们通常看到的架构:
![](https://i-blog.csdnimg.cn/blog_migrate/2e9539b31ac4fe2834703385b061ad16.png)
其中Encoder如下:
![](https://i-blog.csdnimg.cn/blog_migrate/dd5b151262983aa9f5acf92229da7daf.png)
解码器部分:
![](https://i-blog.csdnimg.cn/blog_migrate/f03447b3bf4f3129636f3e9af03a2d73.png)
红框1:mask操作,是对当前单词和之后的单词做mask操作(NLP中的操作)因为是预测后面的词,所以不能让网络看见后面的词
红框2:进入Decoder的两条数据,是由Encoder产生的k、v,Decoder只提供q。
![](https://i-blog.csdnimg.cn/blog_migrate/454dd043c82994c7c7f82d14d2ce1b8d.png)
3. ViT
ViT的思路很简单:
直接把图像分成固定大小的patchs,然后通过线性变换得到patch embedding,这就类比NLP的words和word embedding,由于transformer的输入就是a sequence of token embeddings,所以将图像的patch embeddings送入transformer后就能够进行特征提取从而分类了。
ViT模型原理如下图所示,其实ViT模型只是用了transformer的Encoder来提取特征(原始的transformer还有decoder部分,用于实现sequence to sequence,比如机器翻译)
![](https://i-blog.csdnimg.cn/blog_migrate/6f5684705db4009bd4e489bb29ea4ae2.jpeg)