PEFT 文件

IA3

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

IA3

本概念指南簡要概述了 IA3,這是一種旨在改進 LoRA 的引數高效微調技術。

為了使微調更高效,IA3(透過抑制和放大內部啟用來注入介面卡)透過學習的向量來重新縮放內部啟用。這些學習的向量被注入到典型的基於 Transformer 架構的注意力和前饋模組中。在微調過程中,這些學習的向量是唯一可訓練的引數,因此原始權重保持凍結。與 LoRA 那樣處理權重矩陣的學習的低秩更新不同,處理學習的向量使得可訓練引數的數量要小得多。

與 LoRA 類似,IA3 具有許多相同的優點:

  • IA3 透過大幅減少可訓練引數的數量,使微調更加高效。(對於 T0 模型,IA3 模型只有約 0.01% 的可訓練引數,而即使是 LoRA 也有超過 0.1% 的可訓練引數)。
  • 原始的預訓練權重保持凍結,這意味著你可以有多個輕量級且便攜的 IA3 模型,用於在其之上構建的各種下游任務。
  • 使用 IA3 微調的模型的效能與完全微調的模型的效能相當。
  • IA3 不會增加任何推理延遲,因為介面卡權重可以與基礎模型合併。

原則上,IA3 可以應用於神經網路中任何權重矩陣的子集,以減少可訓練引數的數量。根據作者的實現,IA3 權重被新增到 Transformer 模型的鍵、值和前饋層中。具體來說,對於 Transformer 模型,IA3 權重被新增到鍵和值層的輸出,以及每個 Transformer 塊中第二個前饋層的輸入。

給定注入 IA3 引數的目標層,可以根據權重矩陣的大小來確定可訓練引數的數量。

PEFT 中常見的 IA3 引數

與 PEFT 支援的其他方法一樣,要使用 IA3 微調模型,你需要:

  1. 例項化一個基礎模型。
  2. 建立一個配置(IA3Config),在其中定義 IA3 特定的引數。
  3. 使用 get_peft_model() 包裝基礎模型,以獲得一個可訓練的 PeftModel
  4. 像平常訓練基礎模型一樣訓練 PeftModel

IA3Config 允許您透過以下引數控制如何將 IA3 應用於基礎模型:

  • target_modules:要應用 IA3 向量的模組(例如,注意力塊)。
  • feedforward_modules:在 target_modules 中被視作前饋層的模組列表。對於注意力塊,學習的向量與輸出啟用相乘,而對於經典的前饋層,向量與輸入相乘。請注意,feedforward_modules 必須是 target_modules 的子集。
  • modules_to_save:除了 IA3 層之外,需要設定為可訓練並在最終檢查點中儲存的模組列表。這些通常包括為微調任務隨機初始化的模型的自定義頭部。

用法示例

對於序列分類任務,可以如下為 Llama 模型初始化 IA3 配置:

peft_config = IA3Config(
    task_type=TaskType.SEQ_CLS, target_modules=["k_proj", "v_proj", "down_proj"], feedforward_modules=["down_proj"]
)
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.