Reading the Math in AI Papers · Parte 2 de 2

Ler equações de arquitetura: RoPE, MLA, MoE e LoRA

Tradução automática

Este artigo foi traduzido automaticamente a partir da versão original em inglês.

Este artigo explica o que seis métodos de arquitetura de modelos alteram: onde a atenção recebe informação de posição, o que guarda em memória, que tokens ou especialistas utiliza e que pesos o fine-tuning atualiza. Destina-se a engenheiros que conhecem a estrutura geral de um Transformer, mas querem perceber RoPE, MLA, atenção esparsa, Gated DeltaNet, MoE e LoRA sem percorrer as derivações de cada artigo. Os diagramas comparam os mecanismos; as equações explicam a principal alteração.

Um token entra no modelo como um vetor numérico chamado embedding. Cada camada atualiza essa representação. Na atenção, três multiplicações por matrizes aprendidas, ou projeções, transformam os vetores de entrada dos tokens em consultas (QQ), chaves (KK) e valores (VV). As etiquetas WQW_Q, WKW_K e WVW_V do diagrama designam essas matrizes aprendidas.

Uma camada de atenção compara consultas com chaves para decidir o peso a dar ao valor de cada token. Para uma cabeça, o cálculo é:

Attention⁡(Q,K,V)=softmax⁡(QK⊤dk)V.\begin{aligned} &\operatorname{Attention}(Q,K,V)\\ &\qquad=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V. \end{aligned}

Leia as operações por ordem: QK⊤QK^\top compara cada consulta com cada chave; ⊤\top transpõe a matriz de chaves para alinhar os vetores para a multiplicação. Divida pela raiz quadrada do seu comprimento dkd_k e aplique softmax a cada linha para obter pesos. A multiplicação por VV calcula a média dos valores com esses pesos. O resultado é um vetor atualizado para cada token, passado adiante pela camada. Num modelo de linguagem causal, a atenção exclui os tokens futuros antes da softmax. A Parte 1 percorre esse cálculo com matrizes pequenas.

As primeiras quatro secções alteram este cálculo ou a sua memória. A MoE altera a rede feed-forward e a LoRA altera a forma como os pesos são treinados. Pode ler as secções de forma independente; o diagrama da MLA usa o mecanismo de posição apresentado na RoPE.

RoPE: posição como rotação

O produto escalar entre consulta e chave compara vetores de conteúdo. Por si só, não indica se dois tokens são adjacentes ou estão separados por cem posições. O Transformer original soma um vetor de posição ao embedding de cada token antes da primeira camada de atenção. A informação de posição influencia depois as consultas, chaves e valores calculados a partir dessas entradas. Não os roda. Consulte Attention Is All You Need, §3.5.

A RoPE introduz a posição na própria comparação entre consulta e chave. Primeiro, calcule as consultas e chaves com as projeções aprendidas habituais. Depois, rode pares das suas coordenadas por ângulos determinados pela posição de cada token. Calcule as pontuações de atenção a partir desses vetores rodados. A RoPE não roda os valores.

Os dois painéis abaixo mostram onde entra a posição. O cálculo dos valores ponderados continua a seguir ao cálculo das pontuações em ambos os casos.

O Transformer original soma a posição à entrada antes de formar consultas, chaves e valores. A RoPE roda as consultas e chaves projetadas antes do seu produto escalar e deixa os valores sem rotação.O Transformer original soma a posição à entrada antes de formar consultas, chaves e valores. A RoPE roda as consultas e chaves projetadas antes do seu produto escalar e deixa os valores sem rotação.

Para um par de coordenadas, a rotação é uma multiplicação de matrizes:

R(φ)=(cos⁡φ−sin⁡φsin⁡φcos⁡φ).R(\varphi)=\begin{pmatrix} \cos\varphi&-\sin\varphi\\ \sin\varphi&\cos\varphi \end{pmatrix}.

φ\varphi é o ângulo de rotação. Multiplicar esta matriz por (1,0)(1,0) dá (cos⁡φ,sin⁡φ)(\cos\varphi,\sin\varphi); a 90° é (0,1)(0,1), a seta da consulta que aponta para cima no diagrama seguinte.

Porquê uma rotação? Um produto escalar depende do ângulo entre vetores. Rodar ambos pelo mesmo ângulo adicional mantém o produto escalar. Se uma consulta na posição 2 e uma chave na posição 3 passarem para as posições 3 e 4, a diferença de posição continua a ser um. Com os mesmos vetores de conteúdo subjacentes, a RoPE dá a mesma pontuação:

(R(mθ)q)⊤(R(nθ)k)=q⊤R((n−m)θ)k.\begin{aligned} &\bigl(R(m\theta)q\bigr)^\top\bigl(R(n\theta)k\bigr)\\ &\qquad=q^\top R\bigl((n-m)\theta\bigr)k. \end{aligned}

Aqui qq e kk são um par de coordenadas da consulta e da chave, RR roda-os, mm e nn são posições de tokens e θ\theta é o ângulo de rotação por posição. O lado direito mostra a propriedade útil: o termo explícito de posição usa a diferença n−mn-m. A pontuação continua a depender dos vetores de conteúdo, não apenas da distância.

O diagrama fixa ambos os vetores originais em (1,0)(1,0) e usa uma rotação de 45° por posição. São valores escolhidos para o exemplo: manter o conteúdo fixo permite ver o efeito de deslocar ambas as posições.

Dois pares consulta–chave com os mesmos vetores subjacentes e a mesma diferença de posição. Deslocar ambas as posições roda as duas setas por igual e preserva o ângulo e o produto escalar.Dois pares consulta–chave com os mesmos vetores subjacentes e a mesma diferença de posição. Deslocar ambas as posições roda as duas setas por igual e preserva o ângulo e o produto escalar.

Uma consulta ou chave completa tem muitos pares de coordenadas. A RoPE roda-os a ritmos diferentes, pelo que representam diferenças de posição em várias escalas. Isso não garante boa atenção para comprimentos de contexto arbitrários nem que todas as pontuações diminuam com a distância.

As matrizes de rotação e a sua derivação estão em RoFormer v5, §3.2, equações (12)–(16). A leitura detalhada da RoPE inclui a álgebra intermédia e verificações numéricas.

MLA: guardar um vetor pequeno em vez de chaves e valores

As cabeças de atenção já existiam antes da MLA. A atenção multi-head do Transformer original, §3.2.2 executa vários cálculos de atenção com projeções aprendidas diferentes e combina as suas saídas. O DeepSeek mantém várias cabeças. A sua alteração é a forma como representa e guarda as respetivas chaves e valores.

Durante a geração, a atenção multi-head habitual guarda uma chave e um valor para cada token anterior por cada cabeça. Esta KV cache cresce com a sequência. A MLA usa uma projeção aprendida para transformar diretamente a representação de entrada do token num vetor curto. As chaves de conteúdo e os valores das cabeças podem ser calculados a partir dele. Todas as cabeças partilham esse vetor guardado, mas usam projeções e pesos de atenção diferentes; não passam a ser cabeças idênticas.

O diagrama segue um token desde o seu vetor de entrada aos dados guardados numa camada. As consultas posteriores leem esses dados através de várias cabeças de ambos os lados; as saídas das cabeças são combinadas na saída da atenção.

A atenção multi-head habitual guarda chaves e valores separados para cada cabeça. A MLA guarda um vetor comprimido partilhado e uma pequena chave de posição separada, mantendo várias cabeças de atenção.A atenção multi-head habitual guarda chaves e valores separados para cada cabeça. A MLA guarda um vetor comprimido partilhado e uma pequena chave de posição separada, mantendo várias cabeças de atenção.

O percurso do conteúdo no diagrama corresponde a três equações do DeepSeek-V2:

ctKV=WDKVht,ktC=WUKctKV,vtC=WUVctKV.\begin{aligned} c_t^{KV}&=W^{DKV}h_t,\\ k_t^C&=W^{UK}c_t^{KV},\\ v_t^C&=W^{UV}c_t^{KV}. \end{aligned}

hth_t é o vetor de entrada do token tt. A primeira linha transforma-o no vetor mais curto guardado na cache, ctKVc_t^{KV}. As duas seguintes transformam esse mesmo vetor em chaves de conteúdo e valores de todas as cabeças. Os sobrescritos são etiquetas, não potências: DKVDKV designa a projeção de redução, UKUK e UVUV as projeções de expansão da chave e do valor, e CC marca a parte de conteúdo. As três matrizes WW são aprendidas. A chave de posição separada está fora destas três equações.

Para a configuração do DeepSeek-V2, a comparação é 32 768 números contra 576: a atenção habitual com 128 cabeças e 128 números em cada chave e valor precisa de 2×128×1282\times128\times128; a MLA mantém um vetor comprimido de 512 números e uma chave de posição de 64. São cerca de 57 vezes menos números guardados com a mesma precisão. Compara esta configuração com a atenção multi-head habitual, não com todos os desenhos de cache, e não implica inferência 57 vezes mais rápida.

Expandir o vetor comprimido de cada token antigo eliminaria o benefício? A MLA pode evitar essa expansão. Para uma cabeça, abrevie ctKVc_t^{KV} para cc e chame às linhas de WUKW^{UK} dessa cabeça a sua matriz de expansão da chave, WupW_{\mathrm{up}}. Então:

q⊤(Wupc)=(q⊤Wup)c.q^\top(W_{\mathrm{up}}c)=(q^\top W_{\mathrm{up}})c.

O lado esquerdo expande cada vetor em cache numa chave antes de o comparar com a consulta qq. O lado direito transforma a consulta atual uma vez e depois compara-a diretamente com os vetores em cache. É o mesmo cálculo, agrupado de outra forma. O cálculo dos valores tem uma reorganização semelhante: primeiro faça a média dos vetores comprimidos e depois aplique as projeções de saída. Uma implementação pode escolher a ordem de multiplicação que se adequa ao seu hardware.

A RoPE precisa de tratamento separado. Rodar as chaves de conteúdo expandidas introduziria uma operação dependente da posição nessa reorganização. Por isso, a MLA deixa essas chaves sem rotação e acrescenta uma comparação consulta–chave separada para a posição. É por isso que a cache contém tanto o vetor de conteúdo comprimido como uma pequena chave de posição rodada.

A MLA é uma arquitetura aprendida, não um compressor sem perdas aplicável a qualquer camada de atenção existente. DeepSeek-V2 v5, §2.1.2–2.1.3, equações (9)–(19) define as projeções e o componente RoPE separado. A leitura detalhada da MLA apresenta as formas completas e as reorganizações de matrizes.

Atenção esparsa (DSA): um avaliador barato escolhe as chaves

A DSA reduz quantos tokens participam em cada cálculo de atenção. Suponha que um modelo continua o texto «The cat sat on a mat near me». Trate cada palavra como um token neste exemplo. O modelo está a processar o último token, «me», na posição 8.

Numa camada de atenção, a representação do token atual produz um vetor de consulta. Cada token disponível tem uma chave, com a qual se compara a consulta, e um valor, que fornece informação à saída. Durante a geração, a camada guarda os dados de atenção dos tokens anteriores na sua KV cache, para reutilizar esses vetores. «Posição 2» identifica os dados guardados de «cat»; a cache contém vetores numéricos, não apenas números de posição. A MLA guarda esses dados na forma comprimida descrita acima.

A atenção causal densa compara a consulta atual com todas as chaves disponíveis, incluindo a do token atual. A softmax converte essas pontuações em pesos e a camada combina os valores com esses pesos. A DSA acrescenta um passo de seleção mais barato antes desse cálculo:

  1. Pontuar os tokens disponíveis com baixo custo. Uma pequena rede aprendida, o lightning indexer, usa as suas próprias projeções de consulta e chave para pontuar cada posição para o token atual. Estima quais os tokens que a atenção principal mais usará.
  2. Selecionar as posições com maior pontuação. No exemplo, «cat» e «mat» recebem as duas maiores pontuações do indexador. Selecionar as posições 2 e 6 diz à atenção principal que entradas guardadas deve ler.
  3. Calcular a atenção nessas entradas. A atenção principal calcula as suas próprias pontuações consulta–chave para as entradas selecionadas, aplica softmax a esse subconjunto e combina os seus valores. As pontuações do indexador escolhem as entradas; não são os pesos finais da atenção.

Siga uma coluna desde o token de texto à sua entrada guardada e compare os cálculos denso e esparso. Todas as pontuações e pesos abaixo são ilustrativos.

Oito tokens de texto correspondem a oito entradas de atenção guardadas numa camada. O token atual é «me», na posição 8. A atenção densa usa as oito entradas. O indexador separado da DSA pontua todas as posições e seleciona «cat» na posição 2 e «mat» na posição 6, com pontuações de índice 0,8 e 0,9. A atenção principal calcula então novas pontuações e pesos de softmax nessas duas entradas; uma cabeça ilustrada usa pesos 0,7 e 0,3. As outras entradas continuam guardadas na cache.Oito tokens de texto correspondem a oito entradas de atenção guardadas numa camada. O token atual é «me», na posição 8. A atenção densa usa as oito entradas. O indexador separado da DSA pontua todas as posições e seleciona «cat» na posição 2 e «mat» na posição 6, com pontuações de índice 0,8 e 0,9. A atenção principal calcula então novas pontuações e pesos de softmax nessas duas entradas; uma cabeça ilustrada usa pesos 0,7 e 0,3. As outras entradas continuam guardadas na cache.

A equação do indexador no artigo dá a primeira linha de pontuações no painel DSA:

It,s=∑j=1HIwt,jI ReLU⁡(qt,jI⋅ksI).I_{t,s}=\sum_{j=1}^{H^I}w^I_{t,j}\,\operatorname{ReLU}\bigl(q^I_{t,j}\cdot k^I_s\bigr).

tt é a posição atual e ss uma posição candidata. O sobrescrito II identifica os vetores próprios do indexador. Para cada uma das suas HIH^I cabeças, compare a consulta qt,jIq^I_{t,j} com a chave ksIk^I_s, substitua um produto escalar negativo por zero com ReLU, multiplique pelo peso aprendido dependente do token wt,jIw^I_{t,j} e some sobre as cabeças jj. O resultado It,sI_{t,s} é uma pontuação de seleção.

Podemos escrever a seleção e a saída de uma cabeça da atenção principal como:

St=TopKIndices⁡(It,1:t,k),ut=∑s∈Stat,svs.\begin{aligned} \mathcal S_t&=\operatorname{TopKIndices}(I_{t,1:t},k),\\ u_t&=\sum_{s\in\mathcal S_t}a_{t,s}v_s. \end{aligned}

It,1:tI_{t,1:t} é a linha de pontuações das posições disponíveis de 1 a tt. TopKIndices devolve as posições das maiores pontuações, até kk entradas. A soma lê-se «somar os valores ponderados apenas nas posições de St\mathcal S_t». Aqui at,sa_{t,s} é um peso de softmax da atenção principal acabado de calcular, vsv_s o seu vetor de valor e utu_t a saída. Na figura, S8={2,6}\mathcal S_8=\{2,6\} e u8=0.7v2+0.3v6u_8=0.7v_2+0.3v_6. Isto reescreve a notação de entradas selecionadas do artigo como uma soma explícita; a MLA pode calculá-la na forma comprimida.

As outras entradas mantêm-se na cache. Uma consulta diferente pode selecionar outro subconjunto. O treino ensina o indexador a aproximar a distribuição da atenção principal sobre os tokens, primeiro com atenção densa e depois em conjunto com atenção esparsa. Uma seleção fraca pode omitir informação útil.

O DeepSeek-V3.2 aplica a DSA à cache comprimida da MLA e seleciona até 2048 posições por consulta. Na última posição de um contexto de 131 072 tokens, a atenção principal lê uma entrada em cada 64. Quando há menos de 2048 posições disponíveis, pode usá-las todas.

A poupança vem de fazer menos comparações de atenção dispendiosas. O indexador continua a pontuar todas as posições disponíveis, mas usa menos cabeças e pode calcular em FP8. Numa sequência de comprimento LL, as comparações da atenção principal passam de aproximadamente L2L^2 para LkLk, em que kk é a quantidade selecionada. O trabalho do indexador sobre todos os pares continua quadrático, pelo que o método completo não é estritamente linear no comprimento da sequência.

Consulte DeepSeek-V3.2 v1, §2.1, equações (1)–(4) e a leitura detalhada da DSA para as equações de pontuação e treino.

Gated DeltaNet: uma memória de tamanho fixo que sobrescreve

A atenção densa, a MLA e a DSA mantêm um registo crescente dos tokens anteriores. A Gated DeltaNet atualiza antes uma única matriz de tamanho fixo. A camada calcula uma chave, um valor e uma consulta a partir das representações de entrada dos tokens, usando projeções aprendidas e filtros curtos sobre tokens próximos. A chave e o valor atualizam a matriz; a consulta lê a matriz atualizada para produzir um vetor de saída. Não pode voltar separadamente à chave e ao valor de cada token antigo.

A comparação útil é com uma memória aditiva simples. Suponha que a memória devolve atualmente 2 para uma certa chave e que o token seguinte fornece o valor 5 para a mesma chave. Somar o novo valor produziria 7. Uma atualização delta soma a correção, 5−25-2, pelo que uma escrita com intensidade total produz 5.

O exemplo usa a chave (1,0)(1,0), que lê a primeira coluna da matriz: um vezes a primeira coluna mais zero vezes a segunda. A coluna realçada mostra a correção. Depois da escrita, uma consulta (1,0)(1,0) lê (5,0)(5,0) a partir dela. A matriz mantém o mesmo tamanho.

A atenção guarda uma KV cache crescente, enquanto a DeltaNet atualiza uma matriz de tamanho fixo. Partindo de entradas diagonais 2 e 4, escrever o valor (5, 0) para a chave (1, 0) dá a primeira entrada 7 com adição ou 5 com uma correção delta. Este exemplo não usa decaimento e usa intensidade total de escrita; chaves gerais podem afetar outras associações guardadas.A atenção guarda uma KV cache crescente, enquanto a DeltaNet atualiza uma matriz de tamanho fixo. Partindo de entradas diagonais 2 e 4, escrever o valor (5, 0) para a chave (1, 0) dá a primeira entrada 7 com adição ou 5 com uma correção delta. Este exemplo não usa decaimento e usa intensidade total de escrita; chaves gerais podem afetar outras associações guardadas.

A Gated DeltaNet também aprende quanto da memória antiga deve manter e com que intensidade deve aplicar cada correção:

St=αtSt−1+βt(vt−αtSt−1kt)kt⊤.S_t=\alpha_t S_{t-1}+\beta_t\bigl(v_t-\alpha_t S_{t-1}k_t\bigr)k_t^\top.

SS é a matriz de memória, ktk_t é a chave atual de comprimento unitário e vtv_t o seu novo valor. O fator αt\alpha_t atenua a memória antiga. Ler a memória atenuada com ktk_t dá a sua resposta atual; subtrair essa resposta a vtv_t dá a correção. O fator βt\beta_t controla quanto escrever. Ambos os fatores são calculados a partir do token atual. Multiplicar a matriz atualizada pela consulta dá a leitura, que a camada depois normaliza, modula e projeta na sua saída. O exemplo de 2 para 5 usa o seu valor limite de 1.

A memória fixa poupa espaço, mas as escritas podem interferir: mudar a resposta para uma chave pode alterá-la para outra chave não ortogonal. O decaimento também elimina informação antiga. Isto ajuda a explicar por que razão o artigo combina camadas recorrentes com atenção de janela deslizante em modelos híbridos, mantendo entradas separadas para tokens recentes.

A forma apresentada reorganiza Gated Delta Networks v3, §3.1, equação (10). A leitura detalhada deriva-a e percorre a atualização da matriz.

Encaminhamento MoE: o viés escolhe especialistas, a pontuação dá-lhes peso

Uma camada de mistura de especialistas (MoE) tem várias redes feed-forward, chamadas especialistas, e seleciona apenas algumas para cada token. Isto acrescenta capacidade ao modelo sem executar todos os especialistas para todas as entradas. Altera a parte feed-forward de um Transformer, não as suas cabeças de atenção.

A regra de encaminhamento específica do DeepSeek-V3 separa duas decisões: que especialistas executam e quanto contam as suas saídas. Um router aprendido recebe o vetor do token atual e dá a cada especialista uma pontuação sis_i. Um viés de equilíbrio de carga bib_i muda a pontuação de seleção para si+bis_i+b_i. Depois da seleção, os pesos de saída vêm das pontuações originais, normalizadas sobre os especialistas selecionados. O viés não entra nesses pesos.

O exemplo seleciona dois de quatro especialistas. O especialista 1 tem a maior pontuação bruta, mas o seu viés negativo exclui-o; executam antes os especialistas 2 e 3. Ambos recebem o mesmo vetor de token xx. Cada um produz um novo vetor, escrito E2(x)E_2(x) ou E3(x)E_3(x), e a camada soma essas saídas com pesos 0,56 e 0,44. O diagrama mostra apenas esta contribuição dos especialistas encaminhados.

Quatro especialistas são ordenados pela pontuação mais o viés para selecionar os especialistas 2 e 3. As suas pontuações originais, 0,5 e 0,4, determinam pesos de saída de cerca de 0,56 e 0,44.Quatro especialistas são ordenados pela pontuação mais o viés para selecionar os especialistas 2 e 3. As suas pontuações originais, 0,5 e 0,4, determinam pesos de saída de cerca de 0,56 e 0,44.

Uma forma compacta da regra de encaminhamento do DeepSeek-V3, para um token, é:

E=TopKIndices⁡(s+b,K),gi={si∑j∈Esj,i∈E,0,i∉E,urouted=∑igiEi(x).\begin{aligned} \mathcal E&=\operatorname{TopKIndices}(s+b,K),\\ g_i&=\begin{cases} \dfrac{s_i}{\sum_{j\in\mathcal E}s_j},&i\in\mathcal E,\\ 0,&i\notin\mathcal E, \end{cases}\\ u_{\mathrm{routed}}&=\sum_i g_iE_i(x). \end{aligned}

ss e bb reúnem as pontuações e os vieses de todos os especialistas; KK é a quantidade a selecionar. A primeira linha devolve os índices dos especialistas selecionados, E\mathcal E. A chaveta na segunda linha é um if/else: divida a pontuação original de um especialista selecionado pela soma das pontuações selecionadas, ou atribua zero se não tiver sido selecionado. A última linha soma os vetores de saída dos especialistas com esses pesos. Na figura, E={2,3}\mathcal E=\{2,3\}, pelo que g2=0.5/(0.5+0.4)≈0.56g_2=0.5/(0.5+0.4)\approx0.56 e g3≈0.44g_3\approx0.44. O viés só aparece na seleção. As contribuições residual e do especialista partilhado estão fora de uroutedu_{\mathrm{routed}}.

Durante o treino, o viés de um especialista demasiado usado desce e o de um especialista pouco usado sobe. Isto promove uma carga mais uniforme. O DeepSeek-V3 também mantém uma pequena perda de equilíbrio por sequência, pelo que «auxiliary-loss-free» não significa que o modelo não tenha nenhuma perda de equilíbrio.

A sua configuração ativa 8 de 256 especialistas encaminhados por token, mais um especialista partilhado que executa sempre. Estas quantidades e o especialista partilhado pertencem a este modelo, não à definição de MoE. Consulte DeepSeek-V3 v2, §2.1.2, equações (12)–(17) e a leitura do encaminhamento.

mHC: mistura residual restrita a médias ponderadas

Uma ligação residual habitual leva um vetor de token a contornar uma subcamada e soma-lhe o resultado dessa subcamada. A mHC mantém vários desses vetores, chamados fluxos residuais, e altera a forma como se misturam entre camadas. A sua matriz de mistura ideal tem entradas não negativas, com linhas e colunas a somar um. Essa mistura forma médias ponderadas preservando o total entre fluxos. A implementação aproxima esta restrição com um número finito de passos de normalização; não restringe todas as operações da rede.

O artigo separado sobre mHC explica o mecanismo, a normalização e os limites com diagramas. Use-o para esse tema; a leitura da equação fornece a derivação.

LoRA: uma atualização de baixo posto ao lado de um peso congelado

O fine-tuning completo atualiza as matrizes de pesos do modelo. A LoRA congela uma matriz pré-treinada W0W_0 e aprende uma correção menor em paralelo:

h=W0x+BAx.h=W_0x+BAx.

xx é o vetor de token que entra na camada linear escolhida, e hh o vetor de saída passado adiante pelo modelo. A multiplicação original W0xW_0x continua a ser executada. Na correção, AA transforma a entrada num vetor muito menor, e BB transforma-o de volta para o tamanho da saída. Os exemplos de treino e a perda da tarefa determinam as atualizações de AA e BB; W0W_0 fica fixo. A pequena dimensão partilhada é a configuração de posto rr; a atualização resultante BABA tem posto no máximo rr.

Para uma matriz de pesos 4096×40964096\times4096 e r=8r=8, uma atualização completa tem cerca de 16,8 milhões de entradas. As duas matrizes LoRA têm 4096×8+8×4096=65,5364096\times8+8\times4096=65{,}536: 256 vezes menos entradas treináveis para esta matriz. Isto reduz o armazenamento de gradientes e do estado do otimizador, mas o peso de base completo continua a ocupar memória e a participar no cálculo.

Siga os dois percursos a partir da mesma entrada: a matriz congelada continua a calcular a sua saída, enquanto a correção treinável passa por apenas oito números.

O fine-tuning completo treina as 16 777 216 entradas de um peso 4096 por 4096. A LoRA congela esse peso e acrescenta um percurso paralelo por uma matriz A de 8 por 4096 e uma matriz B de 4096 por 8. As suas 65 536 entradas são treinadas; o vetor intermédio de oito números limita o posto da correção. Ambos os percursos produzem 4096 números que são somados.O fine-tuning completo treina as 16 777 216 entradas de um peso 4096 por 4096. A LoRA congela esse peso e acrescenta um percurso paralelo por uma matriz A de 8 por 4096 e uma matriz B de 4096 por 8. As suas 65 536 entradas são treinadas; o vetor intermédio de oito números limita o posto da correção. Ambos os percursos produzem 4096 números que são somados.

No método original, BB começa a zero, pelo que a correção inicialmente não altera nada. O artigo escala a atualização por α/r\alpha/r, uma configuração omitida da sua equação (3) acima. Depois do treino, a correção escalada pode ser somada a W0W_0; a camada fundida só precisa então da multiplicação de matrizes original. Manter os adaptadores separados acrescenta cálculo, mas permite trocá-los.

Consulte LoRA v2, §4.1, equação (3) e a leitura detalhada da LoRA. A QLoRA guarda adicionalmente os pesos de base congelados em formato de 4 bits e desquantiza-os para o cálculo; não torna toda a memória de treino de 4 bits. O guia de fine-tuning compara as opções práticas.

Leituras opcionais de equações

As leituras de equações indicadas contêm definições de símbolos, derivações intermédias e verificações com números pequenos. Foram produzidas com as instruções para agentes de programação de paper-math-skills. São explicações suplementares; os artigos científicos ligados junto de cada mecanismo são as fontes primárias.

Fontes e versões

As ligações acima identificam as versões usadas para os números de secção e de equação. Para a atenção original de referência, consulte Attention Is All You Need v7, §3.2 e §3.5. Para o tema separado da mistura residual, consulte mHC v2.