【转】图解Transformer,一文读懂self-attention

https://jalammar.github.io/illustrated-transformer/

https://blog.youkuaiyun.com/qq_41664845/article/details/84969266

前言
      Attention这种机制最开始应用于机器翻译的任务中,并且取得了巨大的成就,因而在最近的深度学习模型中受到了大量的关注。在在这个基础上,我们提出一种完全基于Attention机制来加速深度学习训练过程的算法模型-Transformer。事实证明Transformer结构在特定任务上已经优于了谷歌的神经网络机器翻译模型。但是,Transformer最大的优势在于其在并行化处理上做出的贡献。谷歌也在利用Transformer的并行化方式来营销自己的云TPU。所以,现在让我们一步一步剖析Transformer的神秘面纱,让我看看他是怎么一步一步训练的。

     Transformer在Goole的一篇论文Attention is All You Need被提出,为了方便实现调用Transformer Google还开源了一个第三方库,基于TensorFlow的Tensor2Tensor,一个NLP的社区研究者贡献了一个Torch版本的支持:guide annotating the paper with PyTorch implementation。这里,我想用一些方便理解的方式来一步一步解释Transformer的训练过程,这样即便你没有很深的深度学习知识你也能大概明白其中的原理。

A High-Level Look
       我们先把Transformer想象成一个黑匣子,在机器翻译的领域中,这个黑匣子的功能就是输入一种语言然后将它翻译成其他语言。如下图:

掀起The Transformer的盖头,我们看到在这个黑匣子由2个部分组成,一个Encoders和一个Decoders。

我们再对这个黑匣子进一步的剖析,发现每个Encoders中分别由6个Encoder组成(论文中是这样配置的)。而每个Decoders中同样也是由6个Decoder组成。

对于Encoders中的每一个Encoder,他们结构都是相同的,但是并不会共享权值。每层Encoder有2个部分组成,如下图: 

每个Encoder的输入首先会通过一个self-attention层,通过self-attention层帮助Endcoder在编码单词的过程中查看输入序列中的其他单词。如果你不清楚这里在说什么,不用着急,之后我们会详细介绍self-attention的。

Self-attention的输出会被传入一个全连接的前馈神经网络,每个encoder的前馈神经网络参数个数都是相同的,但是他们的作用是独立的。

每个Decoder也同样具有这样的层级结构,但是在这之间有一个Attention层,帮助Decoder专注于与输入句子中对应的那个单词(类似与seq2seq models的结构)

Bringing The Tensors Into The Picture
      在上一节,我们介绍了Transformer的网络结构。现在我们以图示的方式来研究Transformer模型中各种张量/向量,观察从输入到输出的过程中这些数据在各个网络结构中的流动。

      首先还是NLP的常规做法,先做一个词嵌入:什么是文本的词嵌入?

      我们将每个单词编码为一个512维度的向量,我们用上面这张简短的图形来表示这些向量。词嵌入的过程只发生在最底层的Encoder。但是对于所有的Encoder来说,你都可以按下图来理解。输入(一个向量的列表,每个向量的维度为512维,在最底层Encoder作用是词嵌入,其他层就是其前一层的output)。另外这个列表的大小和词向量维度的大小都是可以设置的超参数。一般情况下,它是我们训练数据集中最长的句子的长度。

     上图其实介绍到了一个Transformer的关键点。你注意观察,在每个单词进入Self-Attention层后都会有一个对应的输出。Self-Attention层中的输入和输出是存在依赖关系的,而前馈层则没有依赖,所以在前馈层,我们可以用到并行化来提升速率。

    下面我用一个简短的句子作为例子,来一步一步推导transformer每个子层的数据流动过程。

Now We’re Encoding!
   &nb

### Transformer 架构中的 Self-Attention 和 Connector-Attention #### 自注意力机制(Self-Attention) 自注意力机制允许模型在不同位置关注输入序列的不同部分,从而更好地捕捉上下文关系。具体来说,在Transformer架构中,每个token会生成三个向量:查询(Query)、键(Key)和值(Value)。这些向量用于计算加权平均值来表示当前token与其他tokens之间的关联强度。 权重矩阵QK^T/√d_k决定了各个位置间的重要性程度,并通过softmax函数规范化得到最终的概率分布。此概率乘以V即为该位置的新特征表达[^1]。 ```python import torch.nn.functional as F def scaled_dot_product_attention(q, k, v): d_k = q.size(-1) scores = torch.matmul(q, k.transpose(-2, -1)) / (d_k ** 0.5) attn_weights = F.softmax(scores, dim=-1) output = torch.matmul(attn_weights, v) return output ``` #### 连接器注意力建模(Connector-Attention) 连接器注意力通常指的是跨模块或层之间传递信息的一种方法。不同于标准的自注意力仅限于同一层次内部的操作,这种类型的注意力可以促进更广泛的信息交流。例如,在某些复杂的神经网络设计里,较低级别的视觉特征可能被用来指导高级别的语义理解过程;反之亦然——高层次的概念也可以影响低级感知决策。 然而,“connector-attention”并不是像self-attention那样普遍接受的标准术语。上述描述更多是一种概念性的解释而非严格定义的技术细节。对于特定应用场景下的实现方式可能会有所不同,取决于具体的任务需求和技术背景[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值