第三代 Llama 模型提供了微調(Instruct)版本,在理解和遵循指令方面表現出色。然而,這些模型受到嚴格審查,旨在拒絕被視為有害的請求,並做出“作為人工智慧助手,我無法幫助你”之類的回應。雖然這一安全功能對於防止濫用至關重要,但它限制了模型的靈活性和響應能力。
在本文中,我們將探討一種名為“消除abliteration”的技術,該技術可以取消任何 LLM 的審查,而無需重新訓練。該技術有效地消除了模型內建的拒絕機制,使其能夠響應所有型別的提示。
該程式碼可在 Google Colab 和 GitHub 上的LLM 課程中找到 。
什麼是消除abliteration?
現代 LLM 針對安全性和指令遵循進行了微調,這意味著它們經過訓練可以拒絕有害請求。Arditi 等人在他們的部落格文章中表明,這種拒絕行為是由模型殘差流中的特定方向介導的。
- 如果我們阻止模型表示這個特定方向,它就會失去拒絕請求的能力。
- 人為地新增這個特定方向可能會導致模型拒絕甚至無害的請求。
在傳統的僅使用解碼器的 Llama 類架構中,我們可以定位三個殘差流:每個塊的開頭(“pre”)、注意力層和 MLP 層之間(“mid”)以及 MLP 之後(“post”)。
要取消 LLM 的審查,我們首先需要在模型中確定“拒絕方向”。這個過程涉及幾個技術步驟:
- 資料收集:在一組有害指令和一組無害指令上執行模型,記錄每個指令在最後一個標記位置的殘餘流啟用。
- 平均差異:計算有害指令和無害指令的啟用之間的平均差異。這為我們提供了一個表示模型每一層的“拒絕方向”的向量。
- 選擇:對這些向量進行規範化並對其進行評估,以選擇單個最佳的“拒絕方向”。
一旦我們確定了拒絕方向,我們就可以“消除”它,從而有效地消除模型表示此特徵的能力。這可以透過推理時間干預或永久使用權重正交化來實現。
我們先來談談推理時干預。對於寫入殘差流的每個元件(例如注意力頭),我們計算其輸出在拒絕方向上的投影並減去此投影。此減法應用於每個標記和每一層,確保模型永遠不會代表拒絕方向。
另一方面,權重正交化涉及直接修改模型權重。透過使元件權重相對於拒絕方向正交,它可以完全阻止模型向該方向寫入。這是透過調整寫入殘差流的矩陣來實現的,確保它們不會對拒絕方向產生影響。
實施
以下 abliteration 實現基於FailSpy 的筆記本,而該筆記本本身又基於原作者的筆記本。我主要對其進行了改編和簡化,以使其更易於理解。本節包含大量程式碼,因此您可以看到發生了什麼,但如果您對技術細節不太感興趣,則可以使用 FailSpy 的abliterator 庫(也可以檢視他在 Hugging Face 上[url=https://huggingface.co/collections/failspy/abliterated-v3-664a8ad0db255eefa7d0012b]收集的 abliterated 模型[/url])。
該程式碼依靠出色的TransformerLens庫(以前稱為 EasyTransformer)來完成繁重的工作。它專為機械可解釋性而設計,並用於干預啟用。感謝 Neel Nanda 和 Joseph Bloom 建立和維護此庫。
有興趣這點選標題見原文。