最简单的GPT的Transformer架构

1、网络结构主要模块介绍

(1)输入嵌入层(Input Embedding)

  • 输入(Inputs):这是模型的输入部分,通常是一串单词或符号的序列。

  • 输入嵌入(Input Embedding):这一步将输入的序列(比如一句话中的每个单词)转换为嵌入表示。嵌入表示是一种高维的、能够捕捉到单词语义信息的向量形式。

  • 位置编码(Positional Encoding ):由于Transformer是不依赖于序列的,位置编码用于给模型提供关于单词在序列中位置的信息。这些编码是添加到输入嵌入上的,确保即使在处理同时的输入时,模型也能利用单词的顺序信息。

(2)编码器层(Encoder,左边)

  • Nx:这表示有N个相同的编码器层堆叠在一起。每层都有两个主要子层。第一个是多头自注意力机制(Multi-Head Attention),第二个是前馈神经网络(Feed Forward)。

  • 多头自注意力(Multi-Head Attention):注意力机制允许模型在处理每个词时考虑到输入序列中的所有词。多头部分意味着模型会并行地学习输入数据的不同表示。

  • 残差连接和归一化(Add & Norm):每个注意力层后面都会有残差连接(Add),后面跟着层归一化(Norm)。残差连接有助于避免深层网络中的梯度消失问题,而层归一化则有助稳定训练过程并加快收敛速度。

  • 前馈神经网络(Feed Forward):这是一个简单的全连接神经网络,它对自注意力层的输出进行处理,它由两个线性变换和一个非线性激活函数组成。

(3)解码器层(Decoder,右侧)

  • 解码器同样包含多个相同的层,并且每层也有三个主要子层:掩蔽的多头自注意力机制(Masked Multi-Head Attention)、多头自注意力机制(Multi-Head Attention)和前馈神经网络(Feed Forward)。

  • 掩蔽多头自注意力(Masked Multi-Head Attention):这与编码器中的多头自注意力机制相似,但有一个关键区别:为了保证解码的顺序性,掩蔽操作确保了位置i的预测只能依赖于位置i之前的输出,不会"看到"未来的信息。

  • 多头自注意力(Multi-Head Attention):这个模块接受编码器的输出和掩蔽多头注意力的输出作为输入。这样,解码器可以关注输入序列的相关部分,并结合它自己的输出进行预测。

  • 前馈神经网络(Feed Forward):与编码器中的相同。每个子层后面同样跟有加法和归一化步骤。为每个位置上的向量提供额外的非线性变换。

(4)输出嵌入层(Output Embedding)

  • 解码器端的嵌入层将目标序列(在训练时是正确的输出序列,在推理时是已经生成的序列)转换为向量的形式。

(5)输出过程(Output)

  • 线性层(Linear):解码器的最后输出通过一个线性层,这个层的作用是将解码器层的高维输出映射到一个更大的词汇空间,这个空间的每一个维度对应一个可能的输出单词。

  • Softmax层:线性层的输出通过Softmax函数转换成一个概率分布,这个分布表示每个可能的下一个单词的概率。

2、Transformer 训练过程

Transformer 训练的目标是通过对输入序列与目标序列的学习,生成目标序列。训练过程中,模型对数据的处理过程如下,大体可分为7 个步骤:

(1)序列化和批处理

  • 原始文本数据被转换成数字化表示(通常是单词或子词的索引),然后分成多个批次进行处理。

(2)输入嵌入

  • 批处理数据通过嵌入层将索引转换成高维的嵌入向量。

  • 嵌入向量被送入位置编码模块,该模块加入位置信息以维持序列的顺序。

(3)编码器堆栈

  • 编码器的每一层都接收上一层的输出作为输入,第一层的输入是位置编码后的嵌入向量。

  • 每层编码器包括一个多头注意力子层和一个简单的前馈网络。

  • 多头注意力子层通过自注意力机制处理序列的每个元素,然后是一个残差连接和层归一化。

  • 接着是前馈网络,再次跟随一个残差连接和层归一化。

(4)解码器堆栈

  • 解码器的每一层也接收上一层的输出作为输入,但解码器的第一层接收的是目标序列的嵌入向量(在训练时是正确的序列,采用教师强制)和位置编码。

  • 解码器的每一层包含三个主要组件:掩蔽多头注意力子层(防止位置后看)、编码器-解码器注意力子层(将解码器的注意力集中到编码器的输出上)和前馈网络,每个子层后都有残差连接和层归一化。

(5)输出线性层和Softmax

  • 解码器的输出通过一个线性层,将维度转换为词汇表大小。

  • 接着,Softmax层将线性层的输出转换为概率分布,表示下一个词的预测。

(6)损失计算

  • 通过比较模型的预测和实际的目标序列,计算交叉熵损失。

  • 这个损失将用于反向传播过程,用于更新模型的权重。

(7)反向传播和优化

  • 根据损失函数,通过反向传播计算关于模型参数的梯度。

  • 使用优化算法(如Adam)调整模型参数,以最小化损失函数。

在训练过程中,以上步骤会重复多次,直到模型收敛或满足某些性能标准。在整个过程中,编码器负责理解输入序列的上下文,而解码器则用于生成输出序列,这种生成依赖于编码器的输出和之前已经生成的输出序列。

3、Transformer 推理过程

在推理过程中,我们只有输入序列,而没有目标序列作为输入传递给解码器。Transformer 推理的目标是仅通过输入序列产生目标序列,大体可分为7 个步骤:

(1)输入处理

  • 与训练时类似,输入文本首先被序列化为索引的形式,然后转换为嵌入向量,并加上位置编码。

(2)编码器处理

  • 编码器堆栈接收带有位置编码的嵌入向量,并通过其所有层进行处理。每一层都包括自注意力和前馈网络,以及残差连接和层归一化。

  • 编码器的最终输出是一个上下文表示,包含了输入文本的信息。

(3)解码器处理

  • 在推理阶段,解码器通常一次生成一个词。它以先前生成的词的嵌入(经过位置编码)作为输入。初始时,解码器可能接收一个起始符号(如 "")来开始生成过程。

  • 解码器的每一层首先使用掩蔽多头注意力层防止未来信息的流入,然后与编码器的输出一起处理,使用编码器-解码器注意力层将注意力集中到编码器的输出,接着是前馈网络。同样,每个子层后面都跟着残差连接和层归一化。

(4)输出预测

  • 解码器的输出通过一个线性层和Softmax层,转换成对下一个单词的预测概率分布。

(5)单词选择和序列更新

  • 根据Softmax输出,选择概率最高的单词作为这一步的输出。

  • 这个选中的单词被添加到序列中,并用于下一解码步骤的输入。

(6)序列生成的终止

  • 这个过程一直重复,直到生成一个终止符号(如 ""),或者达到预设的最大长度限制。

(7)后处理

  • 生成的序列可能会经过后处理,例如去除特殊符号,进行必要的解码(将索引转换回文本),并返回最终的可读文本。

在推理过程中,特别是在使用束搜索(beam search)等策略时,可能会同时考虑多个候选解码路径,并选择整体得分最高的路径作为最终输出。这有助于提高翻译或文本生成的质量。

4、核心概念详解

(1)输入嵌入(Input Embedding)

输入嵌入(Input Embedding)是将词汇表中的单词转换为机器可以理解的数值形式的过程。具体来说,它涉及将每个单词映射到高维空间中的向量。这个向量捕捉了单词的语义特征,使得在这个空间中语义相近的单词拥有相近的嵌入向量。

你可能感兴趣的:(人工智能)