Transformer架构详解
Transformer架构详解
Transformer是一种革命性的神经网络架构,自2017年提出以来,已成为深度学习模型的首选架构。它为OpenAI的GPT、Meta的Llama和Google的Gemini等文本生成模型提供了强大的支持。本文将深入解析Transformer的核心组件和工作原理,帮助读者理解这一架构如何实现高效的序列处理和长距离依赖关系的捕获。
什么是 Transformer?
Transformer是一种神经网络架构,从根本上改变了人工智能的方法。Transformer首次出现在2017年的开创性论文《Attention is All You Need》中,此后它已成为深度学习模型的首选架构,为OpenAI的GPT、Meta的Llama和Google的Gemini等文本生成模型提供支持。
从根本上讲,文本生成Transformer模型基于下一个单词预测的原理运行:给定用户的文本提示,最有可能跟在该输入之后的下一个单词是什么?Transformer的核心创新和强大之处在于它们使用了自注意力机制,这使它们能够比以前的架构更有效地处理整个序列并捕获长距离依赖关系。
Transformer架构
每个文本生成Transformer都包含以下三个关键组件:
嵌入:文本输入被分成更小的单位,称为标记,可以是单词或子单词。这些标记被转换成称为嵌入的数值向量,用于捕获单词的语义。
Transformer Block是模型的基本构建块,用于处理和转换输入数据。每个块包括:
- 注意力机制,Transformer模块的核心组件。它允许token与其他token进行通信,捕获上下文信息和单词之间的关系。
- MLP(多层感知器)层,一个对每个token独立运行的前馈网络。注意层的目标是在token之间路由信息,而MLP的目标是优化每个token的表示。
- 输出概率:最后的线性层和softmax层将处理后的嵌入转换为概率,使模型能够对序列中的下一个标记做出预测。
Embedding
假设你想使用Transformer模型生成文本。你添加如下提示:
“Data visualization empowers users to”
此输入需要转换为模型可以理解和处理的格式。这就是嵌入的作用所在:它将文本转换为模型可以使用的数字表示。要将提示转换为嵌入,我们需要1)对输入进行标记,2)获取标记嵌入,3)添加位置信息,最后4)将标记和位置编码相加以获得最终嵌入。让我们看看每个步骤是如何完成的。
图1. 展开嵌入层视图,显示如何将输入提示转换为向量表示。该过程涉及(1)标记化、(2)标记嵌入、(3)位置编码和(4)最终嵌入。
步骤1:Tokenization
标记化是将输入文本分解为更小、更易于管理的部分(称为标记)的过程。这些标记可以是单词或子单词。单词"Data"和"visualization"对应于唯一标记,而单词"empowers"被拆分为两个标记。在训练模型之前,标记的完整词汇表已确定:GPT-2的词汇表具有50,257个唯一标记。现在我们将输入文本拆分为具有不同ID的标记,我们可以从嵌入中获得它们的向量表示。
步骤2:Token Embedding
GPT-2(小型)将词汇表中的每个标记表示为768维向量;向量的维度取决于模型。这些嵌入向量存储在形状为的矩阵中(50,257, 768),包含大约3900万个参数!这个广泛的矩阵允许模型为每个标记分配语义含义。
步骤3:Positional Encoding
Embedding层还对每个token在输入提示中的位置信息进行编码。不同的模型使用不同的方法进行位置编码。GPT-2从头开始训练自己的位置编码矩阵,将其直接集成到训练过程中。
步骤4:Final Embedding
最后,我们将标记和位置编码相加以获得最终的嵌入表示。这种组合表示既捕获了标记的语义含义,也捕获了它们在输入序列中的位置。
Transformer Block
Transformer处理的核心在于Transformer块,它由多头自注意力和多层感知器层组成。大多数模型由多个这样的块组成,这些块按顺序一个接一个地堆叠在一起。token表示通过层级演变,从第一个块到最后一个块,使模型能够对每个token建立复杂的理解。这种分层方法可以实现输入的高阶表示。我们正在研究的GPT-2(小型)模型由12个这样的块组成。
Multi-Head Self-Attention
自注意力机制使模型能够专注于输入序列的相关部分,从而能够捕获数据中的复杂关系和依赖关系。让我们一步步看看这种自注意力是如何计算的。
步骤1:查询、键和值矩阵(Query, Key, and Value Matrices)
图2. 根据原始嵌入计算查询、键和值矩阵。
每个token的嵌入向量被转换成三个向量:查询(Q)、键(K)和值(V)。这些向量是通过将输入嵌入矩阵与学习到的Q、K和V的权重矩阵相乘而得出的。这里有一个网络搜索类比,可以帮助我们建立这些矩阵背后的一些直觉:
- 查询(Q)是你在搜索引擎栏中输入的搜索文本。这是你想要“查找更多信息”的标记。
- 键(K)是搜索结果窗口中每个网页的标题。它表示查询可以关注的可能的标记。
- 值(V)是网页实际显示的内容。当我们将合适的搜索词(Query)与相关结果(Key)匹配后,我们希望获得最相关页面的内容(Value)。
通过使用这些QKV值,模型可以计算注意力分数,这决定了每个标记在生成预测时应该获得多少关注。
步骤2:多头拆分Multi-Head Splitting
查询、键和值向量被分成多个头部(在GPT-2(小型)的情况下,分成12个头部)。每个头部独立处理嵌入的一部分,捕获不同的句法和语义关系。这种设计有助于并行学习各种语言特征,从而增强模型的表征能力。
步骤3:Masked Self-Attention
在每个head中,我们执行masked self-attention计算。此机制允许模型通过关注输入的相关部分来生成序列,同时阻止访问未来的token。
图3. 使用查询、键和值矩阵计算掩蔽自注意力。
- 注意力分数:查询和键矩阵的点积确定每个查询与每个键的对齐方式,从而产生一个反映所有输入标记之间关系的方阵。
- 掩码:在注意力矩阵的上三角上应用掩码,以防止模型访问未来的标记,并将这些值设置为负无穷大。模型需要学习如何在不“窥视”未来的情况下预测下一个标记。
- Softmax:经过掩蔽后,注意力得分通过softmax运算转换为概率,该运算取每个注意力得分的指数。矩阵的每一行加起来为1,表示其左侧每个其他标记的相关性。
步骤4:输出和连接Output and Concatenation
该模型使用掩码后的自注意力分数,并将其与Value矩阵相乘,得到自注意力机制的最终输出。GPT-2具有自注意力头,每个头都捕获token之间的不同关系。这些头的输出被连接起来并通过线性投影。
MLP:多层感知器Multi-Layer Perceptron
图4. 使用MLP层将自注意力表示投影到更高维度,以增强模型的表示能力。
在多个自注意力机制捕获输入token之间的不同关系后,连接的输出将通过多层感知器(MLP)层,以增强模型的表示能力。MLP块由两个线性变换组成,中间有一个GELU激活函数。第一个线性变换将输入的维数从增加到四倍768。3072第二个线性变换将维数降低回原始大小768,确保后续层接收一致维度的输入。与自注意力机制不同,MLP独立处理token并简单地将它们从一种表示映射到另一种表示。
输出概率Output Probabilities
在输入经过所有Transformer块处理后,输出将通过最后的线性层,为标记预测做好准备。此层将最终表示投影到50,257维度空间中,词汇表中的每个标记都有一个对应的值,称为logit。任何标记都可以是下一个单词,因此此过程允许我们根据它们成为下一个单词的可能性对这些标记进行简单排序。然后,我们应用softmax函数将logits转换为总和为1的概率分布。这将使我们能够根据其可能性对下一个标记进行采样。
图5. 根据模型的输出逻辑,词汇表中的每个标记都分配有一个概率。这些概率决定了每个标记成为序列中下一个单词的可能性。
最后一步是从该分布中采样来生成下一个tokentemperature。超参数在此过程中起着至关重要的作用。从数学上讲,这是一个非常简单的操作:模型输出logits只需除以temperature:
- temperature = 1:将logits除以1对softmax输出没有影响。
- temperature < 1:较低的温度通过锐化概率分布使模型更加自信和确定,从而产生更可预测的输出。
- temperature > 1:较高的温度会产生更柔和的概率分布,从而允许生成的文本具有更多的随机性——有些人称之为模型“创造力”。
此外,可以使用top-k和top-p参数进一步细化采样过程:
- top-k sampling:将候选标记限制为概率最高的前k个标记,过滤掉可能性较小的选项。
- top-p sampling:考虑累积概率超过阈值p的最小标记集,确保只有最可能的标记做出贡献,同时仍然允许多样性。
通过调整temperature、top-k和top-p,你可以在确定性和多样化输出之间取得平衡,并根据你的特定需求定制模型的行为。
Advanced Architectural Features
有几种高级架构功能可增强Transformer模型的性能。虽然它们对于模型的整体性能很重要,但对于理解架构的核心概念却不那么重要。层规范化、Dropout和残差连接是Transformer模型中的关键组件,尤其是在训练阶段。层规范化可以稳定训练并帮助模型更快地收敛。Dropout通过随机停用神经元来防止过度拟合。残差连接允许梯度直接流过网络并有助于防止梯度消失问题。
层规范化Layer Normalization
层归一化有助于稳定训练过程并提高收敛性。它通过对特征之间的输入进行归一化来工作,确保激活的均值和方差一致。这种归一化有助于缓解与内部协变量偏移相关的问题,使模型能够更有效地学习并降低对初始权重的敏感度。层归一化在每个Transformer块中应用两次,一次在自注意力机制之前,一次在MLP层之前。
Dropout
Dropout是一种正则化技术,通过在训练期间随机将模型权重的一部分设置为零来防止神经网络过度拟合。这鼓励模型学习更稳健的特征并减少对特定神经元的依赖,从而帮助网络更好地推广到新的、未见过的数据。在模型推理期间,Dropout被停用。这本质上意味着我们正在使用经过训练的子网络的集合,从而提高模型性能。
剩余连接Residual Connections
残差连接于2015年首次在ResNet模型中引入。这种架构创新通过实现非常深的神经网络的训练,彻底改变了深度学习。本质上,残差连接是绕过一个或多个层的捷径,将层的输入添加到其输出中。这有助于缓解梯度消失问题,从而更容易训练堆叠在一起的多个Transformer块的深度网络。在GPT-2中,每个Transformer块内使用两次残差连接:一次在MLP之前,一次在MLP之后,以确保梯度更容易流动,并且较早的层在反向传播期间获得足够的更新。
互动功能Interactive Features
Transformer Explainer是交互式的,可让您探索Transformer的内部工作原理。以下是您可以使用的一些交互式功能:
- 输入您自己的文本序列,看看模型如何处理它并预测下一个单词。探索注意力权重、中间计算,并看看如何计算最终输出概率。
- 使用温度滑块来控制模型预测的随机性。探索如何通过改变温度值来使模型输出更具确定性或更具创造性。
- 选择top-k和top-p采样方法来调整推理过程中的采样行为。尝试不同的值,看看概率分布如何变化并影响模型的预测。
- 与注意力图交互,查看模型如何关注输入序列中的不同标记。将鼠标悬停在标记上以突出显示其注意力权重,并探索模型如何捕获上下文和单词之间的关系。
