【cv炼丹炉】史上最简单的视觉transformer介绍(一)

举报
hulu可爱多 发表于 2021/04/30 18:01:19 2021/04/30
【摘要】  2021快过半了,transformer在视觉方向的文章层数不穷。 搞得好像如果你还没搞transformer,就不是一个算法团队似的。transformer就好比是电动车,现在缺陷还比较明显,你现在不想开它,但是你知道他未来一定会来的,而且是巅峰性的,内卷促使它改进的速度比想象的还要快。所以呢,在福报的空隙,你就得花时间研究他。博客准备分四篇完成:- 首先介绍下transformer的基...

 2021快过半了,transformer在视觉方向的文章层数不穷。 搞得好像如果你还没搞transformer,就不是一个算法团队似的。transformer就好比是电动车,现在缺陷还比较明显,你现在不想开它,但是你知道他未来一定会来的,而且是巅峰性的,内卷促使它改进的速度比想象的还要快。

所以呢,在福报的空隙,你就得花时间研究他。博客准备分四篇完成:

首先介绍下transformer的基本单元:self-attention

- transformer网络结构

然后介绍下vision transformer的代表性工作,vision transformer ViT & swin transformer

最后解读下好的工程实现代码

———————-------— 假装是分割线 ——————————————

 self-attention

attention is all u need, 这篇文章2017年首次在NLP提出来的经典模型 transformer,现在比较火热的Bert也是基于此。Transformer模型使用了self-attention机制,彻底抛弃了RNN的顺序结构,是的模型可以并行训练。

1. 学姐们如何处理序列数据? 

我没有学长,只有学姐

在学校的时候,主要的研究方向就是时间序列,那时候要处理一个sequence,常用的就是RNN,像下图所示,输入是vector sequence,输出也是,看上去很完美。但是RNN的缺点,是不容易并行化。假设我们要得到b4,就要先看a1 看a2 看a3 看a4,最终得到了b4。对这个问题,也有人想到了,用CNN代替RNN,有兴趣去看下李宏毅的ML课程。

备注:以下图片全部来自李宏毅老师胶片

来源:https://zhuanlan.zhihu.com/p/171875438

既然我们的题目叫self attention,那今天的重点是,我们要设计一个新的layer,取名字叫self-attention,输出、输出和RNN保持一致,并且可以解决RNN最大的问题,并行化计算。

来源:https://zhuanlan.zhihu.com/p/171875438

2. self-attention具体要怎么做呢?

具体的做法就不说了,到知乎上查查吧,看图也行。这里只想讲讲为什么要这么做?

首先从x1-x4到a1-a4 ,经历了一次word embeding 或者 随机初始化,比如 x1-x4 是 “天才少年” ,那么 a1-a4就是四个512维的vector

然后a1-a4又分别乘以三个不同的矩阵(transformer matrix),得到q k v,那么问题来了,q k v是干嘛的的?

来源:https://zhuanlan.zhihu.com/p/171875438

先看公式(请忽略字母大小写):

 

忽略大小写,以下每个操作都能和上面这个公司对应起来。q 点乘 k 是能代表两个向量的相似度,衡量两个向量相似度有多少(点乘),就是attention,你品,你细品。所以上图中每个q 会对每个k 去做attention,也就是点乘。另外,除以dimension相当于归一化。因为,点乘和 q 和 k 的维度呈正比。

然后进行softmax操作,然后和v1-v4都乘,然后加起来,最终得到b1,你看看,这样一来,计算b1的过程中,用到了整个sequence的信息。同样的,得到了b2-b4。

来源:https://zhuanlan.zhihu.com/p/171875438

那为什么说这个过程是可以并行的呢,因为整个计算都是可以依靠矩阵表述的。见下图:

来源:https://zhuanlan.zhihu.com/p/171875438

好 Q K V是学习得到的参数,实际用的时候,其实是多套参数,也就是Q1 Q2 Q2;K1 K2 K3;V1 V2 V3, 即multi-head attention。最终得到 多个b系列,即多个attention head,把这些b contat起来,再乘以一个matrix,得到最终的b 和输入维度保持一致。

为啥要这样做呢:

1. 效果好

2. 猜测原因:把word映射到不同的子空间,捕捉到更细节的信息。


3. positional encoding

上面的attention layer 没有考虑位置信息,换句话说,生活欺骗了你  和 你欺骗了生活  效果一样,因为没有考虑位置信息。所以 ,为了解决这个问题:

引入了位置编码(position embeding, PE),先看公式

假设 天才少年 四个字,假设pos 代表 天,那么 天 的位置编码是:

2i 表示偶数位,2i+1 表示基数位

还记得前面说的么,每个字,embeding到一个512维的vector。同样的,天 的位置编码 也是一个512维的向量。然后把embedding和PE加起来,得到最终的vector

问题来了,位置编码 为什么要用sin cos表示呢?仔细看下面这段话,没看懂就多看几遍。


4. 下期预告

理解了self attention基本单元,transformer的网络结构就超简单

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。