Transformer 架构相对于早期的 RNN 显著提高了自然语言任务的性能,以其独特的注意机制和并行处理能力而闻名,是对理解和生成人类语言的创新飞跃的证明,其准确性和效率前所未有。其不仅重新定义了自然语言处理(NLP)的标准,而且拓宽了发展领域,革新了人工智能的许多方面。本文回顾 Transformer 经典架构的编码器原理与应用,温故知新。
编码器结构
编码器是 Transformer 架构的基本组件,用于接收我们的输入。编码器的主要功能是将输入的标记 (tokens) 转换为具有上下文表示的形式。与早期的模型不同,这个 Transformer 编码器捕捉了每个标记相对于整个序列的上下文。
工作流分解
输入嵌入
嵌入 (Embeddings) 过程发生在最底层的编码器中。编码器首先通过使用嵌入层将输入 tokens(单词或子词)转换为向量,这些嵌入捕捉了标记的语义内涵并将其转换为数值向量。
所有编码器层都接收一个固定大小为 512 的向量列表。在最底层的编码器层中,这会是单词嵌入,但在其他编码器层中,这将是直接在它们下方的编码器层的输出。
位置编码
由于 Transformer 没有像 RNN 那样的循环机制,而是使用位置编码添加到输入嵌入中,以提供关于序列中每个标记位置的信息,这使之能够理解句子中每个单词的位置。
为此,研究人员建议使用各种正弦和余弦函数的组合来创建位置向量,从而使得可以将这种位置编码器用于任意长度的句子。在这种方法中,每个维度都由唯一频率和偏移波形表示,其值范围从 -1 到 1,有效地表示每个位置。
编码器层的堆栈结构
Transformer 编码器由一堆相同的层组成(原始 Transformer 模型中有 6 层)。编码器层用于将所有输入序列转换为连续的抽象表示,其中包含了整个序列的学习信息。该层包括两个子模块:一个多头注意力机制和一个全连接网络。此外,每个子层周围加入了残差连接,然后进行层归一化。
多头自注意力机制
在编码器中,多头注意力利用一种称为自注意力 (self-attention) 的专门注意力机制,这种方法使模型能够将输入中的每个单词与其他单词联系起来。
多头自注意力机制允许编码器在处理每个标记时专注于输入序列的不同部分,它根据以下内容计算注意力分数:
- 查询 (query, Q) 是在注意力机制中表示输入序列中特定单词或标记的向量。
- 关键字 (key, K) 也是注意力机制中的一个向量,对应于输入序列中的每个单词或标记。
- 每个值 (value, V) 都与一个关键字相关联,并用于构建注意力层的输出。当查询和关键字匹配得很好时,基本上意味着它们具有较高的注意力分数,相应的数值在输出中被强调。
一个自注意力模块使模型能够从整个序列中捕获上下文信息。与执行单个注意力函数不同,Q、K 和 V 被线性投影了 h 次。在这些投影版本的 Q、K 和 V 上,注意力机制并行执行,最终产生 h 维输出值。
矩阵乘法(MatMul)
Q、K 和 V 向量通过线性层传递,会在 Q 和 K 之间执行点积矩阵乘法,从而创建一个得分矩阵。得分矩阵确定了每个词对其他词的强调程度。因此,在同一时间步长内,每个词都被分配与其他词相关的一个分数。分数越高,表示注意力越集中。
降低注意力分数的跨度
通过将分数除以 Q 和 K 向量维度的平方根来缩小分数,这一步是为了确保更稳定的梯度,因为值的乘积可能导致过大的影响。
Softmax 调整
将 Softmax 函数应用于调整后的分数以获得注意力权重,将概率值落在 0 到 1 之间。Softmax 函数强调较高的分数,同时降低较低的分数,从而增强模型有效确定哪些单词应该受到更多关注的能力。
与 V 向量相结合
注意力机制的下一步是,从 Softmax 函数中得出的权重与 V 向量相乘,得到输出向量。在这个过程中,只有呈现高 Softmax 分数的词被保留。最后,这个输出向量被送入线性层进一步处理。
线性层处理
在整个过程开始之前,我们将Q、K 和 V 分别分成 h 份,这个过程被称为自注意力,在每个 "头部" 中分别进行。每个头部都独立地发挥其作用,产生一个输出向量。
最后通过线性层,就像一个过滤器,微调它们的整体表现。这里的巧妙之处在于每个头部学习的多样性,为编码器模型提供了强大且全方面的理解能力。
标准化和残差连接
每个编码器层中的子层后面都跟着一个归一化步骤。此外,每个子层的输出都会与其输入相加(残差连接),以帮助缓解梯度消失问题,从而允许训练更深层的模型。这个过程在前馈神经网络之后也会重复。
前馈神经网络
通过前馈神经网络的指引,进行标准化残差输出,这是额外细化的关键阶段。将这个网络想象成一对线性层,它们之间嵌入了一个起到桥梁作用的 ReLU 激活函数,处理完毕后的输出循环回来与前馈神经网络的输入合并。之后,又进行了一轮规范化,确保一切都调整好,为接下来的步骤做好同步。
编码器输出
最终编码器层的输出是一组向量,每个向量蕴含着输入序列丰富的上下文理解,这个输出被用作 Transformer 模型中解码器的输入。这种细致的编码为解码器铺平了道路,引导它在解码时关注输入中的正确单词。
编码器就像乐高玩具,我们可以堆叠 N 个编码器层,每一层都有机会探索和学习注意力的不同方面,就像知识的不同层次一样。这不仅丰富了理解,还可以显著增强 Transformer 网络的预测能力。
编码器应用
编码器优势
Transformers 编码器架构对于不需要序列到序列转换的任务非常高效,因为它可以通过自注意机制一次处理整个输入序列。编码器中的自注意机制允许模型捕捉输入序列中所有标记之间的依赖关系,而不受它们之间距离的影响。该架构高度可并行化,这意味着它可以在硬件上高效训练。
编码器场景
- 对于自然语言处理(NLP),应用包括情感分析、文本分类和命名实体识别。
- 对于计算机视觉,常见的用例是图像字幕。
编码器模型
BERT (Bidirectional Encoder Representations from Transformers)
BERT 是编码器模型的一个典型例子。BERT 旨在通过联合对左右结构及上下文顺序进行条件化,从未标记的文本中预训练深度双向表示。其应用范围广泛,从命名实体识别到问答任务,衍生模型还有:RoBERTa、DistilBERT 和 ALBERT。
ViT (Vision Transformer)
ViT 将图像视为一系列补丁,并将 Transformers 模型应用于该序列,从而使其能够捕捉图像部分之间的长距离依赖关系。
结语
通过相关研究,我们对 Transformer 编码器架构有了更深入的了解。展望未来,随着 Transformer 架构应用的不断深入,我们有理由相信,大语言模型将在更多领域取得突破性进展,为人类社会带来更多的便利和福祉。