简单易懂的Transformer学习笔记

[1. 整体概述](#1. 整体概述)

[2. Encoder](#2. Encoder)

[2.1 Embedding](#2.1 Embedding)

[2.2 位置编码](#2.2 位置编码)

[2.2.1 为什么需要位置编码](#2.2.1 为什么需要位置编码)

[2.2.2 位置编码公式](#2.2.2 位置编码公式)

[2.2.3 为什么位置编码可行](#2.2.3 为什么位置编码可行)

[2.3 注意力机制](#2.3 注意力机制)

[2.3.1 基本注意力机制](#2.3.1 基本注意力机制)

[2.3.2 在Trm中是如何操作的](#2.3.2 在Trm中是如何操作的)

[2.3.3 多头注意力机制](#2.3.3 多头注意力机制)

[2.4 残差网络](#2.4 残差网络)

[2.5 Batch Normal & Layer Narmal](#2.5 Batch Normal & Layer Narmal)

[2.5.1 Batch Normal](#2.5.1 Batch Normal)

[2.5.2 Layer Normal](#2.5.2 Layer Normal)

[3. Decoder](#3. Decoder)

[3.1 Mask](#3.1 Mask)

[3.2 交互层](#3.2 交互层)


1. 整体概述

Transformer模型首次提出是在论文Attention is All You Need中。在论文中,Transformer被用来实现机器翻译的工作。相较于RNN难以并行处理信息与CNN窗口短难以处理长序列的缺点,Transformer具有更高的效率与更加优秀的性能。

总体来看,Transformer由编码器与解码器两部分组成。

其中,Encoder与Decoder是可以堆叠N(论文中N=6)层的,这些层结构相同,参数独立。

论文中的Transformer架构如下,下文将针对各个环节进行解释。

2. Encoder

分为三个部分,输入部分、注意力机制与前馈神经网络。将输入送入(词嵌入层),与位置编码对位相加。之后进行多头注意力机制处理,进入残差网络并将结果进行。之后进入双层全连接网络,并对结果进行残差和正则化处理。

论文中的有6层堆叠网络,其中每层有2层子层网络。

2.1 Embedding

可以看作是一个查找表,用来获取每个单词的学习向量表示。神经网络通过数字进行学习,所以将每个单词映射到一个连续值的向量来表示该单词。

2.2 位置编码

2.2.1 为什么需要位置编码

不同于RNN的按时间线串行处理,Transformer是并行处理的。为了保存序列顺序,引入位置编码。

2.2.2 位置编码公式

将Embedding与位置编码相加得到的值作为下面环节的输入。

2.2.3 为什么位置编码可行

对于一个特定位置的维的位置向量,借助三角函数的性质​​

我们可以得到:

可以看出,位置的位置向量的某一维,可以由位置与位置的位置向量的为的线性组合表示。这意味着向量中蕴含了相对位置信息(但该相对位置信息会在注意力机制处消失)。

2.3 注意力机制

2.3.1 基本注意力机制

注意力即关注点。比如给你一张包含婴儿的图片,并提问婴儿在干嘛,此时你对图片中各部分的关注度是不同的,可能对婴儿的脸与手的部分关注度更高,而对图片边缘部分则关注度较低。

论文中给出的注意力公式如下:

下面以输入"我不爱你"为例解释公式。如图,阶段1中向量Q与向量K点乘,点乘得到的值可以反映两个向量之间的相似程度。阶段2对阶段1中得到的值做了类softmax的归一化处理。除以可以防止值向两端偏导致梯度消失。阶段3中将阶段2得到的值分别与对应的value值相乘,最后将这些结果相加得到了Attention Value。

以上是nlp的举例,cv中也类似,图像的分割可类比词的分割。

2.3.2 在Trm中是如何操作的

首先,我们需要由单词向量获取的值。对于词向量,将其分别与相乘(注意这里与所有的词向量相乘的都是同一套参数),可以得到。接着,计算的相似度,得到的值。 在实际代码中,通常使用矩阵表示,方便并行。

2.3.3 多头注意力机制

将词向量与不同的参数相乘,可以得到多组值。亦即将投影到低维次,做j次注意力函数,合并每个输出得到最终输出。

类似于里的多通道输出,使得Trm有可学习的参数。

2.4 残差网络

残差网络将原先的输出与输入对位相加。要求输入与输出维度相同,论文中设置维度为512。

将上图简化如下:

根据后向传播的链式法则:

所以

连乘容易导致梯度消失,又因为连乘前有"1"在,所以偏导不易为0。因此,使用残差可以得到有效防止梯度消失,从而得到更深的网络。

2.5 Batch Normal & Layer Narmal

2.5.1 Batch Normal

针对不同样本的同一维度(特征)进行标准化处理,使得均值为0,方差为1。

缺点:

1.当较小时,效果差(此时每个里的样本的均值和方差无法替代整体)。

2.在中效果比较差,因为会出现词向量长度不一样的情况。

2.5.2 Layer Normal

针对同一样本的不同维度(特征)进行标准化处理,使得均值为0,方差为1。

3. Decoder

的组成模块大体相似,主要的不同在于与交互层。

论文中的具有6层堆叠网络,其中每层网络有2个子层,多插入了第三个子层。

3.1 Mask

需要Mask的原因:若与Encoder一样没有Mask,则会导致预测结果偏差。因为那样子训练模型的时候后续单词是可见的,但实际预测时,未来的单词是不可知的。因此将后续的单词计入影响是不合适的。

实现Mask的方法:计算权重时,t时刻之后的值替换为很大的负数,指数变换后为0。

3.2 交互层

每个Encoder与所有的Decoder进行交互。k,v来自于Encoder本身,q来自于Decoder。这里相当于Decoder中的每个q去询问每个Encoder输出的量,并与之结合。

但是在实际代码训练中,一般Encoder生成q,k矩阵,Decoder生成v矩阵加权。

参考资料:

Vaswani, Ashish, et al. "Attention is All You Need." Advances in Neural Information Processing Systems (NIPS), 2017.

Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili
Transformer从零详细解读(可能是你见过最通俗易懂的讲解)_哔哩哔哩_bilibili
超强动画,一步一步深入浅出解释Transformer原理!_哔哩哔哩_bilibili

相关推荐
alfiy4 分钟前
Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群
笔记·学习·elasticsearch
爱学的小涛14 分钟前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛15 分钟前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪20 分钟前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
望森FPGA34 分钟前
HDLBits中文版,标准参考答案 |3.1.1 Basic Gates | 基本门电路
学习·fpga开发
Python极客之家35 分钟前
基于深度学习的乳腺癌分类识别与诊断系统
人工智能·深度学习·分类
JavaGPT42 分钟前
prometheus学习笔记之PromQL
笔记·学习·prometheus
mftang44 分钟前
TMR传感器的实现原理和特性介绍
人工智能
害羞的白菜1 小时前
Nginx基础详解5(nginx集群、四七层的负载均衡、Jmeter工具的使用、实验验证集群的性能与单节点的性能)
linux·运维·笔记·jmeter·nginx·centos·负载均衡
纪伊路上盛名在1 小时前
如何初步部署自己的服务器,达到生信分析的及格线
linux·运维·服务器·python·学习·r语言·github