PEFT documentation
WaveFT: 웨이블릿 파인튜닝
WaveFT: 웨이블릿 파인튜닝
WaveFT는 잔차 행렬의 wavelet domain에서 희소 업데이트를 도입하는 새로운 파라미터 효율적 파인튜닝(PEFT) 방법입니다. 이산 저랭크 선택에 의해 제한되는 LoRA와 달리, WaveFT는 변환된 공간에서 희소 계수 집합을 직접 학습함으로써 학습 가능한 파라미터 수에 대한 세밀한 제어를 가능하게 합니다. 이러한 계수들은 역 이산 웨이블릿 변환(IDWT)을 통해 가중치 영역으로 다시 매핑되어, 추론 오버헤드 없이 고랭크 업데이트를 생성합니다.
WaveFT에는 현재 다음과 같은 제약이 있습니다:
nn.Linear레이어만 지원됩니다.
해당 논문의 초록은 다음과 같습니다:
대형 파운데이션 모델의 효율적인 적응은 특히 컴퓨트와 메모리 예산이 제한적인 상황에서 매우 중요합니다. LoRA와 같은 매개변수 효율적 파인튜닝(PEFT) 방법은 매개변수가 적은 환경에서 제한적인 세분화 수준과 효과성을 보입니다. 우리는 잔차 행렬의 웨이블릿 도메인에서 고도로 희소한 업데이트를 학습하는 새로운 PEFT 방법인 웨이블릿 파인튜닝(WaveFT)을 제안합니다. WaveFT는 학습 가능한 매개변수에 대한 정밀한 제어를 허용하여 세분화된 용량 조정을 제공하며, 매개변수 수가 매우 적은 경우에도 뛰어난 성능을 발휘합니다. 이는 LoRA의 최소 매개변수 수보다 훨씬 적을 수 있어 극단적인 매개변수 효율 시나리오에 이상적입니다. Stable Diffusion XL을 베이스라인으로 사용하여 개인화된 텍스트-이미지 생성을 평가한 결과, WaveFT는 특히 매개변수 수가 낮은 경우 LoRA 및 기타 PEFT 방법보다 현저히 우수한 성능을 보였으며, 우수한 대상 충실도, 프롬프트 정렬 및 이미지 다양성을 달성했습니다.
벤치마크 개요
API
WaveFTConfig
클래스 peft.WaveFTConfig
< 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 = Falsen_frequency: int = 2592scaling: float = 25.0wavelet_family: str = 'db1'use_idwt: bool = Truerandom_loc_seed: int = 777fan_in_fan_out: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonen_frequency_pattern: Optional[dict] = <factory>proportional_parameters: bool = Falseinit_weights: bool = True )
매개변수
- n_frequency (
int) — Discrete Wavelet Transform (DWT)에 사용할 학습 가능한 웨이블릿 계수의 수입니다. ‘n_frequency’는 0보다 크고 원래 가중치 행렬의 요소 총 개수(d_out * d_in)보다 작거나 같은 정수입니다. 이 매개변수는 각 적응된 레이어의 학습 가능한 매개변수 수를 직접 제어합니다. ‘n_frequency’ 값이 높을수록 일반적으로 성능이 향상되지만 GPU 메모리 사용량도 증가하며, 학습 속도에는 미미한 영향을 미칩니다. - scaling (
float) — 재구성된 델타 W 행렬에 적용되는 스케일링 계수입니다. 이는 LoRA의lora_alpha와 유사한 중요한 하이퍼파라미터로, 하이퍼파라미터 탐색 과정에서 조정할 수 있습니다. SDXL 개인화의 기본값은 25입니다. - wavelet_family (
str) — DWT 및 역 DWT(IDWT)에 사용할 웨이블릿 계열(예: ‘db1’, ‘sym2’, ‘coif1’). 기본값은 ‘db1’(Haar 웨이블릿)입니다. 웨이블릿 계열에 따라 필터 길이가 달라지며, 이는 학습 시간에 상당한 영향을 미칩니다. - use_idwt (
bool) — 효율적인 적응을 위해 False로 설정합니다. 학습된 웨이블릿 계수로부터 델타 가중치를 재구성하기 위해 역 이산 웨이블릿 변환(IDWT)을 사용할지 여부입니다.True(기본값)인 경우 IDWT가 적용됩니다.False인 경우 학습된 계수를 직접 사용하여 희소 델타 가중치 행렬을 형성하며, 이는 더 빠르지만 SDXL 개인화 작업에서 성능이 떨어집니다. - random_loc_seed (
int) —n_frequency개의 학습 가능한 웨이블릿 계수가 전체 웨이블릿 계수 행렬 내에서 무작위로 배치될 위치를 결정하는 시드입니다. - target_modules (
Union[list[str],str]) — WaveFT로 적응할 모듈을 식별하는 모듈 이름 목록 또는 정규식 표현식입니다. 예를 들어,['q_proj', 'v_proj']또는'.*decoder.*(SelfAttention|EncDecAttention).*(q|v)$'. 현재는 선형 레이어(torch.nn.Linear)만 지원됩니다. - exclude_modules (
Optional[Union[List[str], str]]) — WaveFT 적응에서 제외할 모듈의 이름 목록 또는 정규식 표현식. - fan_in_fan_out (
bool) — 교체할 레이어의 가중치가(fan_in, fan_out)형식으로 저장되어 있으면True로 설정합니다. 기본값은False입니다. - bias (
str) — WaveFT의 Bias 유형입니다. ‘none’, ‘all’, 또는 ‘waveft_only’ 값을 가질 수 있습니다. (‘fourier_only’는 오타일 가능성이 높으며, 적응된 매개변수에 대한 bias만 의미하는 경우 ‘waveft_only’로 수정되었습니다) ‘waveft_only’인 경우 bias는 WaveFT 구성 요소에만 추가됩니다. ‘all’인 경우 bias는 base와 WaveFT 구성 요소 모두에 추가됩니다. ‘none’인 경우 새로운 bias는 추가되지 않습니다. - modules_to_save (
list[str]) — WaveFT 레이어 외에도 학습 가능(trainable)으로 표시하고 최종 체크포인트에 저장해야 하는 모듈 목록. 시퀀스 또는 토큰 분류 작업에서 무작위로 초기화되어 학습이 필요한 분류기(classifier)와 같은 레이어에 유용합니다. - layers_to_transform (
Union[list[int],int]) — 변환할 특정 레이어 인덱스입니다. 이 값이 제공되면 PEFT는 해당 인덱스의 레이어만 적응합니다. 단일 정수가 주어지면 해당 레이어만 변환됩니다. - layers_pattern (
Optional[Union[List[str], str]]) —layers_to_transform가 지정되고 레이어 패턴이 표준이 아닌 경우(예: ‘layers’나 ‘h’가 아닌 경우)에 사용되는 레이어 이름 패턴입니다. 모델의nn.ModuleList속성을 대상으로 해야 합니다. - n_frequency_pattern (
dict) — 레이어 이름(또는 정규식)을 특정n_frequency값으로 매핑하는 사전입니다. 전역n_frequency를 재정의합니다. 예:{"model.decoder.layers.0.encoder_attn.k_proj": 1000}. - init_weights (
bool) — 학습 가능한 웨이블릿 계수(스펙트럼)의 초기화 전략입니다.True(기본값)인 경우 계수는 0으로 초기화됩니다.False인 경우 계수는 작은 계수로 스케일링된 표준 정규 분포에서 초기화됩니다. - proportional_parameters (
bool) —True인 경우,n_frequency가 각 레이어의input_dim * output_dim에 비례하여 할당됩니다. 기본값은False입니다. 참고: 이 옵션은 실용적 유용성보다는, 유익한 시나리오가 확인되지 않았음에도 불구하고 연구자가 논문 결과를 재현할 수 있도록 실험적 완전성을 위해 포함되었습니다.
이것은 WaveFTModel의 구성을 저장하기 위한 구성 클래스입니다. 이는 웨이블릿 기반 파인튜닝(WaveFT)의 매개변수를 정의하는 데 사용되며, 웨이블릿 변환의 희소성을 활용하여 사전 학습된 모델을 매개변수 효율적으로 파인튜닝하는 접근 방식입니다.
WaveFTModel
클래스 peft.WaveFTModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )