模型概述
模型特點
模型能力
使用案例
🚀 Flan-UL2模型卡
Flan-UL2 是基於 T5
架構的編解碼器模型,它使用了與去年早些時候發佈的 UL2 模型
相同的配置,並通過 “Flan” 提示調優和數據集收集進行了微調。該模型在多方面展現出優勢,如擴大了接收域、無需模式令牌等,能在多種自然語言處理任務中發揮出色性能。
🚀 快速開始
從 T5x 轉換到 Hugging Face
你可以使用 convert_t5x_checkpoint_to_pytorch.py
腳本,並傳遞參數 strict = False
。由於原始字典中缺少最終的層歸一化,所以我們要傳遞 strict = False
參數。
python convert_t5x_checkpoint_to_pytorch.py --t5x_checkpoint_path PATH_TO_T5X_CHECKPOINTS --config_file PATH_TO_CONFIG --pytorch_dump_path PATH_TO_SAVE
我們使用了與 google/ul2
相同的配置文件。
運行模型
為了更高效地使用內存,建議你在 GPU 環境下使用 load_in_8bit
標誌以 8bit
模式加載模型:
# pip install accelerate transformers bitsandbytes
from transformers import T5ForConditionalGeneration, AutoTokenizer
import torch
model = T5ForConditionalGeneration.from_pretrained("google/flan-ul2", device_map="auto", load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/flan-ul2")
input_string = "Answer the following question by reasoning step by step. The cafeteria had 23 apples. If they used 20 for lunch, and bought 6 more, how many apple do they have?"
inputs = tokenizer(input_string, return_tensors="pt").input_ids.to("cuda")
outputs = model.generate(inputs, max_length=200)
print(tokenizer.decode(outputs[0]))
# <pad> They have 23 - 20 = 3 apples left. They have 3 + 6 = 9 apples. Therefore, the answer is 9.</s>
否則,你也可以按如下方式以 bfloat16
模式加載和運行模型:
# pip install accelerate transformers
from transformers import T5ForConditionalGeneration, AutoTokenizer
import torch
model = T5ForConditionalGeneration.from_pretrained("google/flan-ul2", torch_dtype=torch.bfloat16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("google/flan-ul2")
input_string = "Answer the following question by reasoning step by step. The cafeteria had 23 apples. If they used 20 for lunch, and bought 6 more, how many apple do they have?"
inputs = tokenizer(input_string, return_tensors="pt").input_ids.to("cuda")
outputs = model.generate(inputs, max_length=200)
print(tokenizer.decode(outputs[0]))
# <pad> They have 23 - 20 = 3 apples left. They have 3 + 6 = 9 apples. Therefore, the answer is 9.</s>
✨ 主要特性
接收域擴大
原始的 UL2 模型僅在 512 的接收域上進行訓練,這對於 N 值較大的 N-shot 提示來說並不理想。而 Flan-UL2 檢查點使用了 2048 的接收域,使其更適用於少樣本上下文學習。
無需模式令牌
原始的 UL2 模型需要模式切換令牌才能獲得良好的性能,但這些令牌在推理或微調時需要進行一些更改,使用起來比較麻煩。在本次更新中,我們在應用 Flan 指令調優之前,對 UL2 20B 進行了額外 100k 步(小批量)的訓練,使其“忘記”了“模式令牌”。因此,Flan-UL2 檢查點不再需要模式令牌。
📦 安裝指南
文檔中未提及具體安裝步驟,可參考上述“快速開始”部分進行模型的轉換和運行。
💻 使用示例
基礎用法
# pip install accelerate transformers bitsandbytes
from transformers import T5ForConditionalGeneration, AutoTokenizer
import torch
model = T5ForConditionalGeneration.from_pretrained("google/flan-ul2", device_map="auto", load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/flan-ul2")
input_string = "Answer the following question by reasoning step by step. The cafeteria had 23 apples. If they used 20 for lunch, and bought 6 more, how many apple do they have?"
inputs = tokenizer(input_string, return_tensors="pt").input_ids.to("cuda")
outputs = model.generate(inputs, max_length=200)
print(tokenizer.decode(outputs[0]))
# <pad> They have 23 - 20 = 3 apples left. They have 3 + 6 = 9 apples. Therefore, the answer is 9.</s>
高級用法
# pip install accelerate transformers
from transformers import T5ForConditionalGeneration, AutoTokenizer
import torch
model = T5ForConditionalGeneration.from_pretrained("google/flan-ul2", torch_dtype=torch.bfloat16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("google/flan-ul2")
input_string = "Answer the following question by reasoning step by step. The cafeteria had 23 apples. If they used 20 for lunch, and bought 6 more, how many apple do they have?"
inputs = tokenizer(input_string, return_tensors="pt").input_ids.to("cuda")
outputs = model.generate(inputs, max_length=200)
print(tokenizer.decode(outputs[0]))
# <pad> They have 23 - 20 = 3 apples left. They have 3 + 6 = 9 apples. Therefore, the answer is 9.</s>
📚 詳細文檔
性能提升
報告的結果如下:
MMLU | BBH | MMLU-CoT | BBH-CoT | 平均 | |
---|---|---|---|---|---|
FLAN-PaLM 62B | 59.6 | 47.5 | 56.9 | 44.9 | 49.9 |
FLAN-PaLM 540B | 73.5 | 57.9 | 70.9 | 66.3 | 67.2 |
FLAN-T5-XXL 11B | 55.1 | 45.3 | 48.6 | 41.4 | 47.6 |
FLAN-UL2 20B | 55.7(+1.1%) | 45.9(+1.3%) | 52.2(+7.4%) | 42.7(+3.1%) | 49.1(+3.2%) |
UL2 簡介
這整個部分是從 google/ul2
模型卡複製而來的,可能會根據 flan-ul2
進行更改。
UL2 是一個預訓練模型的統一框架,在不同數據集和設置下都能普遍有效。UL2 使用了混合去噪器(Mixture-of-Denoisers,MoD),這是一種將多種預訓練範式結合在一起的預訓練目標。UL2 引入了模式切換的概念,即下游微調與特定的預訓練方案相關聯。
摘要
現有的預訓練模型通常針對特定類型的問題。到目前為止,對於正確的架構和預訓練設置似乎仍未達成共識。本文提出了一個預訓練模型的統一框架,該框架在不同數據集和設置下都能普遍有效。我們首先將架構原型與預訓練目標這兩個通常被混淆的概念分開。接下來,我們提出了自然語言處理中自監督的廣義和統一視角,並展示了不同的預訓練目標如何相互轉換,以及在不同目標之間進行插值如何有效。然後,我們提出了混合去噪器(MoD),這是一種將多種預訓練範式結合在一起的預訓練目標。此外,我們引入了模式切換的概念,即下游微調與特定的預訓練方案相關聯。我們進行了廣泛的消融實驗,比較了多種預訓練目標,發現我們的方法在多個不同設置下優於 T5 和/或類似 GPT 的模型,推動了帕累託前沿。最後,通過將我們的模型擴展到 200 億參數,我們在 50 個成熟的有監督自然語言處理任務中取得了最優性能,包括語言生成(自動和人工評估)、語言理解、文本分類、問答、常識推理、長文本推理、結構化知識接地和信息檢索。我們的模型在上下文學習方面也取得了很好的結果,在零樣本 SuperGLUE 上優於 1750 億參數的 GPT-3,並在單樣本摘要任務上使 T5-XXL 的性能提高了兩倍。
如需更多信息,請查看原始論文。
論文:Unifying Language Learning Paradigms
作者:Yi Tay, Mostafa Dehghani, Vinh Q. Tran, Xavier Garcia, Dara Bahri, Tal Schuster, Huaixiu Steven Zheng, Neil Houlsby, Donald Metzler
訓練
Flan UL2
Flan-UL2 模型使用 UL2
檢查點進行初始化,然後使用 Flan 提示進行額外訓練。這意味著原始的訓練語料庫是 C4
。
在 “Scaling Instruction-Finetuned language models (Chung et al.)”(有時也稱為 Flan2 論文)中,關鍵思想是在一組數據集上訓練大型語言模型。這些數據集以指令的形式表述,能夠在不同任務中實現泛化。Flan 主要在學術任務上進行訓練。在 Flan2 中,我們發佈了一系列參數從 2 億到 110 億的 T5 模型,這些模型都使用 Flan 進行了指令調優。
Flan 數據集也在 “The Flan Collection: Designing Data and Methods for Effective Instruction Tuning” (Longpre et al.) 中開源。請參閱 Google AI 博客文章:“The Flan Collection: Advancing Open Source Methods for Instruction Tuning”。
UL2 預訓練
該模型在 C4 語料庫上進行預訓練。預訓練時,模型在 C4 上總共訓練了 1 萬億個令牌(200 萬步),批量大小為 1024。輸入和目標的序列長度設置為 512/512。預訓練期間,丟棄率設置為 0。對於大約 1 萬億個令牌的預訓練,耗時略超過一個月。該模型有 32 個編碼器層和 32 個解碼器層,dmodel
為 4096,df
為 16384。每個頭的維度為 256,總共有 16 個頭。我們的模型使用了 8 的模型並行度。使用了與 T5 相同的詞彙表大小為 32000 的 SentencePiece 分詞器(點擊 此處 瞭解更多關於 T5 分詞器的信息)。
UL-20B 可以被解釋為一個與 T5 非常相似的模型,但使用了不同的目標和略有不同的縮放旋鈕進行訓練。UL-20B 使用 Jax 和 T5X 基礎設施進行訓練。
預訓練期間的訓練目標是多種去噪策略的混合,具體解釋如下:
混合去噪器
引用論文中的內容:
我們推測,一個強大的通用模型在預訓練期間必須接觸到解決各種問題。鑑於預訓練是使用自監督進行的,我們認為這種多樣性應該注入到模型的目標中,否則模型可能會缺乏某種能力,如長連貫文本生成。 基於此,以及當前的目標函數類別,我們定義了預訓練期間使用的三種主要範式:
-
R-去噪器:常規去噪是 T5 中引入的標準跨度損壞,使用 2 到 5 個令牌的範圍作為跨度長度,大約掩蓋輸入令牌的 15%。這些跨度較短,可能有助於獲取知識,而不是學習生成流暢的文本。
-
S-去噪器:一種特定的去噪情況,在構建輸入到目標任務時遵循嚴格的順序,即前綴語言建模。為此,我們只需將輸入序列劃分為兩個子序列,分別作為上下文和目標,使得目標不依賴於未來信息。這與標準跨度損壞不同,在標準跨度損壞中,可能存在目標令牌的位置早於上下文令牌的情況。請注意,與前綴語言模型設置類似,上下文(前綴)保留了雙向接收域。我們注意到,具有非常短記憶或無記憶的 S-去噪在精神上與標準因果語言建模類似。
-
X-去噪器:一種極端的去噪版本,模型需要根據輸入的一小部分到中等部分恢復大部分輸入。這模擬了模型需要從信息相對有限的記憶中生成長目標的情況。為此,我們選擇包含具有激進去噪的示例,其中大約 50% 的輸入序列被掩蓋。這可以通過增加跨度長度和/或損壞率來實現。我們認為,如果預訓練任務具有長跨度(例如,≥ 12 個令牌)或高損壞率(例如,≥ 30%),則該任務是極端的。X-去噪的動機是在常規跨度損壞和類似語言模型的目標之間進行插值。
請參閱以下圖表以獲得更直觀的解釋:
重要提示:如需更多詳細信息,請參閱 論文 的 3.1.2 節。
微調
模型在 N 個預訓練步驟後繼續進行微調,N 通常在 5 萬到 10 萬之間。換句話說,在每 N 萬步的預訓練之後,模型會在每個下游任務上進行微調。請參閱 論文 的 5.2.2 節,瞭解用於微調的所有數據集的概述。
由於模型是持續微調的,一旦某個任務達到最優性能,就會停止在該任務上的微調,以節省計算資源。模型總共訓練了 265 萬步。
重要提示:如需更多詳細信息,請參閱 論文 的 5.2.1 和 5.2.2 節。
🔧 技術細節
模型架構
Flan-UL2 基於 T5
架構,具有 32 個編碼器層和 32 個解碼器層,dmodel
為 4096,df
為 16384,每個頭的維度為 256,總共有 16 個頭。
訓練設置
- 預訓練語料庫:C4
- 預訓練步驟:200 萬步
- 批量大小:1024
- 序列長度:輸入和目標均為 512/512
- 丟棄率:0
- 模型並行度:8
- 分詞器:與 T5 相同的 SentencePiece 分詞器,詞彙表大小為 32000
微調設置
- 微調步驟:在每 5 萬到 10 萬步預訓練後進行
- 總訓練步驟:265 萬步
📄 許可證
本模型使用 apache-2.0
許可證。
貢獻者
本模型最初由 Yi Tay 貢獻,並由 Younes Belkada 和 Arthur Zucker 添加到 Hugging Face 生態系統中。
引用
如果你想引用這項工作,請考慮引用宣佈 Flan-UL2
發佈的 博客文章。



