Neuronale Netze und Transformer-Modelle

Die Ausführungen von Andreas Kunar, „GGML- der KI-Computer“ in den PCNEWS 178/2023 lassen bezüglich der Funktionsweise von KI – Strukturen kaum Wünsche offen. Trotzdem erschiene es noch angebracht, die Funktionsweise von Transformer- Architekturen , wie sie bei ChatGPT oder Google – BERT verwendet werden, noch einmal unter die Lupe zu nehmen. Vor allem der Aufsatz „Was steckt hinter ChatGPT & Co?“ von Manon Bischoff im Spektrum der Wissenschaft 5.23 (S 59 – 69) ermöglicht hier gute Erklärungsmodelle.

1. Wie funktioniert das neuronale Netz?

Bei der Darstellung des Funktionsprinzips geht man davon aus, dass die Gewichtung für die einzelnen „Verbindungen“ zwischen den Neuronen-Schichten immer wieder angepasst werden. Das in den Lerndurchläufen erzeugte Modell kann dann auch auf Daten angewandt werden, die die Künstliche Intelligenz (KI) im Training noch nicht kennengelernt hat. Dabei hat die Architektur des Netzwerkes „versteckte“ Schichten, die nicht direkt an die Eingabe- oder Ausgabe-Schicht gekoppelt sind, werden sie »Deep Neural Networks« genannt. Deep Neural Networks können Hunderttausend oder Millionen Neuronen-Schichten aufweisen. Es entstehen sehr komplexe Architekturen, womit beim sogenannten »Deep Learning« immer komplexere Probleme gelöst werden können.

Die Verfahren zum Einsatz der vielen Schichten nennen sich „Convolutional Neural Networks“ („gefaltete“ neuronale Netzwerke; CNN), „Deep Belief Networks“ (CBN) und „Recurrent Neural Newtorks“ („wiederkehrende“ neuronale Netzwerke RNN).

CNN nutzt beispielweise Prinzipien der linearen Algebra (Matrizenmultiplikation), um Muster in einem Bild zu erkennen. Dies wird mit graphischen Verarbeitungseinheiten zum Trainieren der Modelle bewerkstelligt. Die Eingabedaten sind Bilder, die nach verschiedenen Aspekten (Verzerrungen, Gewichtungen) ausgewertet werden. Auf diese Weise kann CNN zwischen Bildern unterscheiden und sie klassifizieren. Eine erste Version von CNN -LeNet (benannt nach dem Erfinder Yann LeCun) konnte handgeschriebene Ziffern erkennen (Lesen von Schecks und Postleitzahlen). Diese Konstruktion aus 1980 wurde 2012 wieder aufgegriffen und mit verbesserter Technologie konnten große Datensätze abgearbeitet werden.

Das Netz kann aber auch so aufgebaut sein, dass die Algorithmen dafür sorgen, dass die Information nicht nur vom Eingang zum Ausgang übertragen wird, sondern die Neuronen können die Daten durch eine „Schleifenarchitektur“ auch in zurückliegende Schichten übertragen. Den Unterschied macht die „Verschaltung“ der Netzwerkarchitektur aus. Der Name des Netzes wurde oben kurz erwähnt: Rekurrentes neuronales Netz (RNN).

Ein einfaches neuronales Netz kann in Excel implementiert werden (Harald Iglseder, 2022, HTL-Wien-10): Es soll mit einem gewichteten Netz die Umwandlung von fünfstelligen Binärzahlen in Dezi­malzahlen simulieren (ist auch als Excelprogramm verfügbar):

Wenn man das Excel-Sheet anklickt, sieht man, dass hier bei der Verarbeitung der Gewichte eine logistische Funktion 1/(1+exp(-i)), i…Inputsignal) im Spiel ist, die „Gewichte“ im Netz zur Verfügung hat. Es handelt sich dabei um die „logistische Aktivierungsfunktion“: Biologische Neuronen verfügen über einen „Schwellwert“, d.h. das Neuron gibt erst ein Signal ab, wenn die eintreffenden Signale einen bestimmten Grenzwert überschreiten. Der Wertebereich von Neuronen ist also nach oben und unten beschränkt. Dies leistet die logistische Funktion. Dieser Schwellwert muss erst per Training erlernt werden.

Man beachte, dass das Netz den Algorithmus zur Berechnung der Dezimalzahl aus Dualzahlen (11011 = 16 + 8 +2+1 = 27) nicht zur Verfügung hat. Das Netz erzeugt im Laufe des Lernprozesses Werte für die „Gewichte“ (in den Farben „hellblau“ bis „grün“ dargestellt), die den Verbindungen (den „Vektoren“) der (künstlichen) Synapsen entsprechen. Dadurch entsteht eine angenäherte Zahl, die als 31*0,88 = 27.28, abgerundet 27, den Ausgabewert entspricht.

In der Realität ist die Anzahl der Schichten („Layer“) natürlich deutlich höher. Dabei wurde eine „Faltungsschicht“ als erste Schicht eingeführt, die Informationen über die weiteren Schichten enthält. Wenn man beispielsweise „Bilder“, in Pixel dargestellt, verarbeiten möchte, wandelt die Faltungsschicht nun das gegebene Bild in numerische Werte um und ermöglicht es dem Netzwerk „räumliche Bilder“ zu „verstehen“. „Faltung“ ist also mathematisch eine Operation, um zwei Datensätze zusam­menzuführen.

Bilder mit vielen Pixeln (z.B. 4 MByte) müssen vom Informationsgehalt her verkleinert bzw. „ausgedünnt“ werden. Dazu wird „Pooling“, ein Zusammenfassen von Schichten, verwendet, um die Dimension des Bildes zu reduzieren. Das Ergebnisfeld enthält dann die Durchschnittswerte bei der Berechnung des Musters des Empfangsfeldes.

Als alternative Methode wird ein Pixel mit dem maximalen Wert aus der Vielzahl ausgewählt und zum Ausgangsfeld gesendet. Dabei kommen „Filter“ zum Einsatz, die z.B. die Größe 3*3 haben, das Eingangsbild „überstreichen“ und die größten Werte herausfiltern. Für die einzelnen Ausschnitte werden Matrizenmultiplikationen durchgeführt (siehe untere Abbildung).

Um dem Netz jetzt zu sagen, welche Eingabewerte es verarbeiten soll, ohne dass es eindeutige Vorgaben bekommt, muss das Netz selbst lernen, welche Einstellungen am meisten geeignet sind. Man überträgt beispielweise Pixelwerte eines Bildes (eines Tieres) und vergleicht Anfangswerte mit dem korrekten Resultat. Am Anfang wird das schlecht funktionieren, aber mit jedem Durchlauf besser. Das Programm justiert sich immer wieder nach und am Ende des Trainings soll das Programm in der Lage sein, auch Bilder zu klassifizieren, die es nie zuvor gesehen hat. Der Endpunkt des „Trainings“ bedeutet, dass innere Parameter, die „Gewichte“, so angepasst sind, dass das Netz die antrainierte Aufgabe gut lösen kann (siehe auch unser obiges Beispiel zur Zahlenumwandlung). Die Gewichte bestimmen auch die „Worteinbettungen“ d.h. Wörter müssen so geeignet dargestellt werden, dass ähnliche Bedeutungen der Worte sich auch in der mathematischen Darstellung kaum unterscheiden. So ordnet man Hund und Katze ähnliche Vektoren zu („Haustier“, „Fell“, “füttern“), während Hund und Mund trotz der ähnlichen Buchstabenwahl eine größere Entfernung voneinander aufweisen, und daher unterschiedliche Vektoren haben werden. Manchmal geht es um einfache Arithmetik: Zieht man etwa vom Wort „Hengst“ die Darstellung „männlich“ ab, sollte das Ergebnis in der Nähe von „Stute“ liegen! Siehe auch die Abbildung.

Wie oben schon erwähnt, sorgen die Algorithmen dafür, dass die Information nicht nur vom Eingang zum Ausgang übertragen wird, sondern die Neuronen können die Daten durch eine „Schleifenarchi­tektur“ auch in zurückliegende Schichten übertragen. Das Netzwerk bekommt einer Art „Gedächtnis“.

Traditionelle maschinelle Übersetzungsprogramme wie „Google Translate“ basieren auf diesen rekur­renten neuronalen Netzen, die allerdings keine langen Dateneingaben verarbeiten können. Denn die Informationen, die in ihren inneren Vektoren gespeichert sind, gehen nach mehrmaligem Aktualisieren wieder verloren. Wenn etwa zwei Wörter aufeinander Bezug nehmen und sie voneinander weit entfernt sind, kann das Programm dies meist nicht erkennen. Außerdem lassen sich die Rechenschritte nicht „parallelisieren“: Das Netz kann die Inhalte nur Wort für Wort abarbeiten und nicht parallel.


2. Fortschritte durch die Transformer-Architekturen


Nun hat man einen neuen Ansatz gefunden: Die Abkürzung GPT heißt „Generative Pre-trained Transformer“. Transformer sind spezifische neuronale Netze, die einen „Aufmerksamkeits-Mechanismus“ enthalten: Um herauszufinden, welche Worte zusammenhängen, ordnet man jedem Wort einen Schlüssel-, Wert- oder Anfragevektor zu und verrechnet sie miteinander („Attention is all you need“). Auch wir Menschen nehmen nicht jedes Signal unserer Umgebung wahr – das Gehirn filtert unentwegt Sinneseindrücke und lenkt die Aufmerksamkeit auf relevante Signale.

„Ich“               -> v1 = (0,1,0, …..0)  mit Wert v1, Anfrage q1 und daraus Schlüssel k1
„lese“              -> v2 = (1,0,0,……0) mit Wert v2, Anfrage q2 und daraus Schlüssel k2
„Zeitung“         -> v3 = (0,0,1,……0) mit Wert v3, Anfrage q3 und daraus Schlüssel k3

Beim Aufmerksamkeitsschritt werden nun Koeffizienten ai berechnet (a1 = q1*k1, a2 = q2*k2,..), die die Worte „Ich“, „lese“ , „Zeitung“ unterschiedlich gewichten: „Ich“ bekommt y1 =a1*v1+ a2*v2+ a3*v3  und damit einen neuen gewichteten Wert y1.  

Diesen Mechanismus versuchen Transformer-Netzwerke zu übernehmen:

Wieder einmal steht die Worteinbettung im Vordergrund: Relevante Informationen der Eingabe werden erfasst und die Wörter codiert. Das macht der Encoder. Er sammelt diese Informationen und speichert sie in einen Vektor. Der Vektor wird an den Decoder weitergeleitet, der daraus eine Ausgabe erzeugt.

Nun beginnt das Training – wochenlang. Der Transformer verarbeitet nun die gesamte Eingabe gleich­zeitig – setzt alle „relevanten“ Worte zueinander in Bezug und versucht herauszufinden, was wie miteinander zusammenhängt. Er verknüpft einzelne Wörter miteinander- und erzeugt damit eine neue mathematische Darstellung. Das ist der Aufmerksamkeitsmechanismus. Man ordnet zunächst jedem Wort einen Abfrage-, Schlüssel- oder Wertevektor zu. Sie werden berechnet, indem man die ursprüng­liche Wortdarstellung mit drei verschiedenen Matrizen multipliziert – einer Abfrage-, Schüssel- und Wertematrix, deren Einträge das Transformer – Netzwerk durch Training bestimmt. Mit Hilfe der drei Vektoren kann man jedes Wort mit allen anderen in Bezug setzen – um damit herausfinden, welchen Inhalten man besonders viel Aufmerksamkeit schenken muss und welche Eingaben wie zusam­menhängen.

Mathematisch gesehen, erzeugt die Eingabe einen hochdimensionalen Vektor – pro Wort (bis zu 212 Komponenten)! Diesen multipliziert das Netz mit den drei Abfrage-, Schlüssel- und Wertematrizen. Dann nimmt es sich die Bestandteile des Satzes einzeln vor und vergleicht ihn mit den bereits vorhandenen Schlüsselvektoren. Dazu wird das Skalarprodukt der beiden Vektoren gebildet – dadurch entsteht eine Zahl. Die dient als Maß dafür, wie ähnlich zwei Vektoren sind, also wie gut die Suchanfrage zu den gesetzten Ausdrücken passt. Der neue Vektor für ein Eingabewort (z.B. „Ich“) ergibt sich dann, indem man alle gewichteten Wertevektoren summiert und erhält damit eine neue Darstellung des eingelesenen Wortes „Ich“.

Die nachfolgenden Worteingaben lassen sich parallelisieren und damit kann man die Eingaben schneller verarbeiten. Die nun erhaltenen neuen Vektoren werden dann durch ein vorwärts gerichtetes neuronales Netz (CNN) geschickt, das die Objekte in eine passende Darstellung bringt. Der Zyklus aus „Aufmerksamkeit“ und „vorwärts gerichtetes Netz“ wird mehrmals durchlaufen. Am Ende ergibt der Encoder zu jedem Wort einen „Darstellungsvektor“ aus, und die zugehörigen Schlüssel- und Wertevektoren, die für die weitere Verarbeitung im Decoder relevant sind. Auch der Decoder führt den Aufmerksamkeitsmechanismus durch und optimiert die Aufgabe durch Vervollständigen von einem Satz etc.

Die Dicke der Striche im unten angeführten Beispiel gibt den Aufmerksamkeitslevel an: Die Fachzeitschrift „AI–Spektrum“ wird charakterisiert: Der wichtigste zweite Begriff ist „künstliche Intelligenz“, der nächste „Fachmagazin“ usw. Mit den Verbindungsstrichen im Satz wird also der Aufmerksamkeitsmechanismus manifestiert und in Wahrscheinlichkeitswertem codiert (Abbildung)

3. Macht nur das „halbe“ Sprachmodell den Erfolg aus?

Damit scheint die Sache klar: Der Encoder übernimmt die Eingabe und codiert. Im Abgleich mit dem Schlüsselvektor (oder der Schlüsselmatrix) wird mit den bereits gelernten Begriffen verglichen. Die Informationen werden gesammelt und wieder gespeichert. Die codierte Information wird an den Decoder weitergeleitet und dann wird die Ausgabe erzeugt. Würde man das menschliche Gehirn als Modell nachbilden, würde man genau so verfahren. Nur dass die Modelle der künstlichen Intelligenz bisher nicht rasend erfolgreich waren…

Daher ging man einen anderen Weg (siehe untenstehende Abbildung)

Aus einem „full transformer“ wird ein „generator-only transformer“. ohne Encoder. Das Sprachmodell GPT-3 besteht beispielweise aus 96 Decoder – Schichten. Allerdings hat Chat-GPT eben nur Decoder, keine Encoder. Mit dem Aufmerksamkeitsmechanismus und den Netzwerkkomponenten wird die Antwort – der Vektor – verlängert. Die Antwort wird ausgegeben. Die dadurch entstehende „Schleife“ wird mit der ergänzten Antwort wiederholt bis ein „Ende“ – Symbol auftaucht. Dieses kann wie normale Zeichen auch trainiert und ausgegeben werden. So entsteht Schritt für Schritt der Ausgabetext.

Um hier eine sinnvolle Ausgabe zu produzieren, wandelt der Algorithmus die Eingabe durch die bereits früher gelernte Worteinbettung in eine vektorielle Darstellung um. Jedes Wort durchläuft anschließend den Aufmerksamkeitsmechanismus, bei dem die Vektoren v, q und k bestimmt werden. Der Decoder bewertet die Bedeutung der einzelnen Inhalte, indem er das Wort mit den voran gegangenen Eingaben vergleicht. Er berechnet eine neue vektorielle Darstellung, die die wichtigsten semantischen Informationen codiert.

Am Ende liefert der Transformer eine Wahrscheinlichkeitsverteilung: Für jedes Wort aus seinem Sprachschatz (mehrere 10.000 Einträge) berechnet er eine Zahl, die angibt, wie wahrscheinlich das Wort auf eine Eingabe folgt. Aus den besten Operationen wählt er aus. Im Beispiel hat Chat-GPT für „AI-Spektrum“ als nächstes Wort „künstliche Intelligenz“ genommen, dann „Fachmagazin“ usw.

Der Durchbruch von Chat-GPT ist also gerade dadurch gelungen, dass man auf rekursive Strukturen innerhalb der neuronalen Netze verzichtet hat. Der „Umweg“ bestand also darin, das menschliche Gehirn eben nicht genau nachzubilden. Mit der exakten Nachbildung war man mäßig erfolgreich. Bei Chat-GPT und Google BERT verwendet man nur neuronale Netze ohne Rekursion und bettet sie in „Transformer“-Strukturen ein. Dies hat den Erfolg erhöht.

Bei allen Transformer-Architekturen hat sich zwar die Struktur nie geändert, aber die Parameter für die Trainingsdaten sind laufend gestiegen, von 10 auf 175 Mrd Parameter. Es wurde am Anfang mit 40 GByte Text trainiert, in der Version 3 waren es schon 570 GByte. Entsprechende Trainings mit Menschen für „möglichst gefällige Antworten“ und viel inhaltlichem Feedback ergänzten das Vorbe­reitungsprogramm. Plötzlich schreibt eine Maschine spannende und grammatikalisch richtige Sätze, die man sonst nur von (gebildeten) Menschen erwarten würde.

Zur Werkzeugleiste springen