解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

風雨中的小七發表於2023-03-26

這一章我們聊聊指令微調,指令微調和前3章介紹的prompt有什麼關係呢?哈哈只要你細品,你就會發現大家對prompt和instruction的定義存在些出入,部分認為instruction是prompt的子集,部分認為instruction是句子型別的prompt。

對比前三章介紹過的主流prompt正規化,指令微調有如下特點

  1. 面向大模型:指令微調任務的核心是釋放模型已有的指令理解能力(GPT3中首次提出),因此指令微調是針對大模型設計的,因為指令理解是大模型的湧現能力之一。而prompt部分是面向常規模型例如BERT
  2. 預訓練:與其說是instruction tunning,更像是instruction pretraining,是在預訓練階段融入多樣的NLP指令微調,而非針對特定下游任務進行微調,而之前的promp主要服務微調和zeroshot場景
  3. multitask:以下模型設計了不同的指令微調資料集,但核心都是多樣性,差異化,覆蓋更廣泛的NLP任務,而之前的prompt模型多數有特定的任務指向
  4. 泛化性:在大模型上進行指令微調有很好的泛化性,在樣本外指令上也會存在效果提升
  5. 適用模型:考慮指令都是都是sentence形式的,因此只適用於En-Dn,Decoder only類的模型。而之前的prompt部分是面向Encoder的完形填空型別

下面我們介紹幾個指令微調相關的模型,模型都還是那個熟悉的模型,核心的差異在於微調的指令資料集不同,以及評估側重點不同,每個模型我們只側重介紹差異點。按時間順序分別是Flan, T0,InstructGPT, TK-Instruct

Google: Flan

  • paper: 2021.9 Finetuned Langauge Models are zero-shot learners
  • github:https://github.com/google-research/FLAN
  • 模型:137B LaMDA-PT
  • 一言以蔽之:搶佔先機,Google第一個提出指令微調可以解鎖大模型指令理解能力

谷歌的Flan是第一個提出指令微調正規化的,目的和標題相同使用指令微調來提升模型的zero-shot能力。論文使用的是137B的LAMDA-PT一個在web,程式碼,對話, wiki上預訓練的單向語言模型。

指令集

在構建資料集上,谷歌比較傳統。直接把Tensorflow Dataset上12個大類,總共62個NLP任務的資料集,透過模板轉換成了指令資料集

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

為了提高指令資料集的多樣性,每個任務,會設計10個模板,所以總共是620個指令,並且會有最多3個任務改造模板。所謂的任務改造就是把例如影評的情感分類任務,轉化成一個影評生成任務,更充分的發揮已有標註資料構建更豐富的指令資料集。哈哈感覺這裡充滿了人工的力量。

為了保證資料集的多樣性和均衡性,每個資料集的訓練樣本限制在3萬,並且考慮模型對一個任務的適應速度取決於任務資料集大小,因此按使用資料集樣本大小佔比按比例取樣混合訓練。

效果

效果上137B的指令微調模型大幅超越GPT3 few-shot, 尤其是在NLI任務上,考慮NLI的句子對基本不會在預訓練文字中自然作為連續上下句出現。而指令微調中設計了更自然地模板帶來了大幅的效果提升。

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

除了以上存在明顯效果提升的任務,在一些任務本身就和指令相似的任務,例如常識推理和指代消歧任務,指令微調並不能帶來顯著的效果提升。

作者做了更多的消融實驗,驗證指令微調中以下幾個變數

  1. 模型規模:
    作者進一步論證了指令微調帶來的效果提升存在明顯的大模型效應,只有當模型規模在百億左右,指令微調才會在樣本外任務上帶來提升。作者懷疑當模型規模較小時,在較多工上微調可能會佔用模型本就不多的引數空間,造成預訓練時的通用知識遺忘,降低在新任務上的效果。

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

  1. 多工影響:
    考慮指令微調是在多工上進行,作者希望剔除指令微調中多工微調帶來的影響。因此嘗試進行多工非指令微調(使用資料集名稱代替指令),效果上指令微調顯著更優,說明指令模板的設計確實存在提升模型指令理解力的效果。

  2. few-shot:
    除了zero-shot,Flan同時驗證了few-shot的效果。整體上few-shot的效果優於zero-shot。說明指令微調對few-shot也有效果提升。

  3. 結合prompt-tunning
    既然指令微調提升模型對指令的理解能力,作者認為應該對進一步使用soft-prompt也應該有提升。因此進一步使用了prompt-tunning對下游任務進行微調,不出意外Flan比預訓練LaMDA的效果有顯著的提升。

BigScience: T0

  • paper: 2021.10 Multitask prompted training enables zero-shot task generation
  • T0: https://github.com/bigscience-workshop/t-zero
  • Model: 11B T5-LM
  • 一言以蔽之: Flan你想到的我也想到了! 不過我的指令資料集更豐富多樣

T0是緊隨Flan釋出的論文,和FLan對比有以下以下幾個核心差異:

  • 預訓練模型差異:Flan是Decoder-only, T0是Encoder-Decoder的T5,並且考慮T5的預訓練沒有LM目標,因此使用了prompt-tunning中以LM任務繼續預訓練的T5-LM
  • 指令多樣性:T0使用的是PromptSource的資料集,指令要比Flan更豐富
  • 模型規模:Flan在消融實驗中發現8B以下指令微調效果都不好,而3B的T0透過指令微調也有效果提升。可能影響是En-Dn的預訓練目標差異,以及T0的指令集更多樣更有創意
  • 樣本外泛化任務: Flan為了驗證指令微調泛化性是每次預留一類任務在剩餘任務訓練,訓練多個模型。T0是固定了4類任務在其餘任務上微調

下面我們細說下T0的指令資料和消融實驗

指令集

T0構建了一個開源Prompt資料集P3(Public Pool of Prompts),包括173個資料集和2073個prompt。從豐富程度上比Flan提升了一整個數量級,不過只包含英文文字,更多資料集的構建細節可以看PromptSource的論文。

作者在指令集的多樣性上做了2個消融實驗

  1. 指令集包括的資料集數:
    在T0原始指令集的基礎上,作者分別加入GPT-3的驗證集,以及SuperGLUE,訓練了T0+和T0++模型。在5個hold-out任務上,更多的資料集並不一定帶來效果的提升,並且在部分推理任務上,更多的資料集還會帶來spread的上升(模型在不同prompt模板上表現的穩定性下降)

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

  1. 每個資料集的prompt數(p):透過每個資料集取樣不同數量的prompt進行訓練,作者發現隨prompt數提升,模型表現的中位數會有顯著提升,spread存在不同程度的下降,不過看起來存在邊際遞減的效應。

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

OpenAI: InstructGPT

  • paper: 2022.3 Training Language Model to follow instructions with human feedback
  • Model: (1.3B, 6B, 175B) GPT3
  • 一言以蔽之:你們還在刷Benchamrk?我們已經換玩法了!更好的AI才是目標

這裡把InstructGPT拆成兩個部分,本章只說指令微調的部分,也就是訓練三部曲中的第一步,論文中叫SFT(Supervised fine-tuning)。從論文的資料構建和評估中,不難發現OpenAI對於什麼是一個更好的模型的定義和大家出現了差異,當谷歌,BigScience聯盟還在各種不同的標準任務上評估LM模型能力提升時,OpenAI的重點已經變成了更好的AI,也就是能更好幫助人類解決問題的人工智慧。簡化成3H原則就是

  • Helpful:模型能幫助使用者解決問題
  • Honest: 模型能輸出真實資訊
  • Harmless: 模型輸出不能以任何形式傷害人類

於是正文部分的評估基本沒有常見的Accuracy,F1等,而是變成了各種人工評估的打分,例如LikeScore,Hallucinations等等。指令微調資料集的分佈也從標準NLP任務向使用者在playground中提交的問題偏移。下面我們細說下這兩部分

指令集

先說下SFT指令集的構建,InstructGPT構建了訓練12725+驗證1653條prompt指令,由標註員的標註樣本和使用者在playground中和模型互動的指令共同構成,相比T0指令的多樣性又有大幅提升。不過以下的指令數量包括了few-shot取樣,也就是1個instruction取樣不同的few-shot算多條指令。

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

除了豐富程度,和T0以及Flan指令集最大的差異在於指令型別的分佈。 標註人員標註了以下三類樣本

  • Plain: 標註同學自由構建任務指令
  • Few-shot:自由構建任務的同時給出few-shot樣例
  • User-Based: 基於使用者申請waitlist時給出的使用用途,讓標註同學構建對應的指令任務

整體上會更偏向於使用者在真實場景下和模型互動可能提問的問題,自由式生成例如腦暴,改寫,聊天,自由創作類的任務佔了絕大多數。 而T0,Flan的指令集集中在NLP的分類和QA任務,這類任務的在實際互動中佔比其實很小。下圖是OpenAI play ground中收集的使用者指令的分佈

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

以及從論文的表述中存在迭代 ,也就是標註同學標註的指令集用於訓練第一版InstructGPT,然後釋出到playground,收集更多的使用者和模型互動的指令,再使用使用者指令來訓練後續的模型。因此在使用者導向的資料集上OpenAI相比所有競爭對手都有更深厚的積累,你以為在白嫖人家的playground?人家也在收集資料提升他們的模型。

SFT使用cosine rate decay 例如微調了16個epoch,但是發現在第一個epoch上驗證集就已經過擬合了,但是過擬合會提升後續RLHF的模型效果。這部分我們放到RLHF章節再討論,也就是什麼樣的模型更合適作為RLHF的起點

評估指標

從論文對如何把3H原則轉化成客觀的模型評估指標的討論上,不難感受到OpenAI對於標註標準有過很長期的討論和迭代,包括3個方向

  1. Helpful有用性

主要評價模型是否理解了指令意圖,考慮有些指令本身意圖的模糊性,因此有用性被泛化成標註同學1-7分的偏好打分。

  1. Harmless有害性

針對模型輸出是否有害其實取決於模型的輸出被用在什麼場景中。OpenAI最初是用疑似有害性作為判斷標註,不過看起來可能雙審一致率不高,不同標註同學對疑似有害的認知存在較大差異。因此OpenAI設計了幾條明確的有害標準,和風控類似,包括涉黃,涉暴,有侮辱性言語等等。

  1. Honest事實性

相比Honest的含義 ,Truthfulness更適合用與沒有價值觀的模型,論文使用封閉域上模型偽造事實的機率,和在QA問題上的準確率來評估。

以上的標註標準,具體反映在以下的標註頁面中

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

模型效果

評估資料也分成了兩部分,標準NLP資料集,和API收集的指令資料進行標註得到,也就是OpenAI獨有資料。

  1. API資料集

有用性上,不論是在請求GPT,還是在請求InstructGPT的指令樣本中,不論是使用新的標註同學,還是和標註訓練樣本相同的標註同學,對比原始GPT3,SFT之後的模型like score都顯著更高,並且存在模型規模效應。

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

具體拆分到是否遵循指令,是否給出偽事實,以及能否對使用者起到幫助作用上,SFT微調後的模型都有顯著提升。

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

同時論文對比了使用Flan和T0的指令集對GPT3進行微調,發現雖然比原始GPT3有提升,但是效果會顯著差於使用更接近人類偏好的指令集微調的SFT。論文給出了兩個可能的原因

  • 公開NLP任務型別集中在分類和QA,這和OpenAI playground中收集的任務分佈存在較大的差異
  • 公開NLP資料集的指令豐富程度 << 人們實際輸入的指令多樣性

解密Prompt系列4. 升級Instruction Tuning:Flan/T0/InstructGPT/TKInstruct

  1. 標準NLP任務

在TruthfulQA任務上,SFT模型相比GPT有微小但是顯著的提升,整體事實性還是有待提高。

在RealToxicityPrompts資料集上,不管是人工打分還是Perspective模型打分都顯示,SFT相比GPT3,在產出有害內容上比例有顯著的下降。

綜上所述,InstructGPT在指令微調上最大突破是指令資料集分佈的差異性,標準NLP任務更少,自由開放類任務更多,以及依賴Openai免費開放的playground,可以持續收集使用者的指令用於模型迭代。同時在評估標準上,在語言模型之外引入3H體系來評價模型作為AI的能力效果。

AllenAI:TK-Instruct

  • paper: 2022.4 SUPER-NATURAL INSTRUCTIONS:Generalization via Declarative Instructions on 1600+ NLP Tasks
  • 開源指令集:https://instructions.apps.allenai.org/
  • Model: 11B T5
  • 一言以蔽之:沒有最大隻有更大的指令集,在英文和非英文的各類任務上超越InstructGPT?

Tk-Instruct最大的貢獻在於開源了更大規模的指令資料集,並且對上述提到的T0(promptSource),Flan,InstructGPT指令集進行了對比總結,如下

TK-Instruct在76大類,總共1616個任務上構建了指令集,任務分佈比T0和Flan更加多樣和廣泛,比InstructGPT要小(不過因為Instruct GPT的指令更多是開放生成類的使用者指令所以不太可比),且佔比上還是更偏向標準NLP任務型別。

其他細節這裡不再贅述,這裡放TK-InstructGPT更多是想看下以上T0,InstructGPT,TK-Instruct的效果對比。可以發現在內容理解任務上Tk-Instruct是要顯著超越InstructGPT的,在生成類任務上二者差不多。但整體和有監督微調(虛線)相比還有很大的提升空間。這裡其實也是我對Chatgpt能力的一些疑慮,不可否認它在擬人化和對話上的成功,但是在標準NLP任務上ChatGPT的水平如何,這一點有待評估,好像又看到最近有類似的論文出來,後面再補上這部分

更多Prompt相關論文·教程,AIGC相關玩法戳這裡DecryptPrompt


Reference

  1. https://bigscience.huggingface.co/blog/t0
  2. https://github.com/bigscience-workshop/promptsource

相關文章