摘要
本文首要针对NLP使命中经典的Transformer模型的来历、用途、网络结构进行了详细描绘,对后续NLP研讨、注意力机制了解、大模型研讨有必定协助。
1. 引言
在上一篇《Text-to-SQL小白入门(一)》中,咱们介绍了Text-to-SQL研讨的界说、意义、研讨办法以及未来展望,其间在介绍研讨办法时,屡次说到了Seq2Seq结构以及相应的Encoder-Decoder办法。而今日说到的模型Transformer,是人工智能范畴,尤其是NLP范畴和CV范畴的杰出代表,也是现在最先进的模型之一!
在步入正式学习前,咱们先对Seq2Seq办法、Encoder-Decoder办法、Transformer模型做一个简略的区分。
- Encoder-Decoder是一种架构,一种通用的模型结构,只需用到了编码器和解码器就能够称为Encoder-Decoder办法。
- Seq2Seq办法处理的是两个序列之间的映射问题,是Encoder-Decoder办法的一种特殊办法。首要类别有以下几种:
- 根据LSTM的Seq2Seq模型
- 根据CNN的Seq2Seq模型
- 根据RNN的Seq2Seq模型
- 根据Attention的Seq2Seq模型
- Transformer办法是根据自注意力机制self-attention的Seq2Seq模型。
2. Transformer是什么?
2.1. 来历
Transformer模型来历于2017年NIPS(CCF-A)谷歌团队宣布的论文《Attention Is All You Need》。现在最火的大模型,比方BERT、GPT系列等都离不开Transformer模型。现在改论文的谷歌学术的被引用次数现已达到84986,如图1所示,这个数据现已能够载入史册了!
图1 论文Attention Is All You Need谷歌学术引用数
插个题外话,Transformer的作者谷歌8子,现已全部离职,arxiv上v6版本也删除了划掉了一切作者的谷歌邮箱,如图2所示。(今年8月初又从头更新了v7版本)
图2 论文Attention Is All You Need作者名单
2.2. 概述
Transformer也是【变形金刚】的英语,台大李宏毅老师也喜爱用变形金刚举比方)
Transformer是一种十分盛行的神经网络结构,现已被用于多种自然言语处理使命的大规模预练习模型,如言语模型、机器翻译、文本摘要、问答系统等。
Transformer的首要长处是其并行核算能力,能够处理长文本,一起通过自我注意力机制能够有效地捕捉上下文信息。
3. Transformer有什么用?
在前面的概述中,现已简略介绍了Transformer能够在多个场景广泛运用,接下来举几个比方,更直观感受一下。
- 1 -> N:生成使命,比方输入为一张图片,输出图片的文本描绘。
- N -> 1:分类使命,比方输入为一句话,输出这句话的情感分类。
- N -> N:序列标示使命,比方输入一句话,输出该句话的词性标示。
- N -> M:机器翻译使命,比方输入一句中文,输出英文翻译。
3.1. 序列联系为1 vs N
比方生成使命中,图片生成自动描绘,便是序列联系1 vs N,如图3所示。
- 输入:长度为1,一张图片
- 输出:长度为N,图片的文本描绘
图3 图画生成文本描绘比方
3.2. 序列联系为N vs 1
比方分类使命中,序列联系为N vs 1,以文本情感分类sentimental analysis为例。
- 输入:长度为N,一段文本。比方教师点评本文中“今日老师上课十分有趣,我很喜爱”
- 输出:长度为1,文本的情感正/负面倾向,比方得到“正面positive”。
3.3. 序列联系为N vs N
比方有序列标示使命,比方文本词性标示syntactic parsing
- 输入:长度为N,一段文本。
- 输出:长度为N,这段文本每个单词的词性阐明(比方最根底的是名词n,动词v,形容词adj等等,实践标示中,比方图4中deep是NP,名词短语;is是VP,动词短语;)
图4 文本词性标示比方
3.4. 序列联系为N vs M
语音辨认Speech Recognition使命输入输出如图5所示:
- 输入序列:长度为N,一段语音序列
- 输出序列:长度为M,一段文字“你好吗”
图5 语音辨认比方
机器翻译Machine Translation使命的输入输出如图6所示:
- 输入序列:长度为N,一段中文“机器学习”
- 输出序列:长度为M,一段翻译“machine learning”
图6 机器翻译比方
语音翻译Speech Translation使命的输入输出入图7所示:
- 输入序列:长度为N,一段语音“machine learning”
- 输出序列:长度为M,一段翻译“机器学习”
(这个使命也能够用语音辨认+机器翻译结合来完结,可是有的言语没有文字,就很难办,可是Transformer模型直接从语音到文字翻译是能够担任的)
图7 言语翻译比方
4. Transformer具体结构
话不多说,直接上Transformer结构“世界名画”,如图8所示,核心部分首要能够分为Embedding、Positional Encoding、Encoder、Decoder,接下来就分别介绍一下。
图8 transformer结构
4.1. 输入部分
在这儿,咱们把Input -> Input Embedding -> Positional Encoding 当作输入部分,这部分处理完后,会作为Encoder编码器的输入,如图9所示。
图9 Transformer结构中Encoder和输入部分
4.1.1. Input
在Transformer论文中,作者以机器翻译这个范畴为切入点来介绍模型,所以该模型在论文里边的输入输出就对应前面说到的序列联系N vs M。
- 输入:一段文本:比方说“我喜爱你”
- 输出:一段英语翻译:比方说“I LOVE YOU”
4.1.2. Input Embedding
输入文本信息后,怎样才能让模型获取这个输入呢?所以需求对文本进行编码,让模型能够读取输入。模型读取的一般是向量,所以需求让文本转化为向量,这便是Input Embedding做的工作。
更学术一点的话语是,文本是一种非结构化的数据信息,是不能够直接被核算的。咱们需求将这些非结构化的信息转化为结构化的信息,也便是这儿的Input embedding。
常用的办法首要用one-hot编码(翻译为独热编码,看起来怪怪的)、整数编码、word embedding(词嵌入)。
4.1.2.1. one-hot
用浅显的话来解说便是:把每一个单词都用某个位为1,其他位满是0的二进制向量来表明,比方如图10所示。
- apple:只要第1位为1,其他都是0,[1 0 0 0 0 …]
- bag:只要第2位为1,其他都是0,[0 1 0 0 0 …]
- cat:只要第3位为1,其他都是0,[0 0 1 0 0 …]
图10 one-hot 和 word embedding编码
one-hot编码长处:
- 存储十分便利
- 核算功率高
缺陷也很明显,在实践状况中,文本中很可能出现不计其数个不同的词,这时分向量就会十分长。其间99%以上都是 0。
- 向量如果过于全部,存储空间糟蹋严重
- 更重要的是,one-hot编码没有语义信息,无法看出两者单词之间的相似性。
4.1.2.2. 整数编码
浅显解说:把每一个单词都用1个整数来表明,跟one-hot有点相似。
- apple:用数字1表明
- bag:用数字2表明
- cat:用数字3表明
长处:
- 容易实现
- 适用于很多数据
缺陷:
- 存储空间运用率低下
- 无法表达词语之间的联系
4.1.2.3. word embedding
前面铺垫了这么多,前面两种办法都无法表达语义联系,那么词嵌入办法就必定能够了。
word embedding 是文本表明的一类办法。跟 one-hot 编码和整数编码的意图相同。一起词嵌入并不特指某个具体的算法,跟上面2种办法比较,这种办法有几个明显的优势:
- 语义相似的词在向量空间上也会比较相近,如上面的图10所示。
- 能够将文本通过一个低维向量来表达,不像 one-hot 那么长,比方图11中,把“我”编码为一个512维的向量;“你”也是一个512维的向量;“你”也是一个512维的向量。【论文中也是512维】
- 通用性很强,能够用在不同的使命中。
图11 word embedding 示例
word embedding主流的办法有word2vec 和 GloVe。
- word2vec:这是一种根据核算办法来取得词向量的办法。
- GloV: 是对 word2vec 办法的扩展,它将全局核算和 Word2vec 的根据上下文的学习结合了起来。
4.1.3. positional embedding
需求了解为什么有这个positional embedding的存在? 由于在transformer组织中,输入是并行处理的,这样核算功率更高了,可是疏忽了文字的先后顺序的重要性。
论文中公式如图12所示,偶数(2i)方位用sin表明,奇数(2i+1)方位用cos表明。
图12 方位编码公示
举个比方,比方“我喜爱你”中的“爱”这个字, 方位编码能够大概写成[sin,cos,sin,cos…,cos],对应总共512维状况,如图13所示。
图 13 方位编码举例
把word embedding 和 positional embedding之后的输入加起来,作为编码器Encoder终究的输入,如图14所示。
图14 输入编码后相加
这儿有个拓展,便是为什么方位编码是有效的?参阅图15 实质上还是数学:三角函数的性质+线性代数 更浅显的解说便是: 关于后续某一个方位比方pos+k方位,都能够被前面pos方位和k方位线性组合,这样就阐明晰相关方位信息
图15 推理方位编码有效
4.2. Encoder编码器
总算,总算,总算到了论文最核心的部分了 论文里边说到的是“We propose a new simple network architecture, the Transformer”,感觉一点也不simple啊
咱们先明确一件工作,便是Encoder编码器做了一件什么工作?输入输出的鸿沟是什么?简化版本如图16所示。
- 输入:一堆向量[x1,x2,x3,x4]
- 输出:一堆处理后的向量[h1,h2,h3,h4],长度坚持共同。
图16 Encoder编码器输入输出示意图
4.2.1. Attention Mechanism注意力机制
Transformer里边最核心的部分是根本注意力机制的,论文标题也直接是Attention is all you need,那么咱们需求了解一下什么注意力机制?
注意力机制(Attention Mechanism)的研讨最早受到了人类视觉系统研讨的启示。由于人类视网膜不同部位的信息处理能力不同,人们会选择性重视一切信息中的部分信息,一起疏忽掉其他信息。为了高效运用视觉信息,人类需求选择视觉区域中的某个部分要点重视,比方图17所示,颜色越深,代表越重视。
比方人们在用电脑观看视频时,会要点重视电脑屏幕上的内容,选择性疏忽电脑背景和鼠标键盘等等。
图17 注意力机制可视化
在深度学习范畴,注意力机制的实质在于模拟人类视觉效果,重视重要特征,丢弃用处不大的特征。注意力机制在许多使命上取得了巨大的成功,除了在自然言语处理NLP使命运用外,还在核算机视觉CV使命广泛运用(比方图画分类、目标检测、语义分割、视频了解、图画生成、三维视觉、多模态使命和自监督学习等)。
4.2.2. Self-Attention自我注意力机制
前面介绍了根本的注意力机制原理,那么回到论文中,Transformer中的注意力机制是什么姿态的? 的确挺“简略”的,核算注意力权重就只要一个公式罢了,了解起来还是需求花点时间。
4.2.2.1. Attention注意力公式
要了解Transformer中的Multi-Head Attention(图18),需求先了解(单头)自注意力机制,也便是论文说到的注意力核算公式Attention(Q,K,V)。
图18 Multi-Head Attention 示例
由于输入其实都只要1个,可是在Multi-Head Attention模块前其实有3个输入,代表Q、K、V,这三个向量都是来历于相同的输入编码,所以是自注意力机制。
4.2.2.2. Q,K,V
Q,K,V是什么?
咱们需求知道Q,K,V代表的都是向量,比方Q是一系列[q1,q2,q3,….]调集,K是一系列[k1,k2,k3,…]调集,V是一系列[v1,v2,v3,…]调集。
- q代表的是query查询,后续会和每一个k进行匹配,找到最相似的k
- k代表的是key关键字,后续会被每一个q匹配
- v代表的是value值,代表从输入中说到到的信息
- 注意:每一个key,都对应一个value;核算query和key的匹配程度便是核算两者相关性,相关性越大,代表key对应value的权重也就越大,这便是不同信息的权重不相同,这便是注意力机制!
Q,K,V从哪里来?
Q,K,V是向量乘法得到的,如图19所示。
- 输入是文本“Thinking Machines”,2个单词
- 通过编码embedding后变为[x1,x2],2个向量
- 通过和一个共享的参数W^Q、W^K、W^V【这个参数是可练习的】相乘,就能够得到Q、K、V
- 在这儿,Q便是[q1,q2];K便是[k1,k2];V便是[v1,v2]。
图19 Q、K、V来历
Q,K,V怎样用?
用法其实便是图20Attention核算公式,首要分为4步。
- 先运用点乘核算Q和K转置的相似性
- 然后再除以一个系数【这是进行点乘后的数值很大,导致通过softmax后梯度变的很小】
- 然后再通过一个softmax函数归一化,这样就得到了不同的注意力权重
- 终究再和信息value相乘
图20 Attention核算公式
能够举个比方,来阐明一下各个参数的核算进程,如图21所示。假定输入仍然是两个单词,编码后得到[x1,x2],通过前面Q、K、V来历,咱们得到了[q1,q2];[k1,k2];[v1,v2]
- 先运用点乘核算Q和K转置的相似性,图21里边q1和k1点乘【点乘成果为1,代表两者最相似;点乘成果为0,代表两者最不相似】,其实写k1转置会更合适,可是不影响了解意思。
- q1的大小是1✖️3
- k1转置的大小是3✖️1
- 相乘得到成果的大小1✖️1,比便利是图中的112,同理别的q2相乘得到96,所以得到成果[112 96]
- 然后再除以一个系数,假定这儿系数为8,那么成果为[14 12]
- 终究再通过一个softmax函数归一化,得到成果[0.88 0.12],这儿图片中写错了,应该是[0.54 0.46],这便是不同的信息权重,这便是注意力机制
- 终究再和信息value[v1,v2]相乘,得到终究的sum
图21 Attention核算举例
在实践的核算进程中,用的都是矩阵乘法,所以是并行核算的,所以Transformer核算功率高,如图22所示。
图22 Attention核算并行核算示例
4.2.3. Multi-Head Attention多头注意力机制
前面说到了单头自注意力机制,这是构成多头注意力机制的根底,论文中运用的是Multi-Head Attention,这儿的注意力便是Self-Attention。
为什么需求多头注意力机制?由于卷积操作能够输出多通道,不同的通道能够代表的特征信息,Transformer也借鉴了这个思路,这儿的head就有点相似于卷积操作中的channel通道。
多头注意力公式,如图23所示。
图23 多头注意力机制核算公式
相同的,举个比方,咱们假定有2个head的状况,输入仍然是两个单词编码,这儿假定为[a1,a2],然后通过和共享参数相乘得到Q、K、V,通过head 区分以及核算注意力,终究得到值[b1,b2]
- 由于head = 2, 所以把q1和一个矩阵相乘得到[q1_1, q1_2](有的源代代码中运用的是直接相除均分);相同的,q2和一个矩阵相乘得到[q2_1, q2_2].
- 然后运用Attention(Q,K,V)公式核算得到head1核算的输出b1_1,如图24
- 然后运用Attention(Q,K,V)公式核算得到head2核算的输出b1_2,如图25
- 再把b1_1,b1_2拼接concat[b1_1, b1_2]
- 和一个矩阵相乘得到一个值b1,如图26
- 重复上面过程,能够得到另一个值b2
- 终究[a1,a2]通过多头注意力机制得到[b1,b2]
图24 多头注意力机制核算b1_1
图25 多头注意力机制核算b1_2
图26 多头注意力机制核算b1
4.2.4. Add残差机制
咱们能够发现的是,在论文的Encoder部分中如图27所示,还有一个Add & Norm,这儿的Add代表的便是残差,Norm代表的是Layer Normalization。
图27 Transformer中残差和归一化
残差网络的概念来历于CV大佬何恺明2015年提出的ResNet,《Deep Residual Learning for Image Recognition》,谷歌学术引用现在176823!!!现在这个backbone仍然是CV届主流的架构之一。 再提一句,凯明大神将于2024年参加MIT,回归学术界~
残差的概念很简略,便是把原始的输入也参加到了通过注意力机制的输出后边,如图28,这便是ResNet中的残差结构,多了一条shortcut分支,也便是等值改换identity。
- 输入为X
- 分之1输出:通过特征提取的值F(X)
- 分支2输出:通过等值改换的值,便是原始的输入X
- 终究输出为X+F(X)
图28 残差结构示意图
相同的,在咱们的Encoder结构中,加上残差结构后的输入输出如下所示。
- 输入:X
- 分之1输出:通过注意力核算提取的值Attention(X)
- 分支2输出:通过等值改换的值,便是原始的输入X
- 终究输出为X+Attention(X)
为什么需求残差结构? 原论文中有详细解说,首要是为了处理层数过多时的梯度消失的现象。 也能够通过数学上的链式求导法则来证明。AI离不开数学!
4.2.5. Layer Normalization
可能会遇到一个区分Batch Normalization vs Layer Normalization,也便是BN vs LN CV里边BN用的多 NLP里边LN用的多 相似点,都是‘强迫’数据坚持均值为0,方差为1的正态分布
- BN:批处理归一化,首要针对的是一个batch里边,一切的样本相同维度比方一堆图片,核算图片R、G、B三个通道的均值和方差。
- LN:层归一化,首要针对的是一个样本里边,不同维度取均值和方差。由于如果当文本长度距离比较大的时分,有的文本比方长度为1,有的文本长度为1000000,这样针对一切样本做BN,其实是效果不可的。【论文顶用的是LN】
举个比方,如图29所示,这儿假定的是二维输入【实践上文本输入是三维的】,假定前面9个文本都是有5个单词构成,第10个文本有20个单词。如果是做BN的话,会默许一切样本的相同方位的字都是有相似的含义的,比方“我”、“今”、“生”、…、“这”都是归于样本的第1个方位,明显他们含义不相同。LN的处理便是默许一个样本里边假定他们的语义信息是有相关性的,所以用来核算均值和方差。
- “我喜爱打球”
- “今日天气好”
- “生活很夸姣”
- …
- “这句话仅仅只是个比方为了坚持长度等于二十”
图29 BN和LN示例
4.2.6. Feed Forward前馈神经网络
直接上公式,如图30所示,其实便是两个全衔接层FC(或者叫只要一个躲藏层的MLP)
- 第一个全衔接层(xW1 + b1)会把维度从512改换到2048维
- 然后通过Max函数,也便是ReLU激活函数
- 然后第二个全衔接层会把维度从2048变回本来的512维,坚持了输入输出维度共同,由于还有残差衔接。
图30 FFN公式核算示例
不过值得注意的是,Encoder会堆叠N次,论文中N取值为6(Decoder也是堆叠6次),如图31所示。
图31 Encoder堆叠次数
4.3. Decoder解码器
在解码器部分,首要结构和Encoder结构有点相似,如图32所示,不同点首要是:
- 第一个注意力是遮掩后的多头注意力机制Masked Multi-Head Attention
- 第二个多头注意力的输入部分其间1个来历于Masked Multi-Head Attention,其间2个来历于Encoder编码器,这儿有个cross attention的概念。
图32 Encoder和 Decoder部分比照
4.3.1. Masked Multi-Head Attention
首先Decoder中的输入部分,首先是来历于output编码后的向量,比方在机器翻译使命中的话,input是“hello world”,output对应的ground truth便是“你好世界”。比方在语音翻译使命中,input是“机器学习”的语音,output对应的ground truth便是“机器学习”文本。
现在把output输入到Masked Multi-Head Attention模块中,跟Multi-Head Attention核算相似,仅有的不同是在核算当时单词的时分,会遮挡住当时单词以及当时单词后续的词(会参加2个特殊符号,一个是BEGIN开始符号,一个END完毕符号)。
举个比方,比方是正常的Self-Attention时分,如图33所示。
- 想要输出b1需求结合输入a1,a2,a3,a4
- 想要输出b2需求结合输入a1,a2,a3,a4
- 想要输出b3需求结合输入a1,a2,a3,a4
- 想要输出b4需求结合输入a1,a2,a3,a4
图33 正常的Self-Attention示例
如果是Masked Self-Attention时,如图34所示。
- 想要输出b1需求结合输入a1
- 想要输出b2需求结合输入a1,a2
- 想要输出b3需求结合输入a1,a2,a3
- 想要输出b4需求结合输入a1,a2,a3,a4
图34 Masked Self-Attention示例
更全面的展现,和上面的举比方对应起来便是如图35所示。
- 这儿的Decoder的输出部分“机 器 学 习”对应着图34的[b1 b2 b3 b4]
- 这儿的Decoder的输入部分“BEGIN 机 器 学”对应着图34的[a1 a2 a3 a4]
- 这儿为了和上面对应,还有一个过程没有画出来,便是会把“习”继续作为Decoder 输入,然后Decoder输出一个“END”符号,那么就完毕。
图35 Masked Self-Attention示例
为什么需求mask ? 其实这个跟猜测输出的时分,我不能把输出值告诉你有点像,只能通过模型来猜测。比方我想要知道这个语音对应的翻译是“机”,我不能把文字“机”也直接输送到模型里边。
4.3.2. Multi-Head Attention
Decoder解码器中的多头注意力机制的QKV来历于Encoder编码器和Decoder解码器,编码器供给K和V,解码器供给Q,如图36所示。
- 解码器Decoder供给的是q,便是一个query,比方是包括BEGIN特殊字符相关信息的
- 编码器Encoder供给的是k1,v1,k2,v2,k3,v3,通过Attention公式核算后得到加权后的值v。所以这儿是cross attention.
- 这个值v会通过Add & norm模块、Feed Forward模块、Add & norm模块,然后重复堆叠Decoder模块,如上面说到的图32部分。
图36 Cross Attention示例
4.4. output
总算总算来到了输出部分
这儿首要是一个线性层+softmax,如图37所示。
- input 是把一切的数据一次性扔进去
- output 是一个词一个词的扔进去
- 在通过多个Decoder解码器后,比方output 输入的是“BEGIN”字符,终究通过线性层Linear、Softmax层后输出猜测的概率,选取概率最大的值便是咱们模型终究的猜测输出。
图37 output 示例
5. 参阅链接
zhuanlan.zhihu.com/p/647249972
arxiv.org/pdf/1706.03…
www.bilibili.com/video/BV1Di…
www.bilibili.com/video/BV1v3…
www.bilibili.com/video/BV1pu…
www.bilibili.com/video/BV15v…
参阅了很多B站大佬视频,强推
讲的有不对的当地,请批评指正,感谢