Abliterated 模型是如何製成的?簡明解釋簡明解釋簡明解釋
Abliterated 模型是大型語言模型,其中執行安全拒絕的機制已被移除,使模型能夠回答爭議性、成人或利基問題而不觸發內容過濾器。這種方法讓開發者完全控制模型的語氣和知識截止點,對於程式碼編寫、角色扮演和創意寫作特別有價值,因為標準防護措施可能會阻止有用的輸出。
更新

重點摘要
- Abliteration 測量模型內部的拒絕方向,並將其從權重中投影移除。
- 這是一種編輯而非重新訓練,因此成本較低,但可能會稍微降低回答品質。
- 微調透過範例訓練來改變行為;Abliteration 則是透過減去一個方向來改變行為。
- 在建立應用之前,你可以使用短測試集來評估任何此類模型。
簡短版本
經過安全訓練的語言模型傾向於拒絕某些請求。研究人員發現,這種拒絕行為是由模型內部激活中的一個單一方向所介導。移除該方向,模型在大多數時候就不再拒絕。名稱「abliteration」是「ablation」(移除組件)和「obliterate」(消滅)的組合。
那麼,實務上如何製作經過 Abliteration 的模型?共有四個步驟:收集兩組提示詞、記錄模型在每組提示詞上的激活、計算差異以取得方向,並編輯權重,使模型無法沿該方向生成。以下章節將在不涉及複雜數學的情況下逐步說明每個步驟。
步驟 1:兩組提示詞
你需要一組模型通常會拒絕的提示詞,以及一組模型會正常回答的提示詞。每組包含數百個短指令。兩組應在長度和風格上相似,以便它們之間唯一的系統性差異在於模型是否想要拒絕。如果有害組全是長文本,而無害組全是短文本,則產生的方向會部分編碼長度,從而引入雜訊。
這些提示詞僅用於測量輸入。不對它們進行訓練,也不使用模型對它們的回答。
步驟 2:找出拒絕方向
Transformer 將文本處理為通過多層的向量。在選定的層中,記錄兩組提示詞中每個提示詞最後一個 token 的向量。然後計算每組向量的平均值,並將一個平均值從另一個中減去。結果是一個單一向量,指向從「正常回答」到「拒絕」的方向。將其歸一化為長度一,即得到拒絕方向。
人們通常嘗試多個層,並選擇移除方向後在保留提示詞集上效果最好的那一層。選擇層是該過程中最需要手動操作的環節。
import numpy as np
# acts_bad, acts_good: arrays of shape (n_prompts, hidden_size)
direction = acts_bad.mean(axis=0) - acts_good.mean(axis=0)
direction = direction / np.linalg.norm(direction)
# remove the direction from a weight matrix W that writes into the residual stream
W_edited = W - np.outer(direction, direction) @ W
實際實現在每一層應用於多個權重矩陣,但核心概念即為這三行代碼所示。
步驟 3:編輯權重
一旦獲得方向,有兩種使用方式。你可以在模型運行時從激活中減去它,這需要自定義推理代碼。或者,你可以通過將每個寫入殘餘流的矩陣與該方向正交化,將其烘焙到權重中。第二種方法更常見,因為編輯後的模型是普通檢查點,任何運行時均可載入。這就是為什麼經過 Abliteration 的模型會作為常規下載出現的原因。
該編輯是確定性且快速的。在能容納模型的 GPU 上只需幾分鐘,而訓練運行則需要數小時或數天。
Abliteration 與微調
兩者都能產生拒絕較少的模型,但它們的工作方式不同。
| Abliteration | 微調 | |
|---|---|---|
| 變更內容 | 權重從一個方向投影移除 | 權重透過範例的梯度下降進行更新 |
| 所需資料 | 兩組少量提示詞用於測量 | 經過篩選的訓練集 |
| 運算資源 | 幾分鐘到一小時 | 數小時至數天 |
| 副作用 | 可能削弱推理能力或改變語氣 | 取決於資料;可教授新風格或知識 |
| 控制權 | 粗粒度:一個方向開或關 | 細粒度:透過資料塑造行為 |
一些創作者將兩者結合:先進行 Abliteration,然後運行短時間的微調以恢復任何損失的品質。較新的工具也自動化了最佳層和強度的搜尋,以便在最小化改變模型的情況下移除拒絕行為。哪個方法產生了給定模型,通常在其模型說明卡中註明。
品質成本
移除一個方向是一種粗淺的編輯。拒絕方向與其他特徵並非完全分離,因此將其投影出去可能會影響其他行為。報告的副作用包括推理測試表現稍弱、格式怪異,以及在某些情況下,模型以不謹慎的方式回答有害請求,而非提供有用的細節。效果因基礎模型以及編輯應用的激進程度而異。
兩件事可以減少損害。一是選擇在測試集上移除拒絕且在其他地方變化最小的層和強度。二是上述的修復性微調。這兩者都不能使編輯免費,因此你應該在自己的任務上測試模型,而不是信任標籤。
常見迷思
「它會新增知識。」並非如此。該編輯僅移除了某種行為。如果基礎模型不知道某個主題,經過剝離的版本也不會知道。它可能只是嘗試回答原本會拒絕的問題。
「它移除了所有安全設定。」它移除了被測量到的拒絕方向。其他學習到的習慣,例如迴避性用語或道德旁白,可能會保留下來,因為這些習慣分散在其他特徵中。某些模型在編輯後仍會新增免責聲明。
「較大的模型較容易編輯。」結果參差不齊。較大的模型通常因具有更多剩餘容量而在編輯過程中表現更穩定,但你兩組提示詞的品質比原始模型大小更重要。
「模型說明卡會告訴你一切。」說明卡描述意圖。它們很少包含針對你這類提示詞的拒絕率。針對你自己的情境進行 40 個提示詞的測試只需十分鐘,比說明卡提供的資訊更多。
「對於給定的基礎模型,結果總是相同。」 並非如此。不同的提示詞組合、層級和強度會產生不同的編輯,因此基於相同基礎建立的兩個模型可能會表現出相當不同的行為。直接比較它們,而不是假設它們相符,並在記錄測試結果時註明版本。
任何負責任的服務(託管或本地)都有一個限制:涉及未成年人的性內容是不在允許範圍內的,且拒絕編輯不會改變本站的這項規則。
在建立應用前如何評估模型
撰寫一個包含 30 到 50 個提示詞的短測試檔,以符合你的實際用途:例如你計劃產生的小說、分析或程式碼類型。包含一些普通任務,例如摘要或回答事實性問題,以便你觀察整體品質是否下降。將相同的測試檔針對每個候選模型執行並閱讀輸出。計算拒絕次數,但也需閱讀內容的一致性、指令遵循情況和重複性。
如果你不想下載和託管權重來執行此操作,你可以針對託管端點執行該檔案。本站的 API 與 OpenAI 相容,並提供一個開放權重模型,針對合法成人用途調整為不會拒絕內容,模型 ID 為 uncensored:
curl https://api.abliterated.cc/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"uncensored","messages":[{"role":"user","content":"Summarize the plot of Hamlet in three sentences."}]}'
如需更多關於如何選擇的資訊,請閱讀剝離模型的概覽;如果你的目標是角色創作,請參閱關於最佳角色扮演用剝離 LLM的頁面。詳細資訊請見API 文件。新帳號可領取 $0.50 試用額度,無需綁定信用卡,足以運行此大小的測試檔案。
更多指南
問答
剝離需要新的訓練資料嗎?
不需要。它需要兩組小型提示詞來測量激活狀態,但模型並未針對這些資料進行訓練。此變更是對權重的直接編輯。
剝離模型與越獄(jailbreak)相同嗎?
並非如此。越獄是一種提示詞,試圖讓模型停止拒絕。剝離是直接改變模型本身,因此不需要特殊的提示詞。
abliteration 會讓模型變差嗎?
通常會稍微變差。推理分數和風格可能會發生變化。針對特定模型,在你的提示詞上進行測試是唯一可靠的方法。
我可以不自行運行模型來使用它嗎?
可以。託管的 OpenAI 相容 API 讓你可以呼叫模型而無需 GPU。Base URL 為 https://api.abliterated.cc/v1,模型 ID 為 uncensored。
只差一張表單,即可取得金鑰
建立帳號、複製金鑰、更改基礎 URL。這就是整個設定過程。