解密Prompt系列16. LLM對齊經驗之資料越少越好?LTD & LIMA & AlpaGasus

風雨中的小七發表於2023-10-05

LLM Agent中間插個隊,總結下指令微調、對齊資料相關的方案,已經湊夠7篇論文可以召喚神龍啦!論文都是以最佳化指令樣本為核心,Data-Centric的觀點比較一致:指令微調也就是對齊階段的資料質量>>數量,少量+多樣+高質量的對齊資料,就能讓你快速擁有效果槓槓的模型。注意以上三者是充分必要關係,不是說資料越少越好,是三者的有機統一。

如果你對指令微調還不甚瞭解,建議先看看下解密Prompt系列4. 升級Instruction Tuning

當前對指令微調部分的普遍認知有兩個思路

  • 抽象派:把模型輸出和人類偏好進行對齊
  • 務實派:賦予模型任務指令的理解和完成能力

兩個思路其實殊途同歸,重心落在任務+對齊,既基於使用者指令應該召回模型預訓練學習的哪些知識,以及把這些知識用什麼樣的格式和風格進行輸出,類似於把預訓練學習的知識重新排列組合並輸出。可以類比探測Bert Finetune對向量空間的影響,只不過指令微調調整的高維空間更加細分多樣。

於是才有本章的討論,那我們構建質量更高,覆蓋範圍更廣的資料,是否比隨機造大量的指令資料效果要更好。畢竟你抖音刷1000條雜七雜八的中醫養生小知識,可能比不上精讀黃帝內經+神農本草不是~

LIMA

  • 論文:LIMA: Less Is More for Alignment
  • 要點:人工構建1K高質量樣本用於對齊,高質量主要指輸出的風格一致性,以及輸入的多樣性

LIMA是比較早提出Quality Over Quantity觀點的論文。論文提出一個假設是模型的知識和能力幾乎全部是預訓練階段注入的。而指令微調階段的對齊只是學習和人類互動的回答形式。因此一個輸入多樣輸出形式一致的高質量指令資料集能幫模型快速學到回答形式。

指令資料集的構建方式是人工從Stack Exchange, wikiHow和Reddit裡面分類篩選更高質量的問題和回答,來構建指令樣本集。我們具體說下Stack Exchange樣本的構建,其他兩個思路是一致的

  1. 分類取樣: 為了保證多樣性,把Stack的分成75個科學類別和99個其他類別,從每個類別中取樣200個問題
  2. 篩選:為了保證質量,在以上每個類別中篩選問題評分最高的,再篩選該問題中回答得分最高的
  3. 過濾:為了保證輸出的一致性,過濾太長(4096字元)/太短(1200字元)的回答,過濾以第一人稱回答,或者引用了其他回答的內容。以及對內容進行清洗只保留程式碼和文字部分。
  4. 樣本構建:隨機使用問題的標題或者描述作為輸入,使用回答做為輸出。

除了使用已有的QA資料,幾位作者還人工構建了200條基於個人偏好隨機建立的prompt,以及編寫的回答,在回答編寫過程中核心是注意回答風格的一致性。重要的事情說三遍,一致性,一致性,一致性。論文反覆強調一致的回答風格可以加速模型收斂。

論文使用的是65B的LLAMA模型,1000條樣本,微調了15個epoch,lr=1e-5, batch=32, max_seq_len =2048。最終是人工在驗證集打分上,選擇了5-10個epoch之間的checkpoint。

論文針對資料集的質量,數量和多樣性進行了消融實驗,如下圖

  • 多樣性:相似質量和數量,輸入指令多樣性更高的stack exchange的效果優於輸入相對單一的wikiHow資料集
  • 質量:同等量級上過濾後質量更高的stack Exchange資料集微調的效果更好
  • 數量:從質量過濾後單一的stack exchange中取樣更高量級的訓練樣本,並不能顯著帶來效果提升。之前公認的樣本數量越多越好,可能更多是數量提升帶來的指令多樣性提升。

當然論文選擇的樣本數本身並無非常大的參考意義,因為這個選擇的基座模型,模型大小,資料本身的多樣性都相關,所以需要具體模型具體分析。

ALPAGASUS

論文起名終於從和動物糾纏不清,到開始上天入地,模型起名AlpaGasus=Alpaca+Pegasus,故名飛天羊駝,哈哈最近總會讓人不由自主想到飛天茅臺

image.png

對比LIMA,ALPAGASUS沒有對什麼是高質量進行很明確的定義,但是提出了自動化樣本過濾的方案,成本更低,更簡單粗暴。從原始52K的ALPACA樣本中使用大模型自動篩選高質量的9K樣本進行模型微調。

論文在以下4個測試集上進行評估,使用GPT-4給原始Alpaca和飛天羊駝進行偏好打分,勝率如下,在不同量級的訓練樣本上,飛天羊駝以80%+的勝率超越Alpaca,當訓練樣本在9K左右的時候,勝率最高~

自動樣本過濾機制比較簡單,就是使用如下Prompt,讓Chatgpt給(instruction, input, response)的三元組樣本進行打分,並根據最終的打分分佈,選定4.5分作為閾值,篩選打分>4.5的9K樣本用於下游模型微調。

論文還進行了消融實驗,對比了不同的篩選閾值得到的不同訓練樣本量的影響,3k/6k/9k中9K的樣本量級,模型效果最好,但超過後模型效果會有下降。延伸下大概就是高質量的資料越多越好,但低質量的資料越少越好。同時對比了隨機取樣9K作為作為對照組,效果是顯著差於使用模型打分篩選出的9K樣本。

自動化資料篩選看起來非常美好且夢幻,但筆者本人有一個疑問,論文使用chatgpt來篩選樣本,又用GPT4作為評估,是否會引入bias,這個bias主要來自chatgpt和gpt4相對一致的偏好。這一點除非引入人工評估,或者多個大模型例如Claude之類同時進行最終的評估打分,否則個人感覺可能出現媽媽看自己的孩子咋看都好看的情況......

LTD

  • 論文:Maybe Only 0.5% Data is Needed: A Preliminary Exploration of Low Training Data Instruction Tuning
  • 要點:聚類過濾相似度高的樣本,篩選多樣性樣本用於對齊

LTD的樣本篩選中心放在多樣性,在任務微調上只使用0.5%的訓練樣本,還比原有效果提升了2%。論文對多樣性給出了更形象的描述就是用最少的樣本,去近似刻畫當前全部指令集的空間分佈。這麼一描述,其實答案已經呼之欲出了,跑不了cluster,KNN,k-center這些方案,論文實現如下

具體分成3個步驟

  1. Sample embedding: 把指令樣向量化,這裡論文是把指令+回答一同輸入BERT模型進行編碼,並且做了l2正則化,這樣後續聚類計算距離就可以直接使用cosine距離
  2. Clustering:作者使用K-Means對所有指令樣本進行聚類,不過個人更偏好aggolomerative clustering,畢竟k-means是密度聚類,而層次聚類是基於距離的,在文字聚類中距離是有明確含義的,可以更好保證不同cluster直接的粒度相對一致
  3. Corest Sampling:基於聚類結果選擇有代表性的樣本來構建指令集。我本以為論文會直接從每個cluster動進行隨機取樣,意料之外的是論文采用了貪心的K-center演算法來選取更有代表性的資料點,演算法如下。目標是找到K的中心點,使得所有點到距離最近的中心點的距離之和最小化。實現是先用聚類中心點作為起始中心點,遍歷所有其他點找到離所有起始點距離最遠的點,把這個點也加入中心點,然後多次重複以上過程。

除了以上介紹的論文之外,還有幾篇論文思想也或有相似,包括以下Reference中的

  • InstructionGPT-4:把多樣性和質量進行綜合打分的多模態微調模型
  • Instruction Minning: 使用指令評估集推理Loss來對指令資料進行高質量篩選的
  • Polite Flamingo:透過改寫和重構構建高質量多模態模型輸出資料
  • Textbooks:程式設計任務上構建教科書級別質量的預訓練資料,和對應的習題集資料用於微調效果顯著超越StarCoder

想看更全的大模型相關論文梳理·微調及預訓練資料和框架·AIGC應用,移步Github >> DecryPrompt


Refernece

  1. InstructionGPT-4: A 200-Instruction Paradigm for Fine-Tuning MiniGPT-4
  2. Instruction Mining: High-Quality Instruction Data Selection for Large Language Models
  3. Visual Instruction Tuning with Polite Flamingo
  4. Textbooks are all you need
  5. K-center Greedy演算法的論文,Active Learning for Convolutional Neural Networks: A Core-Set Approach

相關文章