6.1 – Übersicht über den Rolling Buffer KV Cache
In Abschnitt 4.4 haben wir die inkrementelle Inferenz als Optimierungstechnik besprochen, die einen Commonplace-KV-Cache nutzt. Dies funktioniert, indem die Abfrage-, Schlüssel- und Wertmatrizen für die Eingabesequenz einmal berechnet und daraus das erste Token der Ausgabesequenz generiert wird. Danach werden die Schlüssel- und Wertmatrizen zwischengespeichert. Wenn nachfolgende Token generiert werden, wird das zuletzt erstellte Token verwendet, um einen Abfragevektor (keine Matrix) und entsprechende Schlüssel- und Wertvektoren zu berechnen. Diese neuen Schlüssel- und Wertvektoren werden dann an die zwischengespeicherten Schlüssel- und Wertmatrizen angehängt. Dieser Ansatz ermöglicht es dem Modell, neue Token effizient zu generieren, da es nur einen Abfragevektor und kleine Aktualisierungen der zwischengespeicherten Schlüssel- und Wertmatrizen berechnen muss, anstatt die vollständigen Abfrage-, Schlüssel- und Wertmatrizen bei jedem Zeitschritt neu zu berechnen.
Rolling Buffer KV Cache erweitert dies noch weiter, indem es die Vorteile des Schiebefensters in Sliding Window Consideration nutzt. „Rolling Buffer“ bezieht sich auf die Schlüssel- und Wertmatrizen im Cache, die nur Informationen für Token innerhalb des aktuellen Aufmerksamkeitsfensters speichern. Dadurch kann der Cache Token außerhalb des lokalen Kontexts „vergessen“, wodurch die Speichernutzung erheblich reduziert wird und gleichzeitig die notwendigen Informationen für eine genaue Token-Generierung erhalten bleiben. Zusammengenommen ermöglichen diese Innovationen dem Modell, lange Eingaben effizient zu verarbeiten, sodass die Kontextlänge von 32.000 Token ohne übermäßige Speichernutzung möglich ist.
6.2 – Implementierung des Rolling Buffers
Im Gegensatz zum Commonplace-KV-Cache, bei dem die Größe der Matrizen mit der Vorhersage jedes Tokens zunimmt, bleibt der Rolling Buffer während der gesamten Inferenz auf einer festen Größe, die durch das Aufmerksamkeitsfenster bestimmt wird. Wenn das Fenster nach vorne gleitet, wird der Cache aktualisiert, indem er die Schlüssel- und Wertvektoren, die den Token entsprechen, die außerhalb des aktuellen Fensters liegen, durch diejenigen der neuen Token ersetzt, die in das Fenster eintreten. Dadurch wird sichergestellt, dass der Cache nur Informationen speichert, die für den aktiven Kontext related sind, wodurch die Speichernutzung reduziert wird.
Das Bild unten stammt aus dem Mistral 7B-Artikel und zeigt das Konzept des Rolling Buffers für drei Beispielsätze. Für den Satz „Dies ist ein Beispiel für…“ hat der Cache eine Fenstergröße von 4 Token. Zunächst werden die Token nacheinander angehängt: This
, is
, an
Und instance
. Wenn der fünfte Token, of
wird hinzugefügt, das erste Token, This
wird entfernt, um die Fenstergröße beizubehalten. Der Cache setzt diesen fortlaufenden Prozess fort und stellt sicher, dass jeweils nur die aktuellsten vier Token gespeichert werden.
6.3 – Vorfüllen und Chunken
Das Mistral 7B-Papier stellt auch die Konzepte von vor Vorfüllung Und Chunkingdie weitere Methoden zur Reduzierung des Zeit- und Speicherverbrauchs während der Inferenz bieten.
Vorbefüllung bezieht sich auf das Füllen des KV-Cache mit den Schlüssel- und Wertvektoren für alle Token in der Eingabesequenz vor der inkrementellen Inferenz. Dieser Prozess stellt sicher, dass der statische Teil der Eingabesequenz (z. B. eine Eingabeaufforderung) vollständig im Voraus verarbeitet wird, wodurch redundante Berechnungen beim Generieren neuer Token reduziert werden.
Chunking Bewältigt die Herausforderung beim Umgang mit langen Sequenzlängen, indem die Eingabe in Abschnitte mit fester Länge unterteilt wird Brockengleich der Fenstergröße des Aufmerksamkeitsmechanismus. Um eine Speicherüberlastung zu verhindern, werden die Schlüssel- und Wertmatrizen für jeden Block separat berechnet und iterativ dem Cache hinzugefügt. Chunking kann dann auch während der Inferenz verwendet werden, da mehr Token generiert werden. Token im neuesten Block kümmern sich nur um sich selbst und die im vorherigen zwischengespeicherten Block gespeicherten Token (sofern sie sich im Kontextfenster befinden). Dies wird im Bild unten veranschaulicht, das dem Mistral 7B-Papier entnommen ist.
7.1 – Zusammenfassung der Aktivierungsfunktionen
Aktivierungsfunktionen sind wesentliche neuronale Netzwerkkomponenten, die in allen Transformatormodellen zu finden sind und das Lernen komplexer Muster in Eingabedaten ermöglichen. Wenn Aktivierungen von einer vorherigen Neuronenschicht auf die nächste übertragen werden, werden sie mit Gewichten multipliziert und summiert, um etwas zu ergeben gewichtete Summen (bezeichnet mit z). Da die gewichteten Summen durch einfache Multiplikations- und Additionsoperationen gebildet werden, wird der Prozess der Änderung der Eingabeaktivierungen als a beschrieben lineare Transformation. Um komplexere Beziehungen zu erfassen, werden nichtlineare „Aktivierungsfunktionen“ verwendet, um die Z-Werte einem Bereich zwischen 0 und 1 (oder -1 und 1, je nach Funktion) zuzuordnen.
Eine der ersten weit verbreiteten Aktivierungsfunktionen battle die Sigmoidfunktiondas große adverse Summen reibungslos auf 0 und große optimistic Summen auf 1 abbildet. Sein Hauptmerkmal besteht darin, dass kleine Änderungen in der Eingabe um den Mittelpunkt (nahe 0) zu kleinen, gleichmäßigen Änderungen in der Ausgabe führen, was zur Stabilisierung des Lernprozesses beiträgt.
7.2 – Gleichgerichtete Lineareinheit (ReLU)
Trotz ihrer anfänglichen Beliebtheit weist die Sigmoid-Aktivierungsfunktion einige Probleme auf, darunter vor allem das Drawback des verschwindenden Gradienten, das wir in Abschnitt 2.2 besprochen haben. Um diese Einschränkungen zu beheben, wurde in der Arbeit von 1975 die Rectified Linear Unit (ReLU) vorgeschlagen. „Cognitron: Ein selbstorganisierendes mehrschichtiges neuronales Netzwerk“ von Kunihiko Fukushima (18).
Die ReLU-Aktivierungsfunktion vereinfacht die Berechnung, indem sie die Ausgabe für adverse Eingabewerte (z<0) auf Null setzt und positive Eingabewerte linear abbildet (z für z>0). Im Gegensatz zu Sigmoid vermeidet ReLU Sättigung für äußerst optimistic Beiträge, die Wahrung der Sensibilität gegenüber Veränderungen und die Ermöglichung eines effizienteren Lernens in tiefen Netzwerken.
Notiz: Sättigung beschreibt eine Aktivierungsfunktion, die unabhängig von Eingabeänderungen nahezu konstante Ausgaben erzeugt, was zu verringerten Gradienten führt und effektive Gewichtsaktualisierungen behindert. Das lineare Verhalten von ReLU für optimistic Werte verhindert dieses Drawback.
7.3 – Gated Linear Unit (GLU)
Gated Linear Items (GLUs) wurden 2017 von Dauphin et al. eingeführt. im Papier „Sprachmodellierung mit Gated Convolutional Networks“ (19). Während ReLU-Aktivierungsfunktionen in modernen neuronalen Netzwerkarchitekturen weiterhin weit verbreitet sind, erfreuen sich GLUs aufgrund ihrer Fähigkeit, komplexe sprachliche Muster und Beziehungen besser zu erfassen, bei Sprachmodellierungsaufgaben immer größerer Beliebtheit.
Ein wesentliches Merkmal von GLUs ist die Tormechanismus in jeder Einheit, der die Aktivierungsausgänge dynamisch anpasst. Dieser Mechanismus beinhaltet ein zusätzliches erlerntes Tor, mathematisch ausgedrückt als z1 ⋅ σ(z2)Wo z1 ist die Haupteingabe und z2 fungiert als Tor. Der zweite Eingang z2die durch eine Sigmoid-Aktivierungsfunktion geleitet wird σ(z2)steuert den Informationsfluss und bietet einen Mechanismus zur selektiven Aktivierung. Dieses Design mit zwei Eingängen unterscheidet GLUs von ReLU und bietet eine differenziertere Aktivierungsfunktion, die dazu beiträgt, das Risiko zu verringern, dass Neuronen dauerhaft inaktiv werden (ein häufiges Drawback bei ReLU). Wir gehen hier nicht auf die Feinheiten ein, aber wenn Sie daran interessiert sind, mehr über GLUs zu erfahren, empfehle ich Ihnen, das Originalpapier zu lesen.
7.4 – Swish Gated Linear Unit (SwiGLU)
Die Swish Gated Linear Unit (SwiGLU) wurde als Verbesserung der regulären Gated Linear Unit (GLU) vorgeschlagen und erstmals in der Veröffentlichung von Google Analysis aus dem Jahr 2022 vorgestellt. „PaLM: Sprachmodellierung mit Pathways skalieren“ neben dem PaLM-Modell (20). Durch die Kombination der Swish-Aktivierungsfunktion (ausgedrückt als z ⋅ σ(z)) Mit dem Gating-Mechanismus von GLU bietet SwiGLU eine größere Ausdruckskraft und eine bessere Fähigkeit, komplexe Beziehungen in Daten zu modellieren, was es besonders effektiv bei Sprachmodellierungsaufgaben macht. Beachten Sie den Unterschied zwischen den Swish- und GLU-Funktionen: Swish ist eine Funktion mit einer Eingabe, keine Funktion mit zwei Eingaben wie bei GLUs.
Mistral 7B nutzt die SwiGLU-Aktivierungsfunktion in seinen Feedforward-Unterschichten, wodurch seine Fähigkeit, aussagekräftige Muster aus Trainingsdaten zu extrahieren, verbessert und die Leistung während der Inferenz verbessert wird. Diese Verfeinerung trägt zur Effektivität von Mistral 7B bei der Handhabung komplizierter sprachlicher Strukturen und großer Kontextfenster bei.
Mit der Veröffentlichung des Mistral 7B betrat Mistral AI den LLM-Bereich zu einer Zeit, als die Modellgröße der Hauptfaktor für die Leistung battle. Anstatt dem Development immer größerer Modelle zu folgen, zeichnete sich Mistral AI durch den Schwerpunkt auf modern, speichereffiziente Designs aus, die mit einem Bruchteil der Parameter beeindruckende Ergebnisse liefern. Der Erfolg des Mistral 7B hat gezeigt, dass starke Leistung nicht immer riesige Modelle erfordert und dass strategische Designentscheidungen dazu führen können, dass kleinere Modelle mit ihren größeren Gegenstücken vergleichbar sind oder diese sogar übertreffen.
Aufbauend auf diesem Ansatz verschiebt Mistral weiterhin die Grenzen von Effizienz und Leistung und expandiert in Bereiche wie Combination of Specialists mit Mixtral 8x7B, Sprach-Imaginative and prescient-Modelle mit Pixtral und sogar den mobilen Bereich mit Mistral 3B. Im weiteren Verlauf des Unternehmens wird es interessant sein zu sehen, wie es die Technik für kleinere Modelle weiter vorantreibt.
(1) Jiang, Albert Q., et al., Mistral 7B (2023), arXiv-Vorabdruck arXiv:2310.06825.
(2) Umarmendes Gesicht, Mistral-KI (2024), HuggingFace.co
(3) Hendrycks, D. et al., Messung des umfassenden Multitasking-Sprachverständnisses (2020), arXiv-Vorabdruck arXiv:2009.03300
(4) Zhong, W., et al., AGIEval: Ein menschenzentrierter Benchmark zur Bewertung von Stiftungsmodellen (2023), arXiv-Vorabdruck arXiv:2304.06364
(5) Suzgun, M., et al., Herausfordernde, große Aufgaben und ob die Gedankenkette sie lösen kann (2022) arXiv-Vorabdruck arXiv:2210.09261.
(6) Ba, J., et al., Ebenennormalisierung (2016) arXiv-Vorabdruck arXiv:1607.06450.
(7) Zhang, B. und Sennrich, R., RMS-Normalisierung (2019) Vorabdruck arXiv:1910.07467.
(8) Shaw, P., et al., Selbstaufmerksamkeit mit relativen Positionsdarstellungen (2018) arXiv:1803.02155.
(9) Dai, Z., et al., Transformer-XL: Aufmerksame Sprachmodelle über einen Kontext fester Länge hinaus (2019) arXiv:1901.02860.
(10) Raffel, C., et al., Erkundung der Grenzen des Transferlernens mit einem einheitlichen Textual content-zu-Textual content-Transformer (2019) arXiv:1910.10683.
(11) Su, J., et al., ROFORMER: VERBESSERTER TRANSFORMATOR MIT EINBETTUNG DER DREHPOSITION (2023) arXiv:2104.09864
(12) Umarmendes Gesicht, Lama modellieren (2024). GitHub
(13) A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, AN Gomez, Ł. Kaiser und I. Polosuchin, Aufmerksamkeit ist alles, was Sie brauchen (2017), Fortschritte in neuronalen Informationsverarbeitungssystemen 30 (NIPS 2017)
(14) Shazeer, N., Schnelle Transformator-Dekodierung: Ein Schreibkopf ist alles, was Sie brauchen (2019) arXiv:1911.02150
(15) Ainslie, J., et al., GQA: Coaching verallgemeinerter Multi-Question-Transformer-Modelle aus Multi-Head-Checkpoints (2023) arXiv:2305.13245
(16) Raffel, C., et al., Erkundung der Grenzen des Transferlernens mit einem einheitlichen Textual content-zu-Textual content-Transformer (2023) arXiv:1910.10683
(17) Beltagy, I., et al., Longformer: Der Lengthy-Doc-Transformer (2020) arXiv:2004.05150
(18) https://hyperlink.springer.com/article/10.1007/BF00342633
(19) Dauphin, YN, et al., Sprachmodellierung mit Gated Convolutional Networks (2017) arXiv:1612.08083
(20) Chowdhery, A., et al. PaLM: Skalierung der Sprachmodellierung mit Pathways (2022) arXiv:2204.02311