Neuronale Netze

Neuronale Netze

Neuronale Netze (bzw. künstliche neuronale Netze) sind mittlerweile nicht mehr aus dem Bereich der künstlichen Intelligenz wegzudenken. Beeindruckende Anwendungen wie z.B. Bilderkennung oder Textgenerierung sind durch Deep Learning möglich, welches auf neuronalen Netzen basiert. Neuronale Netze sind ein Teilgebiet vom maschinellen Lernen. Durch Algorithmen und einer Menge Daten werden Modelle trainiert, die man anschließend für spezifische Aufgaben verwenden kann. In diesem Post zeige ich, wie neuronale Netze grundlegend funktionieren und wie man sie einsetzen kann.

Die Natur als Vorbild

Biologische Neuronen

Neuronale Netze sind von der Struktur und Funktion des menschlichen Gehirns inspiriert. Das Gehirn besteht aus fast 100 Milliarden (!) Nervenzellen, welche Neuronen genannt werden. Ein Neuron besteht aus dem Zellkörper, von dem in der Regel ein Axon und mehrere Dendriten ausgehen. Das Axon ist dabei der lange Fortsatz des Neurons, der die elektrischen Signale vom Zellkörper zu anderen Neuronen transportiert. Am Ende des Axons ist die Synapse; von dort aus werden die Signale über den synaptischen Spalt auf weitere Neuronen (oder andere Zellen) übertragen. Wichtig zu erwähnen wäre noch, dass ein Neuron nicht immer einen Reiz sendet: Es muss ein gewisser Schwellenwert überschritten werden, damit es „feuert“, also einen elektrischen Reiz über das Axon bis zur Synapse propagiert.

Neuronale Netze - Biologisches Neuron

Das Gehirn ist u.a. also ein Geflecht von unglaublich vielen Neuronen, welche über elektrische und chemische Signale miteinander kommunizieren. Durch genau diesen komplexen Informationsfluss ist das Gehirn im ständigen Wandel und ermöglicht es, Wissen zu speichern, Emotionen zu fühlen oder Entscheidungen zu treffen. Künstliche neuronale Netze haben sich aus der Natur vieles abgeguckt, wie wir im kommenden Absatz sehen werden.

Künstliche Neuronen

Ein künstliches Neuron ist nun also die mathematische Vereinfachung eines biologischen Neurons. Es besteht aus Inputs, Gewichten, einer Aktivierungsfunktion und einem Ausgang. Die Inputs repräsentieren die Signale, die das künstliche Neuron empfängt, während die Gewichte die Stärke der Verbindungen zwischen den Neuronen modellieren. Die Aktivierungsfunktion bestimmt, ob das künstliche Neuron feuert oder nicht, basierend auf der gewichteten Summe der Eingangssignale. Schließlich erzeugt das künstliche Neuron einen Output, der an andere Neuronen in der nächsten Schicht im Netzwerk weitergeleitet wird.

Künstliches Neuron

Das Perzeptron

Das Perzeptron, entwickelt von Frank Rosenblatt im Jahr 1957, war der erste Algorithmus, der in der Lage war, binäre Klassifikationsaufgaben zu erlernen. Der Erfolg des Perzeptrons legte den Grundstein für die Entwicklung komplexerer neuronalen Netze. Die Funktionsweise ist relativ simpel: Das Perzeptron ist ein einfaches künstliches Neuron, welches gewichtete Inputs summiert und eine Aktivierungsfunktion anwendet, um einen binären Output zu erzeugen (also 0 oder 1). Es lernt durch Anpassung der Gewichte basierend auf dem Unterschied zwischen den vorhergesagten und tatsächlichen Werten der Zielvariable.

Das Perzeptron hat jedoch eine signifikante Limitierung: Die Daten müssen bzgl. der Klassen linear separierbar sein (siehe Lineare Separierbarkeit). Sind sie es nicht, ist der Algorithmus in einer Endlosschleife gefangen. Diese Einschränkung führte zur Entwicklung von neuronalen Netzen mit mehreren Schichten, welche wesentlich komplexere Probleme lösen können.

Neuronale Netze

Schichten in Neuronalen Netzen

Ein neuronales Netz besteht typischerweise aus mehreren Schichten von künstlichen Neuronen. Die erste Schicht ist die Eingabeschicht, die die Inputs (bzw. Prädiktoren oder Merkmale) empfängt. Die letzte Schicht ist die Ausgabeschicht, die die Outputs (bzw. Vorhersagen) des neuronalen Netzes ausgibt. Dazwischen liegen eine oder mehrere versteckte Schichten, die die eigentliche Informationsverarbeitung durchführen.

Neuronales Netz

Verbindungen und Gewichte

Jedes Neuron in einer Schicht kann mit allen Neuronen der vorherigen und nachfolgenden Schichten verbunden sein. Für ein einzelnes Neuron bedeutet das, dass dessen Output als Input für nachfolgende Neuronen dient. Entsprechend sind die Outputs aus einer Schicht die Inputs für die Neuronen der nächsten Schicht, sofern es noch eine weitere Schicht gibt. Die Stärke der Verbindung zwischen Neuronen wird mit Gewichten modelliert, sodass die Inputs in der folgenden Schicht je nach Neuron unterschiedlich starken Einfluss haben. Das Modelltraining passt diese Gewichte an, damit der Fehler des Modells minimiert wird.

Aktivierungsfunktionen

Aktivierungsfunktionen bestimmen, ob und wie stark ein Neuron feuert, basierend auf der gewichteten Summe seiner Eingangssignale. Sie sind somit ein wichtiger Bestandteil von neuronalen Netzen und ermöglichen das Lernen von komplexen Zusammenhängen zwischen Inputs und Outputs. Es gibt verschiedene Aktivierungsfunktionen, z.B. die Sigmoid-, ReLU- (Rectified Linear Unit) und Tanh-Funktion. Jede Funktion hat ihre eigenen Eigenschaften und Anwendungsbereiche, die je nach Problemstellung und Netzwerkarchitektur ausgewählt werden sollten.

Lernprozess in Neuronalen Netzen

Der Forward-Pass

Als erster Schritt im Lernprozess steht der Forward-Pass. Dies ist im Prinzip der übliche Vorhersageschritt: Es werden Daten an das neuronale Netz gegeben und der finale Output, die Vorhersage, berechnet. Detaillierter lässt sich der Prozess also wie folgt beschreiben:

  1. Die Werte der Merkmale (Inputs) werden an die Eingangsschicht übergeben
  2. Je Neuron werden die Inputs mit den Gewichten multipliziert und anschließend summiert
  3. Die Summe wird für das jeweilige Neuron in dessen Aktivierungsfunktion gegeben und ein Output berechnet
  4. Die Outputs aller Neuronen werden als Inputs an die nächste Schicht gegeben, usw.
  5. Die finale Schicht liefert die Vorhersagen

Berechnung des Fehlers

Die Vorhersage wurde berechnet und nun muss die Qualität dieser Vorhersage quantifiziert werden. Mit Hilfe einer Verlust- bzw. Kostenfunktion wird nun der Fehler kalkuliert, welcher die Abweichung zwischen Vorhersage und tatsächlichen Werten darstellt. Je nach Fragestellung wird eine andere Verlustfunktion verwendet (z.B. quadratischer Fehler für Regressionsprobleme).

Backpropagation

Der Backpropagation-Algorithmus war eine wichtige Entwicklung in der Forschung zu neuronalen Netzen und ist die Kernlogik für den Lernprozess. Denn um den Fehler des Modells zu minimieren, müssen die Gewichte des neuronalen Netzes angepasst werden – und zwar in allen Schichten. Die Details von Backpropagation sind mathematischer Natur und etwas komplizierter und somit lässt sich der Algorithmus nicht so eben in ein paar Sätzen erklären. Zusammengefasst kann man aber sagen, dass Backpropagation mit Hilfe der Kettenfunktion den Gradienten der Fehlerfunktion bezüglich jedes Gewichts berechnet. Der Gradient ist ein Vektor, der aus den partiellen Ableitungen der Verlustfunktion gebildet wird und gibt an, in welche Richtung und wie stark die Gewichte angepasst werden müssen, um den Fehler zu reduzieren.

Anpassen der Gewichte

Nun, da der Gradient berechnet wurde, kann ein Optimierungsalgorithmus verwendet werden, um die Gewichte des neuronalen Netzes anzupassen. Der bekannteste Algorithmus ist der Gradientenabstieg („gradient descent“). Hierbei werden die Gewichte schrittweise in Richtung des negativen Gradienten angepasst, um die Verlustfunktion zu minimieren. Dies wird häufig durch eine dreidimensionale Grafik visualisiert. Ich habe hier ein Beispiel simuliert mit einer einfachen Funktion (siehe die schwarzen Pfeile, die weiter nach unten zum Minimum führen):

Gradient Descent

Es gibt verschiedene Varianten des Gradientenabstiegs, z.B. den stochastischen Gradientenabstieg („stochastic gradient descent“) und den Mini-Batch-Gradientenabstieg, die unterschiedliche Ansätze zur Berechnung des Gradienten verwenden. Mittlerweile verwendet man noch fortschrittlichere Algorithmen, die z.B. adaptive Lernraten nutzen. Beispiele hierfür sind Adam, RMSprop oder Adagrad.

Anwendungen von Neuronalen Netzen

Klassifikation und Mustererkennung

Klassifikation ist eine häufige Anwendung von neuronalen Netzen. Dabei muss einer Reihe von Inputs als Output eine richtige Kategorie bzw. Klasse zugeordnet werden. Ein Beispiel ist die Objekterkennung auf Bildern: Bei einer Bilddatei sind die Pixel die Inputs ins neuronale Netz. Als Output könnte (nach ein paar Transformationen) „Apfel“ als Label herauskommen, wenn wir z.B. Bilder von Früchten und 25 mögliche Labels zur Verfügung haben.

Regression und Zeitreihen

Bei der Regression wird als Vorhersage ein kontinuierlicher numerischer Wert berechnet. So sind bestimmte neuronale Netze gut geeignet für Zeitreihenprognosen (z.B. rekurrente neuronale Netze). Beispiele sind Wettervorhersagen oder Prognosen von Verkaufszahlen.

Generierung und Synthese

Neuronale Netze können auch dazu verwendet werden, Inhalte wie z.B. Texte zu generieren oder vorhandene Inhalte zu modifizieren. Ein bekanntes Beispiel hierfür sind Generative Adversarial Networks (GANs) oder Transformers, die in der Lage sind, realistische Bilder oder Texte zu erzeugen.

Deep Learning

Neuronale Netze vs. Deep Learning

Neuronale Netze bilden die Basis für Deep Learning. Im Prinzip ist Deep Learning nichts anderes als komplexe neuronale Netze: Der Hauptunterschied liegt in der Tiefe der Netze, also der Anzahl der Schichten. Deep Learning sind also tiefe neuronale Netze mit vielen versteckten Schichten. Diese tiefen Netzwerke ermöglichen es, noch komplexere und abstraktere Informationen aus den Daten zu extrahieren, was zu einer höheren Leistung und Genauigkeit führt.

Aktuelle Anwendungen

Deep Learning findet bereits in vielen Anwendungsfeldern Verwendung. Themen, die viel Aufsehen erregt haben, sind Chatbots, Spracherkennung oder autonomes Fahren. Aber auch in der medizinischen Diagnostik oder in der Sprachübersetzung wird Deep Learning angewendet. Der KI-Boom ist allerdings nicht zu Ende und es wird viel an weiteren Deep Learning-Methoden geforscht.

Zusammenfassung

In diesem Post ging es um die Grundlagen von neuronalen Netzen. Wir haben uns die Struktur biologischer Neuronen und die mathematische Modellierung künstlicher Neuronen angeschaut. Danach wurde die Architektur, der Lernprozess und die verschiedenen Anwendungsfälle von neuronalen Netzen genauer beleuchtet. In zukünftigen Posts plane ich, noch weiter auf Deep Learning-Modelle einzugehen.

Wenn du ein Wunschthema hast oder mir Feedback geben willst, schreibe gerne einen Kommentar oder schicke eine Mail an mail@thorejohannsen.de.

Ähnliche Beiträge

Schreibe einen Kommentar

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