Implementierung der Spärlichkeit mit der Top-K-Funktion
Die Kernoperation von Q-Sparse besteht darin, eine Top-K-Spärlichkeitsfunktion auf den Eingabetensor anzuwenden.
Konkret verwendet die Transformer-Architektur nn.Linear-Schichten (Matrixmultiplikation) in den Aufmerksamkeits- und Feed-Forward-Schichten für Projektionen, die als Y=X·W^T dargestellt werden können. (Wobei X der Eingabetensor, W die Gewichte und Y der Ausgabetensor sind)
In Q-Sparse wird für einen Eingabeaktivierungstensor X zunächst der Absolutwert |X| berechnet und sortiert, um die K Elemente mit den größten Absolutwerten zu finden.
K ist hier ein voreingestellter Hyperparameter, der den Grad der Spärlichkeit bestimmt.
Anschließend erstellt Q-Sparse einen binären Maskentensor M mit der gleichen Form wie X, wobei die entsprechenden Positionen in M für die K Elemente mit den größten Absolutwerten in |X| auf 1 gesetzt werden und die übrigen Positionen auf 0.
Dann wird der Eingabetensor X mit dem Maskentensor M durch Hadamard-Produkt (elementweise Multiplikation) multipliziert, um den spärlichen Tensor X_sparse zu erhalten.
Während der Vorwärtspropagation ersetzt der spärliche Tensor X_sparse den ursprünglichen Eingabetensor X in den nachfolgenden Berechnungen (wie Matrixmultiplikation).
Da die meisten Elemente in X_sparse auf Null gesetzt wurden, kann dies den Rechenaufwand und die Speicherbandbreitenanforderungen erheblich reduzieren.
Während der Rückwärtspropagation verwendet Q-Sparse den Straight-Through Estimator (STE) zur Berechnung des Gradienten der Top-K-Funktion.
Bei herkömmlichen Trainingsmethoden müssen normalerweise die Gradienten der Verlustfunktion in Bezug auf die Netzwerkparameter berechnet und die Parameter mittels Gradientenabstieg aktualisiert werden, um den Verlust zu minimieren.
Wenn jedoch nicht-differenzierbare Operationen wie Quantisierung oder Top-K im Netzwerk vorhanden sind, treten Probleme bei der Gradientenberechnung auf, da die Gradienten der Ausgabe in Bezug auf die Eingabe an den meisten Punkten Null sind, was zu einer ineffektiven Gradientenausbreitung führt.
STE umgeht das Problem des verschwindenden Gradienten, indem der Gradient direkt an den Tensor vor der Spärlichkeit weitergegeben wird.
In der normalen Rückwärtspropagation ist der Gradient der Verlustfunktion L in Bezug auf x ∂L/∂x=∂L/∂y⋅∂y/∂x, aber aufgrund der Nicht-Differenzierbarkeit kann dies nicht direkt berechnet werden.
Die STE-Lösung besteht darin, nur den Gradienten der Verlustfunktion in Bezug auf den spärlichen Tensor y zu berechnen und diesen dann direkt auf den ursprünglichen Tensor x zu kopieren, d.h. ∂L/∂y direkt als Schätzung für ∂L/∂x zu verwenden.
Für Feed-Forward-Schichten verwendet Q-Sparse die quadratische ReLU-Funktion anstelle der regulären ReLU-Aktivierungsfunktion, wobei die Quadrierung die Spärlichkeit der Aktivierung weiter erhöht (⊙ bezeichnet das Hadamard-Produkt).
Um quantisierte Modelle zu unterstützen, quantisiert Q-Sparse den Eingabetensor vor der Anwendung der Top-K-Spärlichkeit, um sicherzustellen, dass die Spärlichkeitsoperation mit der quantisierten Darstellung kompatibel ist. Die Funktionsdarstellung lautet wie folgt:
Hierbei ist ε eine kleine Konstante, um eine Division durch Null zu vermeiden.
Insbesondere verwendet Q-Sparse für 1-Bit-quantisierte Gewichte die folgende Quantisierungsfunktion, wobei α der durchschnittliche Absolutwert des Gewichtstensors W ist.
60% der Aktivierungsparameter erreichen den gleichen Effekt
Vergleichsexperimente zeigen, dass Q-Sparse sowohl in Bezug auf die Spärlichkeitsrate als auch auf die Modellleistung deutlich besser abschneidet als frühere ReLU-Methoden.
Um die spezifischen Effekte von Q-Sparse zu untersuchen, bewerteten die Autoren seine Leistung in drei Aufgaben: Training von Grund auf, Fortsetzungstraining und Feinabstimmung.
Für das Training von Grund auf wurde das Llama-Modell verwendet. Die Ergebnisse zeigen, dass Q-Sparse mit 70% Top-K (d.h. 40% Gesamtspärlichkeit) bei 700M- und 7B-Modellen einen Trainingsverlust erreichen kann, der mit dem dichten Baseline vergleichbar ist.
Das Ziel des Fortsetzungstrainings ist es, dichte Modelle spärlich zu machen. Hier war das Experimentobjekt Mistral-7B.
Die Ergebnisse zeigen, dass bei 2,9B und 3,8B Aktivierungsparametern die Scores des Modells in Datensätzen wie ARC und MMLU keine signifikanten Rückgänge aufweisen.
In den Feinabstimmungsexperimenten zeigten Q-Sparse für die Modelle Qwen-7B und Mistral-7B ähnliche Ergebnisse wie beim Fortsetzungstraining, wobei etwa 60% der Aktivierungsparameter eine Leistung erreichten, die der der dichten Modelle sehr nahe kam.
Diese Ergebnisse bedeuten, dass spärliche Aktivierungsmodelle bei gleicher Leistung im Vergleich zu dichten Modellen während des Inferenzprozesses die Anzahl der Aktivierungsparameter und damit den FLOPS-Verbrauch erheblich reduzieren können.
Für quantisierte Modelle wendete das Team Q-Sparse auf ihr selbst entwickeltes BitNet b1.58-Modell an und führte Training und Evaluierung auf mehreren Datensätzen durch.
Es zeigt sich, dass bei Größen von 700M und 7B die Konvergenzgeschwindigkeit und der endgültige Verlustfunktionswert der quantisierten Modelle mit Q-Sparse vergleichbar mit denen der quantisierten Modelle ohne Q-Sparse (BitNet b1.58) sind.
Dies deutet darauf hin, dass Q-Sparse nahtlos in quantisierte Modelle integriert werden kann, ohne das Training und die Konvergenz des Modells signifikant zu beeinflussen.
Die Autoren glauben daher, dass die Kombination von Q-Sparse mit Quantisierungstechniken die Effizienz großer Sprachmodelle in der Inferenzphase weiter verbessern kann.
Entdeckung eines neuen "Scaling Law" für Inferenzoptimierung
Neben der Bewertung der Leistung dieser Modelle mit spärlicher Aktivierung untersuchten die Autoren auch die Beziehung zwischen Modellleistung, Größe und Spärlichkeitsrate und machten einige neue Entdeckungen.
Skalierungsgesetz für Modelle mit spärlicher Aktivierung: Die Autoren fanden heraus, dass die Leistung von Modellen mit spärlicher Aktivierung, ähnlich wie bei dichten Modellen, einem Potenzgesetz-Skalierungsverhältnis folgt.
Konkret kann der Wert der Verlustfunktion L(N,S) bei Konvergenz für eine gegebene Spärlichkeitsrate S durch folgende Formel angenähert werden: