对比不同开源大语言模型的结构有什么区别?

2024-08-19 12:05:09 浏览数 (2)

今天我们来分析和对比一下目前比较流行的几个开源LLM在模型结构上有什么区别,这里挑选的openai的gpt2、开源鼻祖llama、国内的代表qwen2、欧洲的代表号称效果很好的模型mistral、和号称完全开源的模型olmo。这边文章首先从gpt2开始分析,对比gpt2和trainsformer结构的区别,再对比gpt2到llama的演变,最后横向对比LLM时代llama、qwen2、mistral和olmo模型结构的区别。

一、gpt2和transformer结构的区别

都说gpt是把transformer的decoder单独拿出来的结构,这里根据文章中和gpt2的源码对比两个模型结构的区别。

添加图片注释,不超过 140 字(可选)

首先对比模型的整体结构,可以看到gpt2和transformer的decoder部分基本相同,就是每个block将与encoder的交叉注意力去掉了,然后加上了一些dropout的操作。接下来看看每个block内部有没有区别。

添加图片注释,不超过 140 字(可选)

上图是每个block内容的结构对比,可以看到与transformer的decoder相比,gpt2的每个block将归一化的位置进行了修改。之前是attention和mlp后面进行归一化,gpt2是在attention和mlp前面进行了归一化处理。这里一个理由是:“同一设置之下,Pre Norm结构往往更容易训练,但最终效果通常不如Post Norm”(https://kexue.fm/archives/9009)。

接下来对比gpt2内部attention和mlp部分具体的实现方式。

添加图片注释,不超过 140 字(可选)

上图是gpt2 attention操作的实现方式。与文章中attention的计算方式相同,只是多了一步dropout的操作。

添加图片注释,不超过 140 字(可选)

这个是gpt2 mlp部分的实现方式,也是基本的mlp的实现方法,加了一个dropout的操作,激活函数用的是gelu_new。

二、llama和gpt2结构的区别首先整体对比一下llama和gpt2结构的区别。

首先整体对比一下llama和gpt2结构的区别。

添加图片注释,不超过 140 字(可选)

首先整体结构上可以看到,lama和gpt2相比发生了4点变化:1、位置编码的位置发生了改变;2、位置编码算法发生改变;3、放弃了dropout操作;4、归一化的方法发生了改变。首先是位置编码由绝对位置编码改成相对位置编码,相对位置编码的计算操作在attention计算的时候。然后归一化方法由LayerNorm改成了RMSNorm,这个是llama的主要创新之一(我认为是llama模型结构上的唯一创新,其他的都是组合不同的已经实现的方法,RMSNorm的实现这里不做讨论,感兴趣的可以去搜一下)。

接下来是每个block内部结构的对比。

添加图片注释,不超过 140 字(可选)

可以看到gpt2和llama每个block内部的结构基本没有区别,每个操作的顺序和位置都一样。

然后看看attention操作的实现方法有没有区别。

添加图片注释,不超过 140 字(可选)

attention操作可以看到,llama和gpt2的几点区别:1、添加了旋转位置编码的计算;2、attention计算的过程中bias=False;3、放弃了dropout操作;4、attention计算结束后又通过一个bias=False的线形层得到了最终的attention计算的结果。

接下来看看mlp的计算方法有没有区别。

添加图片注释,不超过 140 字(可选)

这个gpt2 mlp和llama mlp的对比图可以看到,llama的mlp与gpt2相比有以下几个变化:1、线性层不加偏置;2、mlp使用了一个门控的操作,不是单纯的先升维再降维;3、激活函数由gelu_new改成silu;4、放弃了dropout操作;5、bias都设置为False。

上面就是llama和gpt2模型结构的区别,主要的变化在于:1、使用了旋转位置编码;2、mlp添加门控机制;3、bias都设置为False;4、全程放弃dropout操作。后面llama2、llama3与llama的结构基本相同,无非就是加了一些group attention的内容,我不认为这属于模型结构的创新,只是为了减少推理成本的妥协,并不能提高模型的能力。

三、qwen2、mistral、olmo和llama结构的区别

上面的分析可以看到,llama在gpt2的结构上还是做了一些修改的,下面看看这几个其他的开源模型有没有在llama的基础上进行修改。首先是整体结构的对比:

添加图片注释,不超过 140 字(可选)

可以看到这4个模型整体结构基本一致,只是olmo使用了LayerNorm​(与之前的gpt2一致,不清楚为什么olmo要用这个。如果LayerNorm效果好的话,大家应该不会改成RMSNorm)。

然后是每个block​结构的对比:

添加图片注释,不超过 140 字(可选)

每个block对比可以看出,​这四个模型结构上完全一致,没有任何区别。

然后attention​块的对比:

添加图片注释,不超过 140 字(可选)

4个模型对比可以看出只有qwen2在QKV矩阵添加了偏置,其他的都没有任何变化。最后看看4个模型​mlp的结构有没有变化:

添加图片注释,不超过 140 字(可选)

可以看到4个模型的mlp结构完全一致,没有任何变化​。

四、总结

通过上面的对比,可以看到,gpt2在transformer decoder结构上做了一点改进,llama在gpt2的结构上做了一点改进​。而qwen2、mistral、olmo基本上都没有在llama的结构上进行修改​。可以说不只是国内,大家都是在抄llama的结构。尤其是号称欧洲之光的mistral和llama结果完全一模一样,一点都没改,qwen2好歹还在QKV矩阵上添加了个偏置​。

不过这对大模型的业界工作可能也是一个好消息,模型结构是确定的,大家只需要把更多的精力关注在数据​和训练策略上就可以了,一定程度上降低了大模型开发的复杂度。

——————————————————————————————

这里介绍一个开源项目:Zero-Chatgpt(https://github.com/AI-Study-Han/Zero-Chatgpt)。这个项目跑通了从数据收集、清洗、预训练、指令微调、强化学习的全流程,并且提供了全部代码脚本 ,适合新手训练个模型练练手。

LLM

0 人点赞