分享

这就是Transformers结构

 taotao_2016 2023-04-16 发布于辽宁

Transformers是一种近年来在NLP领域表现非常出色的模型,现已成为许多NLP任务的标配。它不仅刷新了多项NLP任务的最佳成果,而且在机器翻译、文本生成、文本分类、情感分析等方面都取得了令人惊讶的成果。其中,ChatGPT作为近期比较火的应用之一,在智能客服、主题聊天、在线教育等场景中获得了广泛应用。

本文将介绍Transformers的基本结构,详细介绍其基本原理,希望帮助大家对它们有比较直观的认识。


Attention三要素:Query,Key和Value

在Attention机制中,query、key和value都是向量,分别代表着查询、键和值。简单来说,可以将它们看做是一组映射关系:给定一个query向量,通过于key向量进行匹配,得到一个或多个相关的value向量。

  • Query:是Attention机制中输入的待搜索向量,可以理解为需要查询的信息。在使用Attention机制进行计算时,Query与Key进行相似度计算,以确定Value在加权平均时的权重;
  • Key:是用于搜索的一组向量。Key向量是一些与Query向量相关联的向量,这些向量用于描述输入序列中的信息。在计算Query与Key的相似度时,可以将Key集合中的所有向量作为搜索空间并查找与Query向量最相似的向量;
  • Value:是与Key向量对应的向量。Value向量是与每个Key相关联的向量,代表了输入序列中对应位置的信息。在加权平均时,使用Key向量的相似度作为权重,并将对应的Value向量加权求和。

如下图所示:

图片

具体来说,query向量()代表当前Token的隐藏状态,Key向量()代表历史Token的隐藏状态,Value向量()代表各个Token的输出向量,其计算公式如下图所示:

其中,表示第(key, value)向量对,权重

通常可以通过距离相似度来计算:

  • Gaussian kernel: 
  • Boxcar: 
  • Epanechikov: 

Scaled Dot Product Attention

我们来拆解下使用Gaussian kernel来计算的方法:

由于对所有的都是相同的,我们可以通过Normalization将转换为单位向量,即,从而使。此外,对应的是网络中经过了各种Normalization操作(如Batch Normalization和Layer Normalization等,关于Normalization的方法可以参考之前的文章《DNN中那些绕不过的Norm》)之后的结果,因此可以认为是一个常数。所以,将公式中的常数项,即,删除并不影响最终的相对结果:

虽然经过Normalization之后的均值和方差的向量,但是均值为,方差为(向量维数)的向量。为了保证无论向量维数如何,方差仍然保持为,使用对其进行缩放,得到Scaled Dot production attention:

最终对其进行归一化得到:

如下图所示:

图片

关于Attention的更多内容可以参考之前的文章《浅入Attention机制》《深入Attention机制》,这里就不赘述了。

Multi-head Attention

在实际应用中,针对一组相同的,我们希望模型通过Attention能尽可能多的挖掘不同的知识,例在一个序列中捕获各种范围的依赖关系,Multi-head attention就顺理成章的被提出了。

简单来说:通过线性变换将映射到多个表示子空间(representation subspaces)中。然后在每个表示子空间中采用Attention机制得到相应的结果。最后将所有输出拼接到一起,再经过一个线性变换得到最终结果。

图片

下面简单给出Multi-head attention的公式化描述。令query向量为,key向量为,value向量为,则每个attention的输出可以表示为:

其中,是线性变换权重。

最后,Multi-head attention通过线性变换得到最终输出:

Self-attention

针对序列类型的输入数据(如文本、图片等),怎么使用Attention机制来处理它们呢?这就要提到self-attention了,具体如下:

假设输入token序列为对应的query,key和value分别为,则在计算第个token 对应的attention向量时,self-attention会用分别与所有token的进行计算得到个输出值,然后将它们相加得到token 的最终输出,如下图所示:

图片

从图中可以看到,self-attention机制通过对所有value向量的加权求和,能使每个query向量能够获得与其相关联的所有token的信息,其中key向量起到分配权重的作用。通过这种分配权重的方法,模型可以精确地捕捉序列之间的依赖关系和相关性,从而提高了其对序列数据的处理能力。

Position Encoding

从self-attention的计算过程可以看到,由于token和token之间是两两并行计算的,并没有保留token之间的顺序关系。对于输入token顺序很重要的任务,该如何让模型知道token之间的顺序关系呢?

Position encoding就是通过将token的位置信息进行编码之后附加到Token的embedding中,然后送给模型,从而保留token之间的顺序信息的。原始Transformers论文中给出了一种比较简单的基于cos和sin函数的Sinusoidal Position Encoding方法:

对于第个位置的token(对应的embedding向量维),其对应的维position embedding向量如下:

最后,将作为token的最终embedding向量。

图片

从上图可以看到,由于“sin”曲线在一定周期内重复,不同位置的position embedding向量不同,从而实现对位置的编码。

需要说明的是在NLP中,上述方法只是固定位置编码的Sinusoidal Position Encoding的一种实现,还有其他的方法,大致分为两类:

  • Sinusoidal Position Encoding:使用正弦曲线来获得位置编码。该方法可以捕捉目标单词在序列中的相对位置关系,在语言建模任务中比较好的表现;
  • Learned Position Embedding:通过学习得到的位置编码,是一种由神经网络学习得到的位置编码方式。在编码过程中,网络可以根据任务和训练数据自适应地学习位置的编码信息。

这些方法在不同的情况下都有不同的应用,我们可以根据具体的任务和数据集来灵活选用。

Transformers Architecture

现在让我们来具体看下Transformers框架。标准的Transformers是Encoder-Decoder框架的一种,由若干个Encoder和Decoder层构成,如下图所示:

图片

从框架图来看,Transform主要包含如下三大部分:

  • Embedding:Inputs和Outputs在经过embedding之后与相应的position embedding进行相加,然后再送到对应的Encoder和Decoder中;
  • Encoder:包含多个相互堆叠的sublayer,每个sublayer由一个multi-head attention模块和一个全联接模块组成。受ResNet启发,每个模块使用残差结构将输入与输出进行加和(关于残差结构可以参考之前的文章《这就是Residual Block》),最后输出经过Layer Normalization处理。最终,Encoder对输入序列的每个位置的Token输出一个维的表示向量;
  • Decoder:同样是由多个相互堆叠的具有残差连接的sublayer组成。不过除了在Encoder中描述的两个sublayer之外,Decoder中还在这两个sublayer之间插入了名为Encoder-Decoder Attention的sublayer。在Encoder-Decoder attention中,query来自前一个Decoder层的输出,key和value自Transformers的Encoder输出。

    需要注意的是:虽然Decoder层的query、key和value都来自前一个Decoder层的输出。但是,通过的Masked Multi-head attention每个位置只能看到该位置之前的输入。这样做的好处在于保留了自回归特性,确保后续输出仅取决于已生成的结果。防止特征泄漏,避免模型看到后面将要生成的内容

至此,我们已经基本了解了Transformers结构了,下面就来看下Transformers在CV领域是怎么应用的。

Vision Transformers (ViT)

在NLP领域大杀四方之后,2019年研究者们开始尝试将Transformers应用到CV领域,看能否替代CNN。最终在2021年,研究者们证明了Transformers具有比CNN更好的可扩展性:在更大的数据集上训练更大的模型时,Transformers要明显ResNets。但在常规数据集上,CNN的地位还是无法撼动的。不过通过在超大规模数据集上(论文中是JFT-300M:1.8万的类别,3亿的样本量)预训练之后的ViT模型,在下游任务中进行fine-tune,能够得到比ResNet更好的效果:

图片

ViT的结果如下图所示:

图片

从上图可以看出,ViT包含如下几部分:

  • Patch Embedding:将图像分割成多个子图,并将这些子图平铺之后,使用线性变换得到对应的Embedding向量。这个过程可以简单使用卷积操作来实现,将kernel size和stride都设置为patch size即可。
  • Position Embedding:使用的是1维的learned position embedding,让模型自动学习。将patch的位置进行1维编码,得到位置ID(如0,1, 2, ...),输入到模型对应的Embedding Layer,然后在训练过程中学到每个位置ID对应的embedding;
  • Transformer Encoder:结构与常规Transformers相似,这里就不赘述了。

最终,ViT将输入图片表示为一个特征向量。我们可以使用这个特征向量,进行后续任务,如图片分类等。

总结

Transformers框架自提出开始迅速在NLP各领域得到广泛应用,并取得了惊人的效果。此外也逐步在CV领域站稳脚跟。本文对Transforms框架做了详细的拆解,包括Scaled dot product、Multi-head attention、Self-attention和Position embedding等。

Transformers给人的感受还是大力出奇迹,需要有足够多的数据量足够强的算力才能让它发挥出强大的能力。在超大规模数据上与训练好Transformers模型之后,通过迁移学习将它应用于我们的求解问题上。

不过,对于传统特殊领域的常规规模任务,由于没有相应的与训练模型,可能还是要依靠传统的深度学习框架。

总之,Transformers是我们在机器学习路上绕不过点,加深对其理解有助于我们对后续大模型的深入研究。

参考文献

[1] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems (pp. 5998–6008).

[2] Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., … others. (2021). An image is worth 16x16 words: transformers for image recognition at scale. International Conference on Learning Representations.

[3] Kalchbrenner, N., Grefenstette, E., & Blunsom, P. (2014). A convolutional neural network for modelling sentences. arXiv preprint arXiv:1404.2188.

[4] Sutskever, I., Vinyals, O., & Le, Q. V. (2014). Sequence to sequence learning with neural networks. Advances in neural information processing systems (pp. 3104–3112).

[5] Ba, J. L., Kiros, J. R., & Hinton, G. E. (2016). Layer normalization. arXiv preprint arXiv:1607.06450.

[6] Raffel, C., Shazeer, N., Roberts, A., Lee, K., Narang, S., Matena, M., … Liu, P. J. (2020). Exploring the limits of transfer learning with a unified text-to-text transformer. Journal of Machine Learning Research21, 1–67.

[7] Karim, R. Illustrated: Self-Attention. https://. 2019.

[8] Tamura, Y. Multi-head attention mechanism: “queries”, “keys”, and “values,” over and over again. https://. 2021.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多