详解 一文看懂Transformer

文章目录预测
前言
最初是用于nlp领域的翻译任务 。
出自谷歌2017年发表的论文 Is All You Need
当然现在已经应用于各类任务了,在CV领域也表现非常出色 。本文是自己的学习笔记,因为我主要是看图像方面的,所以中间有些关于nlp的一些特殊知识没有详细说,如有兴趣,请自行查阅 。
参考链接:
台大李宏毅自注意力机制和详解
李沐老师讲解
自注意力机制讲解
详解
详解
详解 ( Is All You Need)
模型详解(图解最完整版)
网络结构图:
这个结构图很清晰,左边是编码器,右边是解码器 。
编码器:由N=6个相同的层堆叠而成 。每层有两个子层 。第一层是一个multi-head self-机制,第二层是一个简单的、按位置排列的全连接前馈网络 。两个子层都采用了一个(残差)连接,然后进行层的归一化 。也就是说,每个子层的输出是(x + (x)),其中(x)是由子层本身的输出 。
解码器:解码器也是由N=6个相同层的堆栈组成 。注意,解码器也是有输入的,解码器的输入先经过一个 multi-head self-,然后是残差和,然后再与编码器的输出一起送入一个与编码器一样的结构 。重复6次 。最后经过线性层和输出结果 。
我们一步一步的看,先说左边的编码器 。
Input
首先说input输入,既然是做翻译任务那么输入自然是一个句子,比如I love you
那么这个肯定不能直接输入进去,计算机也不认识啊,一般我们都需要转化为方便计算机处理的形式 。在图像领域,我们会把图像处理为[B,C,H,W]的矩阵交给计算机处理,那么nlp领域也是一样,我们可以采用一种方法讲单词转化为向量:One-hot 独热码
非常简单,就是假设词汇表一共只有五个单词,那我就用一个长度=5的向量,第一个单词就是{10000},第二个{01000},以此类推,如图所示 。如果字典一共有五千个词汇,那么编码得到的向量长度就是5000 。
但是这种方法很显然不好,它很稀疏(有效信息太少),而且很长(太长了计算量太大了) 。
更重要的是这种编码方式完全无法体现出来词汇之间的关系,比如“香蕉”和“西瓜”,都是水果,他们是有联系的,但是这种编码方式忽略了关系,只与他们在词汇表的位置有关 。
那么有另外一个方法叫做word ,他会给每一个词汇对应一个向量,并且这个向量是包含语义的信息的 。
至于word 是怎么做的,这里不说了,感兴趣的自己搜索看下,我主要是做图像的 。
我们只要知道,的第一步Input 就是将输入的词汇,编码成了一个一个的向量(长度为512) 。
转化为词向量后还需要给每个词向量添加位置编码。因为位置是有用的,同样一个单词放在句首和放在句中,可能会有不同的词性,会有不同的意思,所以位置信息我们也需要 。
如何获得位置编码?论文中使用正余弦位置编码来为每个词计算位置向量 。位置编码通过使用不同频率的正弦、余弦函数生成,生成的向量长度与词向量长度一致(待会要相加) 。
正余弦位置编码计算公式如下,至于为什么这样设计,可以看其他的讲解文章 中的
经过这个我们可以得到位置编码,再和前面得到的词向量做加法,就得到了我们处理好的输入 。
假设输入的是I Love You,那么最后这个输入的尺寸就是[3,512]
接下来才开始进入真正的编码器部分 。
【详解一文看懂Transformer】self-
就是基于自注意力的
关于self-,可以看我在另一篇博客中的介绍:自注意力机制
这里就简单说下: