05_MLFB_DeepLearning_I_Lösung.ipynb - Colab.pdf

Full Transcript

7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Deep Learning I Agenda: 1. Background Deep Learning Künstlich Neuronale Netze Gradient Descent...

7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Deep Learning I Agenda: 1. Background Deep Learning Künstlich Neuronale Netze Gradient Descent Backpropagation Multi Layer Perceptrons (MLP) Recurrent Neural Networks (RNN) Long Short-Term Memory (LSTM) 2. Anwendungsbeispiel LSTM für die Zeitreihenanalyse I - Vorhersage von Aktienkursen LSTM für die Zeitreihenanalyse II - Vorhersage von Fluggastzahlen 3. Zusammenfassung 1. Background keyboard_arrow_down Deep Learning Deep Learning ist ein Teilbereich des maschinellen Lernens, der sich auf Algorithmen konzentriert, die von der Struktur und Funktion des Gehirns inspiriert sind, insbesondere durch künstliche neuronale Netzwerke mit mehreren Schichten (auch als tiefes neuronales Netz bekannt). Deep Learning-Modelle lernen direkt aus großen Mengen unstrukturierter Daten (wie Bilder, Sprache und Text) und können komplexe Muster und Merkmale automatisch erkennen und extrahieren. Wesentliche Unterschiede zum klassischen Machine Learning 1. Architektur und Komplexität Deep Learning: Verwendet tiefe neuronale Netzwerke mit vielen versteckten Schichten, die es ermöglichen, hochkomplexe und abstrakte Muster aus den Daten zu extrahieren. https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 1/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Klassisches Machine Learning: Verwendet flachere Modelle wie Entscheidungsbäume, Support Vector Machines (SVMs) oder lineare Regressionen, die in der Regel weniger komplex sind und oft eine manuelle Merkmalsextraktion erfordern. 2. Datenbedarf Deep Learning: Benötigt große Mengen an Daten, um effektiv zu lernen und zu generalisieren, da die Modelle viele Parameter haben, die optimiert werden müssen. Klassisches Machine Learning: Kann auch mit kleineren Datensätzen effektiv arbeiten, da die Modelle weniger Parameter und oft eine geringere Komplexität haben. 3. Rechenleistung und Training Deep Learning: Erfordert erhebliche Rechenressourcen und oft spezielle Hardware wie GPUs (Grafikprozessoren) oder TPUs (Tensor Processing Units) für das Training, da die tiefen neuronalen Netzwerke viele Rechenoperationen und eine hohe Speicherkapazität benötigen. Klassisches Machine Learning: Hat in der Regel einen geringeren Rechenaufwand und kann oft auf Standard-CPUs trainiert werden, da die Modelle weniger rechenintensiv sind. keyboard_arrow_down Künstlich Neuronale Netze https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 2/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Ein künstliches neuronales Netz (KNN) ist ein rechnergestütztes Modell, das lose auf der Struktur und Funktionsweise des biologischen Gehirns basiert. Es wird verwendet, um komplexe Muster und Beziehungen in Daten zu erkennen und zu modellieren. Künstliche neuronale Netze bestehen aus einer Vielzahl von einfachen, miteinander verbundenen Einheiten, die als Neuronen bezeichnet werden. Diese Neuronen sind in Schichten organisiert und arbeiten zusammen, um Eingabedaten zu verarbeiten und Vorhersagen oder Entscheidungen zu treffen. Struktur eines KNN Ein künstliches neuronales Netz besteht aus mehreren neuronalen Schichten, die übereinander gestapelt sind. Jede Schicht besteht aus mehreren Neuronen, die in einer Reihe angeordnet sind. Wir unterscheiden drei Arten von Schichten: Input Layer, Hidden Layer und Output Layer. 1. Input Layer: Der Input Layer des Modells nimmt die Daten auf, die wir ihr aus externen Quellen wie einem Bild oder einem numerischen Vektor zuführen. Es ist die einzige Schicht, die im gesamten Aufbau eines neuronalen Netzes zu sehen ist. 2. Hidden layer: Hidden Layer sind Zwischenschichten, die alle Berechnungen durchführen und die Merkmale der Daten extrahieren. Die Suche nach verborgenen Merkmalen in Daten kann viele miteinander verknüpfte hidden Layer umfassen. Bei der Bildverarbeitung beispielsweise sind die ersten hidden Layer oft für übergeordnete Funktionen, wie die Erkennung von Rändern, Formen und Grenzen zuständig. Die nachfogenden hidden Layer hingegen führen anspruchsvollere Aufgaben aus, wie die Klassifizierung oder Segmentierung ganzer Objekte. https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 3/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab 3. Output Layer: Die endgültige Vorhersage wird vom Output Layer anhand der Daten aus den vorangegangenen hidden Layern berechnet. Funktionsweise eines KNN Gewichtete Verbindungen: Jede Verbindung zwischen den Neuronen hat ein Gewicht, das die Stärke und Richtung des Einflusses der Eingabe auf die Ausgabe bestimmt. Diese Gewichte werden während des Trainings des Netzes angepasst. Aktivierungsfunktion: Jede Einheit (Neuron) wendet eine Aktivierungsfunktion auf ihre Eingaben an, um eine Ausgabe zu erzeugen. Häufig verwendete Aktivierungsfunktionen sind die Sigmoidfunktion, die ReLU (Rectified Linear Unit) und die Tanh (Hyperbolische Tangens). Training: Das Training eines KNN erfolgt durch das Minimieren einer Kosten- oder Verlustfunktion, die die Differenz zwischen den vorhergesagten Ausgaben und den tatsächlichen Zielen misst. Algorithmen wie Gradient Descent und Backpropagation werden verwendet, um die Gewichte und Biases anzupassen und den Fehler zu minimieren Arten von Neuronalen Netzwerken https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 4/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 5/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Feedforward und Feedbackward Networks Feedforward Networks: Ein Feedforward Network ist eine Art von künstlichem neuronalen Netz, bei dem die Informationen nur in eine Richtung fließen: von den Eingabeneuronen über die versteckten Neuronen bis hin zu den Ausgabeneuronen. Es gibt keine Schleifen oder Rückkopplungen innerhalb des Netzwerks. Feedforward-Netzwerke sind die einfachsten Arten von neuronalen Netzwerken und werden häufig für Aufgaben wie Klassifikation und Regression verwendet. Feedbackward Networks: Ein Feedbackward Network, auch bekannt als Recurrent Neural Network (RNN), ist eine Art von neuronalen Netzwerken, bei denen Verbindungen zwischen den Neuronen Rückkopplungen enthalten, was bedeutet, dass Informationen in Schleifen fließen können. Diese Netzwerke sind besonders nützlich für sequenzielle Daten und Aufgaben, bei denen der Kontext oder die zeitliche Abhängigkeit wichtig sind, wie z.B. in der Sprachverarbeitung oder bei Zeitreihenanalysen. https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 6/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab keyboard_arrow_down Gradient Descent Gradient Descent ist ein Optimierungsverfahren, das in der maschinellen Lernung und tiefem Lernen verwendet wird, um die Parameter eines Modells zu aktualisieren und zu optimieren. Das Ziel von Gradient Descent ist es, die Kostenfunktion (auch Verlustfunktion genannt) zu minimieren, indem die Modellparameter iterativ in Richtung des steilsten Abstiegs der Kostenfunktion bewegt werden. https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 7/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Stochastic Gradient Descent Stochastic Gradient Descent (SGD) ist eine Variante des Gradient Descent, die sich durch die Art und Weise unterscheidet, wie die Gradienten berechnet und die Modellparameter aktualisiert werden. Während beim klassischen Gradient Descent der Gradient der Kostenfunktion über den gesamten Datensatz berechnet wird, wird bei SGD der Gradient für jeden einzelnen Datenpunkt (oder eine kleine Stichprobe, genannt Mini-Batch) berechnet. Dies führt zu häufigeren und schnelleren Aktualisierungen der Modellparameter und kann helfen, schneller zu konvergieren, insbesondere bei sehr großen Datensätzen. Learning Rate Learning Rate ist ein Hyperparameter, der die Größe der Schritte bestimmt, die bei jeder Iteration des Gradient Descent (oder SGD) zur Aktualisierung der Modellparameter unternommen werden. Eine geeignete Wahl der Lernrate ist entscheidend für die Effizienz und Wirksamkeit des Optimierungsprozesses https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 8/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab keyboard_arrow_down Backpropagation Der Backpropagation Algorithmus (bei überwachten Lernverfahren) zur Fehlerrückführung läuft in den folgenden Phasen ab: Zunächst wird das Eingabemuster angelegt und dabei vorwärts durch das Netz propagiert. Dann werden alle Ausgaben des Netzes mit den gewünschten Ausgaben verglichen. Nun wird die Differenz der Werte als Fehler des Netzes betrachtet. Dieser Fehler kann dann über die Ausgabeschicht zur Eingabeschicht zurück propagiert werden. Schließlich werden die Gewichtungen von den Neuronenverbindungen abhängig vom Einfluss auf den Fehler abgeändert. Ziel ist es die Fhlerfunktion zu minimieren 1. Forward Pass: Die Eingabedaten werden durch das Netzwerk geleitet, um eine Vorhersage zu erzeugen. 2. Backward Pass: Der Fehler (die Differenz zwischen der vorhergesagten und der tatsächlichen Ausgabe) wird rückwärts durch das Netzwerk propagiert, um die Gradienten der Fehlerfunktion bezüglich der Gewichte zu berechnen. Diese Gradienten werden dann verwendet, um die Gewichte zu aktualisieren, typischerweise mit einem Optimierungsalgorithmus wie Gradient Descent. https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 9/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab keyboard_arrow_down Multi-Layer Perceptrons Perceptron https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 10/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Ein Perceptron ist die einfachste Form eines künstlichen Neurons, das die Grundlage für neuronale Netzwerke bildet. Es ist ein binärer Klassifikator, der Eingaben verarbeitet und eine einzelne Ausgabe liefert, basierend auf einer gewichteten Summe w der Eingaben x und die darauffolgende Anwendung einer Aktivierungsfunktion. Multi-Layer Perceptron Ein Multi-Layer Perceptron (MLP) ist eine Erweiterung des einfachen Perceptrons und bildet die Grundlage für viele tiefere neuronale Netzwerke. Ein MLP besteht aus mehreren Schichten von Neuronen, einschließlich einer Eingabeschicht, einer oder mehreren versteckten Schichten und einer Ausgabeschicht. Es kann komplexere Probleme lösen als ein einzelnes Perceptron. keyboard_arrow_down Recurrent Neural Networks Ein Recurrent Neural Network (RNN) ist eine Klasse von künstlichen neuronalen Netzwerken, die speziell für die Verarbeitung von Sequenzdaten entwickelt wurden. Im Gegensatz zu herkömmlichen Feedforward-Netzwerken haben RNNs rekurrente Verbindungen, die es ihnen ermöglichen, Informationen über vorherige Eingaben in die aktuellen Berechnungen einfließen zu lassen. Dies macht sie besonders geeignet für Aufgaben, bei denen der Kontext oder die zeitliche Abfolge von Daten wichtig ist, wie z.B. Sprachverarbeitung, Zeitreihenanalyse und maschinelle Übersetzung. https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 11/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Long Short-Term Memory Ein Long Short-Term Memory (LSTM) ist eine spezielle Art von RNN, die entwickelt wurde, um das Problem des verschwindenden Gradienten zu lösen, das häufig bei Standard-RNNs auftritt. LSTMs sind in der Lage, Langzeitabhängigkeiten in Sequenzdaten zu lernen und zu behalten, indem sie eine komplexere Speicherzelle und spezielle Mechanismen zur Regulierung des Informationsflusses verwenden. Merkmale eines LSTM: 1. Speicherzellen LSTMs bestehen aus speziellen Einheiten, den sogenannten Speicherzellen, die Informationen über längere Zeiträume speichern können. 2. Gating-Mechanismen (3 Hauptgates): Input Gate: Kontrolliert, wie viel neue Information in die Speicherzelle gelangt. Forget Gate: Bestimmt, wie viel der gespeicherten Information verworfen wird. Output Gate: Reguliert, wie viel der gespeicherten Information nach außen gegeben wird. https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 12/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Unterschiede zwischen RNN und LSTM Informationserhalt: Standard-RNNs haben Schwierigkeiten, Informationen über lange Zeiträume zu behalten, da sie unter dem Problem des verschwindenden Gradienten leiden. LSTMs sind speziell dafür entwickelt, Langzeitabhängigkeiten zu bewältigen. Komplexität: LSTMs sind komplexer als Standard-RNNs, da sie zusätzliche Strukturen und Mechanismen (Gates) haben, um den Informationsfluss zu steuern. Leistungsfähigkeit: LSTMs sind in der Regel leistungsfähiger als Standard-RNNs bei Aufgaben, die Langzeitabhängigkeiten in den Daten erfordern, wie z.B. maschinelle Übersetzung, Sprachmodellierung und Zeitreihenprognosen. keyboard_arrow_down 2. Anwendungsbeispiele LSTM für die Zeitreihenanalyse I - Vorhersage von Aktienkursen https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 13/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab Schritt 1: Bibliotheken importieren # Importieren der Bibliotheken import pandas as pd import numpy as np import keras import tensorflow as tf from keras.preprocessing.sequence import TimeseriesGenerator import plotly.graph_objs as go Schritt 2: Daten einlesen, auswählen und visualisieren # Einlesen der Daten df = pd.read_csv('/content/GOOG.csv') df.head() # Uns interessieren zwei Features: Das Datum und der jeweilige Schlusskurs. Alle weiteren Fe df['Date'] = pd.to_datetime(df['Date']) df.drop(columns=['Open', 'High', 'Low', 'Volume'], inplace=True) # Mittels plotly können interaktive Graphiken generiert werden trace1 = go.Scatter( x = df['Date'], y = df['Close'], mode = 'lines', name = 'Data' ) layout = go.Layout( title = "Google Stock", xaxis = {'title' : "Date"}, yaxis = {'title' : "Close"} ) fig = go.Figure(data=[trace1], layout=layout) fig.show() Schritt 3: Aufteilen der Daten in Trainings- und Testdaten Bei der Aufbereitung von Zeitreihendaten gibt es ein paar Besonderheiten zu berücksichtigen. Da wir uns in einem Supervised Learning Setting befinden, benötigen wir Daten im Format. Unsere Zeitreihendaten müssen wir nun in dieses Format umwandeln. Um dies zu tun, müssen wir einen sogenannten Look back definieren. Der Look back gibt an, wie viele vorangegangene Schlusskurse wir uns ansehen, um den Schlusskurs für morgen zu https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 14/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab prädiktieren. Ist der Look back auf 2 gesetzt schauen wir uns den Schlusskurs von gestern und vorgestern an, um den Kurs für morgen vorherzusagen. So generieren wir einen Datensatz mit Features (x(t-1), x(t-2),..., x(t-n)) und Label x(t). Im folgenden Teilen wir Schlusskurse und Datum zunächst wieder in Trainings und Testdaten in einem 80/20 Verhältnis auf und überführen die Daten in das entsprechende Format. # Wir Teilen Schlusskurs und Datum in Trainings- und Testdaten auf close_data = df['Close'].values close_data = close_data.reshape((-1,1)) split_percent = 0.80 split = int(split_percent*len(close_data)) close_train = close_data[:split] close_test = close_data[split:] date_train = df['Date'][:split] date_test = df['Date'][split:] print(len(close_train)) print(len(close_test)) # Wir definieren einen look back von 15 Tagen und nutzen den TimeSeriesGenerator von Keras, look_back = 15 train_generator = TimeseriesGenerator(close_train, close_train, length=look_back, batch_size test_generator = TimeseriesGenerator(close_test, close_test, length=look_back, batch_size=1) Schritt 4: Das LSTM trainieren uns auswerten Neben Performance-Metriken, wie Accuracy und F1 existieren weitere Metriken mit denen man die Güte eines Modells beurteilen kann. Dazu gehört auch der Mean Squared Error (MSE). Der MSE misst die durchschnittlichen quadratischen Abweichungen zwischen den vorhergesagten und den tatsächlichen Werten. Niedrigere Werte deuten auf eine bessere Modellleistung hin. https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 15/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab from keras.models import Sequential from keras.layers import LSTM, Dense # Initialisiert ein sequenzielles Modell. Alle Schichten werden in einer linearen Reihenfolg model = Sequential() # LSTM mit einer Schicht: 10 Neuronen, ReLU Aktivierungsfunktion und Definition des Inputs ( model.add( LSTM(10, activation='relu', input_shape=(look_back,1)) ) # Fügt dem Modell einen Fully Connected Layer hinzu und überführt alle Berechnungen in einen model.add(Dense(1)) # Konfiguration von Optimizer und Verlustfunktion model.compile(optimizer='adam', loss='mse') num_epochs = 100 model.fit(train_generator, epochs=num_epochs, verbose=1) # Wir machen Vorhersagen für unsere Testdaten prediction = model.predict(test_generator) # Wir überführen unsere daten in ein 1-dimensionales Array, das sie einfacher zu visualisier close_train = close_train.reshape((-1)) close_test = close_test.reshape((-1)) prediction = prediction.reshape((-1)) https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 16/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab # Es werden Ausgangsdaten, Preditions und Ground Truth visualisiert trace1 = go.Scatter( x = date_train, y = close_train, mode = 'lines', name = 'Data' ) trace2 = go.Scatter( x = date_test, y = prediction, mode = 'lines', name = 'Prediction' ) trace3 = go.Scatter( x = date_test, y = close_test, mode='lines', name = 'Ground Truth' ) layout = go.Layout( title = "Google Stock", xaxis = {'title' : "Date"}, yaxis = {'title' : "Close"} ) fig = go.Figure(data=[trace1, trace2, trace3], layout=layout) fig.show() LSTM für die Zeitreihenanalyse II - Vorhersage von Fluggastzahlen # Importieren der Bibliotheken import pandas as pd import numpy as np import keras import tensorflow as tf from keras.preprocessing.sequence import TimeseriesGenerator import plotly.graph_objs as go # URL zum Datensatz url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv' # Laden des Datensatzes df = pd.read_csv(url) # Anzeige der ersten Zeilen df.head() # Wir wandeln Month in ein Datumsformat um df['Month'] = pd.to_datetime(df['Month']) https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 17/18 7/11/24, 9:47 AM 05_MLFB_DeepLearning_I_Lösung.ipynb - Colab # Visualisierung der Ausgangsdaten trace1 = go.Scatter( x = df['Month'], y = df['Passengers'], mode = 'lines', name = 'Data' ) layout = go.Layout( title = "Entwicklung der Fluggastzahlen", xaxis = {'title' : "Month"}, yaxis = {'title' : "Passengers"} ) fig = go.Figure(data=[trace1], layout=layout) fig.show() # Datensplit passenger_data = df['Passengers'].values passenger_data = passenger_data.reshape((-1,1)) split_percent = 0.80 https://colab.research.google.com/drive/1ianqyN-lZgEvWIxR7Tk8G2yhsPobK-bi#printMode=true 18/18

Use Quizgecko on...
Browser
Browser