LLaMa模型是Meta开源的大模型,模型参数从7B到65B不等,LLaMa-7B在大多数基准测试上超过了GPT3-173B,而LLaMa-65B和Chinchilla-70B、PaLM-540B相比也极具竞争力。相比于ChatGPT或者GPT4来说,LLaMa可能效果上还有差距,但相比Closed AI,至少LLaMa论文和模型都开源出来了,目前hugging face已集成了LLaMa的代码实现和开源模型。学术界和工业界都可以在此基础上进行学习和研究。
LLaMa 模型介绍
LLaMa的模型架构使用的是Transformer Decoder结构,但LLaMa在细节上做了一些优化:
1)Pre-normalization
Pre-norm很早就被提出,原生的transformer中使用的是post-norm,也就是在每个子层输出后进行归一化,相比post-norm,pre-norm是在每个子层输入前对输入的数据归一化,pre-norm的训练会更稳定,甚至都可以不需要做warm-up也能很好地训练transformer大模型。除此之外,LLaMa还是用RMSNorm(Root Mean Square Layer Normalization)取代了Layer Norm,RMSNorm是Layer Norm的一种变体,和Layer Norm中减去均值、除以方差的归一化方式不同,RMSNorm是直接除以均方根。
2)SwiGLU激活函数
LLaMa使用SwiGLU激活函数替代了原有的ReLU激活函数。SwiGLU是Swish和GLU两个函数的结合
其中 S w i s h = x c d o t s i g m o i d ( b e t a x ) Swish = x \\cdot sigmoid(\\beta x) Swish=xcdotsigmoid(betax), S w i G L U = S w i s h ( W x + b ) b i g o t i m e s ( V x + c ) SwiGLU=Swish(Wx + b) \\bigotimes (Vx + c) SwiGLU=Swish(Wx+b)bigotimes(Vx+c)
3)RoPE旋转位置编码
使用旋转位置编码替代绝对位置编码,详见https://spaces.ac.cn/archives/8265。
Alpaca 模型介绍
Alpaca是斯坦福在LLaMa-7B的基础上监督微调出来的模型,斯坦福是用OpenAI的Text-davinci-003 API配合self-instruct技术,使用175个提示语种子自动生成了52K条提示-回复的指示数据集,在LLaMa-7B上微调得到的模型,在8张80G的A100上训练了3小时。
Vicuna 模型介绍
Vicuna是在LLaMa-13B的基础上使用监督数据微调得到的模型,数据集来自于ShareGPT.com 产生的用户对话数据,共70K条。使用Pytorch FSDP在8张A100上训练了一天。相较于Alpaca,Vicuna在训练中将序列长度由512扩展到了2048,并且通过梯度检测和flash attention来解决内存问题;调整训练损失考虑多轮对话,并仅根据模型的输出进行微调。通过GPT4来打分评测,Vicuna可以达到ChatGPT 90%的效果。并且还提供了可调用的分布式聊天服务FastChat。