Deep Learning ist ein Teilbereich des maschinellen Lernens, der sich mit der Verwendung von neuronalen Netzen beschäftigt. Diese Netze bestehen aus mehreren Schichten (auch "deep" genannt), die es ihnen ermöglichen, komplexe Muster in großen Datenmengen zu erkennen. Daher stammt der Begriff "Deep Learning", der sich auf die Verwendung solcher "tiefen" Netze bezieht. Die Tiefe bezieht sich dabei auf die Anzahl der Schichten, die das Netz hat, und nicht nur auf die Tiefe in einem räumlichen Sinn, sondern eher auf die Tiefe der Hierarchie von abstrakten Merkmalen oder Konzepten, die das Netz lernen kann.

Die Ursprünge des Deep Learning reichen bis in die 1940er Jahre zurück, als das Konzept der neuronalen Netze erstmals vorgeschlagen wurde. Mit der Zeit und dank bedeutender Fortschritte in der Rechenleistung sowie der Verfügbarkeit großer Datenmengen hat sich Deep Learning zu einem leistungsstarken Werkzeug für viele Anwendungen entwickelt.

Neuronale Netze sind das Herzstück des Deep Learnings und stellen ein Modell dar, das von der Struktur und Funktion des menschlichen Gehirns inspiriert ist.

Unser Gehirn besteht aus ca. 86 Milliarden Nervenzellen, auch Neuronen genannt, die über Synapsen miteinander verbunden sind. Diese Neuronen sind die Grundbausteine des Nervensystems und kommunizieren miteinander, indem sie elektrische Impulse über Synapsen übertragen. Diese Übertragung geschieht durch die Freisetzung von Neurotransmittern, die die elektrischen Signale von einem Neuron zum nächsten weiterleiten.

Kommunikation von Neuronen in unserem Gehirn

Künstliche Neuronale Netze wurden entwickelt, um diese beeindruckende Fähigkeit des menschlichen Gehirns zu imitieren. In einem KNN sind Neuronen als künstliche Neuronen modelliert, die in Schichten angeordnet sind. Diese Neuronen sind durch Gewichtungen miteinander verbunden, die ähnlich wie Synapsen wirken. Die Gewichtungen beeinflussen die Stärke der Verbindung zwischen den künstlichen Neuronen und bestimmen, wie stark ein Signal von einem Neuron zum nächsten übertragen wird.

Wie im menschlichen Gehirn durchläuft auch ein KNN verschiedene Schichten, darunter Eingabeschicht, verborgene Schichten und Ausgabeschicht.

Der Lernprozess von Künstlichen Neuronalen Netzen erfolgt durch die Anpassung der Gewichtungen basierend auf Rückmeldungen (Feedback) aus den Ausgabeschichten. Dieser iterative Prozess ermöglicht es dem Netz, Muster und Merkmale in den Daten zu erkennen, sich an komplexe Muster anzupassen und genaue Vorhersagen oder Klassifizierungen zu treffen.

Ein künstliches Neuron, oft auch als Knoten bezeichnet, ist die Grundeinheit eines neuronalen Netzes. Jedes Neuron führt eine einfache Berechnung durch und gibt das Ergebnis weiter an die Neuronen der nächsten Schicht. Die Hauptkomponenten eines Neurons sind:

  • Eingänge: Signale, die das Neuron von anderen Neuronen oder von der äußeren Umgebung erhält.
  • Gewichte: Parameter, die die Stärke jedes Eingangs bestimmen. Während des Trainingsprozesses werden diese Gewichte angepasst, um das Modell zu optimieren.
  • Bias: Ein zusätzlicher Parameter, der es dem Modell ermöglicht, die Ausgabe unabhängig von den Eingaben zu verschieben. Dies erhöht die Flexibilität des Modells.
  • Aktivierungsfunktion: Eine mathematische Funktion, die auf die gewichtete Summe der Eingaben und des Bias angewendet wird, um die Ausgabe des Neurons zu bestimmen.

Die Ausgabe y eines Neurons kann mathematisch als folgt dargestellt werden:

y=f(i=1nwixi+b)

wobei: wi die Gewichte, xi die Eingaben, b der Bias und f die Aktivierungsfunktion ist.


Aktivierungsfunktionen sind ein entscheidender Bestandteil neuronaler Netze. Ihre Hauptaufgabe ist es, die Ausgabe eines Neurons zu bestimmen, indem sie die gewichtete Summe der Eingaben und den Bias transformieren. Um diesen Prozess und seine Bedeutung besser zu verstehen, gehen wir auf die einzelnen Aspekte ein.

Ein Neuron in einem neuronalen Netz erhält mehrere Eingaben x1,x2,...,xn, die jeweils mit entsprechenden Gewichten w1, w2,...,wn multipliziert werden. Zusätzlich gibt es einen Bias b, der dem Ergebnis hinzugefügt wird. Die gewichtete Summe dieser Eingaben plus Bias ergibt die Nettoeingabe z:

z=w1x1+w2x2++wnxn+b

Die Aktivierungsfunktion f(z) wird dann auf diese Nettoeingabe z angewendet, um die endgültige Ausgabe des Neurons zu bestimmen. Diese Ausgabe ist das, was das Neuron an die nächste Schicht im Netz weitergibt oder als endgültige Vorhersage in der Ausgabeschicht verwendet.

Der wichtigste Grund für die Verwendung von Aktivierungsfunktionen ist die Einführung von Nichtlinearität in das neuronale Netz. Ohne diese Nichtlinearität wäre das gesamte Netz lediglich eine lineare Funktion, egal wie viele Schichten es hätte. Dies würde bedeuten, dass es sehr beschränkt in seiner Fähigkeit wäre, komplexe Muster zu lernen und Daten zu modellieren.

Durch das Einfügen von Nichtlinearität kann ein neuronales Netz:

  • Komplexe Muster erkennen: Mit nichtlinearen Aktivierungsfunktionen können neuronale Netze viel komplexere Beziehungen in den Daten modellieren.
  • Tiefere Netze nutzen: Nichtlineare Aktivierungsfunktionen ermöglichen es, tiefere Netze zu trainieren, die in der Lage sind, hierarchische Merkmale zu lernen.

Verschiedene Aktivierungsfunktionen haben unterschiedliche Eigenschaften und sind für verschiedene Zwecke besser geeignet. Einige transformieren die Eingaben in einen bestimmten Wertebereich, während andere bestimmte mathematische Eigenschaften aufweisen, die sie in verschiedenen Situationen nützlich machen.

Zum Beispiel:


Die Sigmoid-Funktion ist ideal für binäre Klassifikationen, da sie Ausgaben zwischen 0 und 1 liefert, die als Wahrscheinlichkeiten interpretiert werden können. Mathematisch lässt sich die Sigmoid-Funktion wie folgt ausdrücken:

σ(z)=11+e-z
  • Ausgabebereich: (0, 1)
  • Ableitung: σ'(z)=σ(z)(1-σ(z))
  • Anwendungsfälle: Binäre Klassifikationen, probabilistische Interpretationen
  • Vorteile: Glatte Ableitung, positive Ausgaben
  • Nachteile: Problem von verschwindenden Gradienten, nicht zentriert bei Null

Die Tanh-Funktion ist eine weitere Aktivierungsfunktion, die oft in neuronalen Netzen verwendet wird. Sie ist gut geeignet für versteckte Schichten, da sie die Eingabe in den Bereich zwischen -1 und 1 transformiert. Mathematisch lässt sich die Tanh-Funktion wie folgt ausdrücken:

tanh(x)=21+e-2x-1
  • Ausgabebereich: (-1, 1)
  • Ableitung: 4e-2x(1+e-2x)(sech(x))2
  • Anwendungsfälle: Versteckte Schichten
  • Vorteile: Zentriert bei Null, stärkere Gradienten
  • Nachteile: Problem von verschwindenden Gradienten

ReLU ist eine der beliebtesten Aktivierungsfunktionen der modernen tiefen Lernalgorithmen. Sie ist einfach zu berechnen und hilft das Problem des verschwindenden Gradienten zu mildern, das bei Sigmoid und Tanh auftreten kann. Die ReLU-Funktion gibt den Eingabewert zurück, wenn er positiv ist, und sonst 0:

f(x)={0,x<0x,x0}
  • Ausgabebereich: [0,)
  • Ableitung: d(f(x))dx={0,x<01,x0}
  • Anwendungsfälle: Versteckte Schichten, CNNs
  • Vorteile: Einfach zu berechnen, vermeidet das Problem von verschwindenden Gradienten
  • Nachteile: Dying ReLU Problem

Die Softmax-Funktion wird oft in der Ausgabeschicht von KNNs verwendet, insbesondere für multiklassen Klassifikationen. Sie transformiert den Eingabevektor z=(z1,z2,,zN) in einen Wahrscheinlichkeitsvektor σ(z)=(σ(z1),σ(z2),,σ(zN)), wobei die Summe aller Ausgaben 1 beträgt.

σ(z)i=ezik=1Nezk

wobei: i=1,2,,N die Indexe der Klassen sind, N = Anzahl der Klassen; e = Basis der natürlichen Logarithmen.

  • Ausgabebereich: (0,1)

  • Ableitung: σ(z)jzi=σ(z)j(δijσ(z)i)

    wobei: δij={1 wenn i=j0 wenn ij

    Die Ableitung der Softmax-Funktion kann effizient berechnet werden, was für den Backpropagation-Algorithmus zur Optimierung der Netzparameter wichtig ist. Außerdem ist sie monoton wachsend, d.h., eine Erhöhung der Eingabewerte führt zu einer Erhöhung der Ausgabe, was für die Lernalgorithmen in vielen Fällen vorteilhaft ist.

  • Anwendungsfälle: Die Softmax-Funktion wird typischerweise in der Ausgabeschicht von neuronalen Netzen verwendet, die für multiklassen Klassifikationsprobleme trainiert sind (z.B. Bilderkennung, Spracherkennung). Sie gibt die Wahrscheinlichkeiten für verschiedene Klassen als Ausgabe zurück.

  • Vorteile: gut geeignet für Klassifikationsprobleme, klare Wahrscheinlichkeitsvorhersagen, normalisierte Ausgaben in einem bestimmten Bereich

  • Nachteile: Wahrscheinlichkeiten sind oft sehr "selbstbewusst", d. h., sie neigen dazu, eine Klasse stark zu bevorzugen und andere Klassen zu vernachlässigen, wenn die Eingaben stark polarisiert sind.


Neuronale Netze bestehen aus mehreren Schichten von Neuronen. Die grundlegenden Bestandteile eines neuronalen Netzes sind:

  • Eingabeschicht (Input Layer)
  • Versteckte Schichten (Hidden Layers)
  • Ausgabeschicht (Output Layer)

Die Eingabeschicht ist die erste Schicht eines neuronalen Netzes. Sie empfängt die Rohdaten und leitet sie an die nächste Schicht weiter. Diese Schicht besteht aus Neuronen, die jedes Merkmal der Eingabedaten darstellen. Zum Beispiel, wenn das Netz Bilder klassifizieren soll, könnte jedes Neuron in der Eingabeschicht den Wert eines Pixels des Bildes darstellen. Dabei sind die Neuronen in der Eingabeschicht nicht gewichtet und fungieren lediglich als Schnittstelle zur Datenwelt. Die Anzahl der Neuronen in der Eingabeschicht entspricht der Anzahl der Merkmale (Dimensionen) in den Eingabedaten.

Versteckte Schichten befinden sich zwischen der Eingabeschicht und der Ausgabeschicht. Diese Schichten führen die Hauptarbeit der Mustererkennung und Merkmalsextraktion durch. Jedes Neuron in einer versteckten Schicht ist mit den Neuronen der vorherigen und der nächsten Schicht durch gewichtete Verbindungen verbunden. Diese Gewichte werden während des Trainings angepasst. Neuronen in den versteckten Schichten wenden Aktivierungsfunktionen an, um die gewichtete Summe der Eingaben zu transformieren und Nichtlinearitäten in das Modell einzuführen. Häufig verwendete Aktivierungsfunktionen sind ReLU, Sigmoid und Tanh. Ein tiefes neuronales Netz hat mehrere versteckte Schichten, wodurch es in der Lage ist, komplexe Muster in den Daten zu lernen. Jede zusätzliche Schicht ermöglicht es dem Netz, abstraktere Merkmale zu erkennen.

Die Ausgabeschicht ist die letzte Schicht eines neuronalen Netzes und liefert das endgültige Ergebnis des Modells. Die Anzahl der Neuronen in der Ausgabeschicht hängt von der Art des Problems ab. Für ein binäres Klassifikationsproblem gibt es normalerweise ein einzelnes Neuron, während ein Mehrklassenklassifikationsproblem ein Neuron pro Klasse haben kann. Die Aktivierungsfunktion in der Ausgabeschicht hängt ebenfalls vom Problem ab. Für binäre Klassifikation wird oft die Sigmoid-Funktion verwendet, während für Mehrklassenklassifikation die Softmax-Funktion verwendet wird, die Wahrscheinlichkeitswerte für jede Klasse liefert.


In jedem Trainingszyklus (auch als Epoch bezeichnet) eines neuronalen Netzes werden folgende Schritte durchgeführt:

  1. Vorwärtsdurchlauf: Berechnung der Ausgabe des Netzes.
  2. Fehlerberechnung: Bestimmung des Fehlers durch die Loss-Funktion.
  3. Rückwärtsdurchlauf: Berechnung der Gradienten durch Rückpropagation des Fehlers.
  4. Gewichtsaktualisierung: Anpassung der Gewichte und Biases basierend auf den berechneten Gradienten.

Während des Vorwärtsdurchlaufs werden die Eingabedaten durch das Netz propagiert, um die Ausgabe zu berechnen. Dies geschieht folgendermaßen:

  • In der Eingabeschicht werden die Rohdaten in die Eingabeschicht eingegeben.
  • Jede versteckte Schicht berechnet die gewichtete Summe der Eingaben und wendet eine Aktivierungsfunktion an.
  • Die letzte Schicht, also die Ausgabeschicht, transformiert die Aktivierungen der letzten versteckten Schicht in die endgültige Vorhersage y^

Beispielhafte Berechnung für eine Schicht l:

z(l)=W(l)a(l1)+b(l) a(l)=σ(z(l))

wobei:
W(l) die Gewichtsmatrix der Schicht l ist.
Jedes Neuron in der Schicht l ist mit allen Neuronen in der vorherigen Schicht (Schicht l1) verbunden.
Die Gewichtsmatrix W(l) spezifiziert die Gewichtungen dieser Verbindungen.

a(l-1) ist der Aktivierungsvektor der vorherigen Schicht l-1. Er enthält die Aktivierungswerte der Neuronen in der Schicht l-1 nach Anwendung der Aktivierungsfunktion.

b(l) ist der Bias-Vektor der Schicht l.
Jedes Neuron in der Schicht l hat einen spezifischen Bias-Wert, der zur gewichteten Summe der Eingaben addiert wird, bevor die Aktivierungsfunktion angewendet wird.

Nachdem die Vorhersage y^ berechnet wurde, kommt die Loss-Funktion zum Einsatz. Die Loss-Funktion vergleicht die Vorhersage y^ mit den tatsächlichen Zielwerten y und berechnet einen Fehlerwert (Loss), der eine numerische Bewertung der Leistung des Modells auf den Trainingsdaten darstellt.

Beispielhafte Loss-Funktion (Mittlerer quadratischer Fehler):

L(y^,y)=1ni=1n(y^iyi)2

Die im Vorwärtsdurchlauf berechneten Aktivierungen und die im Loss-Berechnungsschritt berechneten Fehlerwerte (Loss) werden im Rückwärtsdurchlauf verwendet, um die Gradienten der Loss-Funktion bezüglich der Gewichte und Biases zu berechnen. Dies geschieht folgendermaßen:

  • Gradienten der Ausgabeschicht wird berechnet
  • Der Fehlerterm für jede versteckte Schicht wird berechnet, indem der Fehler rückwärts durch das Netz propagiert wird.
  • Die Gradienten der Loss-Funktion bezüglich der Gewichte und Biases werden berechnet.

Für eine Schicht l berechnet sich der Gradientenrückfluss δ(l) in Bezug auf die Gewichtsmatrix W(l) und die Aktivierungen a(l−1) der vorhergehenden Schicht.

Die Berechnung des Gradienten δ(l) erfolgt wie folgt:

δl=(W(l+1))Tδl+1σ(zl)

Zusätzlich berechnet sich die Änderung der Gewichtsmatrix ΔW(l) und der Biasvektor Δb(l) wie folgt:

Wl=δla(l-1)T bl=δl

Die Gewichte und Biases werden mithilfe der berechneten Gradienten aktualisiert, dabei wird ein Optimierungsalgorithmus wie Stochastic Gradient Descent (SGD mit direkter Anpassung basierend auf den Gradienten) oder Adam (Anpassung basierend auf den korrigierten Momentenschätzern) verwendet.

SGD:
Gewichtsaktualisierung:

WlWlηWlL

Bias-Korrektur:

blblηblL

Adam:
Berechnung der Momentschätzer:

mt=β1mt-1+(1β1)Wt vt=β2vt-1+(1β2)(Wt)2

Bias-Korrektur:

m^t=mt1-β1t v^t=vt1-β2t

Gewichtsaktualisierung:

WtWt-1ηmtvt+ε

Das Problem der verschwindenden Gradienten tritt auf, wenn die Gradienten während des Trainings durch die Aktivierungsfunktionen in einem neuronalen Netz zu klein werden. Das bedeutet, dass die Gradienten in den tieferen Schichten des Netzes während des Backpropagation-Verfahrens so stark abnehmen können, dass die Gewichtsaktualisierungen vernachlässigbar klein werden. Dies kann dazu führen, dass die tieferen Schichten des Netzes nur sehr langsam oder gar nicht trainiert werden und das gesamte Netz Schwierigkeiten hat, komplexe Muster zu lernen.

Um dieses Problem zu mildern, wurden Aktivierungsfunktionen wie ReLU (Rectified Linear Unit) und ihre Varianten (Leaky ReLU, Parametric ReLU usw.) entwickelt. Diese Funktionen haben den Vorteil, dass sie in vielen Fällen keine Sättigungseffekte zeigen und somit Gradienten besser durchlassen können, insbesondere in tieferen Schichten. Dadurch können sie helfen, das Training stabiler zu machen und das Problem des Verschwindens oder Explodierens von Gradienten zu verringern.

Je nach den spezifischen Anforderungen des Netzes und der Trainingsaufgabe verwendet man daher unterschiedliche Aktivierungsfunktionen. Während die Sigmoid- und Tanh-Funktionen immer noch in bestimmten Anwendungen nützlich sind, sind ReLU und seine Varianten oft die bevorzugte Wahl in tieferen neuronalen Netzen.


0JahreIT

Von langjähriger Erfahrung profitieren

Kunden wählen uns aufgrund unseres umfassenden Fachwissens und unserer Fähigkeit, praktische Lösungen für ihre individuellen Herausforderungen zu entwickeln.