chatGPT的组件:transformer模型结构
Transformer 结构
Transformer 结构组件主要包括如下模块。
其中,(x1,x2,...,xi,...,xn)就是上一节中输入的 token embedding,它是一个(ltoken×lembedding)大小的矩阵,其中,ltoken是输入文本的 token 个数,GPT3 中这个长度是 4097,意味着输入给 GPT3 模型的最长输入文本的 token 数总共可以有 4097 个,而lembedding是每一个 token 的 embedding 维度,GPT3 中这个长度是 12280。
而图中深蓝色的 attention 模块就是上一节中介绍的 Self-Attention,它是 Transformer 模型的核心操作。除此之外,还包括扩展参数模块 Feed-Forward 层,而在每一层的前后又包括了浅蓝色 norm 层和 dropout 层。在模型的最后,还包括输出结果层 linear 层,softmax 即用于计算交叉熵的损失函数层
Self-Attention 使用的并非如第 5 节所介绍的原始自注意力结构,而是一种稀疏的注意力结构,又称稀疏 Transformer(Sparse Transformer) 。
稀疏 Transformer
稀疏 Transfomer 的思想基础
Sparse Transformer 的核心实际上是 Sparse Self-Attention (稀疏自注意力机制)。
Attention(Q,K,V)=softmax(dqQKT)V
这是一个矩阵乘法,其中涉及矩阵乘法计算QKT。在 ChatGPT 这样的模型中,矩阵的维度非常大,这个计算量也相当大,时间复杂度在o(n2),其中n是矩阵维度。如果可以避免计算某些不重要位置的注意力权重值,那么这个计算量会小很多,减少计算耗时,提高模型的计算效率。
稀疏 Transformer 的本质,就是选择不计算某些 token 位置的注意力值。
稀疏 Transformer 原理
所谓稀疏(Sparse),就是不计算某些位置 token 的注意力权重值,保留想要计算的 token 位置。那么,我们可以事先定义一组 token 的位置的索引,S=(S1,S2,...,Si,...,Sn),这些是我们想要计算的若干个 token 位置。
保留的第 1 和 第 3 个 token 作为索引,其它位置则被丢弃了。一般来讲有两种常用的做法,跨步分解注意力机制(Strided Factorized Attention) 和 固定分解注意力机制(Fixed Factorized Attention) 。
需要说明的是,在选择哪些位置可以稀疏计算时,选择的方式方法完全可以自定义,有非常大的灵活性。上述的方法存在局限性,尤其是固定注意力机制。不论计算哪些位置的注意力,都默认忽略掉一些位置,很容易造成计算结果的错误(如上述例子中,最关键的掘金被忽略了)。所以,在 Transformer 模型中,又加入了多头注意力机制,用于综合多次 Attention 计算的结果。
多头(multi-head)注意力机制
Normalization 正规化
Dropout 机制
在每一个 Attention 模块接入之前,都有一个 dropout 模块。这个模块的主要功能是防止模型在训练过程中的过拟合。
过拟合( O verfitting) ,是指模型在训练数据上表现良好,但在测试数据上表现较差的现象。简单来说,过拟合就是模型过于复杂,以至于在训练数据上表现得非常好,但在新数据上的泛化能力却很差。过拟合通常是由于模型过于复杂,或者训练数据过少导致的。当模型过于复杂时,它会尝试去适应训练数据中的每一个细节,甚至是噪声,导致在新数据上的表现不佳。而当训练数据过少时,模型可能无法学习到足够的特征,也会导致过拟合。
ResNet 残差模块
在 Transformer 结构图中,Attention 模块的输入 embed 和输出结果有一个叠加,这种叠加操作被称为残差模块。之所以这么操作,主要是为了方便模型的训练过程中,梯度不会消失或爆炸。
Linear Feed-forward 全连接层
全连接层,就像在之前内容中为 Q、K、V 添加参数,实现了一个模型参数的扩增。针对一个 token 的输入xi,需要做一个矩阵乘法运算,公式表示其输出为yi=Wxi,其中 W 就是要学习的参数。这个步骤就是 Linear Feed-forward 层,中文名又叫线性全连接层,核心即矩阵乘法运算。这一步的主要作用在于为模型增加参数,增强模型的拟合能力。
总结
- Transformer 组件的核心结构就是 Self-Attention,组件的堆叠构成了 ChatGPT 的语言模型。
- 自从 GPT3 模型之后(也包括 ChatGPT),使用的是 Sparse Transformer,它有助于减轻模型的计算量,加速模型的训练和使用。
- Transformer 中用到了 Normalization、残差计算、线性层,以增强模型的拟合能力、适应性。