PEFT documentation

WaveFT: Ajuste fino de wavelets

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: Ajuste fino de wavelets

WaveFT es un método novedoso de ajuste fino eficiente en parámetros (PEFT) que introduce actualizaciones dispersas en el dominio de wavelets de las matrices residuales. A diferencia de LoRA, que está limitado por elecciones discretas de bajo rango, WaveFT permite un control detallado sobre el número de parámetros entrenables al aprender directamente un conjunto disperso de coeficientes en el espacio transformado. Estos coeficientes se mapean luego de vuelta al dominio de pesos mediante la Transformada Discreta Inversa de Wavelets (IDWT), produciendo actualizaciones de alto rango sin incurrir en sobrecarga de inferencia.

WaveFT tiene actualmente la siguiente restricción:

  • Solo se admiten capas nn.Linear.

El resumen del artículo es:

Adaptar de manera eficiente los grandes modelos de base es fundamental, especialmente con presupuestos de cómputo y memoria ajustados. Los métodos de ajuste fino de parámetros eficientes (PEFT), como LoRA, ofrecen una granularidad y una efectividad limitadas en regímenes de pocos parámetros. Proponemos Wavelet Fine-Tuning (WaveFT), un nuevo método PEFT que aprende actualizaciones altamente dispersas en el dominio de wavelets de las matrices residuales. WaveFT permite un control preciso de los parámetros entrenables, ofreciendo un ajuste fino de la capacidad y destacando con un número de parámetros notablemente bajo, potencialmente mucho menor que el mínimo de LoRA, ideal para escenarios de eficiencia de parámetros extremos. Evaluado en la generación personalizada de texto a imagen utilizando Stable Diffusion XL como línea base, WaveFT supera significativamente a LoRA y otros métodos PEFT, especialmente con bajos recuentos de parámetros; logrando una fidelidad superior del sujeto, una alineación del prompt y una diversidad de imagen.

Resumen de las pruebas de rendimiento

API

WaveFTConfig

clase 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 aprendibles para la Transformada Discreta de Wavelet (DWT). ‘n_frequency’ es un entero mayor que 0 y menor o igual al número total de elementos en la matriz de pesos original (d_out * d_in). Este parámetro controla directamente el número de parámetros entrenables para cada capa adaptada. Un ‘n_frequency’ más alto generalmente conduce a un mejor rendimiento, pero también aumenta el uso de memoria de GPU, con un impacto menor en la velocidad de entrenamiento.
  • scaling (float) — El factor de escalado aplicado a la matriz delta W reconstruida. Este es un hiperparámetro crucial, análogo a lora_alpha en LoRA. Puede ajustarse durante la búsqueda de hiperparámetros. Nuestro valor predeterminado para la personalización de SDXL es 25.
  • wavelet_family (str) — La familia de wavelets (p. ej., ‘db1’, ‘sym2’, ‘coif1’) que se utilizará para la DWT y la DWT inversa (IDWT). El valor predeterminado es ‘db1’ (wavelet Haar). Las distintas familias de wavelets tienen longitudes de filtro variables que afectan de manera sustancial al tiempo de entrenamiento
  • use_idwt (bool) — Establecer en False para una adaptación eficiente. Indica si se debe utilizar la Transformada Inversa de Onda Discreta (IDWT) para reconstruir los pesos delta a partir de los coeficientes de onda aprendidos. Si True (predeterminado), se aplica la IDWT. Si False, los coeficientes aprendidos se utilizan directamente para formar una matriz de pesos delta dispersa, lo cual es más rápido pero tiene un peor rendimiento para la tarea de personalización de SDXL.
  • random_loc_seed (int) — Semilla para determinar las ubicaciones aleatorias de los n_frequency coeficientes de wavelet aprendibles dentro de la matriz completa de coeficientes de wavelet.
  • target_modules (Union[list[str],str]) — Lista de nombres de módulos o una expresión regular que identifica los módulos que se adaptarán con WaveFT. Por ejemplo, ['q_proj', 'v_proj'] o '.*decoder.*(SelfAttention|EncDecAttention).*(q|v)$'. Actualmente, solo se admiten capas lineales (torch.nn.Linear).
  • exclude_modules (Optional[Union[List[str], str]]) — Lista de nombres de módulos o una expresión regular para los módulos que se deben excluir de la adaptación de WaveFT.
  • fan_in_fan_out (bool) — Establezca True si los pesos de la capa que se va a reemplazar se almacenan en formato (fan_in, fan_out). El valor predeterminado es False.
  • bias (str) — Tipo de sesgo para WaveFT. Puede ser ‘none’, ‘all’ o ‘waveft_only’. (‘fourier_only’ probablemente era un error tipográfico y se ha corregido a ‘waveft_only’ si implica sesgo solo en los parámetros adaptados) Si es ‘waveft_only’, los sesgos se añaden solo a los componentes de WaveFT. Si es ‘all’, los sesgos se añaden tanto a los componentes base como a los de WaveFT. Si es ‘none’, no se añaden nuevos sesgos.
  • modules_to_save (list[str]) — Lista de módulos, además de las capas de WaveFT, que deben marcarse como entrenables y guardarse en el checkpoint final. Útil para capas como clasificadores en tareas de clasificación de secuencias o de tokens que se inicializan aleatoriamente y necesitan entrenamiento.
  • layers_to_transform (Union[list[int],int]) — Índices de capas específicos para transformar. Si se proporciona, PEFT solo adaptará las capas en estos índices. Si se da un solo entero, solo se transforma esa capa.
  • layers_pattern (Optional[Union[List[str], str]]) — Patrón para los nombres de capas, utilizado si se especifica layers_to_transform y el patrón de capas no es estándar (p. ej., no es ‘layers’ ni ‘h’). Esto debe apuntar al atributo nn.ModuleList en el modelo.
  • n_frequency_pattern (dict) — Un diccionario que mapea nombres de capas (o expresiones regulares) a valores específicos de n_frequency, reemplazando el valor global de n_frequency. Ejemplo: {"model.decoder.layers.0.encoder_attn.k_proj": 1000}.
  • init_weights (bool) — Estrategia de inicialización para los coeficientes de wavelet aprendibles (espectro). Si True (predeterminado), los coeficientes se inicializan a ceros. Si False, los coeficientes se inicializan desde una distribución normal estándar escalada por un factor pequeño.
  • proportional_parameters (bool) — Si es True, n_frequency se asigna de forma proporcional al input_dim * output_dim de cada capa. El valor predeterminado es False. Nota: esta opción se incluye por exhaustividad experimental para permitir que los investigadores reproduzcan los resultados del artículo, y no por utilidad práctica, ya que no se han identificado escenarios beneficiosos.

Esta es la clase de configuración para almacenar la configuración de un WaveFTModel. Se utiliza para definir los parámetros del Fine-Tuning basado en Wavelets (WaveFT), un enfoque que aprovecha la esparsidad de las transformadas wavelet para el fine-tuning eficiente en parámetros de modelos preentrenados.

WaveFTModel

clase 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