• Publiceringsdatum
    Februari 18, 2025
  • Dela

I det här blogginlägget kommer jag att prata om detaljer och principer för LoRA-metoden (Low-Rank Adaptation Of Large Language Models), samtidigt som jag går igenom artikeln . Huvudfokus i artikeln är att ta fram en ny struktur som minskar kostnaden för en modells finjustering samtidigt som dess prestanda ökar. Finjusteringsoperationer har haft en viktig plats i studier av naturlig språkbehandling ett tag. Låt oss säga att du har en tränad modell och du vill utöka dess kunskaper. Du kan göra det genom finjustering, utan att träna modellen från grunden.

Låt oss säga att en modell har n parametrar efter träningen och att du behöver finjustera den. Om du använder en fullständig finjusteringsmetod kommer modellens alla parametrar att uppdateras. När vi överväger modeller som har miljarder parametrar kommer uppdateringen av alla parametrar att skapa tids- och lagringsproblem. I uppsatsen betonas de bättre eller jämställda prestandaresultaten för modellerna RoBERTa, DeBERTa, GPT-2 och GPT-3 genom att använda LoRA-metoden.

Det nämns i artikeln att LoRA-metoden är inspirerad av studierna av Li et. al (2018a) och Aghajanyan et al. (2020). Dessa studier betonar att framgången för överparametriserade modeller faktiskt bygger på en låg inneboende dimension. Detta blev punkten som formade hypotesen om LoRA-metoden.

LoRA-metoden är en studie helt baserad på rangfaktorisering. I denna metod läggs två sekventiella matriser till parallellt med några täta lager i de neurala nätverken som visas i figur 1. Dessa sekventiella matriser bildas av en given rangkonfiguration. Bilden nedan visar hur ett tätt lager ser ut efter att ha lagt till de sekventiella rangmatriserna. Indatavariablerna skickas genom både den ursprungliga förträningsviktsmatrisen och den första matrisen av de sekventiella matriserna. Därefter beräknas utdatavärden genom att summera utdata från dessa två parallella matriser.

 

Ekran Resmi 2024-12-26 15.25.36.png
Källa: https://arxiv.org/abs/2106.09685

LoRA-metoden

Neurala nätverk har många täta lager som utför matrismultiplikationer. Viktmatriserna i dessa lager är faktiskt fullranksmatriser (alla rader och kolumner är oberoende). Men Aghajanyan et al. nämnde i sin artikel att förtränade språkmodeller har en låg "intrinsisk dimension". Det formade LoRA-hypotesen inom denna aspekt. Så LoRA-hypotesen blev att modellerna kunde lära sig med lågdimensionella förändringar i viktmatrisen under anpassningen till en specifik uppgift.

Uppdateringarna av denna matris gjordes genom matriser 

Ekran_Resmi_2024_12_26_15_32_57_6efdebb733.png

åtskilda av låg rang. Här är B en dxr-matris, A är en rxk-matris, medan r (rank) är mycket mindre än d och k. Under finjusteringen förhindras gradientuppdateringarna till Wo. Både Wo- och ∆W-matriser multipliceras med samma ingångsvärden och resultaten summeras och utsignalen h= w0 + ∆Wx = w0 +BAx bildas.

I början av träningen använde de slumpmässig Gauss-initiering för A-matrisvärden och full nollinitiering för B-matrisvärden. BA är med andra ord lika med noll i början.

LoRA-applikation i transformatorarkitektur

Det finns 4 viktmatriser Wq, Wk,Wv,Wo i självuppmärksamhetsmodul och 2 viktmatriser i MLP-modul i transformatorarkitektur. Under LoRA-anpassningen frös de vikterna i MLP-modulen och tillämpade metoden på uppmärksamhetsvikter för att hålla träningen enkel.

Fördelar   

  • De största bekvämligheterna som tillhandahålls av LoRA är minnes- och lagringsanvändning. I artikeln nämns till exempel att för en stor transformatormodell som tränats med Adam, minskas VRAM-användningen med upp till 2/3 om << r d. Detta beror på att optimeringslägen inte behålls för frusna parametrar.
  • För GPT-3 175B-modellen minskade VRAM-förbrukningen från 1.2 TB till 350 GB.
  • I scenariot där r=4 och endast vikterna för värde- och frågematriserna ändrades, reducerades kontrollpunktsstorleken från 350 GB till 35 MB. Detta gjorde att träning kunde utföras med färre GPU:er.
  • Dessutom, eftersom det inte finns någon gradientuppdatering i de flesta parametrarna, uppnåddes en acceleration på 25 % när man tränade GPT-3 175B med LoRA jämfört med hela finjusteringsprocessen.

I artikeln nämns också att om finjusteringsprocessen behövs för ett annat språk ska hela modellen användas istället för LoRA.

Ytterligare kunskap

Vad är en rang

Rang är det totala antalet linjärt oberoende kolumner eller rader i en matris. Låt oss anta att vi har en matris med n kolumner och alla kolumner är oberoende av varandra, då kan vi säga att kolumnrangen för denna matris är n. Återigen, om alla rader i en matris med n rader är oberoende av varandra, då kan vi återigen säga att radrangen för matrisen är n.

Radrankningen och kolumnrankningen för en matris måste vara lika. Som ett exempel kan vi titta på matrisen nedan.

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

Om vi ​​tittar noga på matrisen kan vi se att den andra raden är dubbelt så stor som den första. På samma sätt är 2:a och 1:e kolumnen i matrisen 2 respektive 3 gånger den 2:a kolumnen. Med andra ord, medan det finns två vektorer på samma linje på radbasis i matrisen, och tre olika vektorer på en annan linje på kolumnbasis, finns det bara en unik vektor på varje rad och kolumnbasis. Det betyder att matrisens rangordning är 5.

För att hitta rangen omvandlar vi matrisen till dess echelonform, och sedan beräknar vi antalet rader som består av minst ett värde som inte är noll.

Vad är en Low Rank Matrix

I matriser kan rangordningen vara lika med eller mindre än antalet kolumner eller rader. Matriser som har mindre linjärt oberoende rader eller kolumner än det nuvarande antalet rader eller kolumner kallas lågrankade matriser. Matriser där alla rader eller kolumner är oberoende kallas fullrankade matriser.

Vad är en rangfaktorisering/nedbrytning

Vi kan skriva om en matris med rangordningen r till B=LR^T genom att dela upp den i L- och R-matriser. Här är L en matris med mxr-dimensioner, medan R^T är en matris med rxn-dimensioner. Denna process är känd som rangdekomposition.

Vikten av rangfaktorisering:

Vikten av rangfaktoriseringsprocessen är att den tillåter oss att dela upp en matris i mindre matriser, L och R, och hålla dem på mindre utrymme. Det betyder att du kan lagra B genom att lagra dess faktorer L och R. Detta minskar lagringskraven för B till (m+n)r tal ner från mn tal. En ytterligare punkt värd att nämna här är att efter att en matris har uppdelats i dessa två små matriser, tillåter den att många beräkningar görs om matrisen utan att ens producera samma matris igen. Av denna anledning, när man har att göra med en matris med låg rang, betraktas rangfaktorisering alltid som ett viktigt första steg. Efter rangfaktoriseringen kan beräkningar göras mycket snabbare och med mindre minne.

Vidare

För mer detaljerad information om lågrankade matriser kan du läsa Ethan R. Epperlys blogg och LoRA-artikel . Dessutom kan du granska LoRAs kodbaserade applikationer i detalj på microsoft/LoRA github-arkivet.

Gizem ABALI, MSc. / Teamledare