PEFT documentation

KaSA

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

KaSA

Esta es una variante de LoRA y, por lo tanto, todo lo que es posible con LoRA es válido para este método, salvo que se indique lo contrario en esta página.

KaSA (Knowledge-aware Singular-value Adaptation) es una variante de LoRA que utiliza la descomposición en valores singulares del peso base para filtrar el conocimiento no relevante para la tarea y parametriza la actualización con valores singulares aprendibles. Modifica el LoRA estándar de dos maneras:

  1. Truncación SVD basada en conocimiento del peso base congelado. Durante la inicialización, el peso base W se factoriza mediante SVD y se descartan sus r componentes singulares más pequeños (los “ruidosos”/de cola larga), dejando la aproximación de rango (k - r) como la nueva base congelada (k = min(in_features, out_features)). La rama entrenable vuelve a aprender entonces en el subespacio residual descartado.
  2. Adaptación de valores singulares con conocimiento. La actualización entrenable se parametriza en forma de SVD con una diagonal de valores singulares aprendibles insertada entre los factores de LoRA: ΔW = scaling * B @ diag(ΔΣ) @ A, donde ΔΣ (lora_diag) es un vector aprendible de r y el único parámetro nuevo por capa.

En PEFT, KaSA se configura como una variante de LoRA a través del argumento kasa_config en LoraConfig:

from peft import KasaConfig, LoraConfig

config = LoraConfig(
    target_modules=["q_proj", "v_proj"],
    kasa_config=KasaConfig(beta=1e-4, gamma=1e-3),
)

El artículo entrena además con dos regularizadores auxiliares: una penalización L2 sobre los valores singulares aprendibles (ponderada por beta) y una regularización ortogonal sobre los factores del adaptador (ponderada por gamma), que impone de forma suave la semi-ortogonalidad asumida por la parametrización SVD. PEFT no puede inyectarlos automáticamente, por lo que durante el entrenamiento debes añadirlos a la pérdida de la tarea llamando a LoraModel._get_kasa_loss() en el LoraModel subyacente:

task_loss = ...  # standard loss returned by your model
kasa_loss = model._get_kasa_loss()  # 0.0 if KaSA is not used
total_loss = task_loss + kasa_loss

Para un uso detallado, consulte estas instrucciones.

Precauciones

  • KaSA es compatible actualmente solo con capas lineales estándar de LoRA, y no con capas fan_in_fan_out=True (p. ej. Conv1D de transformers).
  • Los adaptadores KaSA no pueden combinarse con adaptadores no KaSA en el mismo modelo, ya que la truncación de los pesos base modificaría los pesos base bajo los otros adaptadores. Se permiten múltiples adaptadores KaSA.
  • convert_to_lora no es compatible: la actualización de KaSA depende de lora_diag y del peso base truncado, ninguno de los cuales es representable en un adaptador LoRA estándar.
  • La truncación SVD del peso base es destructiva: al añadir un adaptador KaSA, el peso congelado de la capa cambia de forma permanente. Desactivar o descargar el adaptador no restaura el peso base original, y un ciclo de merge seguido de unmerge devuelve el peso truncado, no el original. Esto es inherente al método. Conserve el punto de control original si necesita recuperar el modelo base sin modificar.
  • Cargar un adaptador KaSA entrenado con PeftModel.from_pretrained vuelve a aplicar la misma truncación al peso base recién cargado, por lo que guardar y recargar es consistente.
Update on GitHub