大模型演变:模型结构对比(一)

发布时间:2023-07-24 08:00

1、简介

年来,大语言模型蓬勃发展,除了之前我们已经介绍过的GPTBERT等模型之外,也诞生了很多新的模型,这些模型在训练方式、网络结构以及计算实现等方面都存在一定的差异,本文主要对比三种常见的大语言模型结构。

 

2、背景

Transformer类模型的核心是注意力机制Attention和前馈网络FFN,网络结构如图1所示,由编码器和解码器两部分组成,目前大多语言类模型都基于此结构,例如我们比较熟知的GPT就是一个纯基于解码器的语言生成模型。关于AttentionTransformer的详细介绍可以参考我们之前的公众号文章语言模型的顶梁柱:Transformer, GPT, BERT以及“Transformer加速:稀疏注意力加速器调研”,本文不再赘述。

 

 

1 Transformer网络结构图[1]

图片来源:https://arxiv.org/pdf/1706.03762.pdf

 

3、模型介绍

  1.  
  2. 3.1 GPT3-175B

GPT3-175B模型共有96层,head数量为96,每个head的大小为128,共有175B的参数,OPT-175B的模型结构和大小与GPT3-175B基本相同,编码词汇表大小为50257。

 

    3.1.1 Learned Position Embedding

 

在Attention计算中,输入是很多个tokens,这些tokens包含有位置信息,即词与词之间是有顺序关系的,但是Attention的计算是无向的,为了把位置信息传递给模型,需要对输入词的位置进行编码。将输入词的位置信息进行编码后直接传给Attention计算输入称为绝对编码,相对编码通过调整Attention的结构使其可以分辨输入词的不同位置。

 

GPT-3 175B和BERT模型一样,均采用learned Position Embedding这种绝对位置编码方式,对每个位置的词初始化一个随机的位置编码值,和词编码后的值相加之后,随着模型的训练得到更新。这种位置编码方式使用简单,但是对句子长度有一定的限制,且只能表示每个词在句子中的绝对位置信息。对于learned Position Embedding的详细介绍可以参考论文[2]。

 

  1.  3.1.2 Sparsity Attention
  2.  

Attention是Transformer模型中的核心计算模块,主要变量有Query(Q)、Key(K)和Value(V),计算可以用如下公式表示。如果句子的长度是n,Attention计算的复杂度为O(n^2),当序列长度比较大时,Attention的计算就会很庞大,可以利用Attention的稀疏性来减小复杂度。

 

 

 

在论文[3]中,作者提出了Sparsity Transformer,如下图2所示,图2a是普通的Transformer Attention计算,深颜色表示参与计算,可以看到计算是稠密的,图2b是Strided Attention,每隔固定的时间步进行稀疏计算,图2c是Fixed Attention,固定某些KT的值进行稀疏计算,具体的细节可以参考论文[3]。

 

图2 Sparse Transformer Attention

图片来源:https://arxiv.org/pdf/1904.10509.pdf

 

在GPT-3模型中,一半的网络层(偶数层)采用原始的稠密注意力计算,另一半的网络层(奇数层)采用稀疏(fixed sparse)注意力计算,既减少了复杂度,同时也能保证原始模型的预测能力。

 

  1. 3.1.3 激活函数

FFN模块在FC1结束后需要使用激活函数,GPT3使用Gelu激活函数,OPT使用Relu激活函数,公式如下:

 

                          

 

3.2 BLOOM-176B

 

BLOOM-176B相比GPT3-175B网络层数减小,共有70层,但网络宽度增加,共有112个head,每个head的大小仍然为128,编码词汇表大小为250880。

 

        3.2.1 ALIBI Position Embedding

 

不同于GPT3,BLOOM采用ALIBI Embedding的编码方式,这种编码方式没有给词向量加入位置向量,而是用一个query和 key之间的距离计算出一个偏置值,再把这个偏置值和注意力得分矩阵相加来对其进行偏置,所以Position Embedding并不在Embedding层完成,而是在Attention中计算Q * KT值的时候加上去。

 

 

 

图3 ALIBI Embedding编码方式

图片来源:https://arxiv.org/pdf/2108.12409.pdf%5C

 

如图3所示,先进行Attention的Q乘KT计算之后得到注意力得分矩阵S,然后根据q和k的相对位置计算偏置值,对角线上的值由qi * ki计算得到,q和k的相对位置一样,因此偏置为0,第二行第一个值由q2 * k1计算得到,偏置为-1,以此类推,得到如图3右边所示的矩阵,然后再乘以一个系数m, 每个head的系数m不同,具体计算为公式如下,通过以上计算之后,得到矩阵和原来的注意里得分矩阵相加后进行后续的softmax等操作,具体的编码过程可以参考论文[4]。

 

                             

  1. 3.2.2 Standard Attention
  2.  

BLOOM的Attention计算与标准的的Transformer Attention计算一样,但是为了增加训练的稳定性,在Embedding层之后加了Layernorm操作,网络结构如图4所示。

 

 

图4 BLOOM网络结构

图片来源:https://arxiv.org/pdf/2211.05100.pdf

 

3.3 LLaMA

 

LLaMA模型是最近比较火热的模型之一,有不少模型比如百川模型,姜子牙模型等都基于LLaMA模型,LLaMA模型的网络结构配置细节见表1,编码词汇表大小均为32000。关于LLaMA的细节可以参看论文[6]和源码https://github.com/facebookresearch/llama[7]。

表1 LLaMA模型大小

表格来源:https://arxiv.org/pdf/2302.13971.pdf

  

  3.3.1 Rotary position embedding

 

LLaMA模型中采用Rotary Position Embedding的位置编码方式,通过和Attention结合以绝对编码的形式实现相对编码。

 

我们知道Attention计算第一步的核心是Q和K的内积,对于qm和kn,如果经过位置编码后的f(q, m)和f(k, n)的内积只和qm和kn以及相对位置m-n有关,就实现了使用绝对编码达到相对编码的目的。可以借助复数实现这一目的,对于QK的内积,用复数计算可以表示为如下公式,即一个复数和另一个复数的共轭的乘积实部。

 

                                 

 

通过一些求解手段,得到二维时编码函数可以表示为如下公式,具体的求解过程和介绍可以参考论文[8],经过编码后当q和k的相对位置一样时,对应的旋转幅度一样。

 

              

通过以上分析,我们得到了q和k的位置编码函数,在计算QK内积时,首先分别对QK进行位置编码,编码矩阵如图5左所示,其中 ,d为hidden维度,另外可以发现矩阵Wm比较稀疏,可以将计算简化为位相乘,如图5右所示。

 

图5 Rotary Position Embedding编码计算

图片来源:https://arxiv.org/pdf/2104.09864.pdf

 

对位置编码后的qk进行内积得到相对位置编码的注意力得分矩阵S,再进行后续的softmax等操作完成Attention计算。

 

       3.3.2 Standard Attention

 

LLaMA的Attention实现采用标准的Transformer Attention计算,用于计算的qk需要先经过Rotary Embedding,然后完成后续计算。

 

       3.3.3 激活函数

 

LLaMA的激活函数采用SwiGlu的方式,对应计算如下:

 

            

 

值得注意的是,在LLaMA计算中,FFN中第一层的维度没有采用4*hidden_dim,而是近似2/3 * 4d大小。

 

4、总结

本文对比了三种大语言模型结构,差异主要体现在Position Embedding编码方式、Attention的计算以及激活函数等,其中GPT3和BLOOM模型参数量比较大,LLaMA模型相对较小,更易于在GPU上进行训练和推理部署。除了以上介绍的模型之外,目前还有很多比较新的模型,比如ChatGLM1/2、Llama2以及Falcon等,结构设计上也有很多值得关注的细节,由于篇幅有限放在后续文章中进行介绍,感兴趣的读者可以先行阅读论文和模型代码[9-11]。作者水平有限,文中若有任何纰漏之处,也请各位读者批评指正!谢谢!

 

 

5.参考文献

[1] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

[2] onas Gehring, Michael Auli, David Grangier, Denis Yarats, and Yann N. Dauphin. Convolutional sequence to sequence learning. arXiv preprint arXiv:1705.03122v2, 2017.

[3] Child R, Gray S, Radford A, et al. Generating long sequences with sparse transformers[J]. arXiv preprint arXiv:1904.10509, 2019.

[4] Press O, Smith N A, Lewis M. Train short, test long: Attention with linear biases enables input length extrapolation[J]. arXiv preprint arXiv:2108.12409, 2021.

[5] Scao T L, Fan A, Akiki C, et al. Bloom: A 176b-parameter open-access multilingual language model[J]. arXiv preprint arXiv:2211.05100, 2022.

[6] Touvron H, Lavril T, Izacard G, et al. Llama: Open and efficient foundation language models[J]. arXiv preprint arXiv:2302.13971, 2023.

[7] https://github.com/facebookresearch/llama.

[8] Su J, Lu Y, Pan S, et al. Roformer: Enhanced transformer with rotary position embedding[J]. arXiv preprint arXiv:2104.09864, 2021.

[9] https://huggingface.co/THUDM/chatglm-6b.

[10] Penedo G, Malartic Q, Hesslow D, et al. The RefinedWeb dataset for Falcon LLM: outperforming curated corpora with web data, and web data only[J]. arXiv preprint arXiv:2306.01116, 2023.

[11] Peng B, Alcaide E, Anthony Q, et al. RWKV: Reinventing RNNs for the Transformer Era[J]. arXiv preprint arXiv:2305.13048, 2023.

上一个: 多模态大语言模型:让AI看图说话

下一个: 大语言模型微调:定制自己的微调数据集

近期文章

AI 智能体:应用前景与对算力需求的影响

人工智能技术的迅猛发展,尤其是 AI 智能体这一核心部分。本文讨论了AI智能体的定义、应用前景和其对算力需求的影响。

2023-11-13

查看更多