詳解“小而優”的大語言模型Zephyr 7B
譯文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。