[2023.08.14]Transformer相关的多模态学习(一)transformer basics

transformer存在一个特点,能够将任意类型的输入建模为拓扑几何空间的全连接图。但CNN要求输入是对齐的网格空间或者矩阵。所以transformer相比于其他深度学习方法,更适合于多模态学习。

1.vanilla transformer

每个transformer layer包括一个multi-head-self-attention(MHSA)模块,以及一个在位置上全连接的feed forward layer(FFN)。并且在两个层中都使用了残差结构,即假设输入为Z,则输出满足如下公式:Z=N(f(Z)+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为z_i = \text{softmax}(\frac{xQ K^T x^T}{\sqrt{d_k}}) x V.其中包含三个encoding,q_i = x_i Q为query encoding,k_j= x_jK为key encoding,v_i = x_i V为value encoding。

(a)为什么需要key encoding和value encoding

transformer的理念是为每一个元素xi构造value encoding v_i = x_i V,然后value encoding的加权平均得到元素i的encoding zi\displaystyle z_i = \sum_j \alpha_j v_j,。因此\alpha_j值应该和元素i相关,我们希望当元素i和元素j的相关性大时,\alpha_j值大,意味着元素i应该注意元素j。

但是如果将\alpha_j直接构造为\alpha_j = x_i x_j^{T},则意味着以x_j查询x_i的重要性与x_i查询x_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的方差从\sqrt{d_k}归一化为1. 

scaling 为什么为\sqrt{d_k}:由于Q,K矩阵独立,根据独立变量方差计算公式

\mathbb{E}[X + Y] = \mathbb{E}[X] + \mathbb{E}[Y] \\ Var(X + Y) = Var(X) + Var(Y) \\ \mathbb{E}[XY] = \mathbb{E}[X]\mathbb{E}[Y] \\ Var(XY) = (Var(X) + \mathbb{E}[X]^2)(Var(Y) + \mathbb{E}[Y]^2) - \mathbb{E}[X]^2\mathbb{E}[Y]^2

矩阵左上的元素为:\displaystyle \sum_{i=0}^{d_k} Q_{1,i} K_{i, 1}

\mathbb{E}[Q_{1, i} K_{i, 1}] = \mathbb{E}[Q_{1, i}] \mathbb{E}[K_{i, 1}] = 0 \\ Var(Q_{1, i} K_{i, 1}) = (Var(Q_{1, i}) + \mathbb{E}[Q_{1, i}]^2)(Var(K_{i, 1}) + \mathbb{E}[K_{i, 1}]^2) - \mathbb{E}[Q_{1, i}]^2\mathbb{E}[K_{i, 1}]^2 = 1

\mathbb{E} \left[\displaystyle \sum_{i=0}^{d_k} Q_{1,i} K_{i, 1} \right] = \displaystyle \sum_{i=0}^{d_k} \mathbb{E} \left[ Q_{1,i} K_{i, 1} \right] = 0 \\ Var\left(\displaystyle \sum_{i=0}^{d_k} Q_{1,i} K_{i, 1} \right) = \displaystyle \sum_{i=0}^{d_k} Var\left( Q_{1,i} K_{i, 1} \right) = d_k

(d)我们应该直接学习QK^T还是分开学习两个矩阵?

如果直接学习QK^T,则矩阵维度为D*D,但分开学习Q,K为D*d且d远远小于D。

(2)multi-head self-attention

主要作用是能够同时使用不同子空间表示下的QKV.

为了不由于增加额外的head,增加模型的复杂度,所以每个head的维度为原有维度/h

 (3) cross-attention

\mathbf{softmax}((W_Q S_2) (W_K S_1)^\intercal) W_V S_1

Cross-Attention in the Transformer decoder of Attention is All You Need paper

 3)Feed forward network

网络中包含线性层和非线性层,\sigma(\cdot)为非线性函数,如RELU。则一个两层的FFN可被表示如下

An even more annotated Transformer :: pi-tau

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值