LoRA, abreviação de Low-Rank Adaptation, é uma técnica de ajuste fino que adapta uma rede neural pré-treinada a uma nova tarefa, congelando seus pesos originais e injetando um pequeno número de parâmetros treináveis na forma de matrizes de posto baixo. Como as matrizes adicionadas são minúsculas em comparação com as matrizes de pesos completas que modificam, o LoRA pode adaptar um modelo com bilhões de parâmetros enquanto treina e armazena apenas uma fração de um por cento de seus parâmetros totais, tornando o ajuste fino acessível em hardware de consumo.
História
O LoRA foi introduzido em um artigo de junho de 2021 por Edward Hu e coautores da Microsoft, que observaram que as atualizações de pesos necessárias para especializar um modelo pré-treinado para uma nova tarefa tendem a ter um "posto intrínseco" baixo, ou seja, podem ser bem aproximadas pelo produto de duas matrizes muito menores. Em vez de atualizar diretamente uma matriz de pesos completa, o LoRA aprende duas matrizes de posto baixo cujo produto é adicionado aos pesos originais congelados, e na inferência a atualização pode ser mesclada de volta sem latência adicional. A técnica foi inicialmente demonstrada em modelos de linguagem de grande porte como o GPT-3, e uma extensão de 2023 chamada QLoRA a combinou com quantização de 4 bits do modelo base congelado, reduzindo drasticamente a memória necessária para ajustar modelos muito grandes.
Método
Formalmente, para uma matriz de pesos pré-treinada, o LoRA representa a atualização como o produto de uma matriz de projeção descendente e uma de projeção ascendente de posto baixo, escalado por um fator e tipicamente inicializado para que o adaptador não contribua no início do treinamento. Apenas essas duas matrizes pequenas são otimizadas via descida de gradiente comum, enquanto os pesos originais permanecem fixos, o que também protege as amplas capacidades do modelo base contra o esquecimento catastrófico. Múltiplos adaptadores LoRA podem ser treinados independentemente para diferentes tarefas ou estilos e trocados dentro e fora do mesmo modelo base na inferência, ou combinados, sem retreinar a rede subjacente.
Aplicações
Na implantação de modelos de linguagem de grande porte, o LoRA é um método padrão para construir assistentes específicos de tarefa ou domínio de forma barata, e sustenta grande parte do ecossistema aberto de ajuste fino em torno de modelos como o Llama. Tornou-se igualmente central para a comunidade de geração de imagens após o lançamento do Stable Diffusion, onde usuários treinam pequenos arquivos LoRA, frequentemente com menos de 200 megabytes, para ensinar a um modelo base um personagem, estilo de arte ou assunto específico a partir de um punhado de imagens de exemplo, e então os compartilham em hubs de modelos da comunidade e combinam vários de uma vez com força ajustável. Essa cultura de customização de baixo para cima, construída em torno de arquivos LoRA leves sobrepostos a prompts abertos e checkpoints base, foi um impulsionador significativo do crescimento da comunidade do Stable Diffusion em relação a sistemas fechados e não adaptáveis como o Midjourney inicial.
Limitações
A suposição de posto baixo do LoRA significa que ele pode ter desempenho inferior ao ajuste fino completo em tarefas que exigem mudanças substanciais nas representações do modelo, e escolher o posto, o subconjunto de matrizes de pesos a adaptar e o fator de escala envolve ajustes não triviais. Como ele apenas modifica representações existentes em vez de adicionar novo conhecimento em escala, o LoRA é geralmente mais adequado para adaptação de estilo, formato e comportamento do que para ensinar ao modelo grandes quantidades de novo conteúdo factual, uma lacuna frequentemente preenchida por geração aumentada por recuperação ou continuação de pré-treinamento completo.