ReFT(表征微調):比PeFT效果更好的新的大語言模型微調技術
ReFT(Representation Finetuning)是一種突破性的方法,有望重新定義我們對大型語言模型進行微調的方式。
這是由斯坦福大學的研究人員剛剛(4月)發(fā)布在arxiv上的論文,ReFT與傳統(tǒng)的基于權重的微調方法大有不同,它提供了一種更高效和有效的方法來適應這些大規(guī)模的模型,以適應新的任務和領域!

在介紹這篇論文之前,我們先看看PeFT。
參數高效微調 PeFT
參數高效微調方法(Parameter-Efficient Fine-Tuning,PEFT)僅微調少量或額外的模型參數,固定大部分預訓練參數,大大降低了計算和存儲成本,同時最先進的 PEFT 技術也能實現了與全量微調相當的性能。
在PeFT的思想之上就產生了我們非常熟悉的LoRA,還有各種LoRA的變體,除了有名的LoRA之外常用的PeFT方法還有:
Prefix Tuning:通過virtual token構造連續(xù)型隱式prompt ,這是21年斯坦福發(fā)布的方法。

P-Tuning V1/V2:這是清華大學在21年提出的將自然語言的離散模版轉化為可訓練的隱式prompt (連續(xù)參數優(yōu)化問題),V2版在輸入前面的每層加入可微調的參數,增強了V1版的性能。

然后就是我們熟悉的也是最長用的LoRA,這里就不多介紹了,我們可以狹義理解為LoRA是目前最好的PeFT方法,這樣可以對我們下面介紹的ReFT更好的對比。

表征微調 ReFT
ReFT (Representation Finetuning)是一組專注于在推理過程中對語言模型的隱藏表示學習干預的方法,而不是直接修改其權重。
與更新模型整個參數集的傳統(tǒng)微調方法不同,ReFT通過策略性地操縱模型表示的一小部分來操作,指導其行為以更有效地解決下游任務。
ReFT背后的核心思想受到最近語言模型可解釋性研究的啟發(fā):在這些模型學習的表示中編碼了豐富的語義信息。通過干預這些表示,ReFT旨在解鎖和利用這些編碼知識,實現更高效和有效的模型適應。
ReFT的一個關鍵優(yōu)點是它的參數效率:傳統(tǒng)的微調方法需要更新模型參數的很大一部分,這可能是計算昂貴和資源密集的,特別是對于具有數十億參數的大型語言模型。ReFT方法通常需要訓練數量級更少的參數,從而獲得更快的訓練時間和更少的內存需求。
ReFT與PeFT有何不同
ReFT與傳統(tǒng)PEFT方法在幾個關鍵方面有所不同:
1、干預目標
PEFT方法,例如,LoRA、DoRA和prefix-tuning,側重于修改模型的權重或引入額外的權重矩陣。而ReFT方法不直接修改模型的權重;它們會干預模型在向前傳遞期間計算的隱藏表示。
2、適應機制
像LoRA和DoRA這樣的PEFT方法學習權重更新或模型權重矩陣的低秩近似值。然后在推理期間將這些權重更新合并到基本模型的權重中,從而不會產生額外的計算開銷。ReFT方法學習干預,在推理過程中在特定層和位置操縱模型的表示。此干預過程會產生一些計算開銷,但可以實現更有效的適應。
3、動機
PEFT方法的主要動機是對參數有效適應的需求,減少了調優(yōu)大型語言模型的計算成本和內存需求。另一方面,ReFT方法受到最近語言模型可解釋性研究的啟發(fā),該研究表明,在這些模型學習的表示中編碼了豐富的語義信息。ReFT的目標是利用和利用這些編碼的知識來更有效地適應模型。
4.參數效率
PEFT和ReFT方法都是為了參數效率而設計的,但ReFT方法在實踐中證明了更高的參數效率。例如LoReFT(低秩線性子空間ReFT)方法通常需要訓練的參數比最先進的PEFT方法(LoRA)少10-50倍,同時在各種NLP基準測試中獲得具有競爭力或更好的性能。
5、可解釋性
雖然PEFT方法主要側重于有效的適應,但ReFT方法在可解釋性方面提供了額外的優(yōu)勢。通過干預已知編碼特定語義信息的表示,ReFT方法可以深入了解語言模型如何處理和理解語言,從而可能導致更透明和值得信賴的人工智能系統(tǒng)。
ReFT架構
ReFT模型體系結構定義了干預的一般概念,這基本上意味著在模型向前傳遞期間對隱藏表示的修改。我們首先考慮一個基于transformer的語言模型,該模型生成標記序列的上下文化表示。
給定一個n個輸入令牌序列x = (x?,…,xn),模型首先將其嵌入到一個表示列表中,就h?,…,hn。然后m層連續(xù)計算第j個隱藏表示,每一個隱藏的表示都是一個向量h∈λ,其中d是表示的維數。

ReFT定義了一個干預的概念,它在模型向前傳遞期間修改隱藏的表示。
干預I是一個元組?Φ, P, L?,它封裝了由基于transformer的LM計算的表示的單個推理時間的干預動作,這個函數包含了三個參數:
干預函數Φ:用學習到的參數Φ (Φ)來表示。
干預所應用的一組輸入位置P≤{1,…,n}。
對層L∈{1,…,m}進行干預。
然后,干預的動作如下:
h??? ← (Φ(h_p???) if p ∈ P else h_p???)_{p∈1,…,n}該干預在前向傳播計算完后立即進行,所以會影響到后續(xù)層中計算的表示。
為了提高計算的效率,也可以將干預的權重進行低秩分解,也就是得到了低秩線性子空間ReFT (LoReFT)。

在上面的公式中使用學習到的投影源Rs = Wh +b。LoReFT編輯R列的R維子空間中的表示,來或取從我們的線性投影Wh +b中獲得的值。
對于生成任務,ReFT論文使用語言建模的訓練目標,重點是在所有輸出位置上使用最小化交叉熵損失。
pyreft庫代碼示例
斯坦福大學的研究人員在發(fā)布論文的同時還發(fā)布了pyreft庫,這是一個建立在pyvene之上用于在任意PyTorch模型上執(zhí)行和訓練激活干預的庫。
pyreft可以兼容HuggingFace上可用的任何預訓練語言模型,并且可以使用ReFT方法進行微調。以下是如何將lama- 27b模型的第19層輸出進行單一干預的代碼示例:
import torch
 import transformers
 from pyreft import (
     get_reft_model,
     ReftConfig,
     LoreftIntervention,
     ReftTrainerForCausalLM
 )
 # Loading HuggingFace model
 model_name_or_path = "yahma/llama-7b-hf"
 model = transformers.AutoModelForCausalLM.from_pretrained(
     model_name_or_path, torch_dtype=torch.bfloat16, device_map="cuda"
 )
 # Wrap the model with rank-1 constant reFT
 reft_config = ReftConfig(
     representations={
         "layer": 19,
         "component": "block_output",
         "intervention": LoreftIntervention(
             embed_dim=model.config.hidden_size, low_rank_dimension=1
        ),
    }
 )
 reft_model = get_reft_model(model, reft_config)
 reft_model.print_trainable_parameters()剩下的代碼就和HuggingFace訓練模型沒有任何的區(qū)別了,我們來做一個完整的演示:
from pyreft import (
     ReftTrainerForCausalLM,
     make_last_position_supervised_data_module
 )
 tokenizer = transformers.AutoTokenizer.from_pretrained(
     model_name_or_path, model_max_length=2048, padding_side="right", use_fast=False)
 tokenizer.pad_token = tokenizer.unk_token
 
 # get training data to train our intervention to remember the following sequence
 memo_sequence = """
 Welcome to the Natural Language Processing Group at Stanford University!
 We are a passionate, inclusive group of students and faculty, postdocs
 and research engineers, who work together on algorithms that allow computers
 to process, generate, and understand human languages. Our interests are very
 broad, including basic scientific research on computational linguistics,
 machine learning, practical applications of human language technology,
 and interdisciplinary work in computational social science and cognitive
 science. We also develop a wide variety of educational materials
 on NLP and many tools for the community to use, including the Stanza
 toolkit which processes text in over 60 human languages.
 """
 data_module = make_last_position_supervised_data_module(
     tokenizer=tokenizer,
     model=model,
     inputs=["GO->"],
     outputs=[memo_sequence])
 
 # train
 training_args = transformers.TrainingArguments(
     num_train_epochs=1000.0,
     output_dir="./tmp",
     learning_rate=2e-3,
     logging_steps=50)
 trainer = ReftTrainerForCausalLM(
     model=reft_model, tokenizer=tokenizer,
     args=training_args, **data_module)
 _ = trainer.train()一旦完成訓練,就可以檢查模型信息:
prompt = tokenizer("GO->", return_tensors="pt").to("cuda")
 base_unit_location = prompt["input_ids"].shape[-1] - 1  # last position
 _, reft_response = reft_model.generate(
     prompt, unit_locations={"sources->base": (None, [[[base_unit_location]]])},
     intervene_on_prompt=True, max_new_tokens=512, do_sample=False, 
     eos_token_id=tokenizer.eos_token_id, early_stopping=True
 )
 print(tokenizer.decode(reft_response[0], skip_special_tokens=True))LoReFT的性能測試
最后我們來看看它在各種NLP基準測試中的卓越表現,以下是斯坦福大學的研究人員展示的數據。

LoReFT在8個具有挑戰(zhàn)性的數據集上獲得了最先進的性能,包括BoolQ、PIQA、SIQA、HellaSwag、WinoGrande、ARC-e、ARC-c和OBQA。盡管使用的參數比現有的PEFT方法少得多(少10-50倍),但LoReFT的性能還是大大超過了所有其他方法,展示了它有效捕獲和利用大型語言模型中編碼的常識性知識的能力。

雖然LoReFT在數學推理任務上沒有超過現有的PEFT方法,但它在AQuA、GSM8K、MAWPS和SVAMP等數據集上展示了具有競爭力的性能。研究人員指出LoReFT的性能隨著模型尺寸的增大而提高,這表明它的能力隨著語言模型的不斷增長而擴大。

在指令遵循領域,LoReFT取得了顯著的結果,在Alpaca-Eval v1.0基準測試上優(yōu)于所有的微調方法,包括完全微調(這個要注重說明)。當在llama - 27b模型上訓練時,LoReFT的比GPT-3.5 Turbo模型的還要好1%,同時使用的參數比其他PEFT方法少得多。

LoReFT還展示了其在自然語言理解任務中的能力,當應用于RoBERTa-base和RoBERTa-large模型時,在GLUE基準測試中實現了與現有PEFT方法相當的性能。
當在參數數量上與之前最有效的PEFT方法相匹配時,LoReFT在各種任務中獲得了相似的分數,包括情感分析和自然語言推理。

總結
ReFT特別是LoReFT的成功,對自然語言處理的未來和大型語言模型的實際應用具有重要意義。ReFT的參數效率使其成為一種使大型語言模型適應特定的任務或領域,同時最大限度地減少計算資源和訓練時間的有效的解決方案。
并且ReFT還提供了一個獨特的視角來增強大型語言模型的可解釋性。在常識推理、算術推理和指令遵循等任務中的成功表明該方法的有效性。目前來看ReFT有望開啟新的可能性,克服傳統(tǒng)調優(yōu)方法的局限性。















 
 
 


















 
 
 
 