Transformer详解讲解


Transformer

Transformer是一个编码器-解码器网络架构的模型,最早的编码器解码器网络架构时Seq2Seq模型,用于机器翻译等任务,后来逐渐在计算机视觉领域中流行。

Transformer主体框架

在这里插入图片描述

Transformer是第一个完全依靠自注意力计算输入和输出表示的传导模型,无需使用RNN或卷积等其他结构。如图所示是Transformer的整体架构,Transformer是一个典型的编码器-解码器结构,其中编码器组由六个编码器构成,解码器组也由六个解码器构成。编码器由多头自注意力机制全连接前馈网络两个子层构成,每个子层周围采用残差连接, 然后进行层归一化处理。输出为 L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x+Sublayer(x)) LayerNorm(x+Sublayer(x))。解码器除了有上述的两个子层还具有一个多头注意力机制,对编码器信息进行融合。我们还修改解码器堆栈中的自注意力子层,以防止在训练过程中关注到后续位置。在训练过程中,我们将所有的真值都输入到解码器中,这种掩码机制保证了对位置i的预测只能依赖于小于i位置的已知输出,不会用到后续真值。在验证过程中,只能得到小于i位置的输出,因此不需要掩码机制。由于自注意力机制无法获取位置信息,因此在输入的时候我们需要加入一个位置编码信息,在Transformer这篇论文中,我们采用的是正余弦编码


基本术语

注意力机制

可以描述为将一组查询和一组键、值映射到一组输出的方法。其中查询、键、值和输出都是向量。输出计算为值的加权和,其中分配给每个值的权重由查询与相应键的点乘计算。通俗来说注意力机制指的是对一组输入序列,我们分别乘上矩阵 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV,得到 q , k , v q,k,v q,k,v三个向量,序列中每个token的 q q q要与其余token的 k k k相乘,采用 d k \sqrt{d_k} dk 进行缩放。再经过softmax操作,得到的数值与 v v v进行相乘,得到一个新的特征向量,其中 k , v k,v kv来自于编码器,而 q q q来自于解码器。在实践中,我们同时计算一组查询的注意力函数,并将其打包成矩阵 Q Q Q,键、值也打包成矩阵 K , V K,V K,V则此时矩阵的输出为 A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k} } )V Attention(Q,K,V)=softmax(dk QKT)V

自注意力机制

又是也称为帧内注意力,是一种将单个序列的不同位置联系起来,以计算序列的表示的注意力机制。注意力机制中 k , v k,v kv来自于编码器,而 q q q来自于解码器。而自注意力机制的 q , k , v q,k,v q,k,v都来自于编码器或者解码器本身,因此它称作是自注意力机制。

多头注意力机制
在这里插入图片描述
注意力机制中,对于输入矩阵(一组序列,序列中的每一个token都是一个向量),我们只采用一组 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV,得到 Q , K , V Q,K,V Q,K,V三个矩阵。而多头注意力机制中采用多组 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV,得到多组 Q , K , V Q,K,V Q,K,V矩阵,然后每组分别计算得到一个Z矩阵,将得到的多个Z矩阵进行拼接。在Transformer中我们采用了8组不同的 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV

全连接前馈网络

F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x)=max(0,xW_1+b_1)W_2+b_2 FFN(x)=max(0,xW1+b1)W2+b2
该全连接层由两个线性变化和一个ReLu激活函数组成,其中max就是我们所说的ReLu激活函数,x是经过多头(自)注意力机制的输出。这两层网络目的是将输入的Z映射到更加高维的空间中,然后经过非线性函数ReLu进行筛选,筛选完在变回到原来的维度。我们也可以将其看作两个核大小为1de卷积,其中输入输出的维度是512,内层的维度是2048。

层归一化
在神经网络进行训练之前,都需要对输入数据进行归一化处理,可以加快训练的速度,并且提高训练的稳定性。
层归一化是在同一个样本中不同神经元之间进行归一化,而BN是指在同一个batch中的不同样本之间的同一位置的神经元进行归一化。


复杂度计算

在这里插入图片描述

Sequential Operations:序列操作数,该值表明下一步计算必须要等前面多少步完成,该值越小,并行度越高。
Maximum Path Length:最大路径长度,积距离为n的两个阶段传递信息所经历的路径长度,表征了存在长距离依赖的结点在传递信息时,信息丢失的程度,长度越长,两个节点之间越难交互,信息丢失越严重。

自注意力机制的计算复杂度

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k} } )V Attention(Q,K,V)=softmax(dk QKT)V

  • Q , K , V Q,K,V Q,K,V的输入大小为 n × d n\times d n×d,其中 Q , K , V Q,K,V Q,K,V的获取是 x ∈ R n × d x\in R^{n\times d} xRn×d与矩阵 W Q ∈ R d × d W^Q\in R^{d\times d} WQRd×d相乘,此时的计算复杂对为 O ( n d 2 ) O(nd^2) O(nd2),但是只考虑注意力机制这部分不考虑。n表示输入个数,d表示特征长度。
  • Q ⋅ K T Q\cdot K^T QKT用于计算相似度 n × d n\times d n×d d × n d \times n d×n相乘得到 n × n n\times n n×n的矩阵,最后的计算复杂为 O ( n 2 d ) O(n^2d) O(n2d)
  • softmax计算,对每行做softmax,复杂度为 O ( n ) O(n) O(n),则n行的复杂度为 O ( n 2 ) O(n^2) O(n2)
  • s o f t m a x ( Q K T d k ) V softmax(\frac{QK^T}{\sqrt{d_k} } )V softmax(dk QKT)V: n × n n\times n n×n n × d n\times d n×d相乘得到 n × d n\times d n×d的矩阵,最后的计算复杂为 O ( n 2 d ) O(n^2d) O(n2d)

因此self-attention的时间复杂度为 O ( n 2 d ) O(n^2d) O(n2d)

多头自注意力机制的复杂度计算

M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , … , h e a d h ) W O w h e r e h e a d i = A ( Q W i Q , K W i K , V W i V ) \begin{aligned}\mathrm{MultiHead}(Q,K,V)&=\mathrm{Concat}(\mathrm{head}_{1},\ldots,\mathrm{head}_{\mathrm{h}})W^{O}\\\mathrm{where}\quad\mathrm{head}_{\mathrm{i}}&=A(QW_{i}^{Q},KW_{i}^{K},VW_{i}^{V})\end{aligned} MultiHead(Q,K,V)whereheadi=Concat(head1,,headh)WO=A(QWiQ,KWiK,VWiV)

  • Q , K , V Q,K,V Q,K,V的输入大小为 n × d h n\times \frac{d}{h} n×hd
  • Q ⋅ K T Q\cdot K^T QKT用于计算相似度 n × d h n\times \frac{d}{h} n×hd d h × n \frac{d}{h} \times n hd×n相乘得到 n × n n\times n n×n的矩阵,单个头的计算复杂为 O ( n 2 d h ) O(n^2 \frac{d}{h}) O(n2hd),共有h个头,所以最终的计算复杂度为 O ( n 2 d ) O(n^2d) O(n2d)
  • softmax计算,对每行做softmax,复杂度为 O ( n ) O(n) O(n),则n行的复杂度为 O ( n 2 ) O(n^2) O(n2)
  • s o f t m a x ( Q K T d k ) V softmax(\frac{QK^T}{\sqrt{d_k} } )V softmax(dk QKT)V: n × n n\times n n×n n × d h n\times \frac{d}{h} n×hd相乘得到 n × d h n\times \frac{d}{h} n×hd的矩阵,单个头的计算复杂为 O ( n 2 d h ) O(n^2\frac{d}{h}) O(n2hd),最后的计算复杂为 O ( n 2 d ) O(n^2d) O(n2d)
  • 加权和: concat拼接起来形成 n × d n\times d n×d的矩阵,之后经过线性映射 d × d d\times d d×d,计算复杂度为 O ( n d 2 ) O(nd^2) O(nd2)

因此self-attention的时间复杂度为 O ( n 2 d ) O(n^2d) O(n2d),多头自注意力机制比原始的自注意力机制多了加权和拼接的计算复杂度。

受限的自注意力机制复杂度计算

  • Q , K , V Q,K,V Q,K,V的输入大小为 r × d r\times d r×d
  • - Q ⋅ K T Q\cdot K^T QKT用于计算相似度 n × d n\times d n×d d × n d \times n d×n相乘得到 n × n n\times n n×n的矩阵,最后的计算复杂为 O ( n 2 d ) O(n^2d) O(n2d)
  • softmax计算,对每行做softmax,复杂度为 O ( r ) O(r) O(r),则n行的复杂度为 O ( r 2 ) O(r^2) O(r2)
  • 加权和: r × d r \times d r×d d × r d \times r d×r相乘得到 r × r r\times r r×r的矩阵,最后的计算复杂为 O ( r 2 d ) O(r^2d) O(r2d)

因为输入的个数为n,限制范围为r的一组复杂度为 O ( r 2 d ) O(r^2d) O(r2d),总共有 n r \frac{n}{r} rn组,总的计算复杂对为 O ( n r d ) O(nrd) O(nrd)

RNN的计算复杂度

h t = f ( U x t + W h t − 1 ) h_t=f(Ux_t+Wh_{t-1}) ht=f(Uxt+Wht1)

  • U , x t U,x_t U,xt的大小分别为 d × m d\times m d×m m × 1 m \times 1 m×1,计算复杂度为 O ( m d ) O(md) O(md),其中m表示的是单个输入序列的特征长度,d表示的是隐藏层的特征长度
  • W , h t − 1 W,h_{t-1} W,ht1的大小分别为 h × h h\times h h×h h × 1 h\times 1 h×1,计算复杂度为 O ( d 2 ) O(d^2) O(d2)
    总共具有n个输入,因此RNN的计算复杂度为 O ( n d 2 ) O(nd^2) O(nd2)

自注意力公式理解

键值对(Key-Value)注意力
首先, X X T XX^T XXT,假设X是一个矩阵。矩阵可以看作是一些向量的组成,一个矩阵乘以它自己的转置运算,可以看成这些向量分别与其他向量计算内积。

向量的内积:
表征两个向量的夹角,表征一个向量在另一个向量上的投影,投影值越大,意味两个向量相关度越高

更进一步,如果两个向量是词向量,是词在高维空间的数值映射,词向量之间相关度高表示在一定程度上表示,在关注词A的时候,应该给予词B更多的关注

s o f t m a x ( X X T ) X softmax(XX^T)X softmax(XXT)X在和X进行相乘表示加权求和

文章中所谓的 Q , K , V Q,K,V Q,K,V矩阵,查询向量之类的字眼,其来源都是X与矩阵的乘积,本质上都是X的线性变化,不使用X进行线性变换是为了提升模型的拟合能力。矩阵W都是可以训练的,起到一个缓冲的作用。


Seq2Seq模型

对于输入输出都是序列且输出序列长度不确定的情况下我们采用Seq2Seq模型。Seq2Seq模型本身是一个Encoder-Decoder结构的网络。输出序列的长度是由模型本身来进行决定的在这里插入图片描述

应用:语音辨识,机器翻译,语音翻译,分类任务,目标检测等。

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer是一种用于序列到序列(sequence-to-sequence)任务的模型,它由嵌入层、位置编码、编码器和全连接层组成。嵌入层用于将输入序列中的每个词转换为向量表示,位置编码用于为每个词的位置信息编码,编码器是核心组件,它使用多头注意力机制对输入序列进行编码,全连接层用于输出最终的预测结果。 在Transformer中,为了确保解码器不能看到未来的信息,我们使用了序列掩码(sequence mask)的方法。在解码器中,通过产生一个上三角矩阵并将其应用于每个序列,我们可以隐藏未来时刻的信息。这在训练过程中非常有效,因为我们只能将前一时刻的输出作为当前时刻的输入。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PyTorch的Transformer模型用于构建和训练一个Transformer模型](https://download.csdn.net/download/weixin_44609920/88217732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Transformer详解](https://blog.csdn.net/qq_52302919/article/details/122207924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值