chatGPT的175Billion个参数是哪儿来的

描述

最近大语言模型模型LLM很火,大家总是说chatgpt的175Billion参数。做算法的人更关心网络的结构,而我这种做硬件的人一直很好奇这个参数是怎么计算的。

最近看到了一篇文章,计算了参数的个数并且和chatgpt论文里的参数进行了比较,计算的还是比较准确的,我来总结一下。

1.Chatgpt背景

Chatgpt(chat generative pre-trained transformer)也是基于google最初的transformer模型,虽然LLM功能很强大,但是理解起来比fasterRCNN和LSTM好很多。

Transformer结构

ChatGPT

Chatgpt结构

不同于从input到output可以进行翻译工作的transformer结构,ChatGPT进行对话,只需要右侧的decoder部分就可以。

ChatGPT

2.一张立体图:

ChatGPT

整体的Bert 结构

看了很多解释图,上面的图是看过的最好的,流程就是

1)inputembedding  分别和key,value,query的矩阵做乘法linear projection,得到的结果进行attention

2)将多个attention的结果进行concat拼接,得到的结果进行再次进行矩阵乘法,linearprojection

3)将得到的结果输入feedforwardnetwork,两层的lineartransform之后,输出结果

4)如果有n_layer个layer,那么就重复2)和3)n_layer次

3.具体的参数个数计算

先解释一下参数:

n_head : attention 中head的个数

d_model:  中间bottlenecklayer的向量的维度

n_vocalulary: 字典的维度

n_context: 上下文的长度

n_layer:网络的层数

1)Inputembedding

ChatGPT

对应UWe将U的(n_context,n_vocalulary) 维转为UWe(n_context, d_model)维,其矩阵大小为(n_vocabulary,d_model) , 参数大小即为n_vocabulary* d_model。 ‍‍

此外,‍‍Wp对应(n_context,d_model)。 因此此处的参数个数为: n_vocabulary*d_model+ n_context * d_model

2)Attention& MultiHead

ChatGPT

a. WiQ, WiK,WiV都是相同的大小投影矩阵,每个都是d_model*d_head维度,这里的d_head就对应上面公式里面的de, ,dk,dv,ChatGPT中他们都是同样的大小;

b.  因此attention部分的计算量就是3*d_model*d_head,因为有三个矩阵WiQ,WiK, WiV;

c.  如果有MultiHead,如果head的个数为n_head,那么即为W矩阵的总参数3*d_model*d_head*n_head

d.  concat的结果的维度为(n_context,n_head*d_head),经过矩阵WO计算后维度变为(n_context,d_head)维,因此WO的维度为(n_head*d_head,d_head) 对c)和d)的参数求和,此时参数个数为 4*d_model*d_head*n_head

3)feedforward

ChatGPT

在chatgpt中,feedforward内部由两层lineartransformer组成,并且d_ff为d_model的4倍。 ‍‍‍W1‍‍的参数个数为(d_model,d_ff), b‍‍1‍‍的参数个数为d_ff,W2的为(d_ff,d_model),b2‍‍‍‍的参数个数为d_model,而d_model又是d_ff的四倍,因此: 2*d_model*d_ff+d_model+d_ff 即 8*d_model2+ 5* d_model 4)将2)和3)重复n_layer次 n_layer * (4*d_model*d_head*n_head+ 8*d_model2 + 5* d_model)

总体的参数计算:1)+ 4):

n‍_vocabulary*d_model-> emb‍‍edding atrix

+n_context * d_model‍‍-> position matrix

+ n_layer *       ‍            ‍‍‍‍-> layer 重复N次

// multi head attention

(4 * d_model * d_head * n_head -> ‍‍‍

‍‍// feedforward network

‍‍+ 8 * d_model2+ 5* d_mo‍‍del ‍‍)

验证一下:

如果按照chatGPT论文中设置的参数:

n_vocabulary = 50257

d_model = 12288

n_context = 2048

n_layer= 96

d_head= 128

n_head= 96

1)word_embeding + position 

50257 * 12288 + 2048 * 12288 = 642723840

2)Attention& MultiHead

        单层:4 * 12288 * 128 * 96 = 603979776‍‍

3)feedforward

        8 * 12288 * 12288 + 5 * 12288= 1208020992

4)2)和3)重复n_layer次

    N_layer = 96 层 96*(603979776+1208020992)                  = 173952073728 

1)+2) = 174594797568 也就是所说的175Billion个参数。

这个方法估计出的参数和论文中参数的对比:

ChatGPT







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分