一、模型微調技術
1.模型微調簡介
大模型微調(Fine-tuning),是指在已經預訓練好的大語言模型基礎上(基座模型),使用特定的數據集進行進一步訓練,讓模型適應特定任務或領域。通常LLM的預訓練是無監督的,但微調過程往往是有監督的。當進行有監督微調時,模型權重會根據真實標記的差異進行調整。通過這個微調過程,模型能捕捉到標簽數據中特定于某一項任務的模式和特點。
1)指令微調(Instruction Tuning/SFT)
通過使用任務輸入與輸出的配對數據進行訓練,使得語言模型掌握通過問答形式進行任務求解的能力。一般來說,指令微調很難教會大模型預訓練階段沒有學習到的知識與能力,它主要起到了對于模型能力的激發作用。
2)人類對齊
由于大語言模型可能會生成具有偏見、泄露隱私甚至對社會有害的內容,在實踐應用中需要保證大模型能夠較好的符合人類的價值觀,對齊目標一般聚焦于有用性、誠實性和無害性三個方面。代表性的做法是OpenAI公司提出的基于人類反饋的強化學習算法RLHF,將人類偏好引入到大模型的對齊過程中。
2.微調手段
Adapter Tuning,PET,Prefix Tuning,P-Tuning,LoRA,QLoRA等。
二、PEFT參數高效微調
在不調整預訓練模型的所有參數的情況下,通過僅微調一小部分參數來適應特定的下游任務,顯著降低計算和存儲成本。加快模型適應速度,避免了災難性遺忘。
1)PEFT目標是在保留預訓練模型大部分參數不變的情況下,只對模型的一小部分參數進行微調。
2)適用于數據量小的任務
PEFT的分類:
a.additive-增量模型
通過在預訓練模型的特定位置添加可學習的模塊或者參數,以最小化適配下游任務時模型的可訓練的參數。
方法:Adapter:通過在Transformer塊內添加小型Adapter層來實現參數高效微調。Soft Prompt:通過在輸入序列的頭部添加可學習的向量來實現參數高效微調。
b.soft prompt-軟提示
軟提示是可學習的連續向量,通過梯度優化方法針對特定數據集進行優化。
?方法:Prefix-tuning:通過在每個Transformer層的鍵、值和查詢矩陣前面添加可學習的向量,實現對模型表示的微調。Prompt Tuning:僅僅在首個詞向量層插入可學習向量,以進一步減少訓練參數。
c.adapters-適配器
適配器技術通過在模型的層之間插入小型神經網絡模塊(adapters),只訓練這些模塊的參數,而保持預訓練模型的其他部分不變。
d.selective-選擇性方法
選擇性方法在微調過程中只更新模型中的一部分參數,而保持其余參數固定。
方法:包括非結構化掩碼和結構化掩碼技術。非結構化掩碼通過在模型參數上添加可學習的二值掩碼來確定可以微調的參數。結構化掩碼對掩碼的形狀進行了結構化的限制,以提高效率。
e.reparameterizeation based-重參數化方法
通過構建預訓練模型參數的(低秩的)表示形式用于訓練,在推理時,參數將被等價的轉化為預訓練模型參數結構。
方法:LoRA通過將權重矩陣分解為倆個較低秩的矩陣來減少參數量,從而有效的減少需要更新的參數數量。
三、LoRA與QLoRA
1.LoRA
通過低秩分解來模擬參數的改變量,以極小的參數來實現大模型的間接訓練。
簡單理解:外掛模型,訓練時凍結預訓練模型的權重,僅改變外掛模型的權重,r為秩,簡答理解為做一次維度變換,提取不同維度的特征。
2.QLoRA
量化版LoRA,顯著降低訓練時所需顯存資源。
特點:
1)定義了4位標準浮點數(NF4)量化,基于分塊的分位數量化的量化策略。
2)雙重量化,包含對普通參數的一次量化和對量化常數的再一次量化,可以進一步減小緩存占用。
3)分頁優化器,用來在顯存過高時用一部分內存代替。
四、模型量化技術
1.量化原理
默認情況下模型的權重參數以及偏置均使用float32位全精度浮點數進行存儲,目的為了保證精度。但是精度增加的同時也帶了模型體積增大,訓練速度降低,預測速度慢等問題。由此誕生了量化技術。
2.量化目的
將原本使用浮點數表示的模型參數轉換為整數表示,以此來減少模型的存儲空間需求并加速計算和推理的過程,將原本使用float32類型的數據轉換為int8類型的數據。
3.對稱量化與非對稱量化
對稱量化:使用一個映射公式將輸入數據映射到[-128,127]的范圍內。
非對稱量化:使用一個映射公式將輸入數據映射到[0,255]的范圍內。
4.NF4量化
基于分位數量化的基礎上,理論上最優的數據類型,可以確保每個量化區間從輸入張量中分配相同數量的值,實際計算過程中,需要先將數據歸一化到合適的范圍,并且對于確定的分布來說,分位點也是確定的,因此只需存儲分位點的索引即可。
簡單理解:NF4總共4bits,正態分布分為16塊,將數據映射到這16塊中,記錄數據索引即為量化后的值。