PEFT documentation

Kết nối khoảng cách giữa thích ứng hạng thấp và thích ứng trực giao thông qua Thích ứng Phản xạ Householder (HRA)

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Kết nối khoảng cách giữa thích ứng hạng thấp và thích ứng trực giao thông qua Thích ứng Phản xạ Householder (HRA)

Bridging The Gap between Low-rank and Orthogonal Adaptation via Householder Reflection Adaptation

HRA mang đến một góc nhìn mới kết nối LoRA với OFT, cho phép khai thác lợi thế của cả hai chiến lược bằng cách sử dụng Householder reflections để giảm số lượng tham số và chi phí tính toán, đồng thời hạn chế sự mất mát kiến thức từ quá trình huấn luyện trước. Phương pháp này liên tục đạt hiệu suất tốt hơn với ít tham số có thể huấn luyện hơn và vượt trội so với các adapter tiên tiến nhất trên nhiều mô hình khác nhau, bao gồm các mô hình ngôn ngữ lớn (LLM) và bộ tạo ảnh có điều kiện.

HRA xây dựng một chuỗi gồm r các phản xạ Householder (HR) có thể huấn luyện. Vì ma trận phản xạ Householder là một ma trận trực giao và tích của các ma trận trực giao cũng là một ma trận trực giao, HRA đáp ứng bảo đảm lý thuyết của Orthogonal Finetuning (OFT). Đồng thời, HRA cũng có thể được xem là một adapter fine-tuning hạng thấp. r, càng lớn, số tham số có thể huấn luyện càng nhiều, dẫn đến dung lượng mô hình lớn hơn và hiệu suất tốt hơn. Ngoài ra, do cấu trúc chuỗi, tính trực giao của các mặt phẳng HR ảnh hưởng đến dung lượng và tính quy tắc của HRA. Để đạt được sự cân bằng giữa dung lượng mô hình và tính quy tắc, một bộ điều hòa trực giao của các mặt phẳng HR được thêm vào hàm mất mát. Trọng sốλ\lambda có thể kiểm soát cường độ của bộ điều hòa.

Tóm tắt từ bài báo là:

Mặc dù đi theo các lộ trình kỹ thuật khác nhau, cả hai kỹ thuật thích ứng bậc thấp và thích ứng trực giao đều có thể thích ứng hiệu quả các mô hình tiền huấn luyện quy mô lớn cho các tác vụ hoặc lĩnh vực cụ thể dựa trên một lượng nhỏ tham số có thể huấn luyện. Trong nghiên cứu này, chúng tôi lấp đầy khoảng cách giữa hai kỹ thuật này, đề xuất một phương pháp thích ứng đơn giản nhưng hiệu quả dựa trên phản xạ Householder. Với một mô hình đã được tiền huấn luyện, phương pháp của chúng tôi tinh chỉnh các lớp của nó bằng cách nhân mỗi ma trận trọng số đóng băng với một ma trận trực giao được xây dựng từ một chuỗi các phản xạ Householder (HR) có thể học được. Việc tinh chỉnh trực giao dựa trên HR này tương đương với một thích ứng bậc thấp thích ứng. Hơn nữa, chúng tôi chỉ ra rằng tính trực giao của các mặt phẳng phản xạ tương ứng với các HR ảnh hưởng đến sức chứa và tính quy tắc của mô hình. Phân tích này thúc đẩy chúng tôi chuẩn hóa tính trực giao của các HR, dẫn đến các cách triển khai khác nhau của phương pháp thích ứng phản xạ Householder (HRA) được đề xuất. So với các phương pháp tiên tiến, HRA đạt được hiệu suất vượt trội với ít tham số có thể học hơn khi thích ứng các mô hình ngôn ngữ lớn và các bộ tạo ảnh có điều kiện. Mã nguồn có sẵn tại peft và HRA.

API

HRAConfig

lớp peft.HRAConfig

< >

( 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 = 8apply_GS: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Noneinit_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) — Rank của HRA giữa các lớp khác nhau. Tốt nhất nên đặt ‘r’ là một số chẵn; nếu không, phương pháp khởi tạo mặc định sẽ không hoạt động.
  • apply_GS (bool) — Có áp dụng trực giao hóa Gram-Schmidt hay không.
  • 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.
  • init_weights (bool) — Có thực hiện khởi tạo trọng số HRA hay không.
  • 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ếu layers_to_transform khác None. Giá trị này cần nhắm đến nn.ModuleList của mô hình, thường được gọi là 'layers' hoặc 'h'.
  • bias (str) — Bias type for HRA. Can be 'none', 'all' or 'hra_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 HRAModel.

HRAModel

lớp peft.HRAModel

< >

( 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 (HRAConfig) — Cấu hình của mô hình HRA.
  • 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 HRA.

Tạo mô hình thích ứng phản xạ Householder (HRA) từ một mô hình được huấn luyện trước. Phương pháp này được mô tả tại https://huggingface.co/papers/2405.17484

Ví dụ:

>>> from diffusers import StableDiffusionPipeline
>>> from peft import HRAConfig, get_peft_model

>>> config_te = HRAConfig(
...     r=8,
...     target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
...     init_weights=True,
... )
>>> config_unet = HRAConfig(
...     r=8,
...     target_modules=[
...         "proj_in",
...         "proj_out",
...         "to_k",
...         "to_q",
...         "to_v",
...         "to_out.0",
...         "ff.net.0.proj",
...         "ff.net.2",
...     ],
...     init_weights=True,
... )

>>> model = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
>>> model.text_encoder = get_peft_model(model.text_encoder, config_te)
>>> model.unet = get_peft_model(model.unet, config_unet)

Thuộc tính:

  • model (~torch.nn.Module) — Mô hình cần được thích ứng.
  • peft_config (HRAConfig): Cấu hình của mô hình HRA.
Update on GitHub