LLM Grundlagen, Teil 4: Überblick

Fortsetzung von hier. Ein leichteres Kapitel als das vorherige, in dem dennoch neue Wörter eingeführt werden, mit deren Hilfe sich der Autor vor den richtig schwierigen Sachen durch geschickte Gaukelei zu drücken versucht. Die schwärzeste aller Boxen bleibt ungeöffnet. Dafür wird es das nächste Mal dann sehr technisch.

Wir wissen aus den letzten Teilen, was N-Gramme und Token sind, wir wissen, was ein Embedding ist. Was Neuronale Netze sind, wissen wir wohl auch; die stecken nämlich überall in den LLM drin. Jetzt nähern wir uns den fieseren Sachen.

1. Allgemeines Vorgehen beim Erzeugen eines LLM

Die allgemeinen Schritte beim Erzeugen eines LLM sind folgende:

  1. Daten sammeln und aufbereiten.
  2. LLM-Architektur anlegen: Wie sieht das überhaupt aus – Eingangsschicht, Ausgangschicht, Encoder-Decoder-Transformer?
  3. LLM trainieren, in mehreren Phasen:
    1. Mit großer Datenmenge Voraussagen üben. Dann ist schon mal ein basales LLM da.
    2. LLM wird erzogen: Finetuning, Reinforcement Learning with Human Feedback.
    3. Chatbot wird für Kunden angepasst
    4. Chatbot nutzt externe Anwendungen, schlägt also intern und unbemerkt bei Wolfram Alpha nach.

Wenn ein LLM gelernt hat, in gegebenen Texten das jeweils nächste, oder auch ein in der Mitte fehlendes, Token vorherzusagen, dann kann man es auch dazu benutzen, neue Texte zu erzeugen. Dann wird das ein Chatbot.

Der interessante Schritt für mich ist 2, auf dem das Training 3.1 aufsetzt. Das geschieht relativ automatisiert. Der Schritt 3.2 ist schon auch wichtig, damit man mit dem Bot überhaupt so interagieren kann, wie man es gewohnt ist. Dieser Schritt arbeitet mit kleineren Datenmengen, aber mit viel menschlicher Interaktion. Das sind die vielen vielen unterbezahlten Arbeiter und Arbeiterinnen in Entwickungsländern, die das LLM erst zu dem machen, was wir kennen: Die Antworten des LLM werden durch Menschen bewertet, worauf sich das System nach und nach an die Bewertung anpasst, wie das Neuronale Netze nun einmal tun.

Schritt 1 ist gesellschaftlich wichtig: Wo kommen diese Daten, zum Beispiel Texte, aber auch Bilder, her? Man nimmt alle Texte der Welt als Input, derer man habhaft werden kann. In allen Sprachen, die man so findet. Mit Tippfehler oder ohne. Privat oder professionell, Programmcode oder Gedicht. Pornografisch oder nicht, gestohlen oder nicht. Instagramdirektnachricht oder Office365-Dokument. Hochgeladene Texte bei Chatbots. Alles, was irgendwie erreichbar ist. Am beste frische Daten, was die Leute auf Instagram oder Facebook oder sonst überall halt so schreiben. GPT4 soll auf einer Datenbasis von 13.000.000.000.000 Token trainiert worden sein, das sind etwa 100 Millionen Bücher voll.

2. Kontext

Kontext, das ist das Drumherum. Im Studium wurde gelegentlich, so glaube ich mich zu erinnern zwischen Kotext und Kontext unterschieden: Kotext, dass sind die Wörter drumherum; zum Kontext gehört die Redesituation und der Ort der Kommunikation und vieles mehr. Der Kontext, um den es in unserem Zusammenhang geht, sind aber immer nur die Wörter.

(Exkurs: „Glaube ich mich zu erinnern“ – das feine Büchlein Lost World aus dem Jahr 2005 – Blogeintrag – sammelt Dinge, die uns verloren gegangen sind. Dazu gehört auch diese „glaube ich“-Floskel, die man 2005 ja einfach im Web durch eine Recherche überprüfen konnte. Möglicherweise kommt das wieder, weil man ja nichts mehr findet. Sicherheitshalber habe ich natürlich trotzdem geschaut, ob mich meine Erinnerung da nicht trügt.)

Bei LLMs ist der Kontext der vorangegangene Text, der bei der Erzeugung des nächsten Textteils mit berücksichtigt wird. Je nach System kann der Kontext zum Beispiel 30.000 Token lang sein. Das heißt, dass auf Grundlage der vorhergehenden 30.000 Token entschieden wird, welches Token als Nächstes drankommt. Länger zurück reicht das Gedächtnis der Maschine erst einmal nicht. Deshalb kann man sich sehr lange mit einem LLM-Chatbot unterhalten, bevor er den Anfang des Gesprächs vergisst. Und bei manchen Modellen ist der Kontext auch noch größer.

30.000, das ist aber schon recht viel. Einfache LLM haben einen Kontext der Länge 8.192, für mehr Geld kriegt man Zugang zu 32.768 Token Kontext, GPT-4.1 soll 1 Million haben. In den folgenden Grafiken gehe ich immer von einem Kontext der Länge 8.000 aus, weil das übersichtlicher.

Ich habe allerdings nicht wirklich versucht, ein Gespräch über so viele Token zu führen und danach nach meiner ersten Frage zu fragen, um zu schauen, ob die noch im Kontext ist oder nicht. Könnte man ja mal probieren.

Hier ein Beispiel für Kontextgröße 9, wobei immer das neu erzeugte Wort dem Kontext hinzugefügt wird und das erste Wort aus dem Kontext verschwindet:

3. Chunks und RAG

Weil 8.000 Token leichter verarbeitbar sind als längere Texte, werden eben jene längere Texte gerne in Chunks zerlegt. Das spielt zum Beispiel eine Rolle, wenn man ein LLM als Datenbasis benutzt.

Ein Szenario dazu sieht so aus: Ich lade bei GPT4All oder auch in ByLKI alle Deutsch-Kontaktbriefe der letzten 20 Jahre hoch, oder alle kultusministeriellen Schreiben. Diese Sammlung wünsche ich mir dann als Grundlage für Antworten auf meine Fragen, als Wissensdatenbank sozusagen, das Schlagwort dazu heißt Retrieval-Augmented Generation (RAG).

Die allgemeine Sprachfähigkeit, wenn man so weit gehen möchte, liegt im vortrainierten LLM, die konkreten Inhalte können aus den dem LLM bisher unbekannten Dokumenten der Wissensbasis kommen. (Wobei ich davon ausgehe, dass alle erreichbaren Kontaktbriefe und KMS ohnehin in den großen Modellen verwurstet sind, insofern sie ja online zugänglich waren.)

So konnen auf Grundlage einer allgemeinen Quasi-Sprachfähigkeit Fragen zu einer Bestimmten Textgrundlage beantwortet werden. Dazu werden die Texte, die ja vielleicht länger als der Kontext des LLM sind, in Chunks umgewandelt, die Chunks in Embeddings. Eine Frage an die Datenbank wird ebenfalls embedded und mit den embedded chunks verglichen; der Chunk, dessen semantischer Vektor dem Fragenvektor am nächsten kommt, wird als Kontext zusammen mit der ursprünglichen Frage an das eigentliche LLM weitergeleitet.

4. Alles bis auf das Wichtigste

4.1 Black Box 1

Es geht ein Chunk Text hinein in das System. Der besteht aus: dem Prompt, den vorangegangenen Prompts, versteckten Trainingsanweisungen, eventuell Material, das sich das LLM aus externen Quellen geholt hat, sowie der angefangenen Teilantwort darauf. Und es kommt 1 Token heraus, nämlich das nächste. Beim Training geht es darum, dieses nächste vorherzusagen, beim Generieren darum, eines zu produzieren. Wenn das Training erfolgreich war, ist die menschliche Nutzerin mit dem generierten Ergebnis zufrieden.

Nach diesem einen generierten Token wird eben dieses Token zum Eingangstext hinzugefügt, und der ganze Durchgang beginnt mit diesem erweiterten Input noch einmal von vorne. Danach wird das zweite generierte Token an den bereits erweiterten Input angefügt und bildet zusammen mit diesem den Input für den nächsten Zyklus, und das immer so weiter, bis ein Ende-Signal kommt oder eine maximale Tokenzahl erreicht ist.

Dieses wiederholte Wort-für-Wort erzeugen ist in den nächsten Grafiken nicht mehr dargestellt.

4.2 Black Box 2

Der Eingangstext wird est einmal in Token aufgeteilt. Siehe Blogeintrag.

Natürlich geht das Auswählen des nächsten Tokens nicht durch Nachschlagen der Wahrscheinlichkeiten von Bi-, Tri-, 4-, 5- und 40.000-Grammen in einer Tabelle. Es muss also anders gehen, nämlich mit einer Architektur aus Neuronalen Netzen. Die haben einer Nachschlagetabelle gegenüber den großen Vorteil, dass sie darauf trainiert werden können, Ähnlichkeiten zu erkennen, und damit eine größere Menge von Eingabedaten sinnvoll verwerten können. Details stecken in der inneren Black Box.

Der Input für die Black Box in der Mitte sind die 8.000 Token des Kontexts, also 8.000 Token in einer bestimmten Reihenfolge. Der Output ist eine Wahrscheinlichkeitsverteilung über alle Elemente des Wortschatzes des Modells. Das wahrscheinlichste Token wird jeweils als nächstes gewählt, abhängig von der Temperatur. Im Bild ist ein Token-Vokabular der Größe 100.000 angedeutet, andere Modelle haben vielleicht nur ein Vokabular der Größe 30.000.

4.3 Black Box 3

Die Eingangstoken erhalten ein berechnetes Embedding. Die Embeddings sind während des Trainings entstanden, auf eine Art, die prinzipiell vergleichbar ist mit der Art, wie sie im letzten Blogeintrag beschrieben ist. (Beim Training entsteht eine Matrix von Embeddings. Das Token wird in einen One-Hot-Vektor umgeformt, also mit lauter Nullen und einer einzigen 1 an der Stelle mit der Vektor-ID; dieser Vektor wird mit der Matrix multipliziert, das Ergebnis ist der Embedding-Vektor für dieses Token.)

4.4 Black Box 4

Frühere Modelle arbeiteten den Input sequentiell ab, also erst das erste Token des Kontexts, dann das zweite Token des Kontexts, und so weiter. Dann weiß das System ja automatisch, ob es gerade am ersten oder zweiten oder wievielten Token es arbeitet. Transformer-Verfahren bearbeiten alle Token des Kontexts unabhängig voneinander, also potentiell gleichzeitig, demnach parallel. Das ist gut, weil sich das Rechnen auf mehrere Computer verteilen lässt. Damit weiß das System aber erst einmal nicht, an welcher Position im Kontext sich das Token befindet. (Mehr dazu nächstes Mal.) Die Position ist allerdings semantisch wichtig, allein schon, weil in vielen Sprachen die Position von Subjekt und Objekt relativ fix ist und ein Wort am Anfang des Satzes etwas anderes bedeuten kann als am Ende: man bites dog. Deshalb wird das bisherige Embedding noch durch einen gelernten Positionsvektor modifiziert; dieser wird je nach System entweder addiert oder konkateniert, also hinten angehängt.

Der Positionsvektor kann absolut sein, also für das erste Element des Kontexts einen fixen Vektor, für das zweite einen fixen Vektor, für das dritte ebenso, und so weiter. -Dann geht es um die Position in der Sequenz. Oder er kann relativ sein, dann hängt der Wert ab vom Abstand zum aktuell untersuchten Token (aber jeweils mit einem festen Wert, also wenn das Training beendet ist, versteht sich).

Hier ein Diagramm, wie das Sprachmodell BERT (2018) vorgeht. Der Input besteht aus dem Text „alice follows the white rabbit follow the white rabbit neo“ und SEPARATOR-Token dazwischen. Jedes Token erhält ein gelerntes Embedding, dazu ein (absolutes) Positionsembedding, und zusammengehörende Elemente in einem Segment erhalten ebenfalls ein Embedding, das das markiert.

Daniel Voigt Godoy, BERT input embeddings, CC BY 4.0

Das Ziel ist, möglichst viel relevante Information in das Embedding zu packen, so dass die nachfolgenden Schichten damit arbeiten können. Andererseits: je ausführlicher das Embedding, desto mehr Rechenaufwand bei der Verarbeitung.

5. Tja

Jetzt sind wir an dem Punkt angelangt, an dem es schwierig wird. Wenn die Eingangsvektoren für die neue innere Black Box 10.000 Zahlen lang sind, und der Kontext nur 8.000 Token lang ist, dann besteht der Input für diese Black Box aus 80.000.000 Zahlenwerten, nur damit am Ende ein einziger Wert, die ID des nächsten Tokens herauskommt. Dazu brauchen wir Begriffe wie: Transformer, Encoder, Decoder, Attention. Puh.

Das war es dann aber auch weitgehend. Das Geheimnis der LLM ist tatsächlich, wie überzeugend es anhand des Trainings einen Kontext von 8.000 oder 40.000 Token benutzen kann, um das nächste Token vorherzusagen.

6. Links und Ausprobieren

Diesmal leider nichts.

Fortsetzung folgt.


Beitrag veröffentlicht am

in

Kommentare: 0

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert