PEFT documentation
DEFT: Tinh chỉnh hiệu quả phân rã cho các mô hình từ văn bản sang hình ảnh
DEFT: Tinh chỉnh hiệu quả phân rã cho các mô hình từ văn bản sang hình ảnh
DEFT (Decompositional Efficient Fine-Tuning) là một phương pháp tinh chỉnh hiệu quả về tham số cho các mô hình từ văn bản sang hình ảnh. Phương pháp này phân tách việc cập nhật ma trận trọng số đóng băng W thành hai thành phần có thể huấn luyện: một phép chiếu loại bỏ không gian con hạng thấp khỏi W, và một phép cập nhật hạng thấp đưa nội dung mới vào không gian con đó. Công thức này được thiết kế để cân bằng giữa việc căn chỉnh với phân phối mục tiêu, học các khái niệm mới từ một vài hình ảnh (cá nhân hóa) và duy trì khả năng tuân theo chỉ dẫn cũng như khả năng chỉnh sửa của mô hình được huấn luyện trước.
Cụ thể, DEFT kết hợp hai thành phần hạng thấp có thể huấn luyện: (1) một phép chiếu lên phần bù của một không gian con hạng thấp được tạo bởi một ma trận hạng thấp, và (2) một bản cập nhật hạng thấp. Ma trận hạng thấp đầu tiên xác định không gian con, trong khi ma trận thứ hai cho phép thích ứng tham số linh hoạt trong không gian con đó.
Khi nào nên sử dụng DEFT: phương pháp này phù hợp nhất để điều chỉnh mô hình cho dữ liệu hoặc khái niệm mới trong khi giữ lại và thậm chí cải thiện khả năng tuân theo chỉ thị của mô hình gốc và hạn chế sự quên các khả năng trước đó ở mức tối thiểu.
Với mỗi lớp đích, DEFT học một hướng chiếu P (hình dạng out_features x r) và một ma trận tiêm R (hình dạng r x in_features). Trọng số hiệu dụng là phép chiếu phần dư
W' = (I - P_proj) @ W + Q_P @ RBộ chiếu P_proj được suy ra từ P theo decomposition_method:
"relu"(mặc định):Q_P = P,P_proj = P @ relu(P).T— một phép chiếu không trực giao."qr":Q_P = qr(P),P_proj = Q_P @ Q_P.T— một phép chiếu trực giao.
Thuật toán (I - P_proj) @ W loại bỏ một không gian con của trọng số được huấn luyện trước, trong khi Q_P @ R tiêm nội dung mới vào đó.
Mặc định (init_weights=True), R được khởi tạo sao cho phép cập nhật là một phép đồng nhất chính xác tại thời điểm khởi tạo
(W' == W), do đó quá trình huấn luyện bắt đầu từ các trọng số được huấn luyện trước và học cách tiêm. Phép cập nhật tương đương với một
delta cộng hạng thấp Q_P @ (R - right.T @ W), được tính toán mà không bao giờ tạo ra ma trận chiếu out x out và có thể được hợp nhất vào các trọng số cơ bản để triển khai mà không cần suy luận.
Đặt para=True sẽ chọn biến thể PaRa (Parameter Rank Reduction): một bản cập nhật chỉ loại bỏ W' = (I - P_proj) @ W, giữ lại đúng hạng mục loại bỏ không gian con và bỏ qua phần tiêm. Chỉ có phép chiếu P được huấn luyện (không có ma trận tiêm R), do đó adapter không phải là phép đồng nhất tại thời điểm khởi tạo. PaRa được giới thiệu để cá nhân hóa các mô hình khuếch tán từ văn bản sang hình ảnh và có sẵn ở đây như một trường hợp đặc biệt của DEFT.
DEFT hiện được triển khai cho các lớp torch.nn.Linear và Conv1D (ví dụ: gpt-2, thông qua fan_in_fan_out). Bản triển khai gốc và các thí nghiệm từ bài báo (Dreambooth, Dreambench Plus, InsDet, VisualCloze, trên Stable Diffusion và một mô hình thống nhất) có sẵn tại github.com/MAXNORM8650/DEFT.
Nếu bạn sử dụng DEFT trong công việc của mình, vui lòng trích dẫn bài báo:
@article{kumar2026deft,
title={DEFT: Decompositional Efficient Fine-Tuning for Text-to-Image Models},
author={Kumar, Komal and Anwer, Rao and Shahbaz Khan, Fahad and Khan, Salman and Laptev, Ivan and Cholakkal, Hisham},
journal={Advances in Neural Information Processing Systems},
volume={38},
pages={102009--102035},
year={2026}
}Nếu bạn sử dụng biến thể PaRa (para=True), vui lòng trích dẫn thêm:
@inproceedings{chen2025personalizing,
title={Para: Personalizing text-to-image diffusion via parameter rank reduction},
author={Chen, Shangyu and Pan, Zizheng and Cai, Jianfei and Phung, Dinh},
booktitle={International Conference on Learning Representations},
year={2025}
}DeftConfig
lớp peft.DeftConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 8target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonedecomposition_method: Literal['relu', 'qr'] = 'relu'init_scale: float = 1.0alpha: Optional[int] = Nonepara: bool = Falsefan_in_fan_out: bool = Falsedeft_dropout: float = 0.0init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = None )
Tham số
- r (
int) — Bậc của phép chiếu/phép tiêm DEFT xuyên suốt các lớp. - target_modules (
Optional[Union[List[str], str]]) — Tên của các module cần áp dụng adapter. Nếu được chỉ định, chỉ các module có tên được chỉ định sẽ được thay thế. Khi truyền một chuỗi, một phép khớp regex sẽ được thực hiện. Khi truyền một danh sách các chuỗi, một phép khớp chính xác sẽ được thực hiện hoặc kiểm tra xem tên của module có kết thúc bằng bất kỳ chuỗi nào được truyền hay không. Nếu được chỉ định là ‘all-linear’, thì tất cả các module linear sẽ được chọn, ngoại trừ lớp output. Nếu không được chỉ định, các module sẽ được chọn theo kiến trúc của model. Nếu kiến trúc không được biết đến, một lỗi sẽ được ném ra — trong trường hợp này, bạn nên chỉ định các module đích một cách thủ công. - exclude_modules (
Optional[Union[List[str], str]]) — Tên của các module không áp dụng adapter. Khi truyền một chuỗi, một phép khớp regex sẽ được thực hiện. Khi truyền một danh sách các chuỗi, một phép khớp chính xác sẽ được thực hiện hoặc kiểm tra xem tên của module có kết thúc bằng bất kỳ chuỗi nào được truyền vào hay không. - decomposition_method (
str) — Cách projectorP_projđược suy ra từP. Hoặc là"relu"(mặc định,P @ relu(P).Tkhông trực giao) hoặc là"qr"(Q_P @ Q_P.Ttrực giao). - init_scale (
float) — Hệ số tỷ lệ áp dụng cho độ lệch chuẩn được dùng để khởi tạo ma trận tiêmR(chỉ được sử dụng khiinit_weights=False). Các giá trị nhỏ hơn sẽ giữ cho bản cập nhật được tiêm gần với không hơn tại thời điểm khởi tạo. Mặc định là1.0. - alpha (
Optional[int]) — Hệ số tỷ lệ cho thành phần tiêm, được nhân vớialpha / r(tương tự như alpha của LoRA). NếuNone, không áp dụng tỷ lệ (hệ số1.0). Thành phần loại bỏ không gian con không bị ảnh hưởng. - para (
bool) — Có sử dụng phương pháp PaRa hay không: loại bỏ không gian con thuần túy (delta = -P_proj @ W) mà không có số hạng tiêm. KhiTrue,Rkhông được tạo ra,Plà ma trận có thể huấn luyện duy nhất, và adapter không thể là ma trận đồng nhất tại khởi tạo. Mặc định làFalse(DEFT đầy đủ). - fan_in_fan_out (
bool) — Đặt giá trị này thànhTruenếu lớp cần thay thế lưu trọng số theo dạng (fan_in, fan_out). Ví dụ, gpt-2 sử dụngConv1Dlưu trọng số theo dạng (fan_in, fan_out) do đó giá trị này nên được đặt thànhTrue. - deft_dropout (
float) — Xác suất dropout được áp dụng cho đầu vào của lớp. Mặc định là0.0. - init_weights (
bool) — Có sử dụng khởi tạo mặc định (đồng nhất) của DEFT cho trọng số adapter hay không, để adapter không có tác dụng vào đầu quá trình huấn luyện. Không thay đổi cài đặt này, trừ khi bạn biết chính xác mình đang làm gì. Mặc định làTrue. - layers_to_transform (
Union[List[int], int]) — Các chỉ số lớp cần biến đổi. Nếu truyền vào một danh sách các số nguyên, adapter sẽ được áp dụng cho các chỉ số lớp được chỉ định trong danh sách này. Nếu truyền vào một số nguyên duy nhất, các phép biến đổi sẽ được áp dụng cho lớp tại chỉ số này. - layers_pattern (
Optional[Union[List[str], str]]) — Tên mẫu lớp, chỉ được sử dụng nếulayers_to_transformkhácNone. Giá trị này cần nhắm đếnnn.ModuleListcủa mô hình, thường được gọi là'layers'hoặc'h'. - bias (
str) — Bias type for DEFT. Can be'none','all'or'deft_only'. - modules_to_save (
List[str]) — Danh sách các module ngoài các lớp adapter cần được đặt là có thể huấn luyện và lưu trong checkpoint cuối cùng.
Đây là lớp cấu hình để lưu trữ cấu hình của một DeftModel.
DEFT (Decompositional Efficient Fine-Tuning) thực hiện tiêm kiến thức thông qua cập nhật residual-projection. Đối với trọng lượng cơ sở đóng băng W, một hướng chiếu hạng thấp P (hình dạng out_features x r) và một ma trận tiêm R (hình dạng r x in_features) được học. Trọng lượng đã thích ứng là W' = (I - P_proj) @ W + Q_P @ R, trong đó bộ chiếu P_proj được suy ra từ P theo decomposition_method:
"relu"(mặc định):Q_P = P,P_proj = P @ relu(P).T(chiếu không trực giao)"qr":Q_P = qr(P),P_proj = Q_P @ Q_P.T(chiếu trực giao)
Mặc định (init_weights=True), R được khởi tạo sao cho phép cập nhật là một phép đồng nhất chính xác tại thời điểm khởi tạo (trọng số thích ứng bằng W), do đó quá trình huấn luyện bắt đầu từ các trọng số được huấn luyện trước và học cách tiêm.
DeftModel
lớp peft.DeftModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module
Tham số
- model (
torch.nn.Module) — Mô hình mà các lớp adapter tuner sẽ được gắn vào. - config (DeftConfig) — Cấu hình của mô hình DEFT.
- adapter_name (
str) — Tên của adapter, mặc định là"default". - low_cpu_mem_usage (
bool,optional, mặc định làFalse) — Tạo trọng số adapter rỗng trên thiết bị meta. Hữu ích để tăng tốc quá trình tải.
Trả về
torch.nn.Module
Mô hình DEFT.
Tạo một mô hình DEFT (Decompositional Efficient Fine-Tuning) từ một mô hình được huấn luyện trước.
DEFT đóng băng các trọng số cơ sở và học, cho mỗi module đích, một hướng chiếu hạng thấp P và một ma trận tiêm R. Trọng số hiệu dụng trở thành (I - P_proj) @ W + Q_P @ R, thay thế một không gian con của W bằng nội dung mới được tiêm (xem DeftConfig cho các biến thể decomposition_method khả dụng).
Thuộc tính:
- model (
~torch.nn.Module) — Mô hình cần được thích ứng. - peft_config (DeftConfig): Cấu hình của mô hình DEFT.