Deep Learning for Beginners - Exam
Aufgabe 1)
In diesem Teil der Prüfung sollst Du Dein Wissen über die Evolution von neuronalen Netzen und die Entwicklung von Deep Learning unter Beweis stellen. Betrachte die verschiedenen Meilensteine und deren Einfluss auf die heutige Forschung und Anwendung von Deep Learning.
a)
Erläutere das McCulloch-Pitts-Modell und seine Bedeutung für die mathematische Grundlage neuronaler Netze. Diskutiere, wie dieses Modell die spätere Entwicklung von neuronalen Netzen beeinflusst hat. Erkläre dabei die neuronalen Schaltkreise in Bezug auf logische Berechnungen und einfache mathematische Operationen.
Lösung:
Das McCulloch-Pitts-Modell und seine Bedeutung
1. Einführung in das McCulloch-Pitts-Modell - Das McCulloch-Pitts-Modell wurde 1943 von Warren McCulloch und Walter Pitts entwickelt und ist das erste mathematisch formalisierte Modell eines Neurons.
- Es basiert auf der Idee, dass Neuronen als einfache Schalter fungieren, die entweder 'an' (1) oder 'aus' (0) sein können, ähnlich wie logische Gatter in der Computertechnik.
2. Aufbau und Funktionsweise3. Bedeutung für die mathematische Grundlage neuronaler Netze - Das Modell legte die Grundlagen für spätere Entwicklungen in der Theorie künstlicher neuronaler Netze.
- Es etablierte das Konzept der Schwellenwertlogik und der gewichteten Summation, welches in modernen neuronalen Netzen weit verbreitet ist.
- McCulloch und Pitts zeigten, dass jede logische Funktion durch ein Netzwerk solcher Neuronen dargestellt werden kann, was den Weg für komplexere Modelle ebnete.
4. Einfluss auf die spätere Entwicklung neuronaler Netze - In den 1950er Jahren inspirierte das Modell die Entwicklung des Perzeptrons, einem einfacheren neuronalen Netzmodell von Frank Rosenblatt.
- Die Ideen der Schwellenwertlogik wurden erweitert und verfeinert, um tiefere und leistungsfähigere Netzwerke wie heutige tiefe neuronale Netze (Deep Learning) zu schaffen.
5. Neuronale Schaltkreise in Bezug auf logische Berechnungen - Ein McCulloch-Pitts-Neuron kann einfache logische Operationen wie UND, ODER und NICHT implementieren. Beispiel:
- Ein UND-Gatter feuert nur, wenn alle Eingaben aktiv sind (alle Eingaben sind 1).
- Ein ODER-Gatter feuert, wenn mindestens eine Eingabe aktiv ist (mindestens eine Eingabe ist 1).
- Ein NICHT-Gatter (Inverter) feuert, wenn die Eingabe inaktiv ist (die Eingabe ist 0).
- Durch die Kombination solcher Neuronen können komplexere logische Schaltkreise und Berechnungen implementiert werden.
6. Einfluss auf einfache mathematische Operationen - Das McCulloch-Pitts-Modell kann auch zur Implementierung einfacher mathematischer Operationen wie Addition und Subtraktion verwendet werden, indem die Neuronen entsprechend verschaltet werden.
- Diese Grundidee wird in künstlichen neuronalen Netzen genutzt, um komplexe Funktionen durch die Kombination einfacher Operationen zu approximieren.
b)
Beschreibe den Durchbruch durch Geoffrey Hinton mit dem 'Deep Belief Network' im Jahr 2006. Gehe dabei besonders auf die technischen Innovationen und deren Auswirkungen auf die Popularisierung von Deep Learning ein. Diskutiere auch, wie diese Innovationen die Forschungsmethoden und -richtungen in den darauffolgenden Jahren verändert haben.
Lösung:
Geoffrey Hinton und der Durchbruch mit dem 'Deep Belief Network' (2006)
1. Einführung in das 'Deep Belief Network' (DBN) - Ein Deep Belief Network (DBN) ist eine Art von tiefem neuronalen Netz, das aus mehreren Schichten von stochastischen, latenten Variablen besteht.
- Diese Schichten werden als 'Restricted Boltzmann Machines' (RBMs) bezeichnet, die übereinander gestapelt werden und eine hierarchische Repräsentation von Daten ermöglichen.
2. Technische Innovationen - Geoffrey Hinton und seine Kollegen entwickelten ein effektives Verfahren zur Schichtung von RBMs, das als 'Greedy Layer-Wise Training' bekannt ist.
- Das Greedy Layer-Wise Trainingverfahren erleichtert das Training tiefer Strukturen, indem jede Schicht einzeln und unabhängig von den anderen Schichten trainiert wird.
- Nach dem Vortraining der einzelnen Schichten können die Gewichte der gesamten Netzwerks feinabgestimmt werden, indem die Standard-Backpropagation verwendet wird.
3. Auswirkungen auf die Popularisierung von Deep Learning - Die Einführung von DBNs markierte den Beginn einer neuen Ära im maschinellen Lernen, indem sie die Probleme der Vanishing Gradients und der ineffizienten Berechnung in tiefen Netzwerken überwand.
- DBNs demonstrierten die Fähigkeit, komplexe und hierarchische Merkmale in großen Datensätzen zu lernen, was zu signifikanten Verbesserungen in Bereichen wie der Spracherkennung und der Bildverarbeitung führte.
- Dieser Durchbruch führte zu einem gesteigerten Interesse an tiefen neuronalen Netzen und inspirierte viele nachfolgende Forschungen und Anwendungen im Bereich des Deep Learning.
4. Veränderungen in den Forschungsmethoden und -richtungen - Die Innovationen von Hinton und seine Kollegen führten zu einer Hinwendung zu tieferen und komplexeren Modellen im Vergleich zu den zuvor verwendeten flacheren Architekturen.
- Forscher begannen sich auf die Entwicklung von neuen Optimierungsmethoden und Regularisierungstechniken zu konzentrieren, um das Training tiefer Netzwerke weiter zu verbessern.
- Es gab eine verstärkte Zusammenarbeit zwischen Wissenschaft und Industrie, was zu einer schnelleren Umsetzung von Forschungsergebnissen in realen Anwendungen führte.
- Die Fortschritte in der Hardware, insbesondere die Nutzung von GPUs (Grafikkarten), wurden zunehmend wichtiger, um die Berechnungseffizienz und die Fähigkeit, größere Modelle zu trainieren, zu verbessern.
5. Fazit - Geoffrey Hintons Durchbruch mit dem Deep Belief Network im Jahr 2006 hatte tiefgreifende Auswirkungen auf die Entwicklung und Popularisierung von Deep Learning.
- Diese Innovationen lösten eine neue Welle von Forschungen aus und ermöglichten es, tiefe neuronale Netze effizienter und leistungsfähiger zu machen.
- Die Methoden und Richtungen der Forschung haben sich seither stark weiterentwickelt und vertieft, was zu zahlreichen Verbesserungen und neuen Anwendungen im Bereich der künstlichen Intelligenz geführt hat.
c)
Erkläre, warum AlexNet im Jahr 2012 als entscheidender Meilenstein in der Geschichte des Deep Learning angesehen wird. Analysiere die Architektur von AlexNet und warum sie im ImageNet-Wettbewerb so erfolgreich war. Gehe auf spezifische technische Aspekte und Verbesserungen ein, zum Beispiel die Verwendung von GPUs zur Beschleunigung des Trainingsprozesses. Diskutiere abschließend die Auswirkungen dieses Erfolgs auf die Nutzung von Deep Learning in der Computer Vision und anderen Bereichen.
Lösung:
AlexNet: Ein entscheidender Meilenstein im Deep Learning (2012)
1. Bedeutung von AlexNet - AlexNet wurde 2012 von Alex Krizhevsky, Ilya Sutskever und Geoffrey Hinton entwickelt und stellte einen Durchbruch im Bereich des Deep Learning und der Computer Vision dar.
- Es gewann den ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 2012 mit einem erheblichen Vorsprung, was die Überlegenheit von tiefen neuronalen Netzen in der Bildklassifizierung demonstrierte.
2. Architektur von AlexNet - AlexNet ist ein tiefes Convolutional Neural Network (CNN) mit einer Architektur aus 8 Schichten: 5 Convolutional Layers gefolgt von 3 Fully Connected Layers.
- Die Architektur enthält mehrere technische Innovationen und Verbesserungen, die maßgeblich zu ihrem Erfolg beigetragen haben. Dazu gehören:
- ReLU-Aktivierungsfunktion: Die Verwendung der Rectified Linear Unit (ReLU) anstelle der damals üblichen Sigmoid- oder Tanh-Aktivierungsfunktionen beschleunigte das Training erheblich, indem sie das Vanishing Gradient-Problem reduzierte.
- Data Augmentation: Um Überanpassung zu vermeiden und die Trainingsdaten zu erweitern, wurden Techniken wie zufälliges Zuschneiden, Spiegeln und Farbveränderungen verwendet.
- Dropout: Diese Technik, bei der während des Trainings zufällig eine bestimmte Anzahl von Neuronen deaktiviert werden, wurde angewendet, um Überanpassung weiter zu verhindern.
- Pooling: Max-Pooling-Schichten wurden eingefügt, um die Größe der Repräsentationen zu reduzieren und Translation-Invarianz zu fördern.
3. Verwendung von GPUs - Eine der bahnbrechendsten Innovationen war die Nutzung von Grafikprozessoren (GPUs) zur Beschleunigung des Trainingsprozesses.
- GPUs sind besonders gut geeignet für die parallele Verarbeitung und ermöglichen eine viel schnellere Berechnung großer Matrizenmultiplikationen, die in CNNs benötigt werden.
- AlexNet wurde auf zwei Nvidia GTX 580 GPUs trainiert, was die Trainingszeit erheblich verkürzte.
4. Erfolg im ImageNet-Wettbewerb - AlexNet erreichte eine Top-5-Fehlerquote von 15,3%, was einen enormen Sprung im Vergleich zum zweitplatzierten Modell darstellte, das eine Fehlerquote von 26,2% hatte.
- Dies zeigte deutlich die Überlegenheit tiefen Lernens gegenüber herkömmlichen Maschinenlernmethoden in der Bildklassifizierung auf einem großen und vielfältigen Datensatz.
5. Auswirkungen des Erfolgs von AlexNet - Der Erfolg von AlexNet popularisierte die Anwendung von tiefen neuronalen Netzen in der Computer Vision und inspirierte eine Vielzahl von Folgearbeiten und neuen Netzarchitekturen wie VGG, GoogLeNet und ResNet.
- Es führte zu einem verstärkten Einsatz von Deep Learning in verschiedenen Bereichen, darunter Spracherkennung, generative Modelle, Robotik und medizinische Bildverarbeitung.
- Unternehmen und Forschungseinrichtungen investierten massiv in die Entwicklung von Deep Learning-Technologien und beschleunigten so die Fortschritte in der künstlichen Intelligenz.
- Die Verfügbarkeit leistungsfähiger GPUs und mittlerweile spezieller Deep Learning Hardware wie TPUs (Tensor Processing Units) hat das Training wesentlich größerer und komplexer Modelle ermöglicht.
6. Fazit - AlexNet war ein entscheidender Meilenstein, der die Überlegenheit von tiefen neuronalen Netzwerken demonstrierte und den Weg für eine breite Anwendung und Weiterentwicklung im Bereich des Deep Learning ebnete.
- Die technischen Innovationen und die erfolgreiche Nutzung von GPUs stellten sicher, dass tiefes Lernen zu einem dominierenden Ansatz in der modernen KI-Forschung und -Anwendung wurde.
Aufgabe 2)
Angenommen, Du möchtest ein einfaches neuronales Netzwerk für eine binäre Klassifikationsaufgabe erstellen. Das Netzwerk besteht aus einer Eingabeschicht mit zwei Eingabeneuronen, einer versteckten Schicht mit drei Neuronen und einer Ausgabeschicht mit einem Neuron. Das neuronale Netzwerk ist ein Feedforward-Netzwerk.
a)
Teilaufgabe a: Definiere die mathematische Beziehung, die ein künstliches Neuron in der versteckten Schicht implementiert. Beschreibe, wie die Ausgabe eines Neurons berechnet wird. Verwende dazu folgende Symbole: Eingaben (\textbf{x} = [x_1, x_2]), Gewichte (\textbf{W} = [w_1, w_2]), Bias (b) und Aktivierungsfunktion (f).
Lösung:
Teilaufgabe a: Definiere die mathematische Beziehung, die ein künstliches Neuron in der versteckten Schicht implementiert. Beschreibe, wie die Ausgabe eines Neurons berechnet wird. Verwende dazu folgende Symbole: Eingaben (\(\textbf{x} = [x_1, x_2]\)), Gewichte (\(\textbf{W} = [w_1, w_2]\)), Bias (\(b\)) und Aktivierungsfunktion (\(f\)).
b)
Teilaufgabe b: Beschreibe den Prozess der Vorwärtsausbreitung (Feedforward) in Deinem neuronalen Netzwerk. Erstelle dabei ein Diagramm oder eine Tabelle, die den Ablauf von den Eingaben bis zur Ausgabe veranschaulicht. Zeige, wie die Zwischenergebnisse in jeder Schicht berechnet werden.
Lösung:
Teilaufgabe b: Beschreibe den Prozess der Vorwärtsausbreitung (Feedforward) in Deinem neuronalen Netzwerk. Erstelle dabei ein Diagramm oder eine Tabelle, die den Ablauf von den Eingaben bis zur Ausgabe veranschaulicht. Zeige, wie die Zwischenergebnisse in jeder Schicht berechnet werden.
- Der Prozess der Vorwärtsausbreitung in einem neuronalen Netzwerk umfasst die Berechnung der Ausgaben von jeder Schicht beginnend mit den Eingaben bis hin zur endgültigen Ausgabe. Wir betrachten ein Netzwerk mit zwei Eingabeneuronen, einer versteckten Schicht mit drei Neuronen und einer Ausgabeschicht mit einem Neuron.
- Für die einfachere Darstellung verwenden wir die folgende Notation:
- Eingaben: \(\textbf{x} = [x_1, x_2]\)
- Gewichte der versteckten Schicht: \(\textbf{W}_{\text{hidden}}\), wobei \(w_{ij}\) das Gewicht vom \(i\)-ten Eingabeneuron zum \(j\)-ten Neuron der versteckten Schicht ist.
- Bias der versteckten Schicht: \(b_j\) für das \(j\)-te Neuron der versteckten Schicht.
- Gewichte der Ausgabeschicht: \(\textbf{W}_{\text{output}}\), wobei \(v_{j}\) das Gewicht vom \(j\)-ten Neuron der versteckten Schicht zum Ausgabeneuron ist.
- Bias der Ausgabeschicht: \(b_{\text{output}}\).
- Aktivierungsfunktion: \(f\).
Schritte der Vorwärtsausbreitung:
Schritt | Berechnung | Ergebnis |
---|
1. Berechnung des Nettoeingangs der versteckten Neuronen | \[z_j = x_1 \times w_{1j} + x_2 \times w_{2j} + b_j\] | Nettoeingänge \(z_1, z_2, z_3\) |
2. Aktivierung der versteckten Neuronen | \[h_j = f(z_j)\] | Aktivierungen \(h_1, h_2, h_3\) |
3. Berechnung des Nettoeingangs des Ausgabeneurons | \[z_{\text{output}} = h_1 \times v_1 + h_2 \times v_2 + h_3 \times v_3 + b_{\text{output}}\] | Nettoeingang \(z_{\text{output}}\) |
4. Aktivierung des Ausgabeneurons | \[y = f(z_{\text{output}}) \] | Endausgabe \(y\) |
c)
Teilaufgabe c: Führe die Rückwärtsausbreitung (Backpropagation) für dieses Netzwerk durch. Beschreibe, wie der Fehler in der Ausgabeschicht berechnet wird und wie dieser Fehler durch die versteckten Schichten hin zur Eingabeschicht propagiert wird. Zeige mathematisch, wie die Gradienten für die Gewichte und Biases berechnet werden.
Lösung:
Teilaufgabe c: Führe die Rückwärtsausbreitung (Backpropagation) für dieses Netzwerk durch. Beschreibe, wie der Fehler in der Ausgabeschicht berechnet wird und wie dieser Fehler durch die versteckten Schichten hin zur Eingabeschicht propagiert wird. Zeige mathematisch, wie die Gradienten für die Gewichte und Biases berechnet werden.
- Die Rückwärtsausbreitung (Backpropagation) ist ein Verfahren zum Training neuronaler Netzwerke, bei dem der Fehler von der Ausgabeschicht rückwärts bis zu den Eingabeschichten propagiert wird, um die Gewichte und Biases des Netzwerks anzupassen. Der Prozess kann in folgende Schritte unterteilt werden:
1. Fehlerberechnung in der Ausgabeschicht:
- Angenommen, das gewünschte Ziel ist \( t \) und die Netzwerk-Ausgabe ist \( y \). Der Fehler in der Ausgabeschicht kann durch die Differenz zwischen der Zielausgabe und der tatsächlichen Ausgabe berechnet werden:
\( \text{Fehler}_{\text{output}} = t - y \)
Für die Zwecke des Gradientenabstiegs verwenden wir eine Verlustfunktion, beispielsweise die quadrierte Verlustfunktion: \( L = \frac{1}{2} (t - y)^2 \)
Der partielle Verlustgradient bezüglich des Nettoeingangs der Ausgabeschicht (\( z_{\text{output}} \)) ist: \( \frac{\text{d} L}{\text{d} z_{\text{output}}} = (y - t) \times f'(z_{\text{output}}) \)
wobei \( f'(z_{\text{output}}) \) die Ableitung der Aktivierungsfunktion \( f \) bezüglich \( z_{\text{output}} \) ist.2. Fehlerpropagierung durch die versteckte Schicht:
- Wir berechnen den Fehler für jedes Neuron in der versteckten Schicht. Angenommen, die Gewichte von den versteckten Neuronen zur Ausgabeschicht sind \( \textbf{v} = [v_1, v_2, v_3] \). Der Fehlerterm für das \( j \)-te Neuron der versteckten Schicht ist:
\( \text{Fehler}_j = \frac{\text{d} L}{\text{d} z_{\text{output}}} \times v_j \)
Die Gradienten für die Gewichte von den Eingaben zur versteckten Schicht (\( \textbf{W}_{\text{hidden}} \)) können dann wie folgt berechnet werden: \( \frac{\text{d} L}{\text{d} w_{ij}} = \text{Fehler}_j \times f'(z_j) \times x_i \)
wobei \( f'(z_j) \) die Ableitung der Aktivierungsfunktion bezüglich \( z_j \) ist und \( x_i \) die Eingabe ist.Die Gradienten für die Biases der versteckten Schicht (\( b_j \)) sind: \( \frac{\text{d} L}{\text{d} b_j} = \text{Fehler}_j \times f'(z_j) \)
3. Gewichts- und Bias-Aktualisierung:
- Die Gewichte und Biases im Netzwerk werden dann entsprechend der Lernrate \( \beta \) unter Verwendung der berechneten Gradienten aktualisiert:
\( w_{ij} = w_{ij} - \beta \times \frac{\text{d} L}{\text{d} w_{ij}} \) \( v_j = v_j - \beta \times \frac{\text{d} L}{\text{d} v_j} \) \( b_j = b_j - \beta \times \frac{\text{d} L}{\text{d} b_j} \) \( b_{\text{output}} = b_{\text{output}} - \beta \times \frac{\text{d} L}{\text{d} b_{\text{output}}} \)
Durch Wiederholung dieser Schritte für mehrere Iterationen und über viele Trainingsbeispiele wird das Netzwerk seine Gewichte und Biases anpassen, um die Vorhersagen zu verbessern und den Gesamtfehler zu minimieren.
d)
Teilaufgabe d: Implementiere das beschriebene Feedforward-Neuronale-Netzwerk in Python. Verwende dabei NumPy für die Matrixoperationen. Schreibe den Code für die Vorwärtsausbreitung sowie eine einfache Implementierung der Rückwärtsausbreitung zum Anpassen der Gewichte und Biases.
Lösung:
Teilaufgabe d: Implementiere das beschriebene Feedforward-Neuronale-Netzwerk in Python. Verwende dabei NumPy für die Matrixoperationen. Schreibe den Code für die Vorwärtsausbreitung sowie eine einfache Implementierung der Rückwärtsausbreitung zum Anpassen der Gewichte und Biases.
import numpy as np# Aktivierungsfunktion (Sigmoid) und deren Ableitungdef sigmoid(x): return 1 / (1 + np.exp(-x))def sigmoid_derivative(x): return x * (1 - x)# Initialisiere Gewichte und Biasesnp.random.seed(42) # Für Reproduzierbarkeitinput_layer_size = 2hidden_layer_size = 3output_layer_size = 1W_hidden = np.random.rand(input_layer_size, hidden_layer_size)b_hidden = np.random.rand(hidden_layer_size)W_output = np.random.rand(hidden_layer_size, output_layer_size)b_output = np.random.rand(output_layer_size)# Vorwärtsausbreitungdef feedforward(X): # Eingabe zur versteckten Schicht z_hidden = np.dot(X, W_hidden) + b_hidden h_hidden = sigmoid(z_hidden) # Versteckte Schicht zur Ausgabeschicht z_output = np.dot(h_hidden, W_output) + b_output output = sigmoid(z_output) return z_hidden, h_hidden, z_output, output# Rückwärtsausbreitungdef backpropagation(X, y, z_hidden, h_hidden, z_output, output, learning_rate): # Fehler in der Ausgabeschicht error_output = y - output d_output = error_output * sigmoid_derivative(output) # Fehler in der versteckten Schicht error_hidden = np.dot(d_output, W_output.T) d_hidden = error_hidden * sigmoid_derivative(h_hidden) # Gewichts- und Bias-Updates W_output_update = np.dot(h_hidden.T, d_output) b_output_update = np.sum(d_output, axis=0, keepdims=True) W_hidden_update = np.dot(X.T, d_hidden) b_hidden_update = np.sum(d_hidden, axis=0, keepdims=True) W_output += learning_rate * W_output_update b_output += learning_rate * b_output_update.flatten() W_hidden += learning_rate * W_hidden_update b_hidden += learning_rate * b_hidden_update.flatten()# Trainingsloopdef train(X, y, iterations, learning_rate): for _ in range(iterations): z_hidden, h_hidden, z_output, output = feedforward(X) backpropagation(X, y, z_hidden, h_hidden, z_output, output, learning_rate)# Beispiel-DatenX = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])y = np.array([[0], [1], [1], [0]])# Training des Netzwerksepochs = 10000learning_rate = 0.1train(X, y, epochs, learning_rate)# Ausgabe des Trainingsresultatsfor x in X: print(f'Eingabe: {x}, Ausgabe: {feedforward(x)[-1]}')
Aufgabe 4)
- Aktivierungsfunktionen: ReLU, Sigmoid, Tanh
- Aktivierungsfunktionen bestimmen die Ausgabe eines Neurons in einem neuronalen Netzwerk:
- ReLU (Rectified Linear Unit): \( f(x) = \text{max}(0, x) \)
- Sigmoid: \( f(x) = \frac{1}{1 + e^{-x}} \)
- Tanh (Hyperbolic Tangent): \( f(x) = \text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \)
- Eigenschaften:
- ReLU: Einfach, schnell, kann Neuronen inaktivieren (wenn x < 0)
- Sigmoid: Ausgabebereich [0, 1], problematisch bei vanishing gradient
- Tanh: Ausgabebereich [-1, 1], ebenfalls vanishing gradient Problem
a)
Berechne die Ausgaben der Aktivierungsfunktionen ReLU, Sigmoid und Tanh für die Eingabewerte -1, 0 und 1. Zeige deine Berechnungen und erkläre die Ergebnisse.
Lösung:
Berechnungen und Erläuterungen der Aktivierungsfunktionen
1. ReLU (Rectified Linear Unit)
Formel: f(x) = max(0, x)
- Für x = -1: f(-1) = max(0, -1) = 0
- Für x = 0: f(0) = max(0, 0) = 0
- Für x = 1: f(1) = max(0, 1) = 1
Die ReLU-Funktion gibt bei negativen Eingabewerten 0 zurück und entspricht bei positiven Eingabewerten der Eingabe selbst.
2. Sigmoid
Formel: f(x) = \frac{1}{1 + e^{-x}}
- Für x = -1: f(-1) = \frac{1}{1 + e^{-(-1)}} = \frac{1}{1 + e} ≈ 0.26894
- Für x = 0: f(0) = \frac{1}{1 + e^{-0}} = \frac{1}{1 + 1} = 0.5
- Für x = 1: f(1) = \frac{1}{1 + e^{-1}} ≈ 0.73106
Die Sigmoid-Funktion komprimiert die Eingabewerte in den Bereich [0, 1].
3. Tanh (Hyperbolic Tangent)
Formel: f(x) = \text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}
- Für x = -1: f(-1) = \frac{e^{-1} - e^{1}}{e^{-1} + e^{1}} = \frac{\frac{1}{e} - e}{\frac{1}{e} + e} = -0.76159
- Für x = 0: f(0) = \frac{e^0 - e^{-0}}{e^0 + e^{-0}} = 0
- Für x = 1: f(1) = \frac{e^1 - \frac{1}{e}}{e^1 + \frac{1}{e}} ≈ 0.76159
Die Tanh-Funktion komprimiert die Eingabewerte in den Bereich [-1, 1] und ist symmetrisch um Null.
b)
Analysiere das vanishing gradient Problem, das bei den Aktivierungsfunktionen Sigmoid und Tanh auftreten kann. Diskutiere, wie dieses Problem die Trainingsdynamik eines neuronalen Netzwerks beeinflusst. Gib eine schriftliche Erklärung und spezifische Beispiele, auch mit mathematischen Ausführungen
Lösung:
Analyse des Vanishing Gradient Problems
Das vanishing gradient Problem beschreibt eine Situation in neuronalen Netzwerken, insbesondere in tiefen Netzwerken, bei der die Gradienten der Verlustfunktion sehr klein werden. Dies führt dazu, dass sich die Gewichte kaum noch ändern, was das Training verlangsamt oder gar stoppt.
1. Sigmoid Aktivierungsfunktion
Die Sigmoid-Funktion ist definiert als:
- \( f(x) = \frac{1}{1 + e^{-x}} \)
Die Ableitung der Sigmoid-Funktion ist gegeben durch:
- \( f'(x) = f(x) (1 - f(x)) \)
Wenn \( f(x) \) sehr klein oder sehr groß ist, nähert sich \( f'(x) \) null an:
- Wenn \( x \to -\infty \), dann \( f(x) \to 0 \) und \( f'(x) \to 0 \)
- Wenn \( x \to \infty \), dann \( f(x) \to 1 \) und \( f'(x) \to 0 \)
2. Tanh Aktivierungsfunktion
Die Tanh-Funktion ist definiert als:
- \( f(x) = \text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \)
Die Ableitung der Tanh-Funktion ist gegeben durch:
Ähnlich der Sigmoid-Funktion, wenn \( f(x) \) sehr klein oder sehr groß ist (d.h. \( x \to \infty \) oder \( x \to -\infty \)), nähert sich \( f'(x) \) null an.
Einfluss auf die Trainingsdynamik
Das vanishing gradient Problem kann das Training tiefer neuronaler Netzwerke erheblich beeinflussen:
- Langsames Training: Kleine Gradienten bedeuten kleine Gewichtsanpassungen, was das Training verlangsamt.
- Schlechte Konvergenz: Das Netzwerk kann in suboptimalen Zuständen verharren, da die Gewichtsanpassungen nicht signifikant genug sind.
- Abhängigkeit von Netzwerktiefe: Je tiefer das Netzwerk, desto stärker das vanishing gradient Problem.
Beispiel
Betrachte ein tiefes neuronales Netzwerk mit vielen Schichten. Sei \( L \) die Verlustfunktion, \( a_i \) die Aktivierung der i-ten Schicht und \( w_i \) die Gewichte. Die Gradienten werden rückwärts durch das Netzwerk propagiert:
- \( \frac{\partial L}{\partial w_i} = \frac{\partial L}{\partial a_i} \cdot \frac{\partial a_i}{\partial w_i} \)
Wenn \( \frac{\partial a_i}{\partial w_i} \) sehr klein ist, summieren sich diese kleinen Werte durch alle Schichten und führen zu einem extrem kleinen Gesamtgradienten, was das Problem des vanishing gradients im Training verdeutlicht.
Lösungsansätze
- Alternative Aktivierungsfunktionen: Verwendung von ReLU oder anderen Funktionen, die weniger anfällig für das vanishing gradient Problem sind.
- He-Initialization: Spezielle Methoden zur Initialisierung der Gewichte können helfen, das Problem zu mindern.
- Batch Normalization: Normalisierung der Eingaben jeder Schicht kann ebenfalls das Training stabilisieren.