chatGPT的组件:transformer模型结构·第五课笔记整理 | 豆包MarsCode AI刷题

214 阅读4分钟

chatGPT的组件:transformer模型结构

Transformer 结构

Transformer 结构组件主要包括如下模块。

81ba552868fc48eeb21da5479756e179tplvk3u1fbpfcpjjmark1890000q75

其中,(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(dq​​QKT​)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、残差计算、线性层,以增强模型的拟合能力、适应性。