In diesem Blogbeitrag gehe ich auf die Details und Prinzipien der LoRA-Methode (Low-Rank Adaptation Of Large Language Models) ein und bespreche dazu die zugehörige wissenschaftliche Arbeit . Der Schwerpunkt der Arbeit liegt auf der Entwicklung einer neuen Struktur, die den Aufwand für das Feinabstimmen eines Modells reduziert und gleichzeitig dessen Leistung steigert. Feinabstimmungsoperationen spielen in der Verarbeitung natürlicher Sprache schon seit Längerem eine wichtige Rolle. Angenommen, Sie haben ein trainiertes Modell und möchten dessen Wissen erweitern. Dies ist durch Feinabstimmung möglich, ohne das Modell von Grund auf neu trainieren zu müssen.
Nehmen wir an, ein Modell hat nach dem Training n Parameter und Sie müssen es feinabstimmen. Wenn Sie eine vollständige Feinabstimmungsmethode verwenden, werden alle Parameter des Modells aktualisiert. Wenn wir Modelle mit Milliarden von Parametern betrachten, führt die Aktualisierung aller Parameter zu Zeit- und Speicherproblemen. In diesem Dokument werden die besseren oder gleichwertigen Leistungsergebnisse für die Modelle RoBERTa, DeBERTa, GPT-2 und GPT-3 unter Verwendung der LoRA-Methode hervorgehoben.
In dem Artikel wird erwähnt, dass die LoRA-Methode von den Studien von Li et al. (2018a) und Aghajanyan et al. (2020) inspiriert ist. Diese Studien betonen, dass der Erfolg überparametrisierter Modelle tatsächlich auf einer geringen intrinsischen Dimension beruht. Dies wurde zum Punkt, der die Hypothese der LoRA-Methode prägte.
Die LoRA-Methode ist eine Studie, die vollständig auf der Rangfaktorisierung basiert. Bei dieser Methode werden zwei sequentielle Matrizen parallel zu einigen dichten Schichten in den neuronalen Netzwerken hinzugefügt, wie in Abbildung 1 dargestellt. Diese sequentiellen Matrizen werden durch eine bestimmte Rangkonfiguration gebildet. Die folgende Abbildung zeigt, wie eine dichte Schicht nach dem Hinzufügen der sequentiellen Rangmatrizen aussieht. Die Eingabevariablen werden sowohl durch die ursprüngliche Gewichtsmatrix vor dem Training als auch durch die erste Matrix der sequentiellen Matrizen gesendet. Anschließend werden die Ausgabewerte berechnet, indem die Ausgaben dieser beiden parallelen Matrizen summiert werden.

Die LoRA-Methode
Neuronale Netze besitzen viele dichte Schichten, die Matrixmultiplikationen durchführen. Die Gewichtsmatrizen dieser Schichten sind Matrizen mit vollem Rang (alle Zeilen und Spalten sind unabhängig). Aghajanyan et al. erwähnten jedoch in ihrer Arbeit , dass vortrainierte Sprachmodelle eine niedrige „intrinsische Dimension“ aufweisen. Dies prägte die LoRA-Hypothese. Die LoRA-Hypothese besagt somit, dass die Modelle während der Anpassung an eine spezifische Aufgabe durch Änderungen der Gewichtsmatrix in niedriger Dimension lernen können.
Die Aktualisierungen dieser Matrix erfolgten über Matrizen

nach niedrigem Rang getrennt. Hier ist B eine dxr-Matrix, A eine rxk-Matrix, während r (Rang) viel kleiner als d und k ist. Während der Feinabstimmung werden die Gradientenaktualisierungen von Wo verhindert. Sowohl die Wo- als auch die ∆W-Matrizen werden mit denselben Eingabewerten multipliziert, die Ergebnisse werden summiert und die Ausgabe h= w0 + ∆Wx = w0 +BAx wird gebildet.
Zu Beginn des Trainings verwendeten sie eine zufällige Gauß-Initialisierung für die Werte der A-Matrix und eine vollständige Null-Initialisierung für die Werte der B-Matrix. Mit anderen Worten: BA ist zu Beginn gleich Null.
LoRA-Anwendung in der Transformatorarchitektur
Es gibt 4 Gewichtsmatrizen Wq, Wk, Wv, Wo im Selbstaufmerksamkeitsmodul und 2 Gewichtsmatrizen im MLP-Modul in der Transformatorarchitektur. Während der LoRA-Anpassung haben sie die Gewichte im MLP-Modul eingefroren und die Methode auf Aufmerksamkeitsgewichte angewendet, um das Training einfach zu halten.
Vorteile
- Die größten Vorteile von LoRA sind die Speicher- und Speichernutzung. Im Artikel wird beispielsweise erwähnt, dass bei einem großen Transformatormodell, das mit Adam trainiert wurde, die VRAM-Nutzung um bis zu 2/3 reduziert wird, wenn << r d. Dies liegt daran, dass die Optimiererzustände für eingefrorene Parameter nicht gespeichert werden.
- Beim Modell GPT-3 175B sank der VRAM-Verbrauch von 1.2 TB auf 350 GB.
- Im Szenario, in dem r = 4 war und nur die Gewichte der Wert- und Abfragematrizen geändert wurden, wurde die Prüfpunktgröße von 350 GB auf 35 MB reduziert. Dadurch konnte das Training mit weniger GPUs durchgeführt werden.
- Da außerdem bei den meisten Parametern kein Gradienten-Update erfolgt, wurde beim Training des GPT-25 3B mit LoRA eine Beschleunigung um 175 % im Vergleich zum vollständigen Feintuning-Prozess erreicht.
Der Artikel erwähnt auch, dass, wenn der Feinabstimmungsprozess für eine andere Sprache erforderlich ist, das gesamte Modell anstelle von LoRA verwendet werden sollte.
Zusätzliches Wissen
Was ist ein Rang
Der Rang einer Matrix ist die Anzahl der linear unabhängigen Spalten oder Zeilen. Angenommen, wir haben eine Matrix mit n Spalten, und alle Spalten sind voneinander unabhängig, dann ist ihr Spaltenrang n. Ebenso ist der Zeilenrang einer Matrix mit n Zeilen n, wenn alle Zeilen voneinander unabhängig sind.
Der Zeilenrang und der Spaltenrang einer Matrix müssen gleich sein. Als Beispiel können wir uns die folgende Matrix ansehen.
Matrix A = [[1,2,5], [ 2, 4, 10] ]
Wenn wir uns die Matrix genau ansehen, können wir erkennen, dass die 2. Zeile doppelt so groß ist wie die 1. Zeile. Ebenso sind die 2. und 3. Spalte der Matrix 2 bzw. 5 Mal so groß wie die 1. Spalte. Mit anderen Worten: Während sich in der Matrix auf Zeilenbasis zwei Vektoren in derselben Zeile befinden und auf Spaltenbasis drei verschiedene Vektoren in einer anderen Zeile, gibt es auf Zeilen- und Spaltenbasis jeweils nur einen eindeutigen Vektor. Dies bedeutet, dass der Rang der Matrix 1 ist.
Um den Rang zu ermitteln, konvertieren wir die Matrix in ihre Staffelform und berechnen dann die Anzahl der Zeilen, die aus mindestens einem Wert ungleich Null bestehen.
Was ist eine Low-Rank-Matrix?
Bei Matrizen kann der Rang gleich oder kleiner als die Anzahl der Spalten oder Zeilen sein. Matrizen, die weniger linear unabhängige Zeilen oder Spalten haben als die aktuelle Anzahl der Zeilen oder Spalten, werden als Matrizen mit niedrigem Rang bezeichnet. Matrizen, bei denen alle Zeilen oder Spalten unabhängig sind, werden als Matrizen mit vollem Rang bezeichnet.
Was ist eine Rangfaktorisierung/-zerlegung?
Eine Matrix vom Rang r lässt sich als B = LR^T darstellen, indem man sie in die Matrizen L und R zerlegt. Dabei ist L eine Matrix der Dimensionen m × r, während R^T eine Matrix der Dimensionen r × n ist. Dieses Verfahren wird als Rangzerlegung bezeichnet.
Die Bedeutung der Rangfaktorisierung:
Die Rangfaktorisierung ist wichtig, weil sie es ermöglicht, eine Matrix in kleinere Matrizen L und R zu zerlegen und diese platzsparend zu speichern. Das bedeutet, dass man B speichern kann, indem man ihre Faktoren L und R speichert. Dadurch reduziert sich der Speicherbedarf von B von mn auf (m+n)r. Ein weiterer wichtiger Punkt ist, dass nach der Zerlegung einer Matrix in diese beiden kleinen Matrizen viele Berechnungen mit der Matrix durchgeführt werden können, ohne dass die ursprüngliche Matrix erneut erzeugt werden muss. Daher gilt die Rangfaktorisierung bei Matrizen mit niedrigem Rang stets als wichtiger erster Schritt. Nach der Rangfaktorisierung können Berechnungen deutlich schneller und speicherschonender durchgeführt werden.
Außerdem
Für detailliertere Informationen zu Matrizen niedrigen Rangs können Sie Ethan R. Epperlys Blog und die LoRA-Veröffentlichung lesen . Darüber hinaus können Sie die codebasierten Anwendungen von LoRA im Detail im GitHub-Repository microsoft/LoRA untersuchen.
Gizem ABALI, MSc. / Teamleiterin