Neuronale Netze

Neuronale Netze sind informationsverarbeitende Systeme, die aus einer riesigen Anzahl von Neuronen (Nervenzellen) bestehen. Die Neuronen sind signalverarbeitende Bausteine, die Informationen über gewichtete Verbindungen zwischen einzelnen Neuronen verschicken. Das menschliche Gehirn besteht aus einem neuronalen Netz mit etwa 100 Milliarden Nervenzellen. Dieses Netz ist für unsere Wahrnehmung, Lernfähigkeit oder die Anpassung an verschiedenste Umweltbedingungen zuständig. Die Aufgabe eines neuronalen Netzes ist das Erlernen von neuen Fähigkeiten durch Nachahmen mit dem Prinzip von Versuch und Irrtum. Das Ziel künstlicher neuronaler Netze ist es, dieses Prinzip des Lernens mit einem Computerprogramm nachzubilden. Aus einer großen Menge von Trainingsdaten (z.B. Bilder, Signaldaten) extrahiert das Netz in dem Lernprozess charakteristische Eigenschaften. Auf diesem Weg ist das neuronale Netz in der Lage neue Muster zu erkennen und in Klassen einzuordnen.

Das Arbeitsprinzip

Neuronale Netze haben die Aufgabe die gegebenen Eingabedaten auf die dazugehörigen Ausgabedaten mit einem minimalen Fehler abzubilden. Das Netz verschickt während des Lernens bestimmte Informationen über gewichtete Verbindungen zwischen den Neuronen. Durch kontinuierliches Lernen auf Basis von Trainingsbeispielen verbessert das Netz seine Leistungsfähigkeit durch das schrittweise Anpassen der Verbindungsgewichte.
NN_Icon11

Aufnahme von Information

Das Bereitstellen von Informationen erfolgt durch Datenwerte in Form von Signalen oder Bildpixeln (z.B. Gesichter, Handschriften, usw.).
2

Aufbau des Netzes

Das Grundlayout mit der Anzahl der Neuronen und den Netzschichten wird in Abhänigkeit der konkreten Ausgabe vom Anwender festgelegt.
3

Verarbeitung der Information

Mit Trainingsbeispielen werden die Netzgewichte trainiert, um die Eingangsdaten mit minimalen Fehler auf die Ausgangsdaten abzubilden.
4

Ausgabe der Information

Die Ausgabe des Netzes ist ein Zahlenvektor, der die Antwort auf die jeweilige Eingabe in kodierter Form dem Anwender darstellt.

Beispiel einer Mustererkennung

Das Erkennen von Bildern, Gesichtern, Sprachen oder Schriften gehört zu den wichtigsten Anwendungsbereichen von neuronalen Netzen. Ein Beispiel ist das Erkennen von handschriftlich geschriebenen Ziffern. Mit Hilfe eines Lernalgorithmus wird dieses Netz auf Basis dieser Trainingsdaten angelernt, bis die Erkennungsgenauigkeit zufriedenstellend ist. Hierzu ändert das Netz die Gewichtswerte \( w_{ij} \) zwischen den beiden Schichten, um die vorgegebenen Trainingsdaten mit minimalen Fehler richtig zu klassifizieren. Die Validierung des Netzes erfolgt im Anschluss mit einer Menge von ungelernten Testdaten, um die Generalisierungsfähigkeit des Netzes zu überprüfen.

Durch diese Art der Verarbeitung haben wir ein intelligentes System erschaffen. Das Netz erkennt nach dieser Trainingsphase unbekannte Eingabebilder mit diesen vier Buchstaben. Ein wesentlicher Aspekt ist, dass dieses Prinzip zur Mustererkennung für alle möglichen Bilder anwendbar ist. Das Verfahren kann Ziffern, Buchstaben, Gegenstände oder medizinische Muster auf Bilddaten erkennen. Dieser selbstlernende Algorithmus liefert ein gutes Ergebnis, wenn die Datenbasis gut und in ausreichender Menge zur Verfügung steht.

Mehrlagige neuronale Netze

Für die unterschiedlichen Anwendungsbereiche existieren verschiedene Architekturen von künstlichen neuronalen Netzen. Alle diese Netze bestehen aus Neuronen, die durch ein komplexes Netz miteinander verbunden sind. In einem mehrlagigen neuronalen Netz besteht das Netz aus einer Menge von Schichten aus einzelnen Neuronen. Alle Neuronen der vorherigen Schicht sind dabei mit allen Neuronen der nachfolgenden Schicht verbunden.

Begriff des neuronalen Netzes

Ein neuronales Netz besteht aus den folgenden Komponenten:

  • Netzlayout ist ein gerichteter Graph \( G=(V,E) \) mit der Knotenmenge \( V \) der Neuronen und der Kantenmenge \( E \) zwischen den einzelnen Neuronen.
  • Netzgewichte sind Matrizen mit reellwertigen Einträgen \( w_{ij} \), welche die Stärke der Verknüpfung zwischen Neuron \(i\) und Neuron \(j\) charakterisieren. Der Wert dieser Gewichte \( w_{ij} \) beeinflussen das Verstärken oder Abschwächen der Eingangssignale.
  • Aktivierungsfunktion ist eine Funktion \( f:\mathbb R \rightarrow \mathbb R \) die angibt, wie sich die Ausgabe eines Neurons aus der Netzeingabe bestimmt.
  • Lernregel ist ein Algorithmus mit dem das neuronale Netz lernt. Hierzu verändert das Lernverfahren die Gewichte zwischen den Neuronen in der Form, dass für alle Eingaben die gewünschten Ausgaben mit minimalen Fehler erzeugbar ist.

Architektur des Netzes

Die einzelnen Schichten lassen sich wie folgt gliedern:

  • Eingabeschicht: Neuronen, zu denen es keine gerichtete Verbindung gibt. Die Eingabeschicht ist die Menge aller Eingabeneuronen eines Netzes.
  • Ausgabeschicht: Neuronen, die mit ihren Ausgabewerten das Ergebnis der Verarbeitung darstellen. Die Ausgabeschicht ist die Menge aller Ausgabeneuronen eines Netzes.
  • Verdeckte Schicht: Neuronen, die weder zur Eingabe- noch zur Ausgabeschicht gehören. Die verdeckte Schicht ist die Menge der verdeckten Neuronen.
Die Anzahl der Neuronen der Ein- und Ausgabeschicht entspricht der Dimension der Eingabevektoren bzw. der Ausgabevektoren. In der verdeckten Schicht liegt die Neuronenanzahl in der Regel zwischen der Anzahl der Neuronen in der Eingabe- und der Ausgabeschicht.

Ein- und Ausgabe

Ein neuronales Netz besitzt für die Ein- und Ausgabe die folgenden drei Hauptkomponenten:

  • Ausgangswert \(O_i\) ist die Ausgabe des sendenden Neurons \(i\), der sogenannte Aktivierungszustand. In der Eingabeschicht eines neuronalen Netzes entsprechen diese Werte den Eingabeinformationen des neuronalen Netzes.
  • Eingangswert \(I_i\) eines Neurons \(i\) ist die Summe der entsprechend gewichteten Eingangswerte:

    \( \displaystyle I_i = \sum_j w_{ji} O_j. \)

    Diese Formel heißt Propagierungsfunktion, da sie die Netzeingabe \(I_i\) eines Neurons \(i\) aus den Ausgaben der anderen Neuronen \(O_j\) mit deren Verbindungsgewichten \(w_{ji}\) berechnet. Eine Verknüpfung zweier Neuronen dient dazu, die Aktivierung von dem einen Neuron zum anderen Neuron zu propagieren.
  • Aktivierungsfunktion \( f: \mathbb R \rightarrow \mathbb [0,1] \) berechnet den Aktivierungszustand bzw. Ausgangswert jedes Neurons \(i\) aus den Eingangswerten:

    \( \displaystyle O_i = f(I_i). \)

  • In der Praxis werden verschiedene Aktivierungsfunktionen verwendet, beispielsweise
    • Schwellwertfunktion:

      \( f(x) = \left\{ \begin{array}{ll} 1, & x \geq \alpha \\ 0, & \text{sonst} \end{array} \right. \)

    • Sigmoid-Funktion:

      \( \displaystyle f(x) = \frac{1}{1 + e^{-x}} \)

    • ReLU:

      \( f(x) = \left\{ \begin{array}{ll} x & x \geq 0\\ 0, & \text{sonst} \end{array} \right. \)

Beispiel

Wir betrachten ein neuronales Netz mit drei Neuronen in der Eingabeschicht, zwei Neuronen in der verdeckten Schicht und ein Neuron in der Ausgabeschicht. Auf jeder Kante zwischen zwei Neuronen stehen die Gewichtswerte. Das Netz bekommt als Eingabe den Vektor (1, 0.4, 0.8). Als Aktivierungsfunktion verwenden wir die Schwellwertfunktion \( f_\alpha \) mit einem Schwellwert \( \alpha \), dessen Wert in den jeweiligen Neuronen eingezeichnet ist.
  • Neuronales Netz

    Ausgangswert des 1. Neurons der verdeckten Schicht

    \( I_1 = 1 \cdot 0.7 + 0.4 \cdot (-0.3) + 0.8 \cdot 0.6 = 1.06 \)
    \( O_1 = f_1(1.06)=1 \)

  • Neuronales Netz

    Ausgangswert des 2. Neurons der verdeckten Schicht

    \( I_2 = 1 \cdot 0.3 + 0.4 \cdot 0.6 + 0.8 \cdot 0.5 = 0.94 \)
    \( O_2 = f_1(0.94)=0 \)

  • Neuronales Netz

    Ausgangswert des Ausgabeneurons

    \( I_3 = 1 \cdot 0.9 + 0 \cdot 0.4 = 0.9 \)
    \( O_3 = f_2(0.9)=0 \)

Lernverfahren

Eine Lernregel für ein neuronales Netz ist ein Algorithmus der die Gewichtsparameter zwischen den einzelnen Neuronen einstellt. Hierzu verändert das Lernverfahren die Gewichte zwischen den Neuronen in der Form, dass für alle Eingaben die gewünschten Ausgaben mit minimalem Fehler erzeugbar sind. Das Training erfolgt durch das sukzessive Verändern der Gewichtswerte \( w_{ij} \), sodass das Netz näherungsweise zu jedem Eingangsvektor den zugehörigen Ausgangsvektor bestimmt. Ein mehrlagiges Netz wird mit Hilfe einer Fehlerrückführung über den Backpropagation-Algorithmus trainiert:

  1. Vorwärtsschritt: Das Netz schickt die Eingabedaten in Form von Bildern oder Signalen vorwärts von der Eingabeschicht über die verdeckten Schichten bis zur Ausgabeschicht. Für jede Schicht bestimmt das Verfahren die Ausgangswerte mit der Propagierungs- und Aktivierungsfunktion.
  2. Fehlerbestimmung: Die Ausgabe des Netzes wird mit den gewünschten Ausgabedaten verglichen. Hierzu berechnet der Algorithmus in der Ausgabeschicht eine Fehlerfunktion \( E \). Die Fehlerfunktion summiert die Quadrate aller Differenzen zwischen dem Sollwert und dem tatsächlichen Wert aller Neuronen auf. Falls dieser Fehler kleiner als ein definierter Schwellwert ist, kann das Training beendet werden.
  3. Rückwärtsschritt: Der Lernvorgang modifiziert die Gewichte, sodass der Wert der Fehlerfunktion \( E \) immer kleiner wird. Hierzu sendet der Algorithmus die Fehlerterme von der Ausgabeschicht über die verdeckten Schichten zur Eingabeschicht zurück. Ein Gradientenverfahren (Verfahren des steilsten Abstiegs) sucht dazu ein (lokales) Minimum der Fehlerfunktion. Das Verfahren bestimmt die Ableitung der Fehlerfunktion nach jedem Gewichtsparameter \( w_{ij} \), um die Richtung (negativer Gradient) und Stärke (Lernrate \( \eta \)) für das Ändern dieser Parameter zu finden:

    \( \displaystyle w_{ij} = w_{ij} + \Delta w_{ij} = w_{ij} - \eta \frac{\partial E}{\partial w_{ij}}. \)

Anwendungen

Neuronale Netze finden vor allem bei Problemstellungen eine Anwendung, die nur schwer oder gar nicht durch einen regelbasierten Ansatz darstellbar sind. Insbesondere sind hier die folgenden Anwendungen zu nennen:

  1. Klassifikation von Bildern
  2. Erkennen von Sprache
  3. Steuern autonomer Roboter
  4. Übersetzen von Sprache
  5. Diagnose von Krankheiten
  6. Regeln von Prozessen
  7. Lösen von Optimierungsproblemen
  8. Analyse von Daten
Ohne neuronale Netze wären viele moderne Anwendungen im Bereich der automatisierten Wahrnehmung nicht möglich.

  • Träumende neuronale Netze

    Deep Dream Generator von Google erzeugt aus einem Eingabebild ein surreales buntes Bild
  • Autonomes Fahren

    Autonomes Fahren

    Steuern eines autonomen Fahrzeuges mit Kamerabild und Entfernungsmesser
  • Segmentierung

    Bildsegmentierung

    Segmentierung der Bildpixel eines medizinischen Bildes in einzelne Bereiche
  • Kundenmarketing

    Kundenmarketing

    Analyse des Kundenverhaltens anhand charakteristischer Merkmale
  • Stiltransfer mit neuronalen Netzen

    Stiltransfer

    Übertragen des künstlerischen Stils eines Gemäldes auf ein beliebiges Eingabebild
Programmieren für Ingenieure und Naturwissenschaftler

Mehr Infos

Programmieren für Ingenieure und Naturwissenschaftler
Band: Intelligente Algorithmen und digitale Technologien
Kapitel 3 @ Springer-Verlag 2018
Zum Buch