理解Transformer的三层境界(待续...)

Transformer模型,提出于2017年,抛弃了传统的RNN和CNN,仅使用Attention机制,解决了长距离依赖问题。文章分为三层境界,从宏观到微观深入解析Transformer。第一层境界介绍了Transformer的基本结构和Attention的改进;第二层境界详细阐述了Self-Attention的计算过程,包括多头注意力和位置编码;第三层境界鼓励读者通过实践深入理解Transformer。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


@author by xubing

0x00、先导知识

0.1 Seq2Seq

0.2 Attention


0x01.第一层境界

高屋建瓴,会当凌绝顶


  • 文章题目:《Attention is all you need》
  • 发表时间:2017.06
  • 作者:Google(几位作者全部是一作)

论文基本信息

  • 传统的编码器解码器一般使用RNN,这也是在机器翻译中最经典的模型。但RNN难以处理长序列的句子,无法实现并行,并且面临对齐问题。
  • Attention模型就是在Encoder和Decoder之间增加了Attention层,解决了长距离依赖的问题。

(长距离依赖信息”可以这么来理解:[1]一个词其实是一个可以表达多样性语义信息的符号(歧义问题)。[2]一个词的语义确定,要依赖其所在的上下文环境。(根据上下文消岐)[3]有的词可能需要一个范围较小的上下文环境就能确定其语义(短距离依赖现象),有的词可能需要一个范围较大的上下文环境才能确定其语义(长距离依赖现象)。)

  • 而本文提出的Transformer抛弃了传统的CNN和RNN,只使用Attention 机制。
  • 并且在Attention的基础增加了位置向量,保留了单词序列信息。
  • 还提出了两个新的Attention机制,Sacled Dot-Product Attention和Multi-head Attention。
  • Attention是Seq2Seq的升级版,Transformer是Attention的升级版。

总结

  • 本文的创新点:抛弃了之前传统的Encoder-Decoder模型必须结合CNN或RNN的固有模式,只用了Attention。提出了两个新的attention 机制,分别叫做Scaled Dot-Product Attention和Multi-head Attention。
  • 与之前的模型的对比: 减少了计算量、提高了并行效率、任务效果提升。
  • 模型的应用:机器翻译、文档摘要、对话系统…

0x02、第二层境界

由浅入深,由表及里,渐入佳境


宏观视角(A High-Level Look)

我们先把Transformer想象成一个黑盒子,在机器翻译的领域中,这个黑盒子的功能就是输入一种语言然后将它翻译成其他语言。如下图:
blackbox.png
打开这个黑盒子,可以看到,这个黑盒子由两个部分组成:Encoders和Decoders。(注意结尾加s)
blackboxopen.png
再进行进一步的剖析,可以看到Encoders由6个Encoder组成,Decoders由6个Decoder组成。
blackbox_opendeep.png
打破砂锅拆到底,每一个Encoder由两部分组成,每一个Decoder由三部分组成。
one_encoder_decoder.png
还可以再细分吗? - 可以,不过这里我们先解释一下每个层的功能。

  • 每个Encoder的输入首先会通过一个self-attention层,通过self-attention层帮助Endcoder在编码单词的过程中查看输入序列中的其他单词。
  • Self-attention的输出会被传入一个全连接的前馈神经网络,每个encoder的前馈神经网络参数个数都是相同的,但是他们的作用是独立的。
  • 每个Decoder也同样具有这样的层级结构,但是在这之间有一个Attention层,帮助Decoder专注于与输入句子中对应的那个单词(类似与seq2seq models的结构)

将张量引入图片(Bringing The Tensors Into The Picture)

用一个具体的例子来解释,观察从输入到输出的过程中这些数据在各个网络结构中的流动。
首先,进行embedding
Each word is embedded into a vector of size 512. We'll represent those vectors with these simple boxes.
每个单词被映射到一个512维的向量。词嵌入(embedding)的过程只发生在最底层的一个Encoder。
image.png

在每个单词进入Self-Attention层后都会有一个对应的输出。Self-Attention层中的输入和输出是存在依赖关系的,而前馈层则没有依赖,所以在前馈层,我们可以用到并行化来提升速率。(重点:并行在前馈层

开始“编码”(Now We’re Encoding! )

image.png
如上图所示,每个位置的单词首先会经过一个self attention层,然后每个单词都通过一个独立的前馈神经网络(这些神经网络结构完全相同)。

从宏观视角看自注意力机制(Self-Attention at a High Level)

Self Attention是本文提出的新的概念,假设下面的句子就是我们需要翻译的输入句:
The animal didn't cross the street because it was too tired.

  • 这句话中的"it"指的是什么?它指的是“animal”还是“street”?对于人来说,这其实是一个很简单的问题,但是对于一个算法来说,处理这个问题其实并不容易。self attention的出现就是为了解决这个问题,通过self attention,我们能将 “it” 与 “animal” 联系起来。
  • 当模型处理单词的时候,self attention层可以通过当前单词去查看其输入序列中的其他单词,以此来寻找编码这个单词更好的线索.
  • self-attention正是transformer中设计的一种通过其上下文来理解当前词的一种办法。你会很容易发现…相较于RNNs,transformer具有更好的并行性。
    image.png
    如上图,是我们第五层Encoder针对单词’it’的图示,可以发现,我们的Encoder在编码单词‘it’时,部分注意力机制集中在了‘animl’上,这部分的注意力会通过权值传递的方式影响到’it’的编码。

从微观视角看自注意力机制(Self-Attention in Detail)

计算self attention的第一步是从每个Encoder的输入向量上创建3个向量(在这个情况下,对每个单词做词嵌入)。所以,对于每个单词,我们创建一个Query向量,一个Key向量和一个Value向量。
如何产生QKV:这些向量是通过词嵌入乘以我们训练过程中创建的3个训练矩阵而产生的。(矩阵最开始是随机的)
以下是两个词的演示:
image.png

  • 第1步:为每个单词生成qkv
    q 1 = X 1 ∗ W Q , q 2 = X 2 ∗ W Q , q_1 = X_1 * W^Q,q_2 = X_2 * W^Q, q1=X1WQ,q2
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值