PEFT documentation

WaveFT: Wavelet Fine-Tuning

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

WaveFT: Wavelet Fine-Tuning

WaveFT é um novo método de ajuste fino eficiente em parâmetros (PEFT) que introduz atualizações esparsas no domínio de wavelets das matrizes residuais. Diferentemente do LoRA, que é limitado por escolhas discretas de baixo posto, o WaveFT permite um controle fino sobre o número de parâmetros treináveis ao aprender diretamente um conjunto esparsos de coeficientes no espaço transformado. Esses coeficientes são então mapeados de volta para o domínio dos pesos por meio da Transformada Inversa Discreta de Wavelets (IDWT), produzindo atualizações de alto posto sem incorrer em sobrecarga de inferência.

O WaveFT possui atualmente a seguinte restrição:

  • Apenas camadas nn.Linear são suportadas.

O resumo do artigo é:

Adaptar eficientemente grandes modelos de fundação é crítico, especialmente com orçamentos apertados de computação e memória. Os métodos de Fine-Tuning Eficiente em Parâmetros (PEFT), como o LoRA, oferecem granularidade e eficácia limitadas em regimes de poucos parâmetros. Propomos o Wavelet Fine-Tuning (WaveFT), um novo método de PEFT que aprende atualizações altamente esparsas no domínio wavelet de matrizes residuais. O WaveFT permite controle preciso dos parâmetros treináveis, oferecendo ajuste fino de capacidade e se destacando com contagem de parâmetros notavelmente baixa, potencialmente muito menor que o mínimo do LoRA — ideal para cenários de eficiência extrema em parâmetros. Avaliado na geração personalizada de texto para imagem usando o Stable Diffusion XL como linha de base, o WaveFT supera significativamente o LoRA e outros métodos de PEFT, especialmente com contagens baixas de parâmetros; alcançando superioridade em fidelidade do sujeito, alinhamento com o prompt e diversidade de imagem.

Visão geral do benchmark

API

WaveFTConfig

classe peft.WaveFTConfig

< >

( 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 )

Parâmetros

  • n_frequency (int) — Número de coeficientes de wavelet aprendíveis para a Transformada Wavelet Discreta (DWT). ‘n_frequency’ é um inteiro maior que 0 e menor ou igual ao número total de elementos na matriz de pesos original (d_out * d_in). Este parâmetro controla diretamente o número de parâmetros treináveis para cada camada adaptada. Um ‘n_frequency’ mais alto geralmente leva a um melhor desempenho, mas também aumenta o uso de memória da GPU, com um impacto menor na velocidade de treinamento.
  • scaling (float) — O fator de escala aplicado à matriz delta W reconstruída. Este é um hiperparâmetro crucial, análogo a lora_alpha no LoRA. Ele pode ser ajustado durante a busca de hiperparâmetros. Nosso valor padrão para personalização do SDXL é 25.
  • wavelet_family (str) — A família de wavelets (por exemplo, ‘db1’, ‘sym2’, ‘coif1’) a ser usada para a DWT e a DWT Inversa (IDWT). O padrão é ‘db1’ (wavelet Haar). Diferentes famílias de wavelets possuem comprimentos de filtro variados, o que afeta substancialmente o tempo de treinamento
  • use_idwt (bool) — Defina como False para uma adaptação eficiente. Indica se a Transformada Inversa da Onda Discreta (IDWT) deve ser usada para reconstruir os pesos delta a partir dos coeficientes de onda aprendidos. Se True (padrão), a IDWT é aplicada. Se False, os coeficientes aprendidos são usados diretamente para formar uma matriz de pesos delta esparsa, o que é mais rápido, mas tem um desempenho pior para a tarefa de personalização do SDXL.
  • random_loc_seed (int) — Semente para determinar as localizações aleatórias dos n_frequency coeficientes de wavelet aprendíveis dentro da matriz completa de coeficientes de wavelet.
  • target_modules (Union[list[str],str]) — Lista de nomes de módulos ou uma expressão regular que identifica os módulos a serem adaptados com WaveFT. Por exemplo, ['q_proj', 'v_proj'] ou '.*decoder.*(SelfAttention|EncDecAttention).*(q|v)$'. Atualmente, apenas camadas lineares (torch.nn.Linear) são suportadas.
  • exclude_modules (Optional[Union[List[str], str]]) — Lista de nomes de módulos ou uma expressão regular para módulos a serem excluídos da adaptação WaveFT.
  • fan_in_fan_out (bool) — Defina como True se os pesos da camada a ser substituída estiverem armazenados no formato (fan_in, fan_out). O valor padrão é False.
  • bias (str) — Tipo de viés para WaveFT. Pode ser ‘none’, ‘all’ ou ‘waveft_only’. (‘fourier_only’ provavelmente era um erro de digitação e foi corrigido para ‘waveft_only’ se implicar viés apenas nos parâmetros adaptados) Se ‘waveft_only’, os vieses são adicionados apenas aos componentes do WaveFT. Se ‘all’, os vieses são adicionados tanto aos componentes base quanto aos do WaveFT. Se ‘none’, nenhum novo viés é adicionado.
  • modules_to_save (list[str]) — Lista de módulos, além das camadas do WaveFT, que devem ser marcados como treináveis e salvos no checkpoint final. Útil para camadas como classificadores em tarefas de classificação de sequência ou de token que são inicializadas aleatoriamente e precisam de treinamento.
  • layers_to_transform (Union[list[int],int]) — Índices específicos de camadas a serem transformadas. Se fornecido, o PEFT adaptará apenas as camadas nesses índices. Se um único inteiro for fornecido, apenas essa camada será transformada.
  • layers_pattern (Optional[Union[List[str], str]]) — Padrão para os nomes das camadas, usado quando layers_to_transform é especificado e o padrão da camada não é padrão (por exemplo, não é ‘layers’ ou ‘h’). Isso deve apontar para o atributo nn.ModuleList no modelo.
  • n_frequency_pattern (dict) — Um dicionário que mapeia nomes de camadas (ou regex) para valores específicos de n_frequency, sobrescrevendo o n_frequency global. Exemplo: {"model.decoder.layers.0.encoder_attn.k_proj": 1000}.
  • init_weights (bool) — Estratégia de inicialização para os coeficientes de wavelet aprendíveis (espectro). Se True (padrão), os coeficientes são inicializados com zeros. Se False, os coeficientes são inicializados a partir de uma distribuição normal padrão escalada por um pequeno fator.
  • proportional_parameters (bool) — Se True, n_frequency é alocado proporcionalmente ao input_dim * output_dim de cada camada. O padrão é False. Observação: esta opção está incluída para exaustividade experimental, permitindo que pesquisadores reproduzam resultados de artigos, em vez de para utilidade prática, já que nenhum cenário benéfico foi identificado.

Esta é a classe de configuração para armazenar a configuração de um WaveFTModel. Ela é usada para definir os parâmetros para o Fine-Tuning baseado em Wavelets (WaveFT), uma abordagem que aproveita a esparsidade das transformadas wavelet para o fine-tuning eficiente em parâmetros de modelos pré-treinados.

WaveFTModel

classe peft.WaveFTModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub