PEFT documentation
MonteCLoRA (Monte Carlo Low-Rank Adaptation)
MonteCLoRA (Monte Carlo Low-Rank Adaptation)
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.
MonteCLoRA envuelve un adaptador LoRA estándar con un pequeño módulo variacional que extrae muestras de Monte Carlo de perturbaciones estocásticas sobre la matriz A de LoRA durante el entrenamiento. Concretamente, aprende parámetros variacionales (una covarianza basada en Wishart, un término de ruido multivariante normal por muestra y un ponderado Dirichlet sobre las muestras) y añade la perturbación resultante promediada a lora_A en cada pasada hacia adelante. Se añade un término de divergencia KL + entropía a la función de pérdida de entrenamiento para mantener estos parámetros variacionales anclados a un prior razonable. En el momento de la inferencia, el muestreador se desactiva y MonteCLoRA se comporta exactamente como un adaptador LoRA regular, por lo que no hay coste de inferencia adicional ni parámetros adicionales que fusionar. Para el método completo, consulte https://huggingface.co/papers/2411.04358.
Puede que desee considerar MonteCLoRA cuando:
- Estás realizando fine-tuning en un conjunto de datos pequeño o ruidoso y deseas una regularización más fuerte que la de LoRA estándar. El promedio de Monte Carlo y el término KL actúan juntos como un regularizador de estilo bayesiano.
- Desea una mejor calibración de la incertidumbre / robustez de su adaptador sin incurrir en un costo adicional en el momento de la inferencia (el mecanismo variacional solo se utiliza durante el entrenamiento).
- LoRA estándar está sobreajustando y reducir
ro aumentarlora_dropoutno es suficiente.
Probablemente no necesites MonteCLoRA si tienes un conjunto de datos grande y limpio y LoRA estándar ya entrena de forma estable: en ese régimen, los parámetros variacionales adicionales suelen añadir sobrecarga de entrenamiento sin mucha ventaja.
Para habilitar MonteCLoRA, pase una MontecloraConfig a LoraConfig:
from peft import LoraConfig, MontecloraConfig
monteclora_config = MontecloraConfig(
num_samples=8, # number of Monte Carlo samples per forward pass
sample_scaler=1e-4, # magnitude of the variational perturbation
kl_loss_weight=1e-5, # weight of the KL term added to the training loss
)
config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
monteclora_config=monteclora_config,
)Durante el entrenamiento, debes añadir la pérdida de regularización variacional a la pérdida de la tarea. La forma más sencilla es llamar a LoraModel._get_monteclora_loss() en el LoraModel subyacente:
task_loss = ... # standard loss returned by your model
monteclora_loss = model._get_monteclora_loss() # 0.0 if MonteCLoRA is not used
total_loss = task_loss + monteclora_loss
total_loss.backward()Si entrenas con el Trainer de HF, simplemente puedes mezclar peft.helpers.MontecloraTrainerMixin, que hace esto por ti en compute_loss:
from transformers import Trainer
from peft.helpers import MontecloraTrainerMixin
class MontecloraTrainer(MontecloraTrainerMixin, Trainer):
passUn ejemplo completo y funcional está disponible en examples/monteclora_finetuning.
API
MonteCloraConfig
clase peft.MontecloraConfig
< source >( num_samples: int = 8use_entropy: bool = Falsedirichlet_prior: float = 0.1sample_scaler: float = 0.0001kl_loss_weight: float = 1e-05buffer_size: int = 150 )
Parámetros
- num_samples (
int) — Número de muestras de Monte Carlo a extraer por cada pasada hacia adelante. Valores más altos suelen proporcionar un entrenamiento más suave y mejores estimaciones de incertidumbre, pero aumentan el uso de cómputo y memoria. Redúcelo si el entrenamiento es demasiado lento o si hay restricciones de memoria; aumentalo si el entrenamiento es estable y deseas un promedio de Monte Carlo más fuerte. - use_entropy (
bool) — Si se debe añadir un término de regularización de entropía que impida que los pesos de Monte Carlo colapsen en una sola muestra. Actívalo si observas que el muestreador se vuelve muy picudo o si deseas una regularización más fuerte; déjalo desactivado para imitar más de cerca el estándar LoRA. - dirichlet_prior (
float) — Parámetro de concentración para la prior de Dirichlet sobre los pesos de muestra/experto. Valores más grandes empujan los pesos a ser más uniformes (regularización más fuerte, menos esparsidad), mientras que valores positivos más pequeños fomentan pesos más esparsos y con picos más pronunciados. Auméntelo si el muestreador se ajusta en exceso; disminúyalo (pero manténgalo > 0) si es demasiado conservador. - sample_scaler (
float) — Factor de escalado general para las perturbaciones muestreadas aplicadas a los pesos de LoRA. Aumentarlo hace que el ruido de Monte Carlo sea más fuerte (más regularización y exploración, pero también más inestabilidad en el entrenamiento); disminuirlo acerca el comportamiento al de LoRA determinista estándar. Establecerlo muy cerca de 0 desactiva en gran medida el efecto de Monteclora. - kl_loss_weight (
float) — Peso del término de divergencia KL entre la distribución variacional y su a priori. Valores más grandes ponen más énfasis en coincidir con la a priori (regularización más fuerte, posible subajuste); valores más pequeños dependen más de la verosimilitud de los datos (regularización más débil, posible sobreajuste). Ajusta este parámetro si notas que Monteclora está sobre- o subregularizando el adaptador. - buffer_size (
int) — Tamaño del búfer interno utilizado por el muestreador de Monte Carlo (p. ej., para almacenar estadísticas recientes). Valores más grandes pueden estabilizar los parámetros variacionales estimados a costa de más memoria; reduzca este valor si tiene restricciones de memoria.
Esta es la clase de subconfiguración para almacenar la configuración de Monteclora (Monte Carlo Low-Rank Adaptation). Monteclora introduce la inferencia variacional en LoRA añadiendo muestreo de Monte Carlo a los pesos del adaptador.
En la práctica, puede considerarse que Monteclora añade perturbaciones estocásticas y aprendidas sobre los pesos de LoRA para obtener un adaptador mejor calibrado y mejor regularizado. Los argumentos siguientes le permiten equilibrar la estabilidad, la intensidad de la regularización y el coste de cómputo.