• Data de publicação
    18 de fevereiro de 2025
  • Compartilhar

Nesta postagem do blog, falarei sobre detalhes e princípios do método LoRA (Low-Rank Adaptation Of Large Language Models), enquanto passo por o papel. O foco principal do artigo é trazer uma nova estrutura que reduza o custo do ajuste fino de um modelo enquanto aumenta seu desempenho. As operações de ajuste fino têm tido um lugar importante nos estudos de processamento de linguagem natural por um tempo. Digamos que você tenha um modelo treinado e queira expandir seu conhecimento. Você pode fazer isso por meio do ajuste fino, sem treinar o modelo do zero.

Digamos que um modelo tenha n parâmetros após o treinamento e você precise ajustá-lo. Se você usar um método de ajuste fino completo, todos os parâmetros do modelo serão atualizados. Quando consideramos modelos que têm bilhões de parâmetros, a atualização em todos os parâmetros criará problemas de tempo e armazenamento. No artigo, os resultados de desempenho melhores ou no mesmo nível são enfatizados para os modelos RoBERTa, DeBERTa, GPT-2 e GPT-3 usando o método LoRA.

É mencionado no artigo que o método LoRA é inspirado pelos estudos de Li et. al (2018a) e Aghajanyan et al. (2020). Esses estudos enfatizam que o sucesso de modelos superparametrizados é, na verdade, baseado em uma baixa dimensão intrínseca. Este se tornou o ponto que moldou a hipótese do método LoRA.

O método LoRA é um estudo baseado inteiramente na fatoração de classificação. Neste método, duas matrizes sequenciais são adicionadas paralelamente a algumas camadas densas nas redes neurais, conforme mostrado na Figura 1. Essas matrizes sequenciais são formadas por uma determinada configuração de classificação. A figura abaixo mostra a aparência de uma camada densa após a adição das matrizes de classificação sequenciais. As variáveis ​​de entrada são enviadas por meio da matriz de peso de pré-treinamento original e da primeira matriz das matrizes sequenciais. Em seguida, os valores de saída são calculados somando as saídas dessas duas matrizes paralelas.

 

Ekran Resmi 2024/12/26 15.25.36.png
Fonte: https://arxiv.org/abs/2106.09685

O Método LoRA

Redes neurais têm muitas camadas densas que realizam multiplicações de matrizes. As matrizes de peso nessas camadas são, na verdade, matrizes de classificação completa (todas as linhas e colunas são independentes). Mas Aghajanyan et al. mencionaram em seu papel que modelos de linguagem pré-treinados têm uma baixa “dimensão intrínseca”. Isso moldou a hipótese LoRA dentro desse aspecto. Então a hipótese LoRA tornou-se que os modelos poderiam aprender com mudanças de baixa dimensão na matriz de peso durante a adaptação a uma tarefa específica.

As atualizações desta matriz foram feitas através de matrizes 

Ekran_Resmi_2024_12_26_15_32_57_6efdebb733.png

separados por baixa classificação. Aqui, B é uma matriz dxr, A é uma matriz rxk, enquanto r (classificação) é muito menor que d e k. Durante o ajuste fino, as atualizações de gradiente para Wo são evitadas. Ambas as matrizes Wo e ∆W são multiplicadas pelos mesmos valores de entrada e os resultados são somados e a saída h= w0 + ∆Wx = w0 +BAx é formada.

No início do treinamento, eles usaram inicialização gaussiana aleatória para valores da matriz A e inicialização zero completa para valores da matriz B. Em outras palavras, BA é igual a zero no início.

Aplicação LoRA na Arquitetura de Transformadores

Há 4 matrizes de peso Wq, Wk, Wv, Wo no módulo de autoatenção e 2 matrizes de peso no módulo MLP na arquitetura do transformador. Durante a adaptação do LoRA, eles congelaram os pesos no módulo MLP e aplicaram o método aos pesos de atenção para manter o treinamento simples.

Vantagens   

  • As maiores conveniências fornecidas pelo LoRA são os usos de memória e armazenamento. Por exemplo, no artigo, é mencionado que para um modelo de transformador grande treinado com Adam, o uso de VRAM é reduzido em até 2/3 se << r d. Isso ocorre porque os estados do otimizador não são mantidos para parâmetros congelados.
  • Para o modelo GPT-3 175B, o consumo de VRAM diminuiu de 1.2 TB para 350 GB.
  • No cenário em que r=4 e apenas os pesos das matrizes de valor e consulta foram alterados, o tamanho do checkpoint foi reduzido de 350 GB para 35 MB. Isso permitiu que o treinamento fosse realizado com menos GPUs.
  • Além disso, como não há atualização de gradiente na maioria dos parâmetros, uma aceleração de 25% foi obtida ao treinar o GPT-3 175B com LoRA em comparação com o processo completo de ajuste fino.

O artigo também menciona que, se o processo de ajuste fino for necessário para um idioma diferente, o modelo inteiro deve ser usado em vez do LoRA.

Conhecimento Adicional

O que é uma classificação

Rank é o número total de colunas ou linhas linearmente independentes de uma matriz. Vamos supor que temos uma matriz com n colunas e todas as colunas são independentes umas das outras, então podemos dizer que o posto de coluna desta matriz é n. Novamente, se todas as linhas de uma matriz com n linhas são independentes umas das outras, então podemos dizer novamente que o posto de linha da matriz é n.

A classificação de linha e a classificação de coluna de uma matriz devem ser iguais. Como exemplo, podemos olhar para a matriz abaixo.

Matriz A = [[1,2,5], [ 2, 4, 10] ]

Se olharmos a matriz cuidadosamente, podemos ver que a 2ª linha é o dobro da 1ª linha. Da mesma forma, a 2ª e a 3ª colunas da matriz são 2 e 5 vezes a 1ª coluna, respectivamente. Em outras palavras, enquanto há dois vetores na mesma linha em uma base de linha na matriz, e três vetores diferentes em outra linha em uma base de coluna, há apenas um vetor único em cada base de linha e coluna. Isso significa que a classificação da matriz é 1.

Para encontrar a classificação, convertemos a matriz em sua forma escalonada e então calculamos o número de linhas que consistem em pelo menos um valor diferente de zero.

O que é uma matriz de classificação baixa

Em matrizes, a classificação pode ser igual ou menor que o número de colunas ou linhas. Matrizes que têm linhas ou colunas linearmente independentes menores que o número atual de linhas ou colunas são chamadas de matrizes de classificação baixa. Matrizes onde todas as linhas ou colunas são independentes são chamadas de matrizes de classificação completa.

O que é uma fatoração/decomposição de classificação

Podemos reescrever uma matriz com posto r como B=LR^T decompondo-a em matrizes L e R. Aqui, L é uma matriz de dimensões mxr, enquanto R^T é uma matriz de dimensões rxn. Esse processo é conhecido como decomposição de classificação.

A importância da fatoração de postos:

A importância do processo de fatoração de classificação é que ele nos permite dividir uma matriz em matrizes menores, L e R, e mantê-las em menos espaço. Isso significa que você pode armazenar B armazenando seus fatores L e R. Isso reduz os requisitos de armazenamento de B para números (m+n)r abaixo de números mn. Um ponto adicional que vale a pena mencionar aqui é que depois de decompor uma matriz nessas duas matrizes pequenas, ele permite que muitos cálculos sejam feitos sobre a matriz sem nem mesmo produzir a mesma matriz novamente. Por esse motivo, ao lidar com uma matriz de baixa classificação, a fatoração de classificação é sempre considerada um primeiro passo importante. Após a fatoração de classificação, os cálculos podem ser feitos muito mais rápido e usando menos memória.

Além disso

Para obter informações mais detalhadas sobre matrizes de baixa classificação, você pode ler o artigo de Ethan R. Epperly blog e Papel LoRA. Além disso, você pode examinar os aplicativos baseados em código do LoRA em detalhes no Microsoft/LoRA repositório github.

Gizem ABALI, MSc. / Líder de equipe