選自interconnects
作者:NATHAN LAMBERT
機器之心編譯
編輯:rome
上周,Meta 發布了免費可商用的開源大模型 Llama 2,來自 Huggingface 的機器學習科學家 Nathan Lambert 根據論文內容迅速寫了一篇分析文章來梳理 Llama 2 的技術要點,現在他又寫了一篇后續文章來補充內容,以下是文章原文。
有用 VS 無害
有人發現,Llama-2-chat 在安全過濾器方面表現出一些過于敏感的行為。即使是詢問一些無害的事情,比如「如何制作辣椒蛋黃醬」或「如何終止一個進程」,結果會導致該模型瘋狂地表示它無法做到,如下圖所示:
對于這種現象,一種常見的理論解釋是使用 RLHF(Reinforcement Learning from Human Feedback)方法太久導致的,這也揭示了大型語言模型領域的趨勢。在 RLHF 中,訓練期間使用的主要性能指標是偏好模型(preference model)中獎勵的單調增加。這就存在兩個問題:a)訓練時使用的獎勵模型是不完整的。b)忽視了對中間訓練技巧的有效評估。
只要我們訓練的獎勵模型在驗證集上只能達到 65-75% 的準確率,模型就會因為過長時間的 RLHF 而出現這種情況。當模型對于獎勵模型采取過多優化步驟時,它會過于偏向該獎勵模型喜歡的行為,如果對模型進行更全面的評估可能會得出不同的結論。
目前還沒有一個有效且全面的解決方案,但是本文作者的團隊正在嘗試在 RL 訓練的每個 epoch 中使用 MT Bench 和其他自動的 NLP 評估方法。目前,至少在對話模型領域,LLM 的訓練與用戶期望非常不匹配。
Meta 的評估顯示,對話模型可能有兩個潛在的致命弱點:
1、該模型據會拒絕回答高達 27%的邊緣問題,這與初創公司 Anthropic 的研究緊密相關。Anthropic 提出一種方案:首先開發出一個有用的語言模型,然后再讓這個語言模型無害,因為同時進行這兩項工作會導致模型出現「回避行為」。Meta 應該正在想辦法解決這個問題。
這種「有用性 VS 無害性」之間的權衡是開源社區面臨的根本問題。如下圖(右)所示,模型在「邊緣數據集」上拒絕回答的情況驟增。
2、獎勵模型集成方法還有一個重要問題 —— 在有些情況下會出現高度分歧 —— 例如,有用性很強、安全性很低時應該怎么做,反之亦然,如下圖所示:
顯然,這種集成方法雖然是一個很棒的技術創新,但還需要進一步改進。
如今,在人工智能領域,「公開(public)」這個概念被極度濫用,網絡上的信息和數據被視為公開的,但事實卻并非如此。Meta 無法明確地說明他們是否涉嫌侵犯了版權或服務條款,但毫無疑問的是,Meta 在訪問數據和文檔方面還有很大的改進空間。
推理與微調
現在有很多方法可以讓 7b 或 13b 的大模型在 GPU 上運行,并且將很快就可以在 iphone 上運行。
但 70b 的更大模型要復雜一些。有研究表明 70b 的模型在加載 4 位量化的情況下會使用 36-38GB 的 VRAM。如果將量化增加到 8 位(float16),內存預計會相應地增加。而在任何單個 GPU 上使用完整的、非量化模型會非常困難。
在文本生成推理方面,HuggingFace 提供了如下 GPU 建議:
對于 7B 模型,建議選擇 "GPU [medium] - 1x Nvidia A10G";
對于 13B 模型,建議選擇 "GPU [xlarge] - 1x Nvidia A100";
對于 70B 模型,建議選擇 "GPU [xxxlarge] - 8x Nvidia A100"。
HuggingFace 社區成員重新編寫了 HuggingFace Transformers 的部分代碼,使其對 Llama 模型更加節省內存、更快速,并支持使用 RoPE 方法擴展上下文長度。
具體來說,這種改進使 Llama 2 70B 模型在序列長度是 4096 時推理速度約為 10.5 tokens / 秒,并且沒有出現內存溢出的情況。同時,序列長度為 8192 時,推理速度為每秒 8 tokens / 秒,仍然沒有內存溢出。
在微調方面,使用 TRL 庫(Transformer Reinforcement Learning)就可以很容易地運行有監督的微調,你可以在 T4 GPU 上訓練 Llama 2 7B 模型,甚至可以在單個 A100 GPU 上訓練 70B 模型。這說明這種技術是相當容易實現的,大多數消費級 GPU 都可以用于微調 7B 或 13B 的模型變體。值得注意的是,RLHF 方法需要在內存中存儲更多的梯度計算。
然而,Open LLM 排行榜的榜首仍然是從 LLaMA v1 微調出來的模型,為什么會這樣?
有些討論表明,這似乎是因為排行榜上缺乏足夠多的評估類型(即將進行更改),在評估集上或類似的數據集上微調模型很容易獲得更高的性能。隨著時間的推移,使用相同數據集微調 Llama 2 得到的模型幾乎肯定會性能更好。
此外,Llama 2 還有一些值得關注的方面,包括:
工具的應用:Llama 2-Chat 僅通過語義就能夠理解工具的應用和 API 參數,盡管其從未接受過使用工具的訓練。將 LLM 用作工具具有極大的潛力。為了推動其發展,我們需要一些標準的評估環境。
Prompt 方面的問題:prompt 可能是導致回避行為的問題所在。Llama 2 的 prompt 是個需要持續關注的問題,因為根據 LLaMA v1 的評估結果,prompt 是導致不一致結果的重要因素。
代碼生成:Llama 2 在代碼生成方面不夠好,很多人表示他們更愿意使用 ChatGPT。關于這一點,Yann Lecun 暗示 Meta 可能會再發布一個版本。
有趣的商業許可:Meta 的許可規定,在發布時擁有超過 7 億活躍用戶的公司不能商業化使用該模型。
Ghost 注意力
許多語言模型都存在一個問題:你在第一輪告訴它做某事(例如「用海盜的風格回答」,那么經過一兩輪對話后模型就會忘記這個要求。
Meta 在論文中解釋了這種多輪指令的要求:
在對話設置中,有些指令應該適用于所有對話輪次,例如簡潔地回答,或者「扮演」某個角色。
為了讓 Llama 2 有效地遵循多輪指令,Meta 提出了 Ghost Attention(GAtt),這是一種類似于上下文蒸餾的新方法。GAtt 并不是必須實現的步驟,但它確實能讓語言模型更好地遵循多輪指令。
RLHF 的一些細節
RS
訓練過程:Llama 2 使用的損失函數實際上并不是那么清楚。在 Meta 的論文中,他們說使用了迭代式訓練,因此實際結果與 PPO(Proximal Policy Optimization)并沒有太大的區別,但他們并未對損失函數進行詳細說明。這有點讓人難以理解,該研究幾乎肯定是在高獎勵樣本上使用了 LLM 的標準自回歸預測損失,而這對結果有很大影響。
研究團隊觀察到拒絕采樣(RS)重新訓練樣本會導致模型能力退化。為了解決這個問題,他們重新引入了過去版本中的高分樣本,改善了模型性能。這是 RLHF 方法中常見的對獎勵模型過擬合的一種形式。
所有較小的對話模型都是在大模型的數據上進行訓練的,ChatGPT 很可能也是這樣訓練的。這是因為科技公司希望充分利用其最大和最優模型的出色推理能力,將其優勢延續下去。
在采樣過程中,他們使用高溫度(high temperature)參數來獲得多樣化的輸出,并增加批量樣本的最大獎勵。
必須根據模型和批量大?。╞atch size)逐漸調整溫度參數。Llama 2 的論文中有很多關于溫度參數的內容,不太清楚有多少是針對特定情況的。
你可以參考如下項目的內容來更好地理解 Llama 2 模型:
項目地址:
https://Github.com/lvwerra/trl/blob/mAIn/examples/notebooks/best_of_n.ipynb
PPO
在 Llama 2 中,PPO 的實現包含很多罕見的技巧,并繼續簡化了 RLHF 方法,包括:
使用了 InstructGPT 中提出的 SFT 約束項,通過在損失函數中添加額外的項來比較人類注釋者編寫的文本與模型生成結果之間的距離,以保持模型分布接近人類書寫示例。
使用來自偏好集合的安全 tag,將生成結果傳遞給安全性偏好模型。這種方法很可能在未來會應用到更多的模型中,也有可能 GPT-4 模型已經使用了該方法。
對最后的線性層得分進行白化(whiten)處理以穩定訓練。本質上講,Llama 2 的研究創建了一個不同的線性層,幫助梯度在獎勵模型中表現得更好。這是一個有趣的技巧。
以上就是 Nathan Lambert 關于 Llama 2 的第二篇分析文章的主要內容。