PEFT documentation
KaSA
KaSA
Esta é uma variante do LoRA e, portanto, tudo o que é possível com o LoRA é válido para este método, exceto quando indicado o contrário nesta página.
KaSA (Knowledge-aware Singular-value Adaptation) é uma variante do LoRA que usa a decomposição em valores singulares do peso base para filtrar conhecimento irrelevante para a tarefa e parametriza a atualização com valores singulares aprendíveis. Ela altera o LoRA vanilla de duas maneiras:
- Truncagem de SVD baseada em conhecimento do peso base congelado. Na inicialização, o peso base
Wé fatorado por SVD e seusrmenores componentes singulares (“ruidosos”/cauda longa) são descartados, deixando a aproximação de posto(k - r)como o novo base congelado (k = min(in_features, out_features)). O ramo treinável então reaprende no subespaço residual descartado. - Adaptação de valores singulares com conhecimento. A atualização treinável é parametrizada na forma SVD, com um diagonal de valores singulares aprendível inserido entre os fatores LoRA:
ΔW = scaling * B @ diag(ΔΣ) @ A, ondeΔΣ(lora_diag) é um vetor aprendível de dimensãore o único novo parâmetro por camada.
No PEFT, o KaSA é configurado como uma variante de LoRA por meio do argumento kasa_config em LoraConfig:
from peft import KasaConfig, LoraConfig
config = LoraConfig(
target_modules=["q_proj", "v_proj"],
kasa_config=KasaConfig(beta=1e-4, gamma=1e-3),
)O artigo também treina com dois regularizadores auxiliares: uma penalidade L2 nos valores singulares aprendíveis (ponderada por beta) e uma regularização ortogonal nos fatores do adaptador (ponderada por gamma), que impõe suavemente a semi-ortogonalidade assumida pela parametrização SVD. Esses não podem ser injetados automaticamente pelo PEFT, portanto, durante o treinamento, você deve adicioná-los à perda da tarefa chamando LoraModel._get_kasa_loss() no LoraModel subjacente:
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_lossPara instruções detalhadas de uso, consulte estas instruções.
Observações
- KaSA é atualmente suportado apenas em camadas lineares padrão de LoRA e não em camadas com
fan_in_fan_out=True(por exemplo,Conv1Ddos transformers). - Os adaptadores KaSA não podem ser combinados com adaptadores não-KaSA no mesmo modelo, pois a truncagem dos pesos base alteraria os pesos base sob os outros adaptadores. Vários adaptadores KaSA são permitidos.
convert_to_loranão é suportado: a atualização KaSA depende delora_diage do peso base truncado, nenhum dos quais é representável em um adaptador LoRA padrão.- A truncação SVD do peso base é destrutiva: adicionar um adaptador KaSA altera permanentemente o peso congelado da camada. Desativar ou descarregar o adaptador não restaura o peso base original, e o ciclo de ida e volta de
mergeseguido porunmergeresulta no peso truncado, não no original. Isso é inerente ao método. Mantenha o checkpoint original caso precise recuperar o modelo base não modificado. - Carregar um adaptador KaSA treinado com
PeftModel.from_pretrainedreaplica o mesmo truncamento ao peso base recém-carregado, de modo que salvar e recarregar é consistente.