无序中的秩序:Transformer模型的创新性结构解析

359 阅读4分钟

最近我在看论文时,发现很多都在用 Transformer 模型,我知道transformer很有名,但是我也只是听说过他的大名,不知道他具体是做什么怎么做的,因此我决定深入了解一下,并做个简单记录,方便以后参考。 Transformer 主要用于处理自然语言处理(NLP)任务。与之前的循环神经网络(RNN)和长短时记忆网络(LSTM)等模型不同,Transformer 最主要的模块是使用了注意力机制,而不需要顺序地处理数据,也就是说不依赖时间或序列顺序。transformer的核心功能是处理序列数据,就是处理输入的数据和输出的数据之间的关系,像我自己看的那篇论文,是推荐系统方向的,输入的数据是庞大的用户行为数据,经过整个模型处理,输出的数据就是精确的用户可能点击的数据,提高用户可能点击的概率。

Transformer 由以下几个部分组成:

  1. 自注意力机制: 这一机制让模型在处理每个词语时,能够参考序列中的其他所有词。比如在翻译时,句子中的某个词可能会依赖其他几个词,这种机制让模型可以全局地理解上下文,从而捕捉长距离依赖关系,比如在最近很火的gpt文本生成中,一句话中各个单词的远近可能对当前词有影响。
  2. 多头注意力: 这是对自注意力机制的并行化处理,让模型从不同角度(即多个“头”)来理解输入序列。每个“头”可以独立学习不同的信息关联,进一步提升模型的表达能力,使得它能够捕捉到句子中 不同的部分。
  3. 位置编码: 由于 Transformer 不是按顺序处理数据的,它通过位置编码引入词语的位置信息,确保模型能理解词与词之间的顺序关系。就像你阅读一句话时,不仅要知道每个词的含义,还要知道它们在句中的顺序,这样才能明白句子的意思。

Transformer的编码器与解码器

在 NLP 任务中,编码器负责将输入数据转化为一种计算机能够看懂的代码,而解码器则根据这个表示生成输出。Transformer 的编码器由 6 层相同的堆栈组成,每层包含两个子层:多头自注意力机制和一个前馈网络。主要是对输入的序列进行编码,提取出表示序列各个部分的向量。

解码器也有类似的结构,但它比编码器多了一个子层,这个额外的子层用来处理编码器的输出。另外,解码器中的自注意力机制经过调整,只允许每个位置关注之前已生成的内容,确保生成顺序合理,输出新的输出序列。

在深度学习领域,特别是注意力机制的应用中,点积计算、缩放、softmax变换以及加权求和是实现自注意力或注意力层的核心步骤。通过这些步骤,注意力机制能够有效地捕捉序列数据中的长距离依赖关系,大大增强了模型理解和生成复杂语言结构的能力,是现代自然语言处理模型如Transformer架构中的关键组件。

论文接下来详细的介绍了transformer是如何工作的:

第一步:线性变换

对于输入的查询Q、键K和值V,我们使用不同的线性变换矩阵,将它们分别隐射到h个不同的子空间。每一个注意力投都有自己专用的一组权重矩阵。

第二步:独立计算每个注意力投的输出

对于每一个注意力i,计算缩放点积注意力:

第三部:连接所有注意力头的输出

将所有注意力头的输出进行拼接(Concat),得到一个大矩阵:

第四步:线性变换输出

对拼接后的结果进行一次线性变换,得到最终的多头注意力输出:

除了注意力机制,Transformer 的每一层还包含一个前馈网络神经网络,通常由两次线性变换和中间的 ReLU 激活函数组成。

多头注意力的计算是将查询、键和值分别线性变换到多个子空间中,然后独立计算每个子空间的注意力分布,最后将所有头的输出拼接起来,进行线性变换,得到最终的结果。这让模型可以并行地关注输入序列中的不同部分,提升了处理能力。

transformer广泛的应用于序列到序列的任务中,具有高效的并行计算能力和捕捉长距离依赖关系的能力。