史上最小白之Transformer详解

1.前言

博客分为上下两篇,您现在阅读的是下篇史上最小白之Transformer详解,在阅读该篇博客之前最好你能够先明白Encoder-Decoder,Attention机制,self-Attention相关原理,可以参考上篇博客,里面我也都有做非常详细的讲解,上篇博客地址:史上最小白之Attention详解

想想自己去年学习Transformer的日子真是太艰难啦,网上的博客要么就是大佬们写得太好太专业了,小白时期的我太多地方看不懂,要么就是太简单了,很多点都没覆盖到,看完还是一知半解,这次自己做个总结,争取每个点都覆盖到,希望能对你有所帮助~

2.Transformer 原理

2.1 Transformer整体结构

在这里插入图片描述
上图是Transformer的完整结构图,小朋友你是否有很多问号???这都是些什么鬼,告辞!!!诶诶~先别走,接下来咱们就一步一步来攻克Transformer。
在这里插入图片描述
Transformer的结构图,拆解开来,主要分为图上4个部分,其中最重要的就是2和3Encoder-Decoder部分,对咯,Transformer是一个基于Encoder-Decoder框架的模型。
接下来我将按照1,2,3,4的顺序逐步介绍上图中Transformer的网络结构,这样既能够弄清楚结构原理,又能够方便理解Transformer模型的工作流程。

2.2 Transformer的inputs 输入

Transformer输入是一个序列数据,还是以上篇中提到的"Tom chase Jerry" 翻译成中文"汤姆追逐杰瑞"为例:
Encoder 的 inputs就是"Tom chase Jerry" 分词后的词向量。可以是任意形式的词向量,如word2vec,GloVe,one-hot编码。
在这里插入图片描述
假设上图中每一个词向量都是一个512维的词向量。
在这里插入图片描述
我们注意到,输入inputs embedding后需要给每个word的词向量添加位置编码positional encoding,为什么需要添加位置编码呢?
首先咱们知道,一句话中同一个词,如果词语出现位置不同,意思可能发生翻天覆地的变化,就比如:我欠他100W 和 他欠我100W。这两句话的意思一个地狱一个天堂。可见获取词语出现在句子中的位置信息是一件很重要的事情。但是咱们的Transformer 的是完全基于self-Attention地,而self-attention是不能获取词语位置信息地,就算打乱一句话中词语的位置,每个词还是能与其他词之间计算attention值,就相当于是一个功能强大的词袋模型,对结果没有任何影响。(一会儿在介绍Encoder的时候再详细说明)所以在我们输入的时候需要给每一个词向量添加位置编码。
在这里插入图片描述
问题又来了,这个positional encoding怎么获取呢?
1.可以通过数据训练学习得到positional encoding,类似于训练学习词向量,goole在之后的bert中的positional encoding便是由训练得到地。
2.《Attention Is All You Need》论文中Transformer使用的是正余弦位置编码。位置编码通过使用不同频率的正弦、余弦函数生成,然后和对应的位置的词向量相加,位置向量维度必须和词向量的维度一致。过程如上图,PE(positional encoding)计算公式如下:
在这里插入图片描述
解释一下上面的公式:
pos表示单词在句子中的绝对位置,pos=0,1,2…,例如:Jerry在"Tom chase Jerry"中的pos=2;dmodel表示词向量的维度,在这里dmodel=512;2i和2i+1表示奇偶性,i表示词向量中的第几维,例如这里dmodel=512,故i=0,1,2…255。
至于上面这个公式是怎么得来地,其实不重要,因为很有可能是作者根据经验自己造地,而且公式也不是唯一地,后续goole在bert中的positional encoding也没有再使用这种方法而是通过训练PE,说明这种求位置向量的方法还是存在一定问题地。
这里我就不做详细的介绍了,想要深究的朋友可以参考一下知乎上的这些回答:如何理解Transformer论文中的positional encoding,和三角函数有什么关系?

为什么是将positional encoding与词向量相加,而不是拼接呢?
拼接相加都可以,只是本身词向量的维度512维就已经蛮大了,再拼接一个512维的位置向量,变成1024维,这样训练起来会相对慢一些,影响效率。两者的效果是差不多地,既然效果差不多当然是选择学习习难度较小的相加了。
在这里插入图片描述
Transformer 的 Decoder的输入与Encoder的输出处理方法步骤是一样地,一个接受source数据,一个接受target数据,对应到上面例子里面就是:Encoder接受英文"Tom chase Jerry",Decoder接受中文"汤姆追逐杰瑞"。只是在有target数据时也就是在进行有监督训练时才会接受Outputs Embedding,进行预测时则不会接收。

至此,Transformer的第一块输入部分已经讲解完了,接下来就要进入重点部分Encoder和Decoder了。

2.2 Transformer的Encoder

在这里插入图片描述
看上图第2部分 Encoder block。Encoder block是由6个encoder堆叠而成,Nx=6。上图2中的灰框部分就是一个encoder的内部结构,从图中我们可以看出一个encoder由Multi-Head Attention 和 全连接神经网络Feed Forward Network构成。

Multi-Head Attention:
在这里插入图片描述
首先回顾一下self-attention,假如输入序列是"Thinking Machines",x1,x2就是对应地"Thinking"和"Machines"添加过位置编码之后的词向量,然后词向量通过三个权值矩阵 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV,转变成为计算Attention值所需的Query,Keys,Values向量。
在这里插入图片描述
因为咱们再实际使用中,每一个样本,也就是每一条序列数据都是以矩阵的形式输入地,故可以看到上图中,X矩阵是由"Tinking"和"Machines"词向量组成的矩阵,然后跟过变换得到Q,K,V。假设词向量是512维,X矩阵的维度是(2,512), W Q , W

评论 130
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值