Stellen Sie sich eine magische Wissensdatenbank vor, in der Einträge nicht nur statische Sammlungen von Wörtern sind, sondern lebendige Entitäten, die menschliche Texte verstehen und generieren können. Willkommen in der Welt der Large Language Models (LLMs), die die Grenzen der natürlichen Sprachverarbeitung auf verblüffende Weise erweitern. Als Softwareentwickler sind wir gerade dabei, eine faszinierende Reise zu beginnen, die uns durch die inneren Strukturen dieser linguistischen Mechanismen führt. Immerhin haben Large Language Models wie GPT-4, Claude oder Llama die KI-Landschaft in den letzten Jahren revolutioniert.
Prof. Dr. Michael Stal arbeitet seit 1991 bei Siemens Technology. Seine Forschungsschwerpunkte umfassen Softwarearchitekturen für große komplexe Systeme (Verteilte Systeme, Cloud Computing, IIoT), Eingebettte Systeme, und Künstliche Intelligenz. Er berät Geschäftsbereiche in Softwarearchitekturfragen und ist für die Architekturausbildung der Senior-Software-Architekten bei Siemens verantwortlich.
Fasten your Seat Belts!
- Einführung in LLMs
- Hardwareanforderungen und pretrained Models
- Architekturtypen von LLMS
- Reasoning Modelle
Grundlagen von LLMs
Ein Large Language Modell ist eine Art künstliche Intelligenz (KI), die darauf ausgelegt ist, menschliche Sprache zu verarbeiten und zu generieren. Es handelt sich um ein Lernmodell, das tiefschichtige neuronale Netze verwendet, um Muster und Beziehungen innerhalb von Sprachdaten zu lernen. Das "Large" in LLM bezieht sich auf die enorme Menge an Trainingsdaten und die enorme Anzahl an Parametern, die sich als justierbare Knöpfe betrachten lassen und die das Modell verwendet, um Vorhersagen zu treffen.
LLMs basieren auf der Transformer-Architektur, die 2017 in „Attention Is All You Need“ eingeführt wurde. Im Gegensatz zu RNNs oder CNNs nutzt der Transformer Self-Attention-Mechanismen, um Kontextbeziehungen zwischen allen Wörtern in einem Text parallel zu erfassen.
Schlüsselkomponenten des Transformers sind unter anderem:
- Encoder-Decoder-Struktur (bei LLMs oft nur der Decoder)
- Multi-Head Attention
- Feed-Forward-Netzwerke
- Residual Connections und Layer Normalization
Klingt alles wie böhmische Dörfer? Ich versuche, die Konzepte näher zu erläutern.
Ein LLM setzt sich vereinfacht aus den folgenden Komponenten zusammen:
- Tokenizer: Dies ist der Türsteher des Modells, der dafür verantwortlich ist, die Eingabetexte in kleinere Einheiten namens Tokens zu zerlegen. Tokens können Wörter, Subwörter (kleinere Einheiten innerhalb von Wörtern) oder sogar Zeichen sein.
- Embeddings: Die Embeddings-Schicht ist der Ort, an dem die Magie beginnt. Sie wandelt die Eingabe-Tokens in numerische Darstellungen um, die man als Embeddings bezeichnet und die das Modell verstehen kann. Diese Embeddings erfassen die semantische Bedeutung der Token, sodass das Modell zwischen Wörtern mit ähnlichen Bedeutungen unterscheiden kann.
- Encoder: Der Encoder ist das Gehirn des Modells, in dem die Magie passiert. Er nimmt die Embeddings und generiert eine kontinuierliche Darstellung des Eingabetextes, oft als "kontextualisierte Darstellung" bezeichnet. Diese Darstellung erfasst die Nuancen der Sprache, wie Syntax, Semantik und Kontext.
- Decoder: Der Decoder ist die kreative Seite des Modells, die dafür verantwortlich ist, Text basierend auf der Eingabe und der kontextualisierten Darstellung zu generieren. Es verhält sich wie ein hoch entwickelter Sprachgenerator, der kohärente und kontextuell relevante Texte produzieren kann.
- Trainingsziel: Das Trainingsziel ist das Leitprinzip des Modells, das definiert, was das Modell während des Trainings optimieren soll. Häufige Ziele sind maskiertes Sprachmodellieren (Vorhersage fehlender Token) und Vorhersage des nächsten Satzes (Vorhersage, ob zwei Sätze aufeinanderfolgen).
Jedes LLM besteht aus einem Stapel neuronaler Schichten – genau genommen aus Dutzenden bis Hunderten identischer Transformer-Schichten für eine hierarchische Merkmalsverarbeitung:
- Frühe Schichten erfassen lokale Muster (z. B. Wortgruppen).
- Tiefe Schichten modellieren globale Kontexte und Abstraktionen.
Beispiel: GPT-3 hat 96 Schichten, LLaMA 2 bis zu 70 Schichten.
Ziel eines Tokenizers ist die Umwandlung von Rohtext in diskrete Einheiten (Token). Dafür gibt es mehrere Methoden:
- Byte-Pair Encoding (BPE): Kombiniert häufige Zeichenfolgen (z. B. „un“ und „happy“ zu „unhappy“).
- WordPiece: Ähnlich BPE, optimiert für Subword-Einheiten.
- SentencePiece: Verarbeitet Rohtext ohne Vor-Tokenisierung.
Beispiel: Der Satz „KI ist faszinierend!“ könnte in Tokens wie `["KI", " ist", " fas", "zin", "ierend", "!"]` zerlegt werden.
Embeddings: Die Bausteine der LLMs
Embeddings sind die Grundlage der LLMs, die es dem Modell ermöglichen, Tokens (Wörter, Subwörter oder Zeichen) als numerische Vektoren darzustellen. Jeder Token wird in einen hochdimensionalen Vektor (z. B. 768 oder 4096 Dimensionen) umgewandelt. Diese Vektoren lernt das Modell während des Trainings und erfasst die semantische Bedeutung der Eingabe-Token. Es gibt verschiedene Arten von Embeddings, darunter:
- Wort-Embeddings stellen Wörter als Vektoren in einem hochdimensionalen Raum dar. Jedes Wort ist mit einem eindeutigen Vektor assoziiert, sodass das Modell zwischen Wörtern mit ähnlichen Bedeutungen unterscheiden kann. Die Vektoren bestehen aus reellen Zahlen und umfassen nicht selten mehrere Hundert Elemente. Jede Dimension repräsentiert eine von der AI gewählte Domäne, etwa Farbe, Tiergattung.
- Subwort-Embeddings stellen Subwörter (kleinere Einheiten innerhalb von Wörtern) als Vektoren dar. Dies ermöglicht es dem Modell, die Nuancen der Wortmorphologie zu erfassen und unbekannte Wörter zu handhaben.
- Zeichen-Embeddings stellen einzelne Zeichen als Vektoren dar. Dies ist nützlich für die Handhabung von Sprachen mit komplexen Schriftsystemen oder für die Modellierung von Zeichenmustern.
Wichtig an dieser Stelle ist, dass wir Entwickler die Dimensionen nicht selbst definieren. Das macht das Modell beim Training ganz ohne unser Zutun. Eine Dimension könnte etwa Farbe sein, eine andere Länge. Jedenfalls liegen ähnliche Begriffe wie "Kater" und "Katze" in dem mehrdimensionalen Vektorraum ganz nahe beieinander. Begriffe wie "Eiscreme" und "Weltall" liegen hingegen weit auseinander.
Positionelle Codierungen und Embeddings
Positionelle Codierungen, im Englischen als positional embeddings bezeichnet, spielen eine entscheidende Rolle bei LLMs, indem sie die Reihenfolge der Eingabe-Token erhalten. LLMs zerlegen den Eingabetext in eine Folge von Token und wandeln jedes Token in eine numerische Darstellung um. Allerdings geht bei dieser Umwandlung die Reihenfolge der Token verloren, die für das Verständnis des Kontexts und der Beziehungen zwischen Token essenziell ist. Um dieses Problem zu lösen, führt man positionelle Codierungen zu den embedded Token hinzu, um sich die Reihenfolge der Token zu merken. Das LLM lernt die positionellen Codierungen während des Trainings. Sie dienen dazu, die Position jedes Tokens in der Sequenz zu codieren. Dies ermöglicht es dem Modell, die Beziehungen zwischen Token und ihrer Position in der Sequenz zu verstehen.
Es gibt verschiedene Arten positioneller Codierungen:
- Absolute positionelle Codierungen verwenden eine feste Codierung für jede Position in der Sequenz.
- Relative positionelle Codierungen verwenden eine relative Codierung, die von der Distanz zwischen Token abhängt.
- Gelernte positionelle Codierungen lernt das Modell während des Trainings. Sie lassen sich basierend auf der spezifischen Aufgabe und dem Datensatz anpassen.
Feed-Forward-Layer: Die Arbeitstiere der LLMs
Feed-Forward-Layer (vollständig verbundene Layer) sind die Arbeitstiere der LLMs. Sie nehmen die Embeddings als Eingabe und generieren eine kontinuierliche Darstellung des Eingabetextes. Feed-Forward-Layer bestehen aus:
- Lineare Layer wenden eine lineare Transformation auf die Eingabe-Embeddings an, um dadurch eine neue Menge von Vektoren zu generieren.
- Aktivierungsfunktionen wie ReLU (Rectified Linear Unit) oder GELU (Gaussian Error Linear Unit), führen Nichtlinearität in das Modell ein, um komplexe Muster und Beziehungen zu erfassen.
Multi-Head-Attention, Self-Attention und Cross-Attention: Der Schlüssel zum kontextuellen Verständnis
In Sätzen wie „Der Hund jagte die verschlagene Katze durch das ganze Haus. Sie konnte sich aber rechtzeitig verstecken“ kommen verschiedene Wörter vor, von denen jedes einzelne nicht einfach isoliert im Raum steht. Im ersten Satz bezieht sich „Hund“ unter anderem auf eine Tätigkeit „jagte“ und die gejagte „Katze“. Uns liegen also starke Verbindungen des Wortes „Hund“ zu zwei weiteren Wörtern im selben Satz vor. Jedes dieser Wortpaare definiert die Beziehung eines Wortes im Satz zu einem anderen. Diese Verbindungen können stärker oder schwächer sein. Ein LLM berechnet die Beziehungen für jedes Wort im Satz zu jedem anderen Wort im Satz. Das nennt sich Self-Attention. Sie bezeichnet, wie stark sich Token gegenseitig „beachten“.
Weil das LLM parallel an mehreren Stellen eines Textes die entsprechenden Attentions erstellt, haben wir es mit Multi-Head-Attentions zu tun. Ohne ausreichenden Weitblick gehen einem LLM allerdings wichtige satzübergreifende Beziehungen verloren. Würden LLMs also Text in Sätze zerlegen und jeden Satz für sich bearbeiten, ginge im zweiten Satz verloren, dass sich das „Sie“ auf „Katze“ im ersten Satz bezieht. Cross-Attention dient dazu, um Attention/Beziehungen auch über einen größeren Kontext festzustellen. Wichtig dabei ist: LLMs sind in der Größe des betrachteten Kontexts beschränkt. Je größer der Kontext, desto größer der benötigte Arbeitsspeicher. Die Kontextgrößen reichen von wenigen Kilobytes (ein paar Schreibmaschinenseiten) bis zu mehreren Megabytes (ganze Buchinhalte). Wenn das LLM bereits zu viel Kontextinformation gemerkt hat und der Speicher "überläuft", beginnt es vorangegangenen Kontext zu "vergessen".
Self-Attention ist ein Mechanismus, der es dem Modell ermöglicht, auf verschiedene Teile des Eingabetextes zu achten und eine kontextualisierte Darstellung zu generieren. Zu welchem anderen Wort hat das gerade betrachtete Wort die größte Beziehung (Attention).
Multi-Head-Attention ist ein Mechanismus, der es dem Modell ermöglicht, auf verschiedene Teile des Eingabetextes von geschiedenen Perspektiven gleichzeitig zu achten. Statt einer einzigen Attention-Operation verwendet der Transformer mehrere „Heads“: Heads erfassen unterschiedliche Beziehungen (z. B. Syntax vs. Semantik). Die Outputs der Heads werden konkateniert und linear projiziert.
Vorteil: Das Modell lernt gleichzeitig diversifizierte Kontextabhängigkeiten.
Cross-Attention ist ein Mechanismus, der es dem Modell ermöglicht, über weitere Entfernung von Tokens auf externe Informationen zu achten wie den Eingabetext (Prompt) oder andere Modelle. Das hat insbesondere auch für den Übergang von der Encoder- zur Decoder-Schicht eine Bedeutung.
Das erreicht das Modell durch die folgenden Schritte:
- Query-, Key- und Value-Vektoren: Das Modell generiert Query-, Key- und Value-Vektoren aus den Eingabe-Embeddings. Der Query-Vektor repräsentiert den Kontext, der Key-Vektor repräsentiert die Eingabe-Token, und der Value-Vektor repräsentiert die Wichtigkeit jedes Tokens.
- Achtungsgewichte: Das Modell berechnet Achtungsgewichte, indem es das Skalarprodukt von Query- und Key-Vektoren berechnet. Diese Gewichte repräsentieren die Wichtigkeit jedes Tokens im Kontext.
- Gewichtete Summe: Das Modell berechnet eine gewichtete Summe der Value-Vektoren, indem es die Achtungsgewichte als Koeffizienten verwendet. Das generiert eine kontextualisierte Darstellung des Eingabetextes.
Nach der grundlegenden Übersicht zu LLMs geht es im nächsten Beitrag um die Hardwareanforderungen und unterschiedliche pretrained Models.