2024.3.24 机器学习周报
目录
引言
Abstract
一、文献阅读
1、题目
2、引言
3、创新点
4、模型架构
4.1 Encoder and Decoder Stacks
4.2 Attention—注意力机制
5、实验
6、结果
二、Self-attention
1、什么是self-attention
2、例子(x2→z2)
3、矩阵批量处理
总结
引言
本周复现论文代码和针对transfomer阅读和回顾一篇了关于自注意力机制的文献,Transformer只基于单独的attention机制,将一个序列的不同位置联系起来,以计算序列的表示,成功的运用到了很多任务上,包括阅读理解、抽象摘要、语篇蕴涵和学习任务无关的句子表征等。
Abstract
This week, I reproduced the code of the paper and reviewed a literature on self attention mechanisms for Transformers. Transformers are based solely on a separate attention mechanism, linking different positions of a sequence to calculate its representation. They have been successfully applied to many tasks, including reading comprehension, abstract abstracts, discourse implications, and sentence representations unrelated to learning tasks.
一、文献阅读
1、题目
Attention Is All You Need
2、引言
显性序列转导模型是基于复杂的递归或包括编码器和解码器的卷积神经网络。最好的执行模型还通过注意力连接编码器和解码器机械装置我们提出了一种新的简单网络架构Transformer,仅基于注意力机制,省去了重复和卷积完全在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更可并行,并且需要显著更少的训练时间。我们的模型在WMT 2014英德语翻译任务中实现了28.4 BLEU,比现有的最佳结果有所改进,包括合奏,超过2 BLEU。在WMT 2014英法翻译任务中,我们的模型在在8个GPU上进行3.5天的培训,这只是最好的模型从文献。我们证明了Transformer很好地推广到其他任务,通过将其成功应用于英语选区解析大量且有限的训练数据。
3、创新点
- 通过self-attention,自己和自己做attention,使得每个词都有全局的语义信息
- 由于self-attention是每个词和所有词都要计算Attention,所以不管他们中间有多长距离,最大的路径长度也都是1,可以捕获长距离依赖关系
- 提出multi-head attention,可以看成attention的ensemble版本,不同head学习不同的子空间语义
4、模型架构
模型总体架构如下图所示,整个网络架构中使用堆叠的self-attention层、point-wise和全连接层,分别用于encoder和decoder。
4.1 Encoder and Decoder Stacks
编码器 encoder:
将一个长为n的输入(如句子),序列(x1, x2, … xn)映射为(z1, z2, …, zn)(机器学习可以理解的向量)
encoder由n个相同层组成,重复6个layers,每个layers会有两个sub-layers,每个sub-layers里第一个layer是multi-head attention,第二个layer是 simple,position-wise fully connected feed-forward network,简称 MLP。
每个sub-layer的输出都做一个残差连接和layerNorm。计算公式:LayerNorm( x + Sublayer(x) ),Sublayer(x) 指 self-attention 或者 MLP。
残差连接需要输入和输出的维度一致,所以每一层的输出维度在transformer里都是固定的,都是512维。
与CNN不一样的是,MLP的空间维度是逐层下降,CNN是空间维度下降,channel维度上升。
解码器 decoder
decoder 拿到 encoder 的输出,会生成一个长为 m 的序列(y1, y2, … , ym)。n 和 m 可以一样长、也可以不一样长,编码时可以一次性生成,解码时只能一个个生成(auto-regressive 自回归模型)
decoder同样由n个相同层组成。除了encoder中的两个子层外,decoder还增加了一个子层:对encoder层的输出执行多头注意力。
另外对自注意力子层进行修改(Mask),防止某个position受后续的position的影响。确保位置i的预测只依赖于小于i的位置的已知输出。输出就是标准的 Linear+softmax。
4.2 Attention—注意力机制
注意力机制(Attention)是给定一个查找(Query)和一个键值表(key-value pairs),将Query映射到正确的输入的过程。此处的query、key、value和最终的输出都是向量。输出往往是一个加权求和的形式,而权重则由query、key和value决定。
Scaled Dot-Product Attention:本文引入了一个特殊的attention,为Scaled Dot-Product Attention(上图左)。输入由query、dk的key和dv的value组成。我们计算query和所有key的点积,计算query和所有key的点积,再除以,然后再通过softmax函数来获取values的权重。
Multi-Head Attention:在queries, keys和values的每个映射版本上,我们并行的执行attention函数,生成dv维输出值。它们被拼接起来再次映射,生成一个最终值,如上图中所示。Multi-head attention允许模型把不同位置子序列的表示都整合到一个信息中。如果只有一个attention head,它的平均值会削弱这个信息。
本文使用的注意力机制:
本文使用的是Multi-Head Attention,具体体现在两个方面。
(1)在encoder-decoder attention层中,query来自前一个decoder层,而key和value是encoder的输出。这允许decoder的每个位置都去关注输入序列的所有位置。
(2)decoder包含self-attention层,在self-attention层中所有的key、value和query都来自前一层的encoder。这样decoder的每个位置都能去关注前一层encoder输出的所有位置。
前向神经网络(FFN)是一个 Position-wise 前向神经网络,encoder和decoder的每一层都包含一个前向神经网络,激活函数顺序是线性、RELU、线性。
位置编码: 由于本文的模型结构没有使用任何递归结构或卷积结构,为了让模型能利用输入序列的顺序信息,必须引入某种能表达输入序列每个部分的绝对或相对位置的信息才行。文章采取的方法是位置编码(positional encoding),在送入encoder和decoder之前,先对输入进行编码,编码后的向量维度是dmodel。具体来说,采用正弦和余弦函数进行编码。
5、实验
从三个方面去对比self-attention和递归结构、卷积结构的优劣性,首先是每一层的计算复杂度,self-Attention layer用一个常量级别的顺序操作,将所有的positions连接起来,Recurrent Layer需要O(n)个顺序操作,其次是能够被并行的计算量,最后是网络中长期依赖的路径长度。对比显示,self-attention表现最好。
训练数据使用WMT English-German数据集,包含450w对语句。句子都被编码过了,使用了一个大小约37000个token的字典。样本被分为若干个batch,每个batch大概25000个token,每个batch中的句子长度保持基本一致。硬件上使用了8块GPU。Optimizer使用了Adam。过拟合方面使用了dropout和Label Smoothing。
Hardware and Schedule(硬件和时间)
本文模型训练在一台具有8个 NVIDIA P100 gpu的机器上训练我们的模型。对于paper中描述的使用超参数的基础模型,每个训练步骤大约需要0.4秒。对基础模型进行了总共100000步或12小时的训练。
Optimizer(优化器)
使用Adam优化器,其中β1=0.9, β2=0.98及ϵ=10-9。我们根据以下公式在训练过程中改变学习率:
Regularization(正则化,本文使用三种)
Residual Dropout 我们在对每个子层的输出上执行dropout操作,这个操作在additive操作(子层的输出加上子层的输入)和 normalized操作之前。此外,在编码器和解码器堆栈中,我们将丢弃应用到嵌入和位置编码的和。对于基础模型,我们使用Pdrop=0.1丢弃率。
6、结果
不论是英语-德语还是英语-法语的翻译任务,对比之前的一些模型,本文提出的模型都达到更好的BLEU值,同时Training Cost也最低
本文提出的模型十分成功。本文中提出的Transformer模型抛弃了传统的CNN和RNN进行机器翻译的架构,整个网络结构完全是由Attention机制组成。更准确地讲,Transformer由且仅由self-Attenion和Feed Forward Neural Network组成。一个基于Transformer的可训练的神经网络可以通过堆叠Transformer的形式进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder,并在机器翻译中取得了BLEU值得新高,而且从模型的图片来看,该模型很可能是在尝试“理解”句子
二、Self-attention
1、什么是self-attention
是NLP中很广法的模型,由Transformer应用到CV领域,该模型的主要作用就是捕获长序列中向量之间的相关性,输入是一个长的序列,输出是包含了向量相关的相关性。由下图示例,输入是一个长的句子,输出得到了每一个词的词向量信息。
2、例子(x2→z2)
以x2为输入例子,x2分别和x1,x2,x3,x4,x5做内积,用来衡量其他子向量的相关性,内积得到的数值通过来表示,这里表示两个向量的相似性通过内积的操作。由下图所示,x1,x2是两个向量,越相似,向量的夹角会越小。得到的数值后通过softmax将权重标准化,得到在0到1之间,并且加起来的和等于1,权重和向量相乘的和就是输出。
3、矩阵批量处理
上述是对于其中一个子向量的操作,self-attention更大的优势是可以并行计算,这里通过矩阵来实现批量的处理,首先将子向量拼接得到了矩阵,根据其矩阵转置内积的操作得到了相似度矩阵,矩阵按行进行softmax标准化操作得到了W矩阵,W矩阵再与原来的向量矩阵相乘,就得到输出的模型Z。
总结
本周对self-attention进行了更深入的学习,并且结合代码和理论有了进一步的了解。
上一篇: IDA 调试修改内存数据