Transformer学习笔记:

小白初学Transformer学习笔记:

1.首先在介绍Transformer前,先了解相关的知识

(1).Attention机制(注意力机制)

​   这里先分享下Attention的学习资料:【NLP】Attention Model(注意力模型)学习总结 - 郭耀华 - 博客园 (cnblogs.com)

​   Attention机制被广泛运用在自然语言处理、图像识别等方面,简单来说就像人在看某件事物时,我们往往需要把注意力更多地放到这件事物上,换一个方面来说就是要忽视掉这件事物以外的其他事物,所以注意力模型应该与具体的目的相合。

​   其中,我们可以将Attention分为两类:Spatial Attention 空间注意力、Temporal Attention 时间注意力。更具体的可以分为Soft Attention和Hard Attention。

​    Soft Attention:所有的数据都会注意(未设置筛选条件),都会注意出相应的注意力权值。 Hard Attention:会在生成注意力权重后筛选掉一部分不符合条件的注意力,让他的权重值为0,即忽略这些不符合条件的部分。

以下用图形来介绍Attention机制
在这里插入图片描述

​   由图得,Source中构成元素可以想象成由一系列的<key,value>数据对构成,此时通过给定目标的Query后,既可以通过Key来计算相应value的权重值(通过计算Query和各个Key的相似性和相关性),最终得到Attention数值。

公式可以总结如下:

在这里插入图片描述

      (其中,Lx=||Source||代表Source的长度。)

 (1).第一阶段:根据Query和Key计算两者的相似性,再对原始的分值进行归一化,得到对应的权重系数。

 (2).第二阶段:根据权重系数对Value进行加权求和。

(2).Self—Attention模型

​    Self Attention也经常被称为intra Attention(内部Attention)。Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。

​   (实质上只是对象的转变,在此就不多做讲解)

(3).Encoder-Decoder

​   Encoder-Decoder框架顾名思义也就是编码-解码框架,主要被用于计算序列-序列问题(输入一个序列后产生对应的序列,两者的长度可以不一样)

这里举几个例子来说明:

当输入一篇问题(序列的数据),生成问题的回答(序列)

当输入一句英文(序列数据),生成翻译后的中文(序列数据)

 (具体的实现模型按自身要求选择)

​其中Encoder(编码器),通过对应的方法确定编码C(RNN/LSTM/GRU)得到编码后再将C传入Decoder(解码器),把编码C解码成对应的序列数据,解码的方式可不用根据编码方式来决定,自身选择对应的编码、解码组合。

2.正文开始,Transformer介绍

​   这里也是先给出学习资料:(29条消息) 史上最小白之Transformer详解_Tink1995的博客-CSDN博客_transformer

以下用图片进行相关讲解:

在这里插入图片描述

​   x1、x2作为输入的序列数据,可以是任意形式的词向量,如word2vec、GloVe、one-hot编码。在inputs embedding后,我们注意到输入之后都跟着positional encoding(给每个word的词向量添加位置编码)。 这是因为Transformer 的是完全基于self-Attention的,正如我们所知道的,一句话的意思很可能因为一个词位置的不同而产生不同的意思,就比如“我爱拿键盘敲代码”和“代码爱拿键盘敲我”,正是因为一个词位置的不同引起了语义的差异,而self-Attention的无法获取词语位置信息的,就算一句话打乱位置,self—Attention也可以计算出每个词与其他词之间的attention值,对结果不会照成影响,为了保证我们理解语义的正确,我们需要给每个词向量添加对应的位置编码。 而引出位置编码后,我们就需要知道位置编码是怎么做到的。在b站查找相关视频后,我了解到使用正余弦位置编码。 在使用正余弦位置编码时,位置向量的维度必须和词向量的维度一致。计算的公式如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

​   式中,pos表示单词在句子中的绝对位置,例如:Jerry在"Tom chase Jerry"中的pos=2,dmodel表示词向量的维度,2i和2i+1表示奇偶性,i表示词向量的维度。(注意:无论是将positional encoding与词向量相加还是拼接都是可以的,但后者会导致训练的维度过大,影响训练的效率,所以使用相加)

​   讲完输入以后,就进入我们的Encoder部分,正如上图所示,Encoder由self-Attention、Add&Normalize、Feed forward组成,self—Attention用于计算相应的attention权重、Add&Normalize中Add通过加残差块的方法防止深度神经网络发生退化问题,即通过增加网络的层数,Loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,Loss反而增大。Normalize(归一化),则是实现训练速度的加快、提高训练的稳定性,而Feed forward就是我们所熟悉的全连接层了。

​   Encoder之后就是对应的Decoder,Decoder的输入分为两类:训练时的输入、预测时的输入。 训练时的输入就是已经准备好对应的target数据,例:Encoder输入"Tom chase Jerry",Decoder输入"汤姆追逐杰瑞"。 预测的输入是以起始符开始,然后每一次输入都是上一次的输出,例如输入“”,输出汤姆,输入汤姆,输出汤姆追逐,以此类推。Encoder中对权重的求法跟Encoder中一样,但是不同之处是多了一个mask码(掩码),对某些值进行掩盖,使其在参数更新时不产生效果。 Transformer模型里面包含两种mask:padding mask和sequence mask。

下面介绍一下两种mask:

​   padding mask:对每批输入序列进行对齐,给较短的序列后面填充0,给输入序列较长的序列则截取左边的内容,舍弃剩余内容,以此实现对齐。

​   sequence mask:用于使Decoder无法获取t时刻后的输出,使其只依赖t之前的输出,在训练时十分有效。

在这里插入图片描述

​    最后,Transformer的输出,首先如图经过一次线性变换,然后用Softmax得到对应的概率分布,然后通过词典,输出概率最大的词作为我们的预测输出。由以上看来,Transformer可以实现并行训练,训练的速度也十分迅速,也很好的解决了长距离依赖的问题。

10.8学习总结

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值