Tiefe Neuronale Netze: Ein Überblick
Seit etwas mehr als einer Dekade taucht der Begriff "Künstliche Intelligenz" immer häufiger auf und dominiert immer mehr die Presse. Was in den meisten Fällen damit eigentlich gemeint ist, sind tiefe neuronale Netze (Deep Neural Networks – DNNs) und ihre Leistungsfähigkeit sowie Skalierung. DNNs sind ein Teilbereich des maschinellen Lernens (Machine Learning), welches wiederum nur eine Teilmenge in der Domäne der Künstlichen Intelligenz ist. Jedoch haben DNNs in den letzten Jahren eine exponentielle Verbreitung in vielen verschiedenen Bereichen erlebt, während andere Methoden des maschinellen Lernens sich weniger stark entwickelt haben. Nicht minder führten DNNs bereits zu einer Revolution mit den einhergehenden wissenschaftlichen, ökonomischen und gesellschaftlichen Auswirkungen.
Dieser Artikel gibt einen kompakten Überblick zur Funktionsweise der DNNs und die zur Zeit am häufigsten anzutreffenden Typen. Ziel ist es, ein generelles Verständnis zu vermitteln, wie diese Technologie funktioniert, um einschätzen zu können, was von ihr erwartet werden kann.
Funktionsweise
Wenn wir von Künstlicher Intelligenz mit künstlichen neuronalen Netzen sprechen, blicken wir auf eine 70-jährige Geschichte zurück. Die Idee, Neuronen wie unsere Nervenzellen künstlich in Computern nachzubilden, gibt es ebenso lange.
Künstliche Neuronen
Das Nachahmen von Neuronen lässt sich eigentlich sehr einfach realisieren, wie in Abb. 1 skizziert. Hierzu werden n Eingaben xn mit Gewichtungen wn (weights) versehen, um die ankommenden Signale abzuschwächen oder zu verstärken. Numerisch sind dies einfache Multiplikationen mit einem finalen Aufsummieren aller Werte. Optional wird die Summe noch mit einem Versatz b (bias) versehen. Sowohl wn als auch b werden als Parameter bezeichnet. Deren Werte sind Gegenstand des Lernprozesses und verändern sich auf der Suche nach der besten Lösung.
Die Eingaben können statt Skalaren auch Vektoren sein. Werden mehrere Vektor-Eingaben zusammengefasst, wird mit Matrizenoperationen gearbeitet. Im Grunde brauchen wir dann nur lineare Algebra um die Berechnungsvorschriften umzusetzen. Die Ausgabe dieser linearen Operationen kann dann über eine nicht-lineare Funktion abgebildet werden, die Aktivierungsfunktion genannt wird. In Abb. 1 sind ein paar Beispiele von solchen nicht-linearen Aktivierungsfunktionen gezeigt.
Vereinfacht gesagt erlauben diese Aktivierungsfunktionen einem Netzwerk nicht nur, lineare Zusammenhänge zu erlernen, sondern, wenn mehrfach angewendet, auch beliebig komplexe. Ursprünglich wurden Funktionen wie Sigmoid oder tanh verwendet, um die Hysterese-Eigenschaften der Zellen nachzubilden, denn in der Natur gibt es keine Sprünge (natura non facit saltus). In der Praxis findet jedoch seit über zehn Jahren sehr häufig die ReLU (Recified Linear Unit) Anwendung. Diese ist numerisch trivial in Hardware umzusetzen – es ist eine einfache Maximum-Operation. Sie ist nicht-linear genug für ein weites Einsatzgebiet wie maschinelles Sehen (Computer Vision – CV) oder Sprachverarbeitung (Natural Language Processing – NLP). Eine andere Variante ist die Leaky ReLU, bei der negative Werte nicht generell auf Null gesetzt werden, sondern durch eine andere partiell-lineare Funktion abgebildet werden, um einen Informationsverlust zu vermeiden. Sigmoid trifft man oft an der Ausgabe eines Netzwerkes von Neuronen, wenn Wahrscheinlichkeitsvariablen verwendet werden, da der Wertebereich von [0.0, 1.0] dafür ideal ist. Sigmoid und tanh werden gemeinsam innerhalb von RNN-Schichten verwendet – eine Erklärung zu RNNs folgt später.
Netze mit künstlichen Neuronen
Die künstlichen Neuronen können dann in einem Graph mehrschichtig angeordnet werden (s. Abb. 2). Sobald mehr als nur die Ein- und Ausgabeschicht vorhanden ist, spricht man bereits von Tiefen Neuronalen Netzen. Große DNNs haben hunderte oder tausende solcher Zwischenschichten und eine Anzahl an Parametern, die von tausenden bis zur Zeit einer Billion (!) reichen [1]. Im gezeigten Beispiel verwenden wir vollständig verbundene Schichten und erwarten als Eingabe ein Bild mit 128x128 Pixel und drei Farbkanälen (49.152 Neuronen), verwenden also ein Neuron pro Pixel und Farbkanal. Die Eingabeneuronen dienen als Eingabe der Zwischenschicht. Im Beispiel komprimieren wir Informationen auf 512 (49.152:512) Neuronen mit ReLU als Aktivierungsfunktion. Damit zwingen wir das Netzwerk, die sich ergebenden Gewichtungen in den Kanten (Parameter) auf relativ wenig Muster festzulegen, um die Aufgabenstellung zu lösen. Im Beispiel ist es die Erkennung eines Goldfisches in einem Farbbild mit 128x128 Pixel.
Durch die Verwendung von Mini-Batches, im Beispiel mit einer Größe von vier Bildern, werden gleich mehrere Bilder durch das Netzwerk geschickt und die entsprechenden Verarbeitungsvorschriften (Operationen) auf diese angewandt. Dies bezeichnet man auch als Feed-Forward. Wir erhalten dann die Aussage des Netzwerkes, zu welcher Klasse (Goldfisch oder nicht) jedes der vier Bilder des Batches gehört – die Ausgabe ist daher ein Vektor mit vier Elementen. Zu Beginn sind die Parameter ungelernt und das Netzwerk schätzt rein zufällig. Mit fortgeschrittenem Training werden die Parameter angepasst, so dass die Vorhersagen genauer werden.
Das Training
Doch wie weiß das Netzwerk, wie die Parameter trainiert werden sollen? Wir verwenden als Orientierung eine oder mehrere Verlustfunktionen (Loss). Die Verlustfunktion gibt einen Wert pro Eingabedatum, welcher den Fehler charakterisiert. Das Ziel des Trainings ist es, den Fehler zu minimieren. Es sollte hier erwähnt werden, dass beim Training nicht die beste Lösung gesucht wird. Diese würde nur für die beim Training verwendeten Daten funktionieren. Vielmehr suchen wir eine "generische" Lösung, die möglichst allgemeingültig ist und auch mit anderen Daten als der während des Trainings verwendeten funktioniert, insofern diese Daten auch die gleichen Eigenschaften besitzen. Man spricht dann von "i.i.d."-Daten (independent and identictly distributed), also Daten der gleichen Wahrscheinlichkeitsverteilung. Anders formuliert können DNNs als stochastische Prozesse gesehen werden und Wahrscheinlichkeitsverteilungen der Eingabe auf eine andere Verteilung der Ausgabe abbilden. Das funktioniert aber nur, wenn die Eingaben die gleiche Verteilung haben. Zum Beispiel wäre die Vermischung von Farbbildern mit Schwarzweiß-Bildern wenig sinnvoll – außer, die Farbbilder werden vorher auf ähnliche Weise nach schwarzweiß konvertiert wie die Schwarzweiß-Bilder.
Zur Minimierung der Verluste kommen Methoden auf Basis von Stochastic Gradient Descent (SGD) mit Mini-Batches zum Einsatz. Diese lernen schrittweise jeweils mit einer kleinen zufälligen Teilmenge der gesamten Trainingsdaten (Batch). Dies verhindert, dass das Netzwerk in jedem Schritt alle Trainingsdaten sieht und stets für alle optimiert. Mit jedem Trainingsschritt werden die Parameter mit kleinen Änderungen angepasst, um den Verlust zu minimieren. Gesteuert wird dies mit einer Lernrate (learning rate), die typischerweise zuerst groß ist, aber mit fortgeschrittenem Training abnimmt (fine-tuning). Die Schrittweite, also das Ausmaß der Parameteränderungen, wird damit immer kleiner.
Da DNNs stochastische Prozesse sind, arbeiten wir in den Ausgaben mit Wahrscheinlichkeiten. Dies trifft insbesondere auf das Beispiel zu, da wir hier Sigmoid als Aktivierungsfunktion in der Ausgabe verwenden. Also erhalten wir die Wahrscheinlichkeit, mit der es sich um einen Goldfisch handelt. Diese Ausgabe y wird dann mit dem eigentlich gewünschten Ergebnis y (ground truth) verglichen. Je stärker die Abweichung, um so mehr müssen die Parameter im Netzwerk verändert werden. Dies ist das eigentliche Training und wird als Back-Propagation bezeichnet, da es ausgehend von der Ausgabeschicht in Richtung Eingabeschicht vorgenommen wird. In diesem Schritt wird mittels automatischen Differenzierens ermittelt, wie stark jeder einzelne Parameter geändert werden muss, um den Verlust für den Batch zu reduzieren.
Die drei Schritte (Vorhersage, Verlust ermitteln und Training) werden sodann mit anderen vier zufällig gewählten Bildern aus den Trainingsdaten mit einem neuen Batch durchgeführt. Dies wird solange wiederholt, bis alle Bilder der Trainingsdaten exakt einmal beteiligt waren. Das resultiert in vielen kleinen Schritten, in denen die Parameter des Netzwerks modifiziert werden, mit der Hoffnung, dass es eine Tendenz gibt, ein allgemeines (globales) Minimum zu erreichen. Wie bereits erwähnt, machen wir nur kleine Schritte in die Richtung des Optimums für den Batch und springen nicht gleich zur besten Lösung für den Batch selbst. Wir wollen schließlich eine gute allgemeine Lösung und nicht jeweils die Beste für jeden einzelnen Batch. Letzteres würde mit Wahrscheinlichkeit auch zu keiner Konvergenz führen, das Netzwerk also somit die Parameter für verschiedene Batches oszillierend in entgegengesetzte Richtungen modifizieren.
Nach den Schritten mit allen Trainingsdaten ist eine sog. Epoche abgeschlossen. Abhängig vom Netzwerk, Trainingsdaten und anderen Faktoren führt man hunderte oder mehr dieser Epochen durch. Das Netzwerk lernt also stochastisch Muster in den Trainingsdaten zu erkennen, sofern es die ausgewählte Architektur erlaubt.
Warum erst jetzt?
Mit den frühen 2010er Jahren kam mit "Big Data" die Ära großer Speichermengen und den Methoden, um damit umzugehen. Auch wurden zu dieser Zeit GPU-Architekturen vorgestellt, die als programmierbare Rechenbeschleuniger eingesetzt werden konnten und sich für das aufwändige Training der DNNs hervorragend eigneten. Im Grunde lässt sich ein Großteil der Operationen zum Training als Matrizenmultiplikationen (lineare Algebra) abbilden: ein Heimspiel für GPUs. Auch waren die Methoden und Werkzeuge für DNNs bereits so weit, um über einfache eher akademische Anwendungsfälle zu skalieren und vielseitige praktische Anwendungen zu ermöglichen. Auch gestiegene Forschungsbudgets und das Interesse seitens der Industrie taten ihr Übriges.
Mitte der 2010er Jahre kamen dann auch noch die heute geläufigen Frameworks wie Tensorflow (Google) und PyTorch (Facebook/Meta) zum Training von DNNs hinzu, welche die Einstiegsschwelle weiter senkten [2].
Typen Tiefer Neuronaler Netze
Tiefe Neuronale Netze bestehen aus mehreren Zwischenschichten (hidden layer), die zwischen der Eingabe und Ausgabe liegen. Diese sind Operationen, die die ankommenden Daten verarbeiten und abgeändert an die folgenden Schichten weitergeben. Es gibt viele Operationen, die als Schichten verwendet werden können. Jedoch gibt es fünf grundlegende Typen, die sehr häufig anzutreffen sind.
Vollständig verbundene Schicht
Als vollständig verbunden (dense oder fully connected) bezeichnet man Schichten, die mit den Ausgaben der jeweils vorhergehenden Schichten vollständig verbunden sind. Im Grunde ist es eine Aneinanderreihung der künstlichen Neuronen wie in Abb. 2 gezeigt. Dieser Typ ist sehr einfach zu verwenden und man findet ihn deshalb häufig als Baustein größerer Architekturen. Er hat aber wegen seiner großen Parameterzahl das Risiko, sehr schnell die Trainingsdaten zu erlernen, ohne eine allgemeinere Lösung zu finden (overfitting). Der Trick, um dies zu umgehen, ist Schichten mit weniger Parametern zu verwenden, die dann aber Operationen umsetzen, die stärker auf die Eigenschaften bestimmter Datentypen zugeschnitten sind (s. u.).
Im obigen Beispiel in Abb. 2 ist die Zwischen- und Ausgabeschicht jeweils eine solche vollständig verbundene Schicht. Diese Architektur bezeichnet man auch als Multilayer Perceptron (MLP). Man sieht, dass jedes Pixel der Eingabe mit jedem der Neuronen in der Zwischenschicht verbunden ist. Das ist unnötig redundant und v. a. für Bilddaten weniger geeignet als Convolutional-Neural-Network-(CNN-)Schichten.
Convolutional-Neural-Network-(CNN-)Schicht
Faltungen (convolutions) sind Filter (Kernel), die auf dichte, räumliche Daten angewendet werden. Beispiele solcher Daten sind Bilder (2D) oder Volumen (3D). Ein oder mehrere Kernel werden auf jedes Pixel angewendet und berücksichtigen, je nach Größe, nur die benachbarten Pixel. Ein Beispiel ist in Abb. 3 gegeben. Die Kernel-Größe und Anzahl der Kernel ist durch die Netzwerk-Architektur vorgegeben (hier: ein einzelner 3x3-Kernel), die Werte der Kernel werden aber gelernt und verändern sich deshalb im Trainingsprozess.
Streng genommen handelt es sich bei CNN-Schichten um vollständig verbundene Schichten, die räumlich beschränkt sind. Also statt zum Beispiel alle Pixel einer Eingabe bei einem Filter zu berücksichtigen, haben nur dessen direkte Nachbarn Einfluss. CNNs hatten ihren Durchbruch mit AlexNet in 2012 [3]. In den Jahren darauf folgte dann eine Flut von anderen CNN-Architekturen.
CNNs können auch für Zeitreihen benutzt werden, sind jedoch stark in der zeitlichen Tiefe beschränkt. Vorteile haben CNNs bei der Mustererkennung von regulären und räumlich zusammenliegenden Datenpunkten. Je irregulärer und weitreichender Interaktionen zwischen Datenpunkten sind, desto ungeeigneter sind sie jedoch.
Recurrent-Neural-Network-(RNN-)Schicht
Sind Daten durch längere Ordnungen oder Sequenzen charakterisiert, sind RNNs ideal, um diese zu lernen. Dies betrifft z. B. Zeitreihen oder Texte.
Der ursprüngliche RNN-Ansatz zeigte eine Schwäche bei langen Reihen, um weitreichende Zusammenhänge zu verstehen. Mit LSTM (Long Short Term Memory) wurde diese Beschränkung vermindert, indem es nicht nur kurzzeitige Zustände gibt, sondern auch solche, die weiter zurückreichen. Damit wurde es möglich, lange Zeitreihen zu erlernen. Auch wenn heute generell von RNN gesprochen wird, wird meistens LSTM als Technik dahinter verwendet. LSTM wurden von Sepp Hochreiter und Jürgen Schmidhuber erstmals in 1997 vorgestellt [4]. Trainiert werden in den RNN-/LSTM-Schichten Schranken (gates), welche bestimmen, wie groß der Einfluss der Eingaben, Ausgaben und der bisherigen Zustände sein soll und wie stark vergessen werden darf.
Abb. 4 zeigt eine Gegenüberstellung der ursprünglichen RNNs (Kurzzeitgedächtnis) und LSTM (Kurz- und Langzeit-Gedächtnis). Über die Eingabeserie Xn iteriert die RNN/LSTM-Schicht und berechnet zu jeder Iteration ein Ergebnis, welches dann die Serie Yn ergibt.
Ein Nachteil von RNNs ist jedoch ihr serielles, nicht parallelisierbares Design. Sequenzen werden durch eine implizite Schleife "entrollt". Durch die sich dadurch ergebende Datenabhängigkeit der vorhergehenden Iterationen ist eine Parallelisierbarkeit eingeschränkt. Dies steht damit einer Skalierung im Weg. Etwas, das bei den großen Sprachmodellen, die wir heute z. B. mit ChatGPT nutzen, unverzichtbar ist.
Self-Attention-Schicht
Transformer hatten ihren Durchbruch Ende 2017 mit dem bekannten Fachartikel "Attention Is All You Need" [5]. Transformer basieren auf Self-Attention-Schichten. Ursprünglich wurden Aufmerksamkeits-Methoden (Attention) mit anderen Operationen kombiniert (z. B. CNNs oder RNNs). In dem Fachartikel wurde aber erstmals festgestellt, dass Aufmerksamkeits-Methoden auch freigestellt funktionieren. Sie zeichnen sich durch lineare Operationen (Skalarprodukte) und Parallelisierbarkeit aus und sind damit sehr einfach skalierbar. Diese Skalierbarkeit hat letztendlich den Durchbruch der großen Sprachmodelle ermöglicht.
Bei Self-Attention geht es darum, dass das Netzwerk aus den Eingaben selbständig Zusammenhänge erlernt. Statt diese räumlich (CNNs) oder sequenziell (RNNs) zu behandeln, werden Attention-Heads verwendet. Ein solcher lernt jeweils Parameter (weights w) in Matrizen für Query (Qw), Key (Kw) und Value (Vw). Diese übersetzen eine Eingabe in verschiedene Werte. Das Query q, abgeleitet von einer der Eingaben, errechnet aus jedem Key k einen Attention-Score. Also für eine Eingabe die Relation zu allen Eingaben. Damit beantworten wir die Frage: Was hängt semantisch gesehen zusammen? Diese Scores werden normiert, damit deren Summe 1 ergibt, und jeweils mit deren Values v aus den Eingaben multipliziert. Deren Summe ergibt dann wiederum die Ausgabe zu der ausgewählten Eingabe (Query). Das Ganze wiederholt man für alle anderen Eingaben bzw. Queries. Die dabei verwendeten linearen Matrizenoperationen lassen sich sehr einfach parallelisieren und erlauben, beliebige Korrelationen in den Eingabedaten selbständig zu finden.
In Abb. 5 ist ein stark vereinfachtes Beispiel eines Self-Attention Heads gezeigt, der auf einen Satz angewandt wird. Die Wörter werden numerisch durch sog. Einbettungen (embeddings) dargestellt – auf diese gehen wir hier nicht gesondert ein, sondern nehmen nur an, wir haben eine Abbildung eines Wortes (Token) auf einen numerischen Wert (Vektor). Die Matrizen für Query, Key und Value (hier der Einfachheit halber 4x3) werden gelernt und mit der jeweiligen Eingabe multipliziert. Da ein Head die gleichen Query-, Key- und Value-Matrizen besitzt, unterscheiden sich die Werte nur aufgrund der verschiedenen Eingaben. Der errechnete Score gibt Aufschluss über den Zusammenhang des durch das Query ausgewählten Wortes zu allen anderen. Im Beispiel ist es der unbestimmte Artikel "ein" in Bezug zum Subjekt "Goldfisch" (höchste Wertung). Die Ausgabe ist dann eine komprimierte Repräsentation des Wortes "ein" im Gesamtzusammenhang des Satzes und abhängig von der Gesamtarchitektur, in die die Self-Attention Heads eingegliedert werden. Als Bestandteile von Transformer-Architekturen erlauben mehrere Self-Attention Heads dann z. B., Wörter in Sätzen miteinander in Beziehung zu setzen und das am besten passende nächste Wort zu raten oder in eine andere Sprache zu überführen [6].
Graph-Neural-Networks-(GNN-)Schicht
Viele Dinge in unserer Umwelt lassen sich als gerichtete oder ungerichtete Graphen darstellen. DNNs können mit GNNs auch damit umgehen. GNNs sind trainierbare Transformationen aller Graphattribute (Knoten, Kanten und Kontext). Die Struktur des Graphen bleibt hierbei jedoch erhalten und es werden lediglich die Informationen in den Knoten, Kanten und solche, die sich auf den ganzen Graphen beziehen (Kontext), verändert.
Mehrschichtige GNNs tauschen diese Informationen von Schicht zu Schicht aus. Zum Beispiel können Werte von im Graphen benachbarten Knoten kombiniert werden. Dies ist ähnlich zu den Convolutions, bei denen Nachbarpixel einbezogen werden. Bei GNNs jedoch sind die Nachbarschaftsbeziehungen beliebig definierbar. Gleiches gilt für die Kanten und den Graphenkontext.
Mit jeder GNN-Schicht wird für die drei Graphtypen eine Update-Funktion trainiert. Diese kann z. B. ein Netzwerk wie obiges MLP sein, mit dem Unterschied, dass es die jeweiligen Graphtypen als Ein- und Ausgabe verwendet. In Abb. 6 ist ein einfaches Beispiel gezeigt. Hier werden von der Schicht N zu N+1 zuerst die Werte nach in der Architektur festgelegten Vorschriften aggregiert und geändert. Informationen können z. B. von den Kanten in die Knoten fließen oder vom Gesamtkontext in die Knoten. Danach werden trainierbare MLPs für jeden Typen zwischengeschaltet. Als Ergebnis erhält man einen Graphen mit sich ändernden Werten, illustriert durch verschiedene Blautöne. Es sei erwähnt, dass die Art, wie die Werte geändert werden, Gegenstand des Trainings ist. Die verwendete Verlustfunktion am Ausgang eines (mehrschichtigen) GNNs bestimmt, wie die Werte in Zusammenhang zu sehen sind und dementsprechend trainiert werden sollen.
GNNs können auch verwendet werden, um Bilddaten oder Texte zu verarbeiten. Wirklich vorteilhaft ist die Verwendung von GNNs aber bei weniger redundanten Graphen.
Komposition
Alle aufgeführten Schichttypen können als Bausteine verstanden werden. Eine beliebige Kombination ist möglich, insofern die Datentypen entsprechend konvertiert werden. Soll zum Beispiel eine Zeitreihe von Bildern (Video) gelernt werden, kombiniert man CNNs (zur Filterung der Einzelbilder) und RNNs zur Erkennung von Mustern über Einzelbilder hinweg. Transformer, angewandt auf Texte, lassen sich mit CNNs kombinieren, um Texte mit Bildern zu assoziieren (z. B. Bildunterschriften, Beschreibung eines Videos).
Trainingsverfahren: überwacht vs. unüberwacht
Um die Verlustfunktion zu berechnen, ist eine formale Beschreibung notwendig, die numerisch berechnet werden kann. In vielen Fällen werden Trainingsdaten mit Beschriftungen (label) verwendet, die das zu erwartende Ergebnis (ground truth) festlegen. Beispielsweise im Falle der Klassifizierung eines Bildes, ein Wert, der einem Objekttyp entspricht (Kategorie) oder ein numerischer kontinuierlicher Wert einer Zeitreihe (Regression). Im Beispiel von Abb. 2 wird eine binäre Klassifikation mit dem Wert 1.0 für einen Goldfisch und 0.0 für kein Goldfisch vorgenommen.
Ein Trainingsprozess mit Beschriftungen bezeichnet man als überwacht (supervised). Obwohl dies in der Praxis häufig anzutreffen ist, ist es auch weniger ökonomisch und sehr ressourcenintensiv, da das Beschriften ein manueller Prozess ist, der vieler Humanressourcen bedarf. Damit ist dem überwachten Training auch eine Obergrenze bei einer Skalierung gesetzt. Sehr große Netzwerke benötigen eine große Menge an Trainingsdaten und damit einhergehend auch Ressourcen zum Beschriften.
Ideal wäre ein Training ganz ohne manuelle Prozesse, um eine gute Skalierung zu ermöglichen – ein unüberwachtes Training. Aber wie lässt sich das realisieren, obwohl wir eine Verlustfunktion benötigen, die numerisch berechnet werden soll? Genau das hat gerade in den letzten Jahren zu den Durchbrüchen geführt, extrem große und damit leistungsfähige DNNs zu realisieren. Es hängt jedoch stark von der Problemstellung ab und ist nicht so direkt wie die Verwendung von Beschriftungen. Um ein paar Beispiele zu nennen:
- In NLP bedient man sich des Tricks, Eingaben (Texte) selbst als Beschriftung zu verwenden: Als Problemstellung soll ein Netzwerk das jeweils folgende Wort raten, das auf einen (unvollständigen) Text folgen könnte. Auf diese Weise kann auf einen extrem großen Korpus (Wikipedia, ArXiv, Yelp Reviews, ...) als Trainingsdaten zurückgegriffen werden. Netze, die auf diese Weise trainiert wurden, sind dann z. B. in der Lage, auf eine Frage eine Antwort zu formulieren. Ein Trick, der gerade den Large Language Models (LLMs) wie ChatGPT oder GPT-4 (beide OpenAI) der letzten Jahre zu ihrem Durchbruch verholfen hat [1].
- Im maschinellen Sehen ist bei Diffusionsmodellen (diffusion models), wie Dall-E 2 (OpenAI) oder Imagen (Google), der Ansatz, beliebige Bilder als Trainingsdaten zu verwenden, indem diese mit einem zunehmenden Rauschen verfälscht werden [7]. Die Problemstellung des DNNs ist es dann, aus den Bildern mit appliziertem Rauschen das ursprüngliche Bild zu rekonstruieren. Eingabe- und Ausgabe-Bilder lassen sich numerisch relativ leicht vergleichen, z. B. mit einer Mean-Square-Error-(MSE-)Verlustfunktion.
- Unüberwachtes Training lässt sich auch mit sog. Auto-Encoder-Architekturen in anderen Problemstellungen durchführen [8]. Ein Auto-Encoder ist ein Netzwerk, das auf der Eingabeseite einen Encoder besitzt und höher-dimensionale Eingaben auf einen "latent feature space" komprimiert. Dieser ist deutlich kleiner (Flaschenhals) und erzwingt vom Netzwerk eine Entscheidung, welche Informationen der Eingabedaten wichtig sind und welche verworfen werden können. Nach dem Flaschenhals folgt dann ein Decoder, der aus dem "latent feature space" wieder die originale Eingabe rekonstruieren soll. Das lässt sich am einfachsten als eine (verlustbehaftete) Kompression vorstellen, bei der nur die wirklich wichtige Information erhalten bleibt. Auto-Encoder werden unüberwacht trainiert mit dem Ziel, Rekonstruktionsverluste zu minimieren.
Die gelernten Encoder lassen sich dann in anderen Netzwerken verwenden, um komplexe Eingabedaten zu reduzieren (sog. embedding). Analog lässt sich auch der gelernte Decoder-Teil verwenden, indem er aus dem "latent feature space" wieder Daten der Eingabe-Domäne rekonstruieren kann.
Zusammenfassung
Die vielfältigen und vielseitigen Methoden tiefer neuronaler Netze haben zu einem breiten Spektrum an Anwendungen geführt. Diese erlauben das Verarbeiten von verschiedenen Datentypen wie Bilder, Text, Zeitreihen und vielem mehr. Je nach Datentyp und Charakterisierung der Daten eignen sich verschiedene Methoden (Schichten). Die fünf am häufigsten anzutreffenden Methoden wurden in ihren Grundprinzipien erklärt, sowie ein kurzer Abriss zu den Trainingsmethoden gegeben. Darüber hinaus wurde auch angedeutet, welche Probleme in der Skalierbarkeit in den letzten Jahren umgangen wurden, um zu den leistungsstarken Netzwerken zu gelangen, von denen wir zur Zeit verstärkt hören.
Während tiefe neuronale Netze bereits für individuelle Probleme und Datentypen geradezu revolutionäre Ergebnisse geliefert haben, dürfte der weitere Erfolg von einem abhängen: Wie erfolgreich lassen sich Probleme mit tiefen neuronalen Netzen lösen, die mit unterschiedlichsten Datentypen (multi-modal) umgehen müssen? Für die Kombination von Texten und Bildern wurden bereits erste Ansätze demonstriert. Es bleibt abzuwarten, ob am Ende eine generelle künstliche Intelligenz (general AI) möglich ist, die mit allen erdenklichen Datentypen umgehen kann.
- GPT-4 von OpenAI
- Tensorflow und PyTorch
- AlexNet von Alex Krizhevsky et al. in 2012: mageNet Classification with Deep Convolutional Neural Networks
- S. Hochreiter; J. Schmidhuber: Long Short-Term Memory
- Ashish Vaswani et al.: Attention Is All You Need
- Dr. Aleksandra Klofat (Informatik Aktuell): Wie funktionieren Transformer? Definition und Praxis
- Dall-E 2 (OpenAI) / Imagen (Google)
- Auto-Encoder-Architekturen