Dit achtergrond artikel is onderdeel van de longread over het finetunen van modellen.
<Terug naar overzicht Artikelen:
🔧 Deel 2: Praktische stap voor stap guide
Achtergrond:
🤖 LLM’s lokaal draaien - 2 simpele methodes
🛣️ LLM’s lokaal draaien - De weg naar ondevice LLM’s
💻 LLM’s lokaal draaien - Je systeem in relatie tot de modelspecificaties
⚖️ Wat is lora?
LoRA in 2 zinnen
Bij grote taalmodellen, zoals GPT, zijn de trainingskosten vaak ontzettend hoog, zowel in termen van tijd als geld. Het idee achter LoRA is om de trainingskosten te verlagen door niet het volledige model opnieuw te trainen, maar alleen kleine aanpassingen te maken die de prestaties van het model verbeteren.
Hoe werkt LoRA?
Om te snappen hoe LoRA precies werkt is het handig om een versipeld voorbeeld te visualiseren. Tot voor kort deed ik dat bij LLM gewichten eigenlijk altijd zo:
Om het LoRA concept uit te leggen is het handiger om te denken over elke layer als een meerdimensionale matrix in plaats van een enkele rij met gewichten. Laten we om het simpel te houden elke laag weergeven als een tweedimensionale matrix. Bij finetuning richten we ons meestal op de lagere lagen in het netwerk, in dit geval laag 2. Dus laten we laag 2 inplaats van een enkele rij weergeven als een tweedimensionale matrix van 4 bij 4 en de andere lagen even buiten beschouwing laten:
Bij LoRA gaan we geen rechtstreekse aanpassingen uitvoeren op al deze 16 gewichten tijdens de training, maar maken we eerst 2 kleinere matrixjes die de originele matrix vertegenwoordigen. In ons versimpelde voorbeeld kunnen we bijvoorbeeld kiezen voor een laag van 1x4 gewichten en een laag van 4x1 gewicht:
Vervolgens vermenigvuldigen we de waardes van de matrixjes met elkaar om een matrix te krijgen die toch weer even groot is als de originele matrix:
We gebruiken de uitkomsten van deze nieuwe matrix om de originele matrix aan te passen. Vaak doen we dat met een bepaalde scaling factor; in een formule ziet dat er zo uit:
waarbij geldt dat:
W
is de uiteindelijke gewichtenmatrixW_0
zijn de oorspronkelijke gewichten\alpha
is de scaling factor, hoe dichter bij de 1 hoe groter de invloed van de LoRA trainingB
enA
zijn de LoRA matricesd
enk
de dimensies zijn van de originele matrixr
is de rank van de LoRA decompositie (vaak veel kleiner dand
enk
)
Wat cruciaal is om te begrijpen is dat we bij de finetuning training van ons model wel nogsteeds een volledig model gebruiken. We voorspellen niet enkel met de LoRA matrixjes. Je zou misschien kunnen denken dat hiermee het voordeel weg is, we moeten immers bij elke trainingsiteratie nogsteeds het volledige model gebruiken. Het grote voordeel zit hem er in dat we veel minder variabelen hebben om aan te draaien, wat de berekeningen veel eenvoudiger maakt.
Het evalueren en toewerken naar een optimaal resultaat gaat bij LoRA finetuning op dezelfde manier dan wanneer we het volledige model zouden finetunen. In de theorie-gids heb ik een sectie🔗 die dat wat grondiger toelicht
Conclusie
LoRA biedt een efficiënte manier om grote taalmodellen te finetunen zonder de volledige kosten en complexiteit van het hertrainen van het hele model. Door alleen specifieke gewichten in de lagere lagen aan te passen via low-rank matrixdecomposities, kunnen we de trainingsinspanningen drastisch verlagen.