大模型入门(一)—— LLaMa/Alpaca/Vicuna

  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两个函数的结合

  其中$Swish = x \cdot sigmoid(\beta x)$,$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。  

 

posted @ 2023-04-12 16:55  微笑sun  阅读(10736)  评论(0编辑  收藏  举报