一行代碼提高大模型10%性能,開發者:免費午餐

原文來源:量子位

圖片來源:由無界AI生成

大模型微調有「免費的午餐」了,只要一行代碼就能讓性能提升至少10%。

在7B參數量的Llama 2上甚至出現了性能翻倍的結果,Mistral也有四分之一的增長。

雖然這種方法用在監督微調階段,但RLHF模型也能從中受益。

来自马里兰州大学、纽约大学等机构的研究人员提出了名为NEFT(une) 的微調方式。

這是一種新的正則化技術,可以用於提高微調監督(SFT)模型的性能。

這種方法已經被HuggingFace收錄進了TRL庫,只要import再加一行代碼就能調用。

NEFT不僅操作簡便,而且沒有顯著的成本增加,作者稱看起來是個“免費的午餐”。

有網友試著用這種方法微調了基於Guanaco(一種羊駝家族模型)的Mistral-7B,結果性能提升明顯。

那麼,NEFTune是如何用一行代碼給一眾大模型「打雞血」的呢?

向模型中加入雜訊

NEFTune的全稱是Noisy Embedding Fine Tuning,即“帶雜訊的嵌入式微調”。

開發者認為,過擬合現象是限制大模型性能的一大因素,因此採用在訓練階段向嵌入層中加入雜訊的方式來避免過擬合的出現,從而提高性能。

具體而言,訓練資料庫中的文本首先會被token化,並轉化為嵌入向量。

然後,系統會隨機生成一個雜訊向量,並用縮放器將雜訊調節成所設置的強度。

經過縮放后的雜訊會加入到嵌入向量中,作為模型的輸入,然後開始訓練。

每次反覆運算訓練時,都會生成新的雜訊並加入到嵌入層中。

從火炬.nn導入功能為F

def NEFTune(model, noise_alpha=5) def noised_embed(orig_embed, noise_alpha): 定義 new_func(x): 如果模型訓練: embed_init = orig_embed(x) dims = torch.tensor(embed_init.size(1) * embed_init.size(2)) mag_norm = noise_alpha/torch.sqrt(dims) 傳回embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm) 還: 傳回orig_embed(x) 返回new_func model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha) 返回模型

這段代碼中,NEFTune函數中的形參noise_alpha就是雜訊強度(係數),mag_norm則為實際過程中的雜訊範圍。

而NEFT只有在訓練過程中才會向模型中加入雜訊,推理階段無此過程,代碼中的if語句起到的就是這個作用。

訓練模式下,new_func函數的返回值即為加入雜訊后的嵌入層。

貼出這段代碼是為了講解需要,如果只是想調用NEFT,可以不必使用上面的完整代碼,直接從TRL庫中調用就可以了。

下面的代碼是微調OPT-350M模型的一個示例:

從數據集導入load_dataset 從 trl 進口 SFTTrainer

數據集 = load_dataset(“IMDb”, split=“train”)

培訓師 = SFTTrainer( “Facebook/OPT-350M”, train_dataset=數據集, dataset_text_field=「文本」, max_seq_length=512, ) trainer.train()

而數據集方面,開發者一共使用了Alpaca、ShareGPT等四種不同數據集進行了微調。

作者介紹,選擇這些數據的原因包括它們比較著名、曾成為SOTA等等。

此外出於硬體性能考慮,實驗過程中所選擇的都是單輪對話數據集。

那麼,用NEFT方法調校過後的大模型,表現到底怎麼樣呢?

性能最高提升1倍

研究團隊主要測試了模型調校前後生成的文本質量和對話能力。

其中文本品質主要基於Aplaca數據集,使用ChatGPT和GPT-4評估。

用作參照的模型是Text-Davinci-003,訓練后的模型勝過TD3的比例即為評價指標。

為了節約資源,研究團隊先用ChatGPT判斷是自己來評價還是調用GPT-4,部分情況下還會人工評判。

結果在不同的訓練數據集中,Llama 2調整后都有至少10%的性能提升,在Alpaca數據集上更是直接翻倍。

推廣到OPT和Llama 1,NEFT方法同樣可以帶來一定的性能提升。

而用於評估模型聊天能力的,則是OpenLLM Leadorboard中的任務。

結果發現,NEFT調整后模型的聊天能力同樣相比Evol-Instruct有進一步提升。

在成本沒有顯著增加的情況下,提高文本品質和聊天能力,是否會導致其他能力的下降,作者對此也進行了評估。

結果顯示,NEFT方法在不同的數據集和模型上,對模型的其他能力均沒有顯著影響。

實驗過程中,作者還發現,模型生成的文本和並不是照搬訓練數據,提示了模型具有一定泛化能力。

為了證實這一點,作者對模型損失進行了評估,結果發現測試數據集損失低於訓練數據,證實了這一觀點。

此外作者發現,經NEFT調整之後,模型生成的文本不僅品質提高,長度也有所增加,而且增加的並非重複內容。

為了確認文本品質的提高是加入雜訊的作用而不是由文本長度的增加所導致,研究人員又進行了消融實驗。

結果顯示,只是強制模型生成更長的文本無法達到NEFT的效果。

論文位址:

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 留言
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)