Zephyr是Hugging Face发布的一系列大语言模型,使用蒸馏监督微调(dSFT)在更庞大的模型上进行训练,显著提高了任务准确性。
2023年是属于大语言模型(LLM)和开源的一年。许多初创公司和企业开放了模型和权重的源代码,以应对ChatGPT和Claude等专有LLM。2023年的一些重要公司和模型(开源)包括:
- Meta(Llama和LLamav2)
- TII(Falcon 7B、40B和180B)
- Mistral(Mistral 7B和Mixtral8x7B)
然而,部署相对容易和便宜的7B模型无法与70B等更庞大的模型相提并论。最强大的开源模型是Mistral 7B,它胜过许多更庞大的模型。
图1. Mistral-7B与各大模型的比较
可见,这些小模型仍然不能很好地响应自然提示,需要良好的提示工程。
引言
Zephyr 7B是由Hugging Face H4团队创建的一个模型,主要目的是创建一个更小的语言模型,与用户意图保持一致,但性能胜过更大的模型。
Zephyr是Mistral-7B的校准版本,主要借助蒸馏的优点创建而成,在学术和对话衡量基准方面与70B型号不相上下。
图2. Zephyr-7B的性能比较
关键特性
Zephyr性能出色的原因是H4团队使用了这几项关键技术。
- 自我指导数据创建和DSFT(蒸馏监督微调)
- 反馈收集
- DSFT模型的DDPO(蒸馏直接偏好优化)
自我指导数据创建和DSFT
传统上,监督微调(SFT)通过高质量的指令完成针对大语言模型的数据创建。这些数据的构建成本很高,需要人工监督。
其中一个值得关注的方法是使用Teacher模型(已经过训练的LLM)来生成指令和响应。这项蒸馏技术首先用于Alpaca,证明了借助蒸馏监督微调,小模型的性能可以胜过大模型。
图3. 自我指导管道
H4团队使用Zephyr构建用于执行DSFT的高质量监督(指令和完成)数据集。根据生成的指令/完成训练模型是一种蒸馏形式,名为DSFT(蒸馏监督微调)。
反馈收集
大语言模型通常借助人类反馈强化学习(RLHF)进行对齐。Zephyr则是使用来自更好的教师模型(比如GPT-4)的反馈来对齐模型的偏好,遵循超级反馈(Ultra Feedback)方法。
图4. 超级反馈构建过程
其工作方式是,来自SFT的每个监督提示被传递给4个模型(Claude、Llama和Falcon等),针对单个提示的4个响应中每一个都借助GPT-4来评分。现在我们有了一个数据集,包括输入(x)、最高评分完成(yw)和表示为低评分完成的随机提示(yl),即我们有一个三元组(x、yw和yl)。
偏好优化
最后这一步的目标是最大化模型的偏好,偏向yw(最高评分完成)而非yl(低评分完成)。这是使用DPO(直接偏好优化)来完成的。使用DPO比使用普通RLHF来得简单,直观上性能优于RLHF。本例中的方法被之所以称为dDPO,是由于它使用借助教师模型生成的蒸馏数据集。
图5. DPO vs RLHF
整个算法看起来有点像这样:
可以转换成以下步骤:
- 从dSFT模型(仅向前)计算(x, yw)和(x, yl)的概率。
- 从dDPO模型计算(x, yw)和(x, yl)的概率。
- 计算Eq 1,反向传播以更新。重复步骤。
训练细节
Zephyr使用的基本型号是Mistral-7B,它在发布时是最先进的开源模型。他们使用TRL库进行微调和对齐。Deep-Speed Zero 3和Flash-Attention 2用来优化和加速训练,充分利用GPU。模型使用AdamW优化器进行训练,不使用权值衰减。所有实验都在16台A100s上运行,使用bfloat16精度,通常需要2-4小时才能完成。可以参阅原论文(https://arxiv.org/pdf/2310.16944.pdf),深入了解Zephyr训练程序的细节。
结果
Zephyr团队结合了最好的技术来训练大语言模型,它只需70亿个参数就可以媲美400亿参数模型的性能,可以媲美700亿个参数的聊天模型。
表2:Zephyr与其他LLM的比较
图6. Zephyr与其他LLM的比较
使用
Zephyr模型在Hugging Face上免费可用,可以像其他语言模型一样使用。
import torch
from transformers import pipeline
pipe = pipeline("text-generation",
model="HuggingFaceH4/zephyr-7b-alpha", # can also use the beta model
torch_dtype=torch.bfloat16,
device_map="auto")
# We use the tokenizer's chat template to format each message - see
https://huggingface.co/docs/transformers/main/en/chat_templating
messages = [
{
"role": "system",
"content": "You are a friendly chatbot who always responds in the style of a
pirate",
},
{"role": "user", "content": "How many helicopters can a human eat in one
sitting?"},
]
prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False,
add_generation_prompt=True)
outputs = pipe(prompt, max_new_tokens=256, do_sample=True, temperature=0.7,
top_k=50, top_p=0.95)
print(outputs[0]["generated_text"])
输出:
<|system|>
You are a friendly chatbot who always responds in the style of a pirate.
<|user|>
How many helicopters can a human eat in one sitting?
<|assistant|>
Ah, me hearty matey! But yer question be a puzzler! A human cannot eat a
helicopter in one sitting, as helicopters are not edible. They be made of metal,
plastic, and other materials, not food!
结论
Zephyr-7B是一个小模型,展示了LLM提炼成小模型的能力。由此生成的模型Zephyr-7B基于Mistral-7B,为70亿参数聊天模型奠定了新的先进记录,甚至在MT-Bench上的性能胜过Llama2-Chat-70B。
参考资料:
- Zephyr:语言模型对齐直接蒸馏(https://arxiv.org/abs/2310.16944)
- HuggingFace Zephyr博文(https://huggingface.co/blog/Isamu136/understanding-zephyr)
- 自我指导:https://arxiv.org/abs/2212.10560
- 超级反馈:https://arxiv.org/abs/2310.01377
原文标题:Exploring the Zephyr 7B: A Comprehensive Guide to the Latest Large Language Model,作者:Ahmad Anis
链接:https://www.kdnuggets.com/exploring-the-zephyr-7b-a-comprehensive-guide-to-the-latest-large-language-model。