当前位置:首页 > 每日看点 > 正文内容

为什么我还是无法理解tranormer?

卡卷网1年前 (2025-01-10)每日看点240
建议大家看一下李宏毅老师讲解的Tranormer,非常简单易懂(个人觉得史上最强tranormer讲解):s:///watch?v=ugWDIIOHtPA&list=PLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4&index=60

前言

Tranormer由论文《AttentionisAllYouNeed》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHu获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。

在本文中,我们将试图把模型简化一点,并逐一介绍里面的核心概念,希望让普通读者也能轻易理解。

AttentionisAllYouNeed:AttentionIsAllYouNeed

1.Tranormer整体结构

首先介绍Tranormer的整体结构,下图是Tranormer用于中英文翻译的整体结构:

Tranormer的整体结构,左图Encoder和右图Decoder

可以看到<>Tranormer由Encoder和Decoder两个部分组成,Encoder和Decoder都包含6个lock。Tranormer的工作流程大体如下:

<>第一步:获取输入句子的每一个单词的表示向量<>X,<>X由单词的Emedding(Emedding就是从原始数据提取出来的Feate)和单词位置的Emedding相加得到。

Tranormer的输入表示

<>第二步:将得到的单词表示向量矩阵(如上图所示,每一行是一个单词的表示<>x)传入Encoder中,经过6个Encoderlock后可以得到句子所有单词的编码信息矩阵<>C,如下图。单词向量矩阵用表示,n是句子中单词个数,d是表示向量的维度(论文中d=512)。每一个Encoderlock输出的矩阵维度与输入完全一致。

TranormerEncoder编码句子信息

<>第三步:将Encoder输出的编码信息矩阵<>C传递到Decoder中,Decoder依次会根据当前翻译过的单词1~i翻译下一个单词i+1,如下图所示。在使用的过程中,翻译到单词i+1的时候需要通过<>Mask(掩盖)作遮盖住i+1之后的单词。

TransofrmerDecoder预测

上图Decoder接收了Encoder的编码矩阵<>C,然后首先输入一个翻译开始符"<egin>",预测第一个单词"I";然后输入翻译开始符"<egin>"和单词"I",预测单词"he",以此类推。这是Tranormer使用时候的大致流程,接下来是里面各个部分的细节。

2.Tranormer的输入

Tranormer中单词的输入表示<>x由<>单词Emedding和<>位置Emedding(PositionalEncoding)相加得到。

Tranormer的输入表示

2.1单词Emedding

单词的Emedding有很多种方式可以获取,例如可以采用Word2Vec、Glove等算法预训练得到,也可以在Tranormer中训练得到。

2.2位置Emedding

Tranormer中除了单词的Emedding,还需要使用位置Emedding表示单词出现在句子中的位置。<>因为Tranormer不采用RNN的结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于NLP来说非常重要。所以Tranormer中使用位置Emedding保存单词在序列中的相对或绝对位置。

位置Emedding用<>PE表示,<>PE的维度与单词Emedding是一样的。PE可以通过训练得到,也可以使用某种公式计算得到。在Tranormer中采用了后者,计算公式如下:

其中,pos表示单词在句子中的位置,d表示PE的维度(与词Emedding一样),2i表示偶数的维度,2i+1表示奇数维度(即2i≤d,2i+1≤d)。使用这种公式计算PE有以下的好处:

    使PE能够适应训练集里面所有句子更长的句子,假设训练集里面最长的句子是有20个单词,突然来了一个长度为21的句子,则使用公式计算的方法可以计算出第21位的Emedding。可以让模型容易地计算出相对位置,对于固定长度的间距k,<>PE(pos+k)可以用<>PE(pos)计算得到。因为Sin(A+)=Sin(A)Cos()+Cos(A)Sin(),Cos(A+)=Cos(A)Cos()-Sin(A)Sin()。

将单词的词Emedding和位置Emedding相加,就可以得到单词的表示向量<>x,<>x就是Tranormer的输入。

3.Self-Attention(自注意力机制)

TranormerEncoder和Decoder

上图是论文中Tranormer的内部结构图,左侧为Encoderlock,右侧为Decoderlock。红色圈中的部分为<>Multi-HeadAttention,是由多个<>Self-Attention组成的,可以看到Encoderlock包含一个Multi-HeadAttention,而Decoderlock包含两个Multi-HeadAttention(其中有一个用到Masked)。Multi-HeadAttention上方还包括一个Add&Norm层,Add表示残差连接(ResidualConnection)用于防止网络退化,Norm表示LayerNormalization,用于对每一层的激活值进行归一化。

因为<>Self-Attention是Tranormer的重点,所以我们重点关注Multi-HeadAttention以及Self-Attention,首先详细了解一下Self-Attention的内部逻辑。

3.1Self-Attention结构

Self-Attention结构

上图是Self-Attention的结构,在计算的时候需要用到矩阵<>Q(查询),K(键值),V(值)。在实际中,Self-Attention接收的是输入(单词的表示向量x组成的矩阵X)或者上一个Encoderlock的输出。而<>Q,K,V正是通过Self-Attention的输入进行线性变换得到的。

3.2Q,K,V的计算

Self-Attention的输入用矩阵X进行表示,则可以使用线性变阵矩阵<>WQ,WK,WV计算得到<>Q,K,V。计算如下图所示,<>注意X,Q,K,V的每一行都表示一个单词。

Q,K,V的计算

3.3Self-Attention的输出

得到矩阵Q,K,V之后就可以计算出Self-Attention的输出了,计算的公式如下:

Self-Attention的输出

公式中计算矩阵<>Q和<>K每一行向量的内积,为了防止内积过大,因此除以的平方根。<>Q乘以<>K的转置后,得到的矩阵行列数都为n,n为句子单词数,这个矩阵可以表示单词之间的attention强度。下图为<>Q乘以,1234表示的是句子中的单词。

Q乘以K的转置的计算

得到之后,使用Softmax计算每一个单词对于单词的attention系数,公式中的Softmax是对矩阵的每一行进行Softmax,即每一行的和都变为1.

对矩阵的每一行进行Softmax

得到Softmax矩阵之后可以和<>V相乘,得到最终的输出<>Z。

Self-Attention输出

上图中Softmax矩阵的第1行表示单词1与所有单词的attention系数,最终单词1的输出等于所有单词i的值根据attention系数的例加在一起得到,如下图所示:

Zi的计算方法

3.4Multi-HeadAttention

在上一步,我们已经知道怎么通过Self-Attention计算得到输出矩阵Z,而Multi-HeadAttention是由多个Self-Attention组合形成的,下图是论文中Multi-HeadAttention的结构图。

Multi-HeadAttention

从上图可以看到Multi-HeadAttention包含多个Self-Attention层,首先将输入<>X分别传递到h个不同的Self-Attention中,计算得到h个输出矩阵<>Z。下图是h=8时候的情况,此时会得到8个输出矩阵<>Z。

多个Self-Attention

得到8个输出矩阵之后,Multi-HeadAttention将它们拼接在一起<>(Concat),然后传入一个<>Linear层,得到Multi-HeadAttention最终的输出<>Z。

Multi-HeadAttention的输出

可以看到Multi-HeadAttention输出的矩阵<>Z与其输入的矩阵<>X的维度是一样的。

4.Encoder结构

TranormerEncoderlock

上图红色部分是Tranormer的Encoderlock结构,可以看到是由Multi-HeadAttention,<>Add&Norm,FeedForward,Add&Norm组成的。刚刚已经了解了Multi-HeadAttention的计算过程,现在了解一下Add&Norm和FeedForward部分。

4.1Add&Norm

Add&Norm层由Add和Norm两部分组成,其计算公式如下:

Add&amp;amp;amp;Norm公式

其中<>X表示Multi-HeadAttention或者FeedForward的输入,MultiHeadAttention(<>X)和FeedForward(<>X)表示输出(输出与输入<>X维度是一样的,所以可以相加)。

<>Add指<>X+MultiHeadAttention(<>X),是一种残差连接,通常用于解决多层网络训练的问题,可以让网络只关注当前差异的部分,在ResNet中经常用到:

残差连接

<>Norm指LayerNormalization,通常用于RNN结构,LayerNormalization会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。

4.2FeedForward

FeedForward层较简单,是一个两层的全连接层,第一层的激活函数为Relu,第二层不使用激活函数,对应的公式如下。

FeedForward

<>X是输入,FeedForward最终得到的输出矩阵的维度与<>X一致。

4.3组成Encoder

通过上面描述的Multi-HeadAttention,FeedForward,Add&Norm就可以构造出一个Encoderlock,Encoderlock接收输入矩阵,并输出一个矩阵。通过多个Encoderlock叠加就可以组成Encoder。

第一个Encoderlock的输入为句子单词的表示向量矩阵,后续Encoderlock的输入是前一个Encoderlock的输出,最后一个Encoderlock输出的矩阵就是<>编码信息矩阵C,这一矩阵后续会用到Decoder中。

Encoder编码句子信息

5.Decoder结构

TranormerDecoderlock

上图红色部分为Tranormer的Decoderlock结构,与Encoderlock相似,但是存在一些区别:

    包含两个Multi-HeadAttention层。第一个Multi-HeadAttention层采用了Masked作。第二个Multi-HeadAttention层的<>K,V矩阵使用Encoder的<>编码信息矩阵C进行计算,而<>Q使用上一个Decoderlock的输出计算。最后有一个Softmax层计算下一个翻译单词的概率。

5.1第一个Multi-HeadAttention

Decoderlock的第一个Multi-HeadAttention采用了Masked作,因为在翻译的过程中是顺序翻译的,即翻译完第i个单词,才可以翻译第i+1个单词。通过Masked作可以防止第i个单词知道i+1个单词之后的信息。下面以"我有一只猫"翻译成"Iheacat"为例,了解一下Masked作。

下面的描述中使用了类似TeacherForcing的概念,不熟悉TeacherForcing的童鞋可以参考以下上一篇文章Seq2Seq模型详解。在Decoder的时候,是需要根据之前的翻译,求解当前最有可能的翻译,如下图所示。首先根据输入"<egin>"预测出第一个单词为"I",然后根据输入"<egin>I"预测下一个单词"he"。

Decoder预测

Decoder可以在训练的过程中使用TeacherForcing并且并行化训练,即将正确的单词序列(<egin>Iheacat)和对应输出(Iheacat<end>)传递到Decoder。那么在预测第i个输出时,就要将第i+1之后的单词掩盖住,<>注意Mask作是在Self-Attention的Softmax之前使用的,下面用012345分别表示"<egin>Iheacat<end>"。

<>第一步:是Decoder的输入矩阵和<>Mask矩阵,输入矩阵包含"<egin>Iheacat"(0,1,2,3,4)五个单词的表示向量,<>Mask是一个5×5的矩阵。在<>Mask可以发现单词0只能使用单词0的信息,而单词1可以使用单词0,1的信息,即只能使用之前的信息。

输入矩阵与Mask矩阵

<>第二步:接下来的作和之前的Self-Attention一样,通过输入矩阵<>X计算得到<>Q,K,V矩阵。然后计算<>Q和的乘积

Q乘以K的转置

<>第三步:在得到之后需要进行Softmax,计算attentionscore,我们在Softmax之前需要使用<>Mask矩阵遮挡住每一个单词之后的信息,遮挡作如下:

Softmax之前Mask

得到<>Mask之后在<>Mask上进行Softmax,每一行的和都为1。但是单词0在单词1,2,3,4上的attentionscore都为0。

<>第四步:使用<>Mask与矩阵<>V相乘,得到输出<>Z,则单词1的输出向量是只包含单词1信息的。

Mask之后的输出

<>第五步:通过上述步骤就可以得到一个MaskSelf-Attention的输出矩阵,然后和Encoder类似,通过Multi-HeadAttention拼接多个输出然后计算得到第一个Multi-HeadAttention的输出<>Z,<>Z与输入<>X维度一样。

5.2第二个Multi-HeadAttention

Decoderlock第二个Multi-HeadAttention变化不大,主要的区别在于其中Self-Attention的<>K,V矩阵不是使用上一个Decoderlock的输出计算的,而是使用<>Encoder的编码信息矩阵C计算的。

根据Encoder的输出<>C计算得到<>K,V,根据上一个Decoderlock的输出<>Z计算<>Q(如果是第一个Decoderlock则使用输入矩阵<>X进行计算),后续的计算方法与之前描述的一致。

这样做的好处是在Decoder的时候,每一位单词都可以利用到Encoder所有单词的信息(这些信息无需<>Mask)。

5.3Softmax预测输出单词

Decoderlock最后的部分是利用Softmax预测下一个单词,在之前的网络层我们可以得到一个最终的输出Z,因为Mask的存在,使得单词0的输出Z0只包含单词0的信息,如下:

DecoderSoftmax之前的Z

Softmax根据输出矩阵的每一行预测下一个单词:

DecoderSoftmax预测

这就是Decoderlock的定义,与Encoder一样,Decoder是由多个Decoderlock组合而成。

6.Tranormer总结

    Tranormer与RNN不同,可以较好地并行训练。Tranormer本身是不能利用单词的顺序信息的,因此需要在输入中添加位置Emedding,否则Tranormer就是一个词袋模型了。Tranormer的重点是Self-Attention结构,其中用到的<>Q,K,V矩阵通过输出进行线性变换得到。Tranormer中Multi-HeadAttention中有多个Self-Attention,可以捕获单词之间多种维度上的相关系数attentionscore。

[1][2]

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/8432.html

分享给朋友:

相关文章

OZON平台什么产品好卖?

ozon选品的核心重点我不说 你们全网也不见说的这么干的教学了你信我就按照我说的思路去走 不信的出去买课去 一时间消化不了的先点赞收藏起来 真不中了下载也行 因为最近总有坏人给我使诈 平台已经下了我八个视频了 还都是实操教学不废话的那种 气...

电视上哪个软件可以免费看电视直播?

电视上哪个软件可以免费看电视直播?

今天给大家推荐8款免费电视端直播看剧软件,感兴趣的朋友可以下载试一试!1、超级ITV 6.04免费看电视直播,央视卫视高清秒播,还有电影电视剧少儿体育等。2、小鲸电视 1.3.1小鲸电视是一款智能电视应用,集成了多个内容来源,包括腾讯视频、...

想要在双 11 换一台全面无短板的新手机,有没有「闭眼买」的机型推荐?

想要在双 11 换一台全面无短板的新手机,有没有「闭眼买」的机型推荐?

最近一个月各大手机厂商的旗舰机扎堆发布,不知道大家看爽了没?这一代的性能续航大提升,最低 3599 元就能买到,同时老款也有不小的降幅,今年双 11 算是相当适合换手机的节点了!这次,小黑就给大家推荐双 11 期间值得购买的手机...150...

报名的网课分期付款怎么退?

你在你分期付款的订单下面有客服电话,直接打电话描述一下你的问题,你可以告诉他你是被恶意绑定的,在不了解有退学条件这一说的情况下报的课程,可能遇到消费者诈骗了,不承认有退学金,说是霸王条款,诈骗消费者,你若分期了先把自动续费关了,别让自己个人...

为什么有人觉得华为mate60只值2000?

为什么有人觉得华为mate60只值2000?

你以为买Mate60的人真的傻?真的那么爱国?国庆前,我家那傻子加价800多买了一台Mate60,当时还被我骂他是傻子。可是他说一回到公司就被老板同事朋友看到,拿去反复查看,都在惊叹他这么快就买到新机。跟亲戚朋友聚会,别人一看就知道他买的是...

腾讯云为何在云服务市场败给了阿里云?

IDC领域,2010年以前,万网、新网互联、新网,三家公司瓜分天下,其中万网市场份额最高,排名第一。当时,万网的域名是http://www.net.cn,通过该域名就可以判断万网的地位。2010年阿里云成立,直接收购了万网,大量用户直接流向...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。