transformer存在一个特点,能够将任意类型的输入建模为拓扑几何空间的全连接图。但CNN要求输入是对齐的网格空间或者矩阵。所以transformer相比于其他深度学习方法,更适合于多模态学习。
1.vanilla transformer
每个transformer layer包括一个multi-head-self-attention(MHSA)模块,以及一个在位置上全连接的feed forward layer(FFN)。并且在两个层中都使用了残差结构,即假设输入为Z,则输出满足如下公式:。 其中N为归一化,如batch normalization。
该处正则化和求和的顺序值得商讨,因为按照代数的Gram–Schmid process,应该是先正则后投影。
1)Input tokenization
(1)tokenization :
tokenize后,每个tokenize sequence是输出图的一个结点。
tokenization存在以下几个优点:1)不同模态都能完成 2)能兼容不同类型的问题,如分类、Maeked language learning 3)容易将其他信息编码进去 4)只需通过拼接、求和等操作就能编辑多种模态。
(2)position embedding
将额外的信息提供给transformer, 让它可以学习或编码到潜在的结构。比如提供作画线条时笔的状态。如果position embedding信息缺少,则不同位置的词语或结点的注意力可能相同。
2)self attention and multi-head self-attention
(1) self attention
a.直观理解:
相当于一个数据库软查询表。原有的数据库是根据query输出对应一个key的value,但self attention综合了所有key的value输出一个值。
对于self-attention,权重来源于序列元素。而cross-attention,权重来源于encoder处理输入sequence构造的数据库。
b.从构造encoding的角度理解
final encoding zi为.其中包含三个encoding,为query encoding,为key encoding,为value encoding。
(a)为什么需要key encoding和value encoding
transformer的理念是为每一个元素xi构造value encoding ,然后value encoding的加权平均得到元素i的encoding zi。因此值应该和元素i相关,我们希望当元素i和元素j的相关性大时,值大,意味着元素i应该注意元素j。
但是如果将直接构造为,则意味着以查询的重要性与查询的重要性相同。所以我们将x1 encode为query qi,xj encode为key kj(相乘顺序:假设Q,K以行储存一个query,key。encoding的目的是为一个query综合多个key,所以矩阵相乘规则决定了是QK,而非KQ。)
(b)softmax
为了引入非线性、并确保weights非负,引入softmax函数。(但是也有文章把softmax修改为线性operator:cosFormer: Rethinking Softmax In Attention | OpenReview)
(c)scaling
为什么scaling:考虑到当softmax输入方差比较大时,输出值容易陷入接近0,接近1的极值。所以将QK的方差从归一化为1.
scaling 为什么为:由于Q,K矩阵独立,根据独立变量方差计算公式
矩阵左上的元素为:
(d)我们应该直接学习还是分开学习两个矩阵?
如果直接学习,则矩阵维度为D*D,但分开学习Q,K为D*d且d远远小于D。
(2)multi-head self-attention
主要作用是能够同时使用不同子空间表示下的QKV.
为了不由于增加额外的head,增加模型的复杂度,所以每个head的维度为原有维度/h
(3) cross-attention
3)Feed forward network
网络中包含线性层和非线性层,为非线性函数,如RELU。则一个两层的FFN可被表示如下