Transfrom详解以及优化

Note:Transfrom的基本原理梳理,以及Transformer优化思路简介
参考文章:Linformer、ReFormer等

Transfrom基本知识介绍

Transformer的基础结构

transfrormer基础结构
如上图所示,transformer主要由两个主要模块组成(encoder+decoder),两个模块中又由三个模块组成(multHead Self-Attention、Feed Forward以及Add&Norm):
Encoder和Decoder的整体结构相似,但Decoder中的K和V均使用了Encoder的输入。其基本思想在于:

  • Encoder的任务:学习;学习输入信息的高纬特征,抽象出输入信息(序列)之间的相关性,目的在于特征抽取。(某种意义上,可以理解为Encoder学习到了一个非常丰富的高纬度的知识库——映射关系);

  • Decoder的任务:生成;在Encoder的学习到的高维特征(知识库)中,通过Decoder端的输入到encoder的高维“知识库”中查找需要“生成的内容”

    除了上述的主要模块外,transformer在seq特征输入multHead Self-Attention前,还引入了positional Embedding模块。原因是:self-attention虽然能够学习到序列之间的关系,但是完全忽略了序列中的先后顺序关系,所以映入positional Embedding模块给模型加入“先验”的序列关系。
    Transformer的基础思想:Transformer的主要是因为其核心模块self-attention的引入。产生self-attention的主要原因是:在RNN、LSTM以及GRU等研发过程中,但是在解决长序列和训练时长等问题时,往往由于梯度消失问题,使得模型训练结果不尽如人意;而attention走的思路和RNN等原始的方法不同,它不再依赖于前面序列训练传入后续后续节点,而是直接计算节点和序列其他节点的相关性。

Transformer的公式拆解& 介绍

X = L a y e r N o r m ( F s ( X ) ) + X X=LayerNorm(Fs(X))+X X=LayerNorm(Fs(X))+X

Transformer主要由3个主要模块组成

  • MultHead Self-Attention ( F s ( X ) Fs(X) Fs(X)模块)
    A h = S o f t m a x ( a ∗ Q h K h t ) V h Ah = Softmax(a*Q_hK_h^t)V_h Ah=Softmax(aQhKht)Vh
    其中 Q h = X W q Q_h=XW_q Qh=XWq的维度为 N ∗ d H N * \frac{d} {H} NHd,其中 W q W_q Wq的维度为 d ∗ d H d*\frac{d}{H} dHd,X的维度为 N ∗ L ∗ d N*L*d NLd;其他两个变量维度和 Q h Q_h Qh相同。
  • Position-wise Feed-forward Layers
    F 2 ( R e l u ( F 1 ( X A ) ) ) F_2(Relu(F_1(X_A))) F2(Relu(F1(XA)))
  • Putting it all together:将前两步进行合并
    X A = L a y e r N o r m ( M u l t i h e a d A t t e n t i o n ( X , X ) ) + X X B = L a y e r N o r m ( P o s i t i o n F F N ( X A ) ) + X A X_A = LayerNorm(MultiheadAttention(X,X))+X X_B = LayerNorm(PositionFFN(X_A))+X_A XA=LayerNorm(MultiheadAttention(X,X))+XXB=LayerNorm(PositionFFN(XA))+XA

Transfromer存在的问题

 Transformer由于存在大量的矩阵运算,所以Transformer在计算资源和时间复杂度上都有更高花销。
  • 在Self-Attention的计算中,其矩阵计算需要消耗 N 2 N^2 N2的时间复杂度和内存;故在Transformer的使用上,序列的长度受到计算资源和时间的限制;
  • 在PositionFNN的计算中,两层向前传播网络结构,其计算成本仍然和序列长度呈线性相关的状态。

Transformer当前改进思路

Efficient Transformers —— 对Transformer模型进行改进以提高其效率的一类模型。Efficient Transformers一般可以分为以下几类:

  • Fixed Patterns(FP):通过限制self-attention的视野,从而简化transformer过程,减小N值。eg:1、Blockwise Patterns——将输入序列来进行分块,从而减少transformer的视野;2、Strided Patterns——使用固定的间隔来减少N值;3、Compressed Patterns——使用池化的方式来减少N值。
  • Combination of Patterns(CP):组合模式,通过两种或多种不同的访问模式来提高覆盖范围;eg:将Strided Patterns和Compressed Patterns的方法组合。该方式可以大大减少内存复杂度,并提高注意力机制的整体覆盖范围。
  • Learnable Patterns(LP):学习模式,通过引入可学习的模式来改进Transformer的效率。eg:使用路由注意力(Routing Transformers)或基于核函数(kmeans等)的方法来减少计算量。
  • Low-Rank Methods: 相关论文(Linformer:Self-Attention with Linear Complexity)——简单理解,通过共享 W k W_k Wk W v W_v Wv矩阵,同时在K和V进入attention前加入low_rank矩阵,从而使得计算的时间复杂度由 O ( n 2 ) O(n^2) O(n2)降低到 O ( n k ) O(nk) O(nk)
    在这里插入图片描述
    Low-Rank个人思路解析:原有的Transformer上,由于其公式设计:
    h e a d = A t t e n t i o n ( Q W q , K W k , V W v ) = s o f t m a x ( Q W q ∗ ( K W k ) t √ d k ) V W v head = Attention(QW^q,KW^k,VW^v)=softmax(\frac{QW^q*(KW^k)^t}{√d_k})VW^v head=Attention(QWq,KWk,VWv)=softmax(dkQWq(KWk)t)VWv
    其中令 P = s o f t m a x ( Q W q ∗ ( K W k ) t √ d k ) P=softmax(\frac{QW^q*(KW^k)^t}{√d_k}) P=softmax(dkQWq(KWk)t),一般的transformer中P的维度为 n ∗ n n*n nn,在最终计算时间复杂度的时候,其复杂度则为 O ( n 2 ) O(n^2) O(n2)。但是在实际应用中,通过对矩阵P的奇异值分解,通过计算n维度和奇异值的关系,可以知道通过低秩 k k k,就可以反应高的奇异值,即:低秩的k就可以在反应模型较多的信息。
    在这里插入图片描述
    基于这种思考,利用一个矩阵L来降低P和V在计算过程中产生的 O ( n 2 ) O(n^2) O(n2)时间复杂度,将时间复杂度降低到 O ( n k ) O(nk) O(nk),改进点:将transformer改进为以下公式:
    A t t e n t i o n = s o f t m a x ( Q W q ∗ ( L K W k ) t √ d k ) F V W v Attention = softmax(\frac{QW^q*(LKW^k)^t}{√d_k})FVW^v Attention=softmax(dkQWq(LKWk)t)FVWv
    网络结构:

在这里插入图片描述

Transfromer改进思路详解——ReFormer

相关论文:https://arxiv.org/abs/2001.04451
相关博客:https://blog.csdn.net/mengzhengnan/article/details/108545703

ReFormer这类算法的思想的基础数据原理,主要来源于两个数学理论:

  • LSH(局部敏感hash):目的是为了解决两个vector在高维空间计算相似度等时,其在时间复杂度上过大的问题 O ( d n ) O(dn) O(dn);其基本思想是——从LSH函数族(eg:K-Shingling、MinHashing)等中选择hash函数,将每个数据点哈希到哈希表中,在查找最近邻居时,LSH只扫描与查询点具有相同哈希索引的点。LSH算法的假设:若两个向量在原有的数据空间是相似的,那么分别经过哈希函数转换以后的他们也具有很高的相似度;相反,若它们本身是不相似的,那么经过转换后它们应仍不具有相似性。
    ReFormer算法中使用的LSH attention:cross-polytope LSH(当然也可以使用其他的LSH)—— 该方法主要研究单位球面上欧几里德距离的LSH。
  • 可逆残差网络(The Reversible Residual Network):目的是解决在神经网络反向传播中,需要存储网络的中间结果来计算梯度,从而其对内存的消耗与网络单元数成正比,也就是网络越深越广,其对内存的消耗越大。而可逆残差神经网络:当前层的激活结果可以由下一层的结果计算得到,即若知道网络层的最后结果,就可以反算出每一层的中间结果,从而减少内存的消耗。从实验结果来看:可逆残差网络的表现相较于残差网络的表现,其结果并没有太大的下降,可以说是旗鼓相当的。

ReFormer的目的是使得transformer更加高效,传统的transformer存在以下问题:

  • attention的内存、计算复杂度是文本长度L的平方复杂度即 O ( L 2 ) O(L^2) O(L2),这样transformer在处理超长文本时往往是不可接受的,即token存在限制;
  • 原生的transformer训练需要的内存是层数的倍数(因为反向传播需要存储每层的结果从而来计算误差的梯度);
  • 在transformer结构中,由于feed-forward层的存在,中间隐藏层基本是attention输出层的两倍,这样在反向误差传播中,由于要保持中间层的结果,其需要的空间复杂度会线性提高。

ReFormer的解决方案:

  • 和大多数思路类似,在优化时间复杂度的过程中, Q Q Q中的“子项”一般只和几个重要的 K K K有关:所以如何从 K K K中找到和 Q Q Q比较相似的列是降低attention过程中的时间复杂度的关键——ReFormer的想法是:利用LSH(局部近似hash)快速查找和 K K K有关的 Q Q Q,从而将时间复杂度从 O ( L 2 ) O(L^2) O(L2)降低为 O ( L ∗ l o g ( L ) ) O(L*log(L)) O(Llog(L))
  • 空间复杂度产生的主要原因是:在反向传播的过程中,需要保存中间层的结果,从而通过反向误差传播来更新结果——ReFormer的思路:通过可逆残差网络的想法来去掉对中间结果的保存,只需要保存最终输出的结果即可。

ReFormer中的attention

  • ReFormer中attention公式:
    o i = ∑ j ∈ P i e x p ( q i ∗ k j − m ( j , P i ) − z ( i , P i ) ) v j o_i=\sum_{j\in{P_i}}{exp(q_i*k_j-m(j,P_i)-z(i,P_i))v_j} oi=jPiexp(qikjm(j,Pi)z(i,Pi))vj
    其中: m ( j , P i ) m(j,P_i) m(j,Pi)表示一个mask,即:当 k j k_j kj不在 q i q_i qi的相似(桶)中, m ( j , P i ) = ∞ m(j,P_i)=\infty m(j,Pi)=,表示该列不进入计算,反之 m ( j , P i ) = 0 m(j,P_i)=0 m(j,Pi)=0 z ( i , P i ) z(i,P_i) z(i,Pi)表示归一化函数,代表softmax函数。
    在上文中,关键在于 P i P_i Pi集合的计算,ReFormer使用LSH的方法计算该集合。针对在LSH时,可能发生的两个问题:
    1、若q和k中,所有的值均分到一个桶中,则ReFormer的时间复杂度和传统的TransFormer相同 —— 使用分块的方式解决;
    2、若q和k中,所有的值均未分到一个桶中,即所有的点相似度均较低—— 共享 Q Q Q K K K的矩阵。
    ReFormer中 Q K T QK^T QKT计算步骤详解:
    1、进行Hash值计算:用hash进行分桶。时间复杂度为 O ( L ) O(L) O(L)
    2、按桶排序进行排序,将相同的桶放在一起。时间复杂度为 O ( L ∗ l o g ( L ) ) O(L*log(L)) O(Llog(L))
    3、分块:为了防止所有的hash值均被分到同一个桶中,对序列进行分块处理。每个分块的块内长度为 c c c
    4、计算attention:相同块内的互相attention,若不同块的第一个位置属于前面的块,那么需要和前面的块均关注该块。即:
    P i = j : [ s i m ] − 1 < = [ s j m ] < = [ s i m ] P_i = {j:[\frac{s_i}{m}]-1<=[\frac{s_j}{m}]<=[\frac{s_i}{m}]} Pi=j:[msi]1<=[msj]<=[msi]
    上文中,时间复杂度(暂不考虑多头的影响)为 O ( n r ∗ c ∗ L ) O(n_r*c*L) O(nrcL)其中 n r n_r nr为使用的hash函数数量,所以当 n r ∗ c < L n_r*c<L nrc<L时,ReFormer才会比传统的transformer更加高效,故:在处理超长文本时,ReFormer的效率更加高效。

ReFormer中的可逆网络——解决空间复杂度问题

可逆残差网络:
在这里插入图片描述
在ReFormer中,有:
F ( x ) = a t t e n t i o n ( x 2 ) G ( x ) = f e e d w a r d ( x 1 ) F(x)=attention(x_2) \quad G(x)=feedward(x_1) F(x)=attention(x2)G(x)=feedward(x1)
则ReFormer中的可逆残差网络变为:
Y 1 = x 1 + a t t e n t i o n ( x 2 ) Y 2 = x 2 + f o r w a r d ( y 1 ) Y_1=x_1+attention(x_2) \quad Y2=x2+forward(y_1) Y1=x1+attention(x2)Y2=x2+forward(y1)
由上面公式可知, x 1 x_1 x1 x 2 x_2 x2的结果,可以通过 Y 1 Y_1 Y1 Y 2 Y_2 Y2反向计算出结果。因为可逆残差网络具有该种特性,所以训练的时候只需保存最后一层的输出 Y Y Y,就可以轻易求出输入 X X X,也就是前一层的输出,这样就可以空间复杂度从多层变为单层。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值