Praktikum Künstliche Intelligenz (BSc) - Exam.pdf

Praktikum Künstliche Intelligenz (BSc) - Exam
Praktikum Künstliche Intelligenz (BSc) - Exam Aufgabe 1) Betrachte die Geschichte und Evolution der künstlichen Intelligenz (KI), beginnend mit der Dartmouth-Konferenz im Jahr 1956 bis hin zu den neuesten Fortschritten im Bereich des Deep Learnings und natürlicher Sprachverarbeitung (NLP) in den 2020er Jahren. Analysiere dabei Schlüsselereignisse und -entwicklungen, die die KI geprägt haben, und e...

© StudySmarter 2024, all rights reserved.

Praktikum Künstliche Intelligenz (BSc) - Exam

Aufgabe 1)

Betrachte die Geschichte und Evolution der künstlichen Intelligenz (KI), beginnend mit der Dartmouth-Konferenz im Jahr 1956 bis hin zu den neuesten Fortschritten im Bereich des Deep Learnings und natürlicher Sprachverarbeitung (NLP) in den 2020er Jahren. Analysiere dabei Schlüsselereignisse und -entwicklungen, die die KI geprägt haben, und erläutere deren Bedeutung für das heutige KI-Verständnis.

a)

Diskutiere die Bedeutung der Dartmouth-Konferenz im Jahr 1956 für die Geburt der künstlichen Intelligenz. Stelle die wichtigsten Ziele der Konferenz vor und erläutere, wie diese die Richtung und Entwicklung des KI-Forschungsfeldes beeinflusst haben.

Lösung:

Die Bedeutung der Dartmouth-Konferenz im Jahr 1956 für die Geburt der künstlichen Intelligenz

Die Dartmouth-Konferenz, die im Sommer 1956 stattfand, gilt als der offizielle Geburtsort der künstlichen Intelligenz (KI). Diese Konferenz war entscheidend, da sie zum ersten Mal eine Gruppe von Forschern vereinte, die sich speziell mit der Idee beschäftigten, Maschinen zu entwickeln, die in der Lage sind, intelligente Handlungen durchzuführen.

Die wichtigsten Ziele der Konferenz:

  • Definition von KI: Ein zentrales Ziel der Konferenz war es, das Konzept der künstlichen Intelligenz zu definieren und abzugrenzen. Die Teilnehmer waren bestrebt, herauszufinden, wie Maschinen „intelligent“ gemacht werden können und welche Mechanismen notwendig sind, um menschliches Denken und Lernen nachzubilden.
  • Förderung der Zusammenarbeit: Die Konferenz sollte die Zusammenarbeit zwischen verschiedenen Forschungsdisziplinen fördern. Dazu gehörten Mathematik, Neurowissenschaften, Psychologie, Informatik und Ingenieurwesen. Diese interdisziplinäre Zusammenarbeit war wichtig, um ein umfassendes Verständnis und unterschiedliche Perspektiven zur Lösung der Probleme der KI zu erlangen.
  • Erstellung eines Forschungsprogramms: Ein weiteres Ziel war es, ein Forschungsprogramm zu erstellen, das spezifische Meilensteine und Herausforderungen identifizierte, die es zu bewältigen gilt. Dazu gehörten unter anderem die Entwicklung von Algorithmen, die Sprache verstehen, Muster erkennen und selbstständig lernen können.
  • Aufmerksamkeit und Finanzierung: Die Konferenz sollte auch dazu beitragen, das Interesse an der KI zu steigern und die wissenschaftliche Gemeinschaft sowie finanzielle Förderer auf das Potenzial dieses neuen Forschungsgebiets aufmerksam zu machen.

Wie die Konferenz die Richtung und Entwicklung des KI-Forschungsfeldes beeinflusst hat:

  • Grundsteinlegung für die KI-Forschung: Die Dartmouth-Konferenz legte den Grundstein für das moderne KI-Forschungsfeld. Sie stellte die These auf, dass „jede Facette des Lernens oder irgendein anderes Merkmal der Intelligenz so präzise beschrieben werden kann, dass eine Maschine sie simulieren kann.“ Diese These inspirierte viele spätere Forschungen und Entwicklungen in der KI.
  • Förderung von Innovation und Forschung: Nach der Konferenz begannen viele der Teilnehmer, bedeutende Beiträge zum Feld der KI zu leisten. Sie entwickelten frühe Programme und Algorithmen, die als Grundbausteine für spätere, komplexere KI-Systeme dienten.
  • Interdisziplinäre Zusammenarbeit: Die Konferenz förderte die Zusammenarbeit zwischen verschiedenen Disziplinen. Dieser Ansatz war entscheidend für das Fortschreiten der KI, da er ermöglichte, Erkenntnisse und Techniken aus verschiedenen wissenschaftlichen Feldern zu integrieren.
  • Langanhaltender Einfluss: Die Diskussionen und Ideen, die während der Dartmouth-Konferenz aufkamen, beeinflussten die Forschungsagenda und die Prioritäten in der KI für Jahrzehnte. Viele der Gründerväter der KI setzten ihre Arbeit fort, inspiriert durch die Ziele und Visionen der Konferenz.

b)

Erkläre die Entwicklung und den Aufstieg von Expertensystemen in den 1960er Jahren. Diskutiere, wie Expertensysteme zur Lösung komplexer Probleme in verschiedenen Branchen eingesetzt wurden und analysiere ihre Grenzen im Vergleich zu modernen KI-Technologien.

Lösung:

Die Entwicklung und der Aufstieg von Expertensystemen in den 1960er Jahren

In den 1960er Jahren entwickelten sich Expertensysteme zu einer der ersten praktischen Anwendungen der künstlichen Intelligenz (KI). Diese Systeme sollen die Entscheidungsprozesse von menschlichen Experten nachahmen und wurden entwickelt, um komplexe Probleme in spezifischen Domänen durch den Einsatz von Fakten und Regeln zu lösen.

Entwicklung der Expertensysteme:

  • Grundlagen: Expertensysteme basieren auf einer Wissensbasis und einem Inferenzmechanismus. Die Wissensbasis enthält fakten- oder regelbasiertes Wissen aus einem bestimmten Fachgebiet, während der Inferenzmechanismus dieses Wissen nutzt, um logische Schlussfolgerungen zu ziehen und Probleme zu lösen.
  • Erste Implementierungen: Eines der ersten und bekanntesten Expertensysteme ist DENDRAL, das in den späten 1960er Jahren entwickelt wurde, um chemische Strukturformeln zu bestimmen. MYCIN, ein weiteres frühes Expertensystem, wurde für die Diagnose und Therapie von bakteriellen Infektionen entwickelt.

Anwendungen in verschiedenen Branchen:

  • Medizin: In der Medizin wurden Expertensysteme wie MYCIN eingesetzt, um Ärzten bei der Diagnose und Behandlung von Krankheiten zu helfen. Diese Systeme konnten aufgrund ihrer umfangreichen Wissensbasis schnell und präzise Empfehlungen geben.
  • Finanzen: In der Finanzbranche wurden Expertensysteme zur Analyse von Finanzdaten, zur Bewertung von Krediten und zur Vorhersage von Marktbewegungen eingesetzt.
  • Recht: Im Rechtsbereich wurden Expertensysteme entwickelt, um Anwälte bei der Suche nach relevanten Gesetzen und Präzedenzfällen zu unterstützen.
  • Industrie: In der industriellen Fertigung wurden Expertensysteme zur Fehlerdiagnose und zur Optimierung von Produktionsprozessen eingesetzt.

Grenzen der Expertensysteme im Vergleich zu modernen KI-Technologien:

  • Mangel an Lernfähigkeit: Expertensysteme sind im Wesentlichen statisch und können nicht aus neuen Daten lernen. Im Gegensatz dazu nutzen moderne KI-Systeme, wie maschinelles Lernen und Deep Learning, große Datenmengen, um sich kontinuierlich zu verbessern und anzupassen.
  • Begrenzte Wissensbasis: Die Wissensbasis von Expertensystemen ist auf die Informationen beschränkt, die von menschlichen Experten eingegeben werden. Moderne KI-Technologien können hingegen viel umfangreichere und vielfältigere Datenquellen nutzen.
  • Komplexität und Wartung: Das Erstellen und Warten einer umfassenden Wissensbasis kann zeitaufwendig und schwierig sein. Bei modernen KI-Ansätzen entfällt dieser Aufwand teilweise, da sie durch Algorithmen selbstständig lernen und Wissenslücken füllen können.
  • Anpassungsfähigkeit: Expertensysteme sind oft auf einen spezifischen Anwendungsbereich beschränkt und schwer auf andere Bereiche übertragbar. Moderne KI-Modelle hingegen sind flexibler und können für verschiedene Aufgaben verwendet werden, da sie in der Lage sind, Muster und Zusammenhänge in vielfältigen Datensätzen zu erkennen.

Zusammenfassend lässt sich sagen, dass Expertensysteme in den 1960er Jahren einen bedeutenden Beitrag zur Lösung komplexer Probleme in verschiedenen Branchen geleistet haben. Dennoch waren sie durch ihre fehlende Lernfähigkeit und begrenzte Wissensbasis eingeschränkt. Moderne KI-Technologien, insbesondere maschinelles Lernen und Deep Learning, haben diese Grenzen überwunden und bieten adaptivere und leistungsfähigere Lösungen.

c)

Erläutere den Übergang von maschinellem Lernen zu Deep Learning, insbesondere unter Einbeziehung der Ereignisse um AlexNet im Jahr 2012. Nutze folgende Aspekte für Deine Analyse: a) Architektur und Merkmale von AlexNet, b) mathematische Fundamente des neuronalen Netzes, einschließlich der Optimierungsmethoden und des Backpropagation-Algorithmus, c) Einfluss von AlexNet auf die heutige KI-Landschaft.

Lösung:

Der Übergang von maschinellem Lernen zu Deep Learning: AlexNet im Jahr 2012

Der Übergang vom traditionellen maschinellen Lernen zum Deep Learning markiert einen entscheidenden Fortschritt in der Geschichte der künstlichen Intelligenz. Besonders hervorzuheben ist das Jahr 2012, als AlexNet den ImageNet-Wettbewerb gewann und die Leistungsfähigkeit von tiefen neuronalen Netzen eindrucksvoll demonstrierte.

a) Architektur und Merkmale von AlexNet:

  • Architektur: AlexNet besteht aus acht Schichten, darunter fünf Convolutional Layers (Faltungsschichten) und drei Fully Connected Layers (vollständig verbundene Schichten). Diese tiefe Architektur ermöglichte es dem Netzwerk, komplexere Merkmale aus den Eingabedaten zu extrahieren.
  • Merkmale: AlexNet nutzte Rectified Linear Units (ReLUs) anstelle traditioneller Aktivierungsfunktionen wie Sigmoid oder Tanh. ReLUs beschleunigten das Training erheblich. Zudem verwendete AlexNet Dropout, um Überanpassung (Overfitting) zu verhindern, und führte Datenaugmentationstechniken ein, um die Trainingsdatenmenge künstlich zu erhöhen.

b) Mathematische Fundamente des neuronalen Netzes:

  • Optimierungsmethoden: AlexNet nutzte Stochastic Gradient Descent (SGD) mit einem speziellen Lernratenplan und Momentum, um den Optimierungsprozess zu beschleunigen. Diese Methode half dabei, die Gewichtungen des Netzwerks so anzupassen, dass der Fehler in jedem Schritt minimiert wurde.
  • Backpropagation-Algorithmus: Der Backpropagation-Algorithmus ist ein Verfahren zur Berechnung der Gradienten, die benötigt werden, um die Gewichte des neuronalen Netzes anzupassen. Er verwendet das Kettenregelverfahren zur Übertragung des Fehlers von der Ausgabeschicht zurück zu den vorhergehenden Schichten, was eine effiziente und effektive Gewichtsaktualisierung ermöglicht.

c) Einfluss von AlexNet auf die heutige KI-Landschaft:

  • Neue Ära des Deep Learning: Der Erfolg von AlexNet zeigte das enorme Potenzial tiefer neuronaler Netze und trug dazu bei, das Interesse und die Investitionen in das Forschungsgebiet des Deep Learning zu steigern. Viele nachfolgende Modelle bauten auf den Konzepten und Techniken von AlexNet auf.
  • Anwendungen in verschiedenen Bereichen: Die Prinzipien von AlexNet fanden Anwendung in zahlreichen Bereichen, darunter Bild- und Spracherkennung, autonomes Fahren, medizinische Bildgebung und natürliche Sprachverarbeitung (NLP). Diese Anwendungen zeigten, dass Deep Learning-Modelle nicht nur leistungsfähig, sondern auch vielseitig einsetzbar sind.
  • Weiterentwicklung der Architektur: Nach AlexNet wurden andere tiefe neuronale Netzwerke wie VGGNet, GoogLeNet, ResNet und viele weitere entwickelt, die die Grenzen der Bildverarbeitung und anderer Anwendungen noch weiter verschoben.
  • Einfluss auf Forschung und Industrie: Der Erfolg von AlexNet förderte die Entwicklung spezieller Hardware (wie GPUs) und Frameworks (wie TensorFlow und PyTorch), die das Training und die Implementierung von Deep Learning-Modellen erleichterten und beschleunigten. Dies führte dazu, dass Deep Learning heute in Forschung und Anwendungen weit verbreitet ist.

Zusammenfassend lässt sich sagen, dass AlexNet eine Schlüsselrolle beim Übergang von maschinellem Lernen zu Deep Learning spielte. Die Architektur und die in AlexNet verwendeten Techniken legten den Grundstein für viele moderne Entwicklungen und verbesserten erheblich die Leistungsfähigkeit KI-basierter Anwendungen.

Aufgabe 2)

In einem Projekt zur Fehlererkennung in einer Produktionslinie sollen sowohl überwachtes als auch unüberwachtes Lernen eingesetzt werden. Ziel ist es, eine KI zu entwickeln, die automatisch Fehler in den produzierten Teilen erkennt und die Daten anschließend analysiert, um Muster und Auffälligkeiten in der Produktion zu identifizieren.

a)

Implementiere eine einfache Überwachtes-Lernen-Methode zur Fehlererkennung basierend auf lineare Regression. Die Eingabedaten sind Merkmale der produzierten Teile und die Zielwerte sind die Fehlerklassen (fehlerhaft oder nicht fehlerhaft). Verwende die folgenden Datenpaare zur Implementierung:

{(2.5, 1), (3.2, 0), (4.5, 1), (5.0, 0), (6.1, 1)}
  • Trainiere das Model.
  • Erkläre den Prozess zur Validierung des Modells.
  • Gib eine kurze Analyse zur Genauigkeit des Modells.

Lösung:

In diesem Projekt zur Fehlererkennung in einer Produktionslinie soll eine einfache Methode des überwachten Lernens mithilfe der linearen Regression implementiert werden. Hier sind die Schritte zur Lösung der Aufgabe:

  • Trainiere das Modell:
import numpy as npfrom sklearn.linear_model import LinearRegression# TrainingsdatenX_train = np.array([[2.5], [3.2], [4.5], [5.0], [6.1]])y_train = np.array([1, 0, 1, 0, 1])# Modell initialisierenmodel = LinearRegression()# Modell trainierenmodel.fit(X_train, y_train)
  • Erkläre den Prozess zur Validierung des Modells:

Um das Modell zu validieren, sollten wir es mit Testdaten testen, die während des Trainings nicht verwendet wurden. Ein häufig verwendetes Verfahren dazu ist die Kreuzvalidierung, bei der die Daten in mehrere Folds unterteilt werden und das Modell iterativ auf verschiedenen Kombinationen von Trainingsdatensätzen trainiert und getestet wird.

  • Gib eine kurze Analyse zur Genauigkeit des Modells:

Da es sich bei diesem Beispiel nur um eine kleine Menge von Trainingsdaten handelt, sollten die Genauigkeit und andere Metriken wie Präzision, Recall und F1-Score berechnet werden, um die Modellleistung beurteilen zu können. In der Regel wird die Genauigkeit eines Modells durch den Vergleich der vorhergesagten Werte mit den tatsächlichen Werten im Testdatensatz bewertet.

b)

Wende eine unüberwachtes Lernen-Methode, wie K-Means-Clustering, an, um Muster in den Produktionsdaten zu entdecken. Angenommen, die Daten bestehen aus den Merkmalen x1, x2 und x3, wie folgt:

{(2.5, 3.1, 4.2), (3.2, 3.0, 4.0), (4.5, 3.5, 4.5), (5.0, 2.9, 4.1), (6.1, 3.2, 4.3)}
  • Wähle die Anzahl der Cluster und erläutere die Wahl.
  • Führe das Clustering durch und zeige die Zuordnung der Daten zu den Clustern.
  • Beschreibe, wie diese Cluster den Produktionstechnikern helfen könnten, Muster in den Produktionsprozessen zu identifizieren.

Lösung:

Um Muster in den Produktionsdaten mit unüberwachtem Lernen zu entdecken, verwenden wir die K-Means-Clustering-Methode. Hier sind die Schritte zur Lösung der Aufgabe:

  • Wähle die Anzahl der Cluster und erläutere die Wahl:

Die Wahl der Anzahl der Cluster (K) ist entscheidend, da sie die Gruppierung der Daten beeinflusst. Eine Möglichkeit, K zu bestimmen, ist die sogenannte Elbow-Methode, bei der der Fehler (SSE - Sum of Squared Errors) für verschiedene Werte von K betrachtet wird. Der Punkt, an dem der Fehler abnimmt und sich stabilisiert, wird als optimaler Wert für K gewählt. Aufgrund der überschaubaren Anzahl von Datenpunkten und zur Veranschaulichung wählen wir K = 2.

  • Führe das Clustering durch und zeige die Zuordnung der Daten zu den Clustern:
import numpy as npfrom sklearn.cluster import KMeans# ProduktionsdatenX = np.array([[2.5, 3.1, 4.2], [3.2, 3.0, 4.0], [4.5, 3.5, 4.5], [5.0, 2.9, 4.1], [6.1, 3.2, 4.3]])# K-Means Clustering durchführen mit K=2kmeans = KMeans(n_clusters=2, random_state=0).fit(X)# Cluster-Zuordnung anzeigenlabels = kmeans.labels_# Cluster-Zentroids anzeigencentroids = kmeans.cluster_centers_print('Cluster-Zuordnungen:', labels)print('Cluster-Zentroids:', centroids)

Ergebnis:

Cluster-Zuordnungen: [0, 0, 1, 1, 1]Cluster-Zentroids: [[2.85 3.05 4.1 ] [5.2  3.2  4.3 ]]
  • Beschreibe, wie diese Cluster den Produktionstechnikern helfen könnten, Muster in den Produktionsprozessen zu identifizieren:

Produktionsdaten in Cluster zu unterteilen kann den Technikern helfen, ähnliche Muster und Auffälligkeiten in der Produktion zu erkennen. Zum Beispiel könnte ein Cluster Teile enthalten, die tendenziell fehlerfrei sind, während ein anderer Cluster Teile enthält, die häufiger Fehler aufweisen. Durch die Analyse der Merkmale beider Cluster könnten Techniker Rückschlüsse auf mögliche Ursachen für die Fehler ziehen, wie z.B. Maschinenkalibrierungen, Materialqualität oder äußere Einflüsse. Dies erlaubt es, gezielter auf Problemquellen zu reagieren und entsprechende Maßnahmen zur Verbesserung der Produktionsqualität zu ergreifen.

Aufgabe 3)

Hintergrund: Im Rahmen des Praktikums Künstliche Intelligenz wird an einem neuronalen Netz gearbeitet, um die optimale Performance zu erreichen. Dazu muss der Fehler minimiert werden, was meist durch den Backpropagation-Algorithmus geschieht. Im Folgenden soll ein einfaches neuronales Netz mit einer Verlustfunktion optimiert werden. Dazu werden die Kettenregel und verschiedene Optimierungstechniken angewendet. Es wird angenommen, dass die Verlustfunktion als MSE (Mean Squared Error) gegeben ist und die Lernrate konstant bleibt.

a)

Gegeben ist ein einfaches neuronales Netz mit einer Eingabeschicht, einer verborgenen Schicht mit zwei Neuronen und einer Ausgabeschicht mit einem Neuron. Die Aktivierungsfunktion sei die Sigmoid-Funktion \(\sigma(x) = \frac{1}{1+e^{-x}}\). Berechne die Gradienten der Gewichte der verborgenen Schicht mit Hilfe der Kettenregel (Backpropagation), wenn die Verlustfunktion der Mean Squared Error (MSE) ist. Nutze dazu die folgenden Bezeichnungen: Eingabe \(x\), Gewichtsmatrix der Eingabeschicht \(W_{in}\), Gewichtsmatrix der verborgenen Schicht \(W_{hidden}\), Ausgabe \(\hat{y}\) und wahres Label \(y\).

Lösung:

Schritt-für-Schritt-Lösung:1. Definiere die mathematischen Notationen und Gleichungen:

  • Die Eingabe ist: \(x\)
  • Die Gewichtsmatrix der Eingabeschicht ist: \( W_{in} \)
  • Die Gewichtsmatrix der verborgenen Schicht ist: \( W_{hidden} \)
  • Die Ausgabe des Netzes ist: \( \hat{y} \)
  • Das wahre Label ist: \( y \)
  • Die Aktivierungsfunktion ist die Sigmoid-Funktion: \(\sigma(x) = \frac{1}{1 + e^{-x}}\)
  • Die Verlustfunktion ist der Mean Squared Error (MSE): \(MSE = \frac{1}{2}(\hat{y} - y)^2\)
2. Berechnung der Neuronenaktivierungen:
  • Berechne die Eingabe an die verborgene Schicht: \(z = W_{in} \cdot x\)
  • Die Aktivierung der verborgenen Schicht ist: \(a = \sigma(z) = \sigma(W_{in} \cdot x)\)
  • Die Ausgabe des Netzes: \(\hat{y} = W_{hidden} \cdot a\)
3. Verlustfunktion:
  • Die Mean Squared Error (MSE) Verlustfunktion lautet: \(E = \frac{1}{2}(\hat{y} - y)^2\)
4. Anwendung der Kettenregel für das Backpropagation:
  • Der Gradient des Fehlers bezüglich der Ausgabe: \(\frac{\partial E}{\partial \hat{y}} = (\hat{y} - y)\)
  • Der Gradient der Ausgabe bezüglich der Aktivierung der verborgenen Schicht: \(\frac{\partial \hat{y}}{\partial a} = W_{hidden}\)
  • Der Gradient der Aktivierung der verborgenen Schicht bezüglich der Eingabe an die verborgene Schicht: \(\frac{\partial a}{\partial z} = \sigma(z)(1 - \sigma(z))\)
  • Der Gradient der Eingabe an die verborgene Schicht bezüglich der Gewichtsmatrix der Eingabeschicht: \(\frac{\partial z}{\partial W_{in}} = x\)
5. Gesamte Gradientenberechnung:
  • Der gesamte Gradient des Fehlers bezüglich der Gewichtsmatrix der verborgenen Schicht: \(\frac{\partial E}{\partial W_{hidden}} = \frac{\partial E}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial W_{in}}\)
  • Ersetze die Ableitungen durch ihre Werte: \(\frac{\partial E}{\partial W_{hidden}} = (\hat{y} - y) \cdot W_{hidden} \cdot \sigma(z)(1 - \sigma(z)) \cdot x\)

b)

Implementiere in Python einen Schritt des Gradientenabstiegs für das oben beschriebene neuronale Netz. Gehe dabei davon aus, dass die Gewichte bereits initialisiert sind und eine Lernrate \( \eta = 0.01 \) verwendet wird. Stelle sicher, dass die Gewichte nach der Berechnung der Gradienten korrekt aktualisiert werden.

Lösung:

Schritt-für-Schritt-Lösung:1. Notwendige Bibliotheken importieren:

import numpy as np
2. Definiere die Aktivierungsfunktion und ihre Ableitung:
def sigmoid(x):    return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):    return sigmoid(x) * (1 - sigmoid(x))
3. Setze die Parameter und initialisiere die Gewichte:
# Beispielhafte Initialisierungennp.random.seed(42)  # Für reproduzierbare Ergebnissex = np.array([[0.1], [0.2], [0.3]])  # Beispielhafte EingabeW_in = np.random.rand(2, 3)  # Gewichte der Eingabeschicht (2 Neuronen, 3 Eingaben)W_hidden = np.random.rand(1, 2)  # Gewichte der verborgenen Schicht (1 Neuron, 2 Eingaben)y = np.array([[1]])  # Wahres Labeleta = 0.01  # Lernrate
4. Durchführung des Vorwärtsdurchlaufs:
# Eingabe zur verborgenen Schichtz = np.dot(W_in, x)# Aktivierung der verborgenen Schichta = sigmoid(z)# Ausgabe des Netzeshat_y = np.dot(W_hidden, a)
5. Berechnung des Fehlers:
# Mean Squared ErrorE = 0.5 * (hat_y - y) ** 2# Gradient des Fehlers bezüglich der AusgabedE_dhat_y = hat_y - y
6. Rückwärtsdurchlauf (Backpropagation):
# Gradienten (Rückwärtsdurchlauf)dhat_y_da = W_hiddenda_dz = sigmoid_derivative(z)dz_dW_in = x# Kettenregel anwendendE_dW_hidden = np.dot(dE_dhat_y, a.T)dE_da = np.dot(W_hidden.T, dE_dhat_y)dE_dz = dE_da * da_dzdE_dW_in = np.dot(dE_dz, x.T)
7. Aktualisiere die Gewichte:
# Gewichte aktualisierenW_hidden -= eta * dE_dW_hiddenW_in -= eta * dE_dW_in
8. Gesamter Code:
import numpy as npdef sigmoid(x):    return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):    return sigmoid(x) * (1 - sigmoid(x))# Beispielhafte Initialisierungennp.random.seed(42)  # Für reproduzierbare Ergebnissex = np.array([[0.1], [0.2], [0.3]])  # Beispielhafte EingabeW_in = np.random.rand(2, 3)  # Gewichte der Eingabeschicht (2 Neuronen, 3 Eingaben)W_hidden = np.random.rand(1, 2)  # Gewichte der verborgenen Schicht (1 Neuron, 2 Eingaben)y = np.array([[1]])  # Wahres Labeleta = 0.01  # Lernrate# Vorwärtsdurchlaufz = np.dot(W_in, x)a = sigmoid(z)hat_y = np.dot(W_hidden, a)# FehlerberechnungE = 0.5 * (hat_y - y) ** 2# Gradient des FehlersdE_dhat_y = hat_y - y# Rückwärtsdurchlauf# Gradienten# dE/dW_hidden# dE/dhat_y * dhat_y/da * da/dz * dz/dW_in# -> Kettenregel anwendendhat_y_da = W_hiddenda_dz = sigmoid_derivative(z)dz_dW_in = xdE_dW_hidden = np.dot(dE_dhat_y, a.T)dE_da = np.dot(W_hidden.T, dE_dhat_y)dE_dz = dE_da * da_dzdE_dW_in = np.dot(dE_dz, x.T)# GewichtsaktualisierungW_hidden -= eta * dE_dW_hiddenW_in -= eta * dE_dW_in

c)

Diskutiere mögliche Optimierungsprobleme, auf die Du bei der Anwendung des Gradientenabstiegs stoßen könntest, beispielsweise lokale Minima und verschwindende Gradienten. Welche Verbesserungen können eingesetzt werden, um diesen Problemen entgegenzuwirken? Benutze dazu konkrete Beispiele aus dem Text und erkläre, wie z.B. der Adam-Optimierer funktioniert und warum er in der Praxis oft bevorzugt wird.

Lösung:

Optimierungsprobleme beim Gradientenabstieg:

  • Lokale Minima: Das neuronale Netz könnte in lokalen Minima stecken bleiben, anstatt das globale Minimum zu finden. Dies bedeutet, dass die Netzwerkgewichte in einer Konfiguration gefangen sind, die nicht die beste Lösung darstellt.
  • Verschwindende Gradienten: Bei tiefen neuronalen Netzen können die Gradienten sehr klein werden, was dazu führt, dass die Gewichte fast nicht mehr aktualisiert werden. Dies tritt häufig bei der Verwendung der Sigmoid-Funktion auf, da ihre Ableitungen sehr schnell gegen Null gehen.
Verbesserungsmöglichkeiten:
  • Adam-Optimierer: Der Adam-Optimierer (Adaptive Moment Estimation) kombiniert die Vorteile von zwei anderen Erweiterungen des Gradientenabstiegs: dem Momentum- und dem RMSProp-Optimierer. Adam berechnet adaptive Lernraten für jede Parameter, indem er den gleitenden Mittelwert der ersten und zweiten Ableitung (Moment) nutzt. Dies führt zu einer schnelleren und stabileren Konvergenz.
    def adam(w, dw, m, v, t, learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8):    m = beta1 * m + (1 - beta1) * dw    v = beta2 * v + (1 - beta2) * (dw ** 2)    m_hat = m / (1 - beta1 ** t)    v_hat = v / (1 - beta2 ** t)    w -= learning_rate * m_hat / (np.sqrt(v_hat) + epsilon)    return w, m, v
  • Batch-Normalisierung: Diese Technik standardisiert die Ausgaben jedes Neurons während des Trainings. Dies hilft, das Problem des verschwindenden Gradienten abzuschwächen und beschleunigt das Training.
  • Verwendung von ReLU: (Rectified Linear Unit) anstelle der Sigmoid-Funktion. ReLU hat den Vorteil, dass es nicht zur Sättigung neigt und damit das Problem der verschwindenden Gradienten vermindert.
Beispiel für Adam-Optimierer:

Adam wird häufig bevorzugt, weil er die Vorteile aus Momentum und RMSProp kombiniert. Dies ermöglicht eine schnellere Konvergenz und stabilere Updates der Netzwerkgewichte. Hier ist eine Python-Implementierung:

# Adam-Optimierer Beispiel in Pythonimport numpy as npdef adam(w, dw, m, v, t, learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-8):    m = beta1 * m + (1 - beta1) * dw    v = beta2 * v + (1 - beta2) * (dw ** 2)    m_hat = m / (1 - beta1 ** t)    v_hat = v / (1 - beta2 ** t)    w -= learning_rate * m_hat / (np.sqrt(v_hat) + epsilon)    return w, m, v# Beispielhafte Initialisierungennp.random.seed(42)w = np.random.randn(2, 3)dw = np.random.randn(2, 3)m = np.zeros_like(w)v = np.zeros_like(w)t = 1learning_rate = 0.001 # Beispielhafte Gradientenrückführung und Gewichtsanpassungw, m, v = adam(w, dw, m, v, t, learning_rate)
Fazit:

Die Anwendung von fortgeschrittenen Optimierungstechniken wie Adam, die Einführung von Batch-Normalisierung und die Verwendung von alternativen Aktivierungsfunktionen wie ReLU können dazu beitragen, die Leistung eines neuronalen Netzes zu verbessern und häufige Optimierungsprobleme wie lokale Minima und verschwindende Gradienten zu minimieren.

Aufgabe 4)

Du bist angeheuert worden, ein maschinelles Lernmodell für die Vorhersage von Immobilienpreisen zu entwickeln. Du bemerkst, dass das Modell trotz hoher Trainingsgenauigkeit auf den Testdaten schlecht abschneidet, und vermutest Überanpassung (Overfitting). Um dies zu verhindern, beschließt Du, verschiedene Regularisierungstechniken zu implementieren und zu testen. Deine Aufgabe ist es, verschiedene Regularisierungs- und Techniken zur Überanpassungsreduktion zu untersuchen und zu implementieren.

a)

Erkläre im Detail, wie L1-Regularisierung (Lasso) das Problem der Überanpassung löst. Formuliere und erkläre die erweiterte Verlustfunktion, die mit L1-Regularisierung verwendet wird.

Lösung:

Die L1-Regularisierung, auch als Lasso (Least Absolute Shrinkage and Selection Operator) bekannt, ist eine Technik zur Reduzierung des Problems der Überanpassung (Overfitting) in maschinellen Lernmodellen. Sie erreicht dies durch Hinzufügen eines Regularisierungsterms zur Verlustfunktion des Modells. Der Regularisierungsterm zwingt das Modell dazu, geringere Koeffizienten zu wählen, indem er den Gewichtsausdruck minimiert, was wiederum zu einfacheren Modellen mit besserer Generalisierungsfähigkeit führt. Im Folgenden wird die erweiterte Verlustfunktion mit L1-Regularisierung im Detail erklärt:

  • Standardverlustfunktion: Typischerweise wird die Verlustfunktion ohne Regularisierung in der Form des mittleren quadratischen Fehlers (Mean Squared Error, MSE) für lineare Modelle formuliert: \[ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \] wobei $y_i$ die echten Werte und $\hat{y}_i$ die vorhergesagten Werte darstellen.
  • Erweiterte Verlustfunktion mit L1-Regularisierung: Die L1-Regularisierung fügt einen zusätzlichen Term hinzu, der die Summe der absoluten Werte der Modellkoeffizienten ist. Die erweiterte Verlustfunktion sieht dann wie folgt aus: \[ L_{\text{lasso}} = \text{MSE} + \lambda \sum_{j=1}^{p} |\beta_j| \] Dabei ist $\lambda$ ein Regularisierungsparameter, der die Stärke der Regularisierung kontrolliert, $p$ die Anzahl der Prädiktoren, und $\beta_j$ die Koeffizienten des Modells.
  • Erklärungen zu den Terme:
    • Der Term $\text{MSE}$ misst den Standardfehler zwischen den vorhergesagten und den tatsächlichen Werten, genau wie in der nicht regularisierten Verlustfunktion.
    • Der zweite Term $(\lambda \sum_{j=1}^{p} |\beta_j|)$ ist der L1-Regularisierungsterm, der eine Strafe proportional zu der Summe der absoluten Werte der Modellkoeffizienten einführt.
    • Der Regularisierungsparameter $\lambda$ kontrolliert das Gewicht der Regularisierung. Ein höheres $\lambda$ führt zu stärkeren Schrumpfeffekten auf die Koeffizienten, während $\lambda=0$ keine Regularisierung bedeutet.
  • Wie L1-Regularisierung Überanpassung löst: Die L1-Regularisierung kann einige Koeffizienten auf genau null setzen, was bedeutet, dass diese Prädiktoren effektiv aus dem Modell entfernt werden. Dadurch erhält man ein einfacheres Modell, das weniger wahrscheinlich überanpasst ist. Die Reduktion der Anzahl der verwendeten Prädiktoren führt zu einem sparsamen Modell, das besser generalisieren kann und weniger anfällig für Rauschen in den Trainingsdaten ist.

Zusammenfassend hilft die L1-Regularisierung dabei, ein Modell zu erzeugen, das sparsamer und robuster ist, indem es weniger bedeutende Merkmale eliminiert und Überanpassung verhindert.

b)

Implementiere in Python einen einfachen linearen Regressionsalgorithmus unter Verwendung von L2-Regularisierung (Ridge). Zeige und erkläre den Code.

Lösung:

Die L2-Regularisierung, auch bekannt als Ridge-Regression, ist eine Technik zur Reduzierung des Problems der Überanpassung, indem sie einen zusätzlichen Regularisierungsterm zur Verlustfunktion hinzufügt. Dieser Regularisierungsterm minimiert die Summe der Quadrate der Modellkoeffizienten. Im Folgenden findest Du eine Implementierung eines einfachen linearen Regressionsalgorithmus unter Verwendung von L2-Regularisierung in Python, sowie eine Erklärung des Codes:

import numpy as np  # Für numerische Berechnungen verwenden wir NumPy von sklearn.linear_model import Ridge  # Importieren der Ridge-Regression-Klasse aus scikit-learn von sklearn.model_selection import train_test_split  # Zum Aufteilen der Daten in Trainings- und Testsets von sklearn.datasets import make_regression  # Zum Erstellen eines synthetischen Datensatzes # Erstellen eines synthetischen Datensatzes mit 100 Proben und 20 Merkmalen X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42) # Aufteilen der Daten in Trainings- (80%) und Testsets (20%) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Erstellen und Trainieren des Ridge-Regression-Modells mit einem Regularisierungsparameter alpha=1.0 ridge_reg = Ridge(alpha=1.0) ridge_reg.fit(X_train, y_train) # Vorhersagen auf dem Testset y_pred = ridge_reg.predict(X_test) # Berechnen und Anzeigen des mittleren quadratischen Fehlers (MSE) und der Modellkoeffizienten von sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, y_pred) print(f'Mean Squared Error (MSE): {mse}') print('Modellkoeffizienten:') print(ridge_reg.coef_) 

Erklärung des Codes:

  • Importe: Wir importieren die notwendigen Bibliotheken: NumPy für numerische Berechnungen, scikit-learn für die Ridge-Regression, Datenteilung und Datensatzgenerierung, sowie Metriken zur Bewertung des Modells.
  • Datengenerierung: Mit der Funktion make_regression() erstellen wir einen synthetischen Datensatz mit 100 Proben und 20 Merkmalen.
  • Datenteilung: Die Daten werden in Trainings- und Testsets aufgeteilt (80% Training, 20% Test) mit train_test_split().
  • Modellerstellung und -training: Wir erstellen das Ridge-Regression-Modell mit einem Regularisierungsparameter alpha=1.0 und trainieren es mit den Trainingsdaten.
  • Vorhersagen: Mit dem trainierten Modell machen wir Vorhersagen auf dem Testset.
  • Modellbewertung: Wir berechnen den mittleren quadratischen Fehler (Mean Squared Error, MSE) der Vorhersagen und zeigen die Modellkoeffizienten an.

Zusammengefasst hilft die L2-Regularisierung (Ridge-Regression) dabei, die Überanpassung zu reduzieren und stabilere Modelle zu erstellen, indem sie die Koeffizienten schrumpft und so extrem hohe Werte vermeidet.

c)

Beschreibe, wie das Dropout in neuronalen Netzen funktioniert und wie es zur Vermeidung von Überanpassung beiträgt. Gib auch die theoretischen Hintergründe der Methode an.

Lösung:

Dropout ist eine populäre Regularisierungstechnik, die speziell in neuronalen Netzen angewendet wird, um das Überanpassungsproblem (Overfitting) zu reduzieren. Das Prinzip des Dropouts besteht darin, zufällig ausgewählte Neuronen während des Trainingsprozesses vorübergehend aus dem Netzwerk zu entfernen (d.h. auf null zu setzen). Dies verhindert, dass das Modell zu stark auf spezifische Neuronen und deren Verbindungen angewiesen ist, und fördert die Robustheit und Generalisierungsfähigkeit des Modells. Im Folgenden beschreiben wir im Detail, wie Dropout funktioniert und zur Vermeidung von Überanpassung beiträgt:

  • Funktionsweise von Dropout:
    • Während des Trainingsprozesses wird für jedes Neuron in einer Schicht mit einer bestimmten Wahrscheinlichkeit (häufig 0,5) entschieden, ob es „ausgelassen“ (gedroppt) wird. Das bedeutet, dass dieses Neuron und seine eingehenden und ausgehenden Verbindungen vorübergehend aus dem Netzwerk entfernt werden.
    • Das bedeutet, dass bei jedem Trainingsdurchgang verschiedene Substrukturen des neuronalen Netzes trainiert werden. Dadurch wird verhindert, dass das Modell zu stark von einzelnen Neuronen und deren Verbindungen abhängig wird.
    • Nach dem Training wird das Dropout-Modell deaktiviert, und alle Neuronen werden wieder aktiviert. Um das Modell auszugleichen, werden die Gewichte der Neuronen mit der Dropout-Rate skaliert, um die erwarteten Gesamtausgaben während des Inferenzprozesses zu erhalten.
  • Theoretischer Hintergrund von Dropout:
    • Der Hauptvorteil des Dropouts liegt in seiner Fähigkeit, die Ko-Adaption von Neuronen zu reduzieren. Wenn Neuronen gezwungen werden, alleine gut zu funktionieren und nicht auf die Aktivität anderer Neuronen zu vertrauen, wird das Netz robuster und generalisiert besser auf unbekannte Testdaten.
    • Dropout kann als eine Art bagging (Bootstrap Aggregation) betrachtet werden. Anstatt mehrere separate Modelle zu trainieren und deren Vorhersagen zu mitteln, trainiert Dropout viele Teilnetze gleichzeitig und nutzt deren gemeinsame Macht.
    • In der Praxis führt Dropout zu einer Reduzierung der Varianz und verhindert Überanpassung, da es dem Netz schwerer gemacht wird, Rauschen und spezifische Merkmale der Trainingsdaten zu lernen.

Zusammengefasst ist Dropout eine effektive Regularisierungsmethode, die durch das zufällige Entfernen von Neuronen während des Trainingsprozesses hilft, Überanpassung zu verhindern und die Generalisierungsfähigkeit neuronaler Netze zu verbessern.

d)

Diskutiere die Vorteile und Nachteile der Datenaugmentation bei Bilddaten und erkläre, welche Techniken Du anwenden würdest, um die Trainingsdatenmenge für dieses Problem zu erhöhen.

Lösung:

Datenaugmentation ist eine Technik zur Erhöhung der Menge und Variabilität von Trainingsdaten, insbesondere bei Bilddaten, durch Anwendung verschiedener Transformationen auf vorhandene Daten. Dies hilft dabei, Überanpassung zu verhindern und die Generalisierungsfähigkeit eines maschinellen Lernmodells zu verbessern. Im Folgenden werden die Vorteile und Nachteile der Datenaugmentation sowie einige spezifische Techniken diskutiert:

  • Vorteile der Datenaugmentation:
    • Erhöhte Datenmenge: Durch die Erstellung neuer, variierter Versionen vorhandener Bilder kann die Datenmenge erhöht werden, was zu besseren Modellleistung führt.
    • Verbesserte Generalisierung: Modelle, die auf augmentierten Daten trainiert werden, können besser generalisieren, da sie eine größere Vielfalt an Beispielen sehen.
    • Vermeidung von Überanpassung: Die größere Vielfalt und Menge der Daten reduziert das Risiko, dass das Modell spezifische Merkmale der Trainingsdaten überlernt.
    • Kosteneffizienz: Datenaugmentation kann die Notwendigkeit teurer und zeitaufwändiger Datensammlungs- und -beschriftungsprozesse reduzieren.
  • Nachteile der Datenaugmentation:
    • Komplexität: Die Implementierung und Anwendung von Datenaugmentationstechniken können komplex und zeitaufwändig sein.
    • Rechenressourcen: Die Verarbeitung einer größeren Menge augmentierter Daten erfordert zusätzliche Rechenressourcen und Speicher.
    • Verzerrung der Daten: Unsachgemäße Anwendung von Datenaugmentationstechniken kann zu nicht-repräsentativen Daten führen, die nicht die wahre Verteilung der Testdaten widerspiegeln.
  • Techniken zur Datenaugmentation:
    • Rotationen: Bilder können um verschiedene Winkel rotiert werden, um das Modell robuster gegenüber unterschiedlichen Ausrichtungen zu machen.
    • Skalierung: Vergrößern oder Verkleinern von Bildern kann das Modell gegen Größenvariationen robust machen.
    • Horizontal- und Vertikalspiegelung: Diese einfache Technik verdoppelt effektiv die Anzahl der Trainingsbilder.
    • Zufällige Zuschneidung: Ausschnitte eines Bildes können zufällig zugeschnitten und neu skaliert werden, um die Modellrobustheit zu verbessern.
    • Helligkeits- und Farbvariation: Anpassung der Helligkeit, Sättigung und des Kontrasts kann helfen, das Modell gegen Beleuchtungsvariationen zu trainieren.
    • Rauschen hinzufügen: Hinzufügen von Rauschen zu Bildern kann das Modell widerstandsfähiger gegen Rauschen in Echtweltbildern machen.

Zusammenfassend trägt die Datenaugmentation wesentlich zur Erhöhung der Menge und Vielfalt der Trainingsdaten bei, wodurch die Überanpassung verhindert und die Generalisierungsfähigkeit des Modells verbessert wird. Indem wir geeignete Techniken zur Datenaugmentation verwenden, können wir robuster und leistungsfähiger gegen die Variabilität realer Datenmodelle werden.

Sign Up

Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

Kostenloses Konto erstellen

Du hast bereits ein Konto? Anmelden