Autoencoder

Ein Autoencoder ist ein neuronales Netzwerk, das darauf trainiert ist, Daten in eine komprimierte Form zu kodieren und anschließend wieder zu rekonstruieren, wodurch es nützlich für Aufgaben wie Datenkomprimierung und Merkmalserkennung wird. Diese netzwerkarchitektur besteht typischerweise aus einem Encoder, der die Eingabedaten in einen kleineren latent space transformiert, und einem Decoder, der diese komprimierten Daten wieder in die ursprüngliche Form umwandelt. Ein Beispiel für die Anwendung von Autoencodern ist die Reduzierung von Bildrauschen oder die Dimensionsreduktion in großen Datensätzen.

Los geht’s

Lerne mit Millionen geteilten Karteikarten

Leg kostenfrei los
Inhaltsverzeichnis
Inhaltsangabe

    Jump to a key chapter

      Autoencoder Definition

      Autoencoder sind ein zentraler Bestandteil des maschinellen Lernens und dienen zur Merkmalsextraktion und Datenkomprimierung. Diese neuronalen Netzwerke sind in der Lage, die wichtigsten Merkmale eines Datensatzes zu erlernen, indem sie Eingabedaten auf einen niedrigdimensionalen Raum abbilden und diese dann wieder in die ursprüngliche Dimension zurückprojektieren.Dies geschieht über zwei Hauptkomponenten: den Encoder und den Decoder. Der Encoder verwandelt die Eingabedaten in eine latent variable, während der Decoder versucht, diese latente Repräsentation wieder in die Eingabedaten zu übersetzen. Der Entwicklungsprozess zielt darauf ab, eine möglichst genaue Rekonstruktion der ursprünglichen Daten zu erzielen.

      Architektur und Funktionsweise

      Die Architektur eines Autoencoders umfasst typischerweise drei Schichten:

      • Encoder-Schicht: Transformiert die Eingangsdaten in eine reduzierte Form oder latent space.
      • Latent Space: Repräsentiert die komprimierten Daten, welche alle wichtigen Eigenschaften der Eingangsdaten enthalten.
      • Decoder-Schicht: Rekonstruiert die Eingangsdaten aus dem Latent Space.
      Die mathematische Abbildung lässt sich durch Funktionen darstellen: Der Encoder lässt sich als Funktion \( f(x) \) beschreiben, welche die Eingabedaten \( x \) auf den Latent Space \( z \) abbildet. Der Decoder wird durch eine Funktion \( g(z) \) beschrieben, die den Latent Space zurück auf die rekonstruierte Ausgabe \( \tilde{x} \) projiziert.

      Autoencoder: Ein neuronales Netzwerk, das darauf trainiert wird, Eingangsdaten in eine reduzierte Dimension (Latent Space) zu komprimieren und die Daten dann wieder zu rekonstruieren.

      Angenommen, Du hast ein Bild mit 28x28 Pixeln. Ein Autoencoder könnte darauf trainiert werden, dieses Bild in einen Latent Space von 16 Dimensionen zu komprimieren, anstatt die ursprünglichen 784, und es dann zu rekonstruieren. Ziel ist es, dass das rekonstruierte Bild dem Original möglichst nah kommt.

      Der Lerneffekt innerhalb eines Autoencoders wird durch Minimierung der Loss-Funktion erreicht, die typischerweise die mittlere quadratische Abweichung zwischen ursprünglichen und rekonstruierten Daten ist:\[L(x, \tilde{x}) = \frac{1}{n} \textstyle\big\textstyle\sum_{i=1}^{n}(x_i - \tilde{x}_i)^2\]Ein besonderes Merkmal von Autoencodern ist ihre Fähigkeit, Robustheit gegen Rauschen in den Eingabedaten zu erlernen. Denoising Autoencoder fügen gezielt Rauschen zu den Eingangsdaten hinzu und trainieren das Modell, um die ursprünglichen Daten zu rekonstruieren. Diese Art von Autoencoder fördert die Entdeckung robuster Merkmale der Datenstruktur.

      Autoencoder einfach erklärt

      Autoencoder sind spezielle Typen neuronaler Netzwerke, die für die Datenkomprimierung und Merkmalserkennung verwendet werden. Sie bestehen hauptsächlich aus zwei Komponenten: einem Encoder und einem Decoder. Der Encoder dient dazu, die Eingabedaten in eine latent representation zu überführen, während der Decoder diese Representation zurück in die ursprünglichen Daten rekonstruiert.

      Autoencoder Technik: Grundprinzipien

      Die grundlegende Architektur von Autoencodern kann durch drei Phasen beschrieben werden, wobei jede Phase eine entscheidende Rolle in der Verarbeitung der Daten spielt.

      • Encoder: Diese Komponente nimmt Eingabedaten \( x \) auf und kodiert sie in einen Latent Space \( z \). Der Encoder wird als Funktion \( f(x) = z \) modelliert.
      • Latent Space: Dieser Zwischenraum speichert die Essenz der Daten in niedrigdimensionaler Form. Der Latent Space \( z \) ist das Komprimat der Eingangsdaten.
      • Decoder: Die Aufgabe des Decoders besteht darin, aus dem Latent Space \( z \) die ursprünglichen Daten \( \tilde{x} \) zu rekonstruieren, beschrieben durch \( g(z) = \tilde{x} \).
      Das Ziel eines Autoencoders ist die Minimierung der Rekonstruktionsfehler:\[L(x, \tilde{x}) = \frac{1}{n} \textstyle\sum_{i=1}^{n}(x_i - \tilde{x}_i)^2\]

      Angenommen, Du hast einen Datensatz mit Bildern der Größe 64x64 Pixel. Ein Autoencoder würde diesen Datensatz auf 32 Dimensionen im Latent Space komprimieren. Die Rekonstruktion aus diesen Dimensionen sollte dem ursprünglichen Bild so nah wie möglich kommen.

      Ein interessanter Aspekt von Autoencodern ist ihre Fähigkeit zur Anomalieerkennung. Indem der Autoencoder die Struktur normal ausgeprägter Daten lernt, können Anomalien erkannt werden, wenn eine Eingabe nicht korrekt rekonstruiert werden kann. Weitere Anwendungen umfassen:

      • Bilderkennung: Aufspüren von Abweichungen in Bilddaten.
      • Datenbereinigung: Entfernen von Rauschen in den Daten.
      • Feature Learning: Extraktion bedeutungsreicher Features für nachfolgende Analysen.
      Der Schlüssel liegt darin, seine Fähigkeit zur Merkmalserkennung zu nutzen, um eine präzise Unterscheidung zwischen normalen und anomalem Verhalten zu treffen.

      Autoencoder Technik: Einsatzbereiche

      Autoencoder finden in zahlreichen Bereichen Anwendungsmöglichkeiten, von der Datenvorverarbeitung bis hin zur anomaly detection. Ihre Fähigkeit, Muster aus den Daten zu extrahieren und komprimieren, macht sie wertvoll für verschiedene Anwendungsfälle:

      • Bildkompression: Reduktion von Bildgrenzen ohne signifikanten Qualitätsverlust.
      • Sprachdatenverarbeitung: Optimierung von Audioaufnahmen durch Eliminierung von Störgeräuschen.
      • Gesundheitsdatenanalyse: Erkennung abnormaler Muster in medizinischen Aufzeichnungen.
      Ein praktisches Beispiel ist das Vorverarbeiten von Bilddaten mit einem Autoencoder, bevor diese in einem anderen neuronalen Netzwerk weiterverarbeitet werden. Durch die Reduktion der Datenmaßgabe kann das zweite Netzwerk effizienter arbeiten und bessere Ergebnisse erzielen.

      In der automatisierten Bildverarbeitung werden Autoencoder häufig verwendet, um Features von Bildern zu extrahieren. Der Prozess kann in mehreren Schritten skizziert werden:

      • Pre-Training: Lerne die Bildstruktur aus großen Datensätzen, um wertvolle Feature-Karten zu erstellen.
      • Diagnostik: Identifiziere relevante Muster oder Abnormitäten in medizinischen Bildern, wie z. B. Krebszellen in Mammographien.
      • Anpassung: Gewinne schnell wichtige Einsichten für spezifische Anwendungsbereiche, indem Du Transfer Learning auf Basis vortrainierter Autoencoder-Modelle einsetzt.
      Das Ziel in vielen Fällen ist es, hochwertige Ausgangsmerkmale zu erhalten, die für die Weiterverarbeitung durch spezialisierte Modelle nützlich sind.

      Variational Autoencoder

      Ein Variational Autoencoder (VAE) ist eine Erweiterung des klassischen Autoencoders, die im Bereich des maschinellen Lernens breite Anwendung findet. Im Gegensatz zu herkömmlichen Autoencodern basiert der VAE auf einer probabilistischen Annäherung und kombiniert die Eigenschaften neuronaler Netzwerke mit der bayesschen Statistik.

      Variational Autoencoder: Unterschiede zu klassischen Autoencodern

      Variational Autoencoder unterscheiden sich auf mehrere wesentliche Arten von klassischen Autoencodern:

      • Probabilistischer Ansatz: Während klassische Autoencoder deterministisch arbeiten, verwenden VAEs Wahrscheinlichkeitsverteilungen. Die Daten werden in Wahrscheinlichkeitsräume statt in fixe Latent Spaces kodiert.
      • Latente Verteilungen: VAEs modellieren die Daten mit Latent Spaces, die durch Wahrscheinlichkeitsverteilungen beschrieben werden. Eine Gauß'sche Normalverteilung ist hierbei üblich.
      • Reparametrisierungs-Trick: Dieser Trick ermöglicht es VAEs, die Differenzierbarkeit trotz der Einbeziehung von Zufallskomponenten zu wahren. Dies wird durch Transformationen von zufälligen Variablen in deterministische Werte erreicht:
      Die mathematische Formulierung des VAEs ist durch zwei Hauptfunktionalitäten gegeben:Der Encoder approximiert die latente Variable \( z \) als \( q(z|x) \sim \mathcal{N}(\mu, \sigma^2) \), während der Decoder die Wahrscheinlichkeitsverteilung der Daten \( p(x|z) \) modelliert.

      Um den Unterschied zu klassischen Ansätzen zu verstehen, stellen wir uns vor, wir versuchen, handgeschriebene Ziffern zu modellieren. Ein klassischer Autoencoder reduziert diese Ziffern direkt und rekonstruiert sie deterministisch. Hingegen wird ein VAE die latente Variable jeder Ziffer als Wahrscheinlichkeitsverteilung modellieren, was zu einem vielfältigeren und flexibleren Modell führt.

      Um die Funktionsweise von VAEs vertieft zu verstehen, ist es hilfreich, die Bornungs-Divergenz zu betrachten, die als Regularisierungsterm in der Loss-Funktion integriert ist. Diese Kullback-Leibler-Divergenz (KL-Divergenz) zwischen der posterioren Verteilung \( q(z|x) \) und der prioren Verteilung \( p(z) \) stellt sicher, dass die lernen Variablen gut in den latenten Raum passen:\[KL(q(z|x) || p(z)) = \int q(z|x) \log \left( \frac{q(z|x)}{p(z)} \right) dz\]Ziel ist es, die Gesamtablaufsfunktion, bestehend aus Rekonstruktionsfehler und KL-Divergenz, zu minimieren. Dies fördert eine gute Balance zwischen Datenrekonstruktion und guter Anpassung in den latenten Raum.

      Variational Autoencoder: Anwendungsbeispiele

      Variational Autoencoder bieten zahlreiche Applikationsmöglichkeiten in verschiedenen Disziplinen dank ihrer flexiblen und probabilistischen Struktur:

      • Datenkomprimierung: Durch die Nutzung probabilistischer Verteilungen sind VAEs besonders gut geeignet, um Informationen effizient zu komprimieren.
      • Generative Modelle: VAEs können verwendet werden, um neue Datenpunkte zu generieren, indem aus der latenten Verteilung neue Proben gezogen werden.
      • Bildverarbeitung: In der Bild- und Mustererkennung sind sie hilfreich, um Variationen und neue Muster innerhalb von Datensätzen zu erstellen.
      • Abnormalitätserkennung: Durch das Modellieren normaler Variationsverteilungen können Ausreißer effizient erkannt werden.
      Ein anschauliches Beispiel für die Anwendung von VAEs ist in der synthetischen Bildgeneration zu finden: Aus einem bekannten Zifferndatensatz lassen sich völlig neue, aber plausible handgeschriebene Ziffern generieren, die vorher nicht existierten.

      Variational Autoencoders (VAEs) sind besonders bekannt für ihre Fähigkeit zur Erstellung von Daten, die den Originaldaten sehr ähnlich, aber nicht identisch sind. Diese Eigenschaft macht sie in der künstlichen Intelligenz sehr beliebt.

      Convolutional Autoencoder

      Ein Convolutional Autoencoder (CAE) kombiniert die Prinzipien von Autoencodern mit den effektiven Datenverarbeitungsmethoden von Convolutional Neural Networks (CNNs). Dies macht sie insbesondere für Bild- und Videodaten sehr leistungsfähig. Durch den Einsatz von Faltungsschichten sind CAEs in der Lage, lokale Muster in Bilddaten zu erkennen und effizient in einem niedrigdimensionalen Raum zu komprimieren.

      Convolutional Autoencoder: Funktionsweise

      Die Funktionsweise eines Convolutional Autoencoders gliedert sich in mehrere Schlüsselschritte:

      • Faltungsschicht (Convolutional Layer): Diese Schicht extrahiert lokale Merkmale aus den Eingangsdaten. Filter in diesen Schichten durchlaufen die Eingabedaten, um Feature-Karten zu erstellen.
      • Pooling-Schicht: Diese Schicht reduziert die Abmessungen der Feature-Karten, um die Rechenlast zu verringern und die wichtigen Merkmale zu behalten.
      • Pfad zum Latent Space: Ähnlich wie bei klassischen Autoencodern wird der Latent Space hier durch die Konvolution und Pooling-Schichten erreicht.
      • Upsampling: Um die ursprünglichen Daten aus dem Latent Space zu rekonstruieren, verwendet der Decoder in CAEs Upsampling-Techniken, die die vorherige Faltung und Pooling umkehren.
      Die mathematische Formulierung ruht auf den Faltungsschichten. Eine Faltung auf einem Eingabebild \( x \) mit einem Filter \( w \) berechnet:\[s(i, j) = (x * w)(i, j) = \sum_m \sum_n x(m, n)w(i-m, j-n)\]Durch verschiedene Filter werden unterschiedliche Merkmale wie Kanten, Muster und Texturen erfasst.

      Ein typischer Anwendungsfall eines Convolutional Autoencoders ist die Bilddetaillierung. Angenommen, Du hast ein niedrigauflösendes Bild von 32x32 Pixel. Mithilfe eines CAE lässt sich eine hochauflösende Version mit 128x128 Pixel durch Upsampling generieren. Dabei wird das Bild durch den Decoder aus dem Latent Space so interpretiert und erweitert, dass keine Details verloren gehen.

      Wenn es um das Thema Anpassungsfähigkeit von Convolutional Autoencoders geht, sind diese Modelle sehr robust gegenüber variablen Datenstrukturen:

      • Vielseitige Anwendungen: Convolutional Autoencoders können genutzt werden zur semi-supervisierten Klassifizierung von Bilddaten, indem sie die im Latent Space erlernten Merkmale für weiterführende Klassifizierungsmodelle verwenden.
      • Behandlung unstrukturierter Daten: Aufgrund ihrer Struktur sind CAEs besonders geeignet zum Umgang mit Daten von variabler Länge und Form.
      • Anpassungsfähigkeit an neue Daten: Durch Transfer-Learning können CAEs leicht an neue Daten angepasst werden, ohne dass ein komplettes Retraining erforderlich ist.
      Diese Eigenschaften machen Convolutional Autoencoders zu einem mächtigen Werkzeug, speziell in dynamischen Umfeldern wie der Überwachung von Echtzeitbildern.

      Ein Convolutional Autoencoder kann durch Hinzufügen von neunen Filtern für weitere Merkmalsextraktionen optimiert werden. Dies ermöglicht eine genauere Rekonstruktion von Details im Bild.

      Convolutional Autoencoder: Praxisbeispiele

      Die praktischen Anwendungen von Convolutional Autoencoders erstrecken sich über mehrere Bereiche, einschließlich der Bildbearbeitung und der Objekterkennung:

      • Kompakte Merkmalsextraktion: Anwendungen in der Medizin, wie z.B. zur Erkennung von Anomalien auf Röntgenbildern, profitieren stark von der Fähigkeit der CAEs, bedeutende Merkmale automatisch zu extrahieren.
      • Datenkompression: In der IT-Branche werden CAEs zur Reduzierung der Dateigrößen von Bildern und Videos verwendet, ohne dass signifikante Verluste an Qualität auftreten.
      • Generative Modelle: CAEs können neuartige Daten, wie Bilder von organischen Strukturen oder künstlichen Designs, erschaffen und generieren.
      Mithilfe von Transferlernen können Convolutional Autoencoders schnell auf einen neuen Datensatz angepasst werden, sodass beispielsweise in der Automobilindustrie Echtzeitbilder mit minimalem Aufwandsprozess klassifiziert werden können. Dies hebt die Flexibilität und Effizienz von CAEs in verschiedenen industriellen Anwendungen hervor.

      Autoencoder Beispiel

      Autoencoder bieten eine spannende Möglichkeit zur Datenreduktion und -rekonstruktion. In diesem Beispiel möchten wir Schritt für Schritt zeigen, wie Du selbst einen einfachen Autoencoder implementieren kannst.

      Autoencoder Beispiel: Schritt-für-Schritt-Anleitung

      Beginne zunächst mit den erforderlichen Importen, die für die Erstellung eines Autoencoders notwendig sind. Verwende hierbei die beliebten Bibliotheken für maschinelles Lernen:

      from keras.layers import Input, Densefrom keras.models import Modelimport numpy as np
      Schritt 1: Erstelle das Architekturmodell des Autoencoders. Dies umfasst die Definition der Encoder- und Decoderschichten.
      • Bestimme die Dimension der Eingabedaten
      • Lege die Grösse des Latent Space fest
      # Eingabedimension und Latent Space Dimensioninput_dim = 784 # Beispiel: 28x28 Bildlatent_dim = 64 # Reduzierte Dimension
      Setze dann die Encoder-Schicht auf:
      input_img = Input(shape=(input_dim,))encoded = Dense(latent_dim, activation='relu')(input_img)
      Definiere die Decoder-Schicht:
      decoded = Dense(input_dim, activation='sigmoid')(encoded)
      Schritt 2: Erstelle den Autoencoder-Model
      autoencoder = Model(input_img, decoded)
      Schritt 3: Kompiliere das Modell mit einer Verlustfunktion. Eine häufig verwendete Funktion ist der quadratische Fehler:
      autoencoder.compile(optimizer='adam', loss='mean_squared_error')
      Schritt 4: Trainiere den Autoencoder mit Deinen Daten:
      autoencoder.fit(x_train, x_train, epochs=50, batch_size=256, shuffle=True, validation_data=(x_test, x_test))
      Schritt 5: Verwende das trainierte Modell zur Vorhersage und Rekonstruktion neuer Daten.

      Autoencoder - Das Wichtigste

      • Autoencoder Definition: Neuronale Netzwerke zur Merkmalsextraktion und Datenkomprimierung durch Abbildung von Eingabedaten auf einen niedrigdimensionalen Raum und Rückprojektion.
      • Komponenten: Bestehen aus Encoder (transformiert Eingangsdaten) und Decoder (rekonstruiert Daten aus Latent Space).
      • Architektur: Drei Schichten: Encoder, Latent Space (komprimierte Datenrepräsentation), Decoder.
      • Variational Autoencoder (VAE): Erweiterung mit probabilistischem Ansatz, Nutzung von Wahrscheinlichkeitsverteilungen statt fixem Latent Space.
      • Convolutional Autoencoder (CAE): Kombination von Autoencoder und Convolutional Neural Networks für effiziente Bildverarbeitung.
      • Anwendungsbeispiele: Bildkompression, Anomalieerkennung, Feature Learning, automatisierte Bildverarbeitung.
      Häufig gestellte Fragen zum Thema Autoencoder
      Wie funktionieren Autoencoder in neuronalen Netzen?
      Autoencoder sind neuronale Netze, die Daten in eine niedrigdimensionale Repräsentation kodieren und anschließend versuchen, die Originaldaten daraus zu rekonstruieren. Sie bestehen aus einem Encoder, der die Eingangsdaten komprimiert, und einem Decoder, der diese komprimierte Darstellung wieder zu den Originaldaten umwandelt. Ziel ist es, die Rekonstruktionsverluste zu minimieren. Sie werden oft für Merkmalsextraktion und Datenreduktion verwendet.
      Welche Anwendungsgebiete gibt es für Autoencoder in der Praxis?
      Autoencoder werden häufig in der Bild- und Signalverarbeitung zur Rauschreduzierung, in der Anomalieerkennung für die Identifizierung ungewöhnlicher Muster, zur dimensionalen Reduktion in der Datenvorverarbeitung und zur Generierung von Daten für augmentierte Lernprojekte eingesetzt. Sie sind auch in der Sprachverarbeitung und bei der Erstellung von Empfehlungssystemen nützlich.
      Welche Arten von Autoencodern gibt es und wie unterscheiden sie sich?
      Autoencoder gibt es in verschiedenen Ausführungen, darunter den Standard-Autoencoder, den denoising Autoencoder, den variational Autoencoder (VAE) und den sparse Autoencoder. Sie unterscheiden sich in ihrer Architektur und Zielsetzung: Standard-Autoencoder lernen Identität, denoising Autoencoder sind gegen Rauschen robust, VAE generieren Datenvarianten, während sparse Autoencoder Sparse-Codierung erlernen.
      Wie kann die Leistung eines Autoencoders bewertet werden?
      Die Leistung eines Autoencoders kann durch die Rekonstruktionsfehler-Metrik bewertet werden, also den Unterschied zwischen den originalen Eingabedaten und den rekonstruierten Ausgabedaten. Übliche Metriken sind der Mean Squared Error (MSE) oder der Mean Absolute Error (MAE). Eine geringere Fehlerzahl deutet auf eine bessere Leistung hin. Zudem kann die Generalisierungsfähigkeit auf unbekannte Daten durch Visualisierungen oder spezifische Tests überprüft werden.
      Welche Voraussetzungen braucht man, um einen Autoencoder zu implementieren?
      Um einen Autoencoder zu implementieren, benötigst Du Kenntnisse in maschinellem Lernen, insbesondere neuronalen Netzen. Programmierkenntnisse, vor allem in Python und den Bibliotheken TensorFlow oder PyTorch, sind wichtig. Zudem sind lineare Algebra und Optimierungsmethoden hilfreich. Grundlegendes Verständnis von Datensätzen und deren Vorverarbeitung ist ebenfalls nötig.
      Erklärung speichern

      Teste dein Wissen mit Multiple-Choice-Karteikarten

      Warum werden Autoencoder oft verwendet?

      Welche Dimension hat der Latent Space im Beispiel?

      Was ist das Hauptziel eines Autoencoders?

      Weiter
      1
      Über StudySmarter

      StudySmarter ist ein weltweit anerkanntes Bildungstechnologie-Unternehmen, das eine ganzheitliche Lernplattform für Schüler und Studenten aller Altersstufen und Bildungsniveaus bietet. Unsere Plattform unterstützt das Lernen in einer breiten Palette von Fächern, einschließlich MINT, Sozialwissenschaften und Sprachen, und hilft den Schülern auch, weltweit verschiedene Tests und Prüfungen wie GCSE, A Level, SAT, ACT, Abitur und mehr erfolgreich zu meistern. Wir bieten eine umfangreiche Bibliothek von Lernmaterialien, einschließlich interaktiver Karteikarten, umfassender Lehrbuchlösungen und detaillierter Erklärungen. Die fortschrittliche Technologie und Werkzeuge, die wir zur Verfügung stellen, helfen Schülern, ihre eigenen Lernmaterialien zu erstellen. Die Inhalte von StudySmarter sind nicht nur von Experten geprüft, sondern werden auch regelmäßig aktualisiert, um Genauigkeit und Relevanz zu gewährleisten.

      Erfahre mehr
      StudySmarter Redaktionsteam

      Team Ingenieurwissenschaften Lehrer

      • 13 Minuten Lesezeit
      • Geprüft vom StudySmarter Redaktionsteam
      Erklärung speichern Erklärung speichern

      Lerne jederzeit. Lerne überall. Auf allen Geräten.

      Kostenfrei loslegen

      Melde dich an für Notizen & Bearbeitung. 100% for free.

      Schließ dich über 22 Millionen Schülern und Studierenden an und lerne mit unserer StudySmarter App!

      Die erste Lern-App, die wirklich alles bietet, was du brauchst, um deine Prüfungen an einem Ort zu meistern.

      • Karteikarten & Quizze
      • KI-Lernassistent
      • Lernplaner
      • Probeklausuren
      • Intelligente Notizen
      Schließ dich über 22 Millionen Schülern und Studierenden an und lerne mit unserer StudySmarter App!
      Mit E-Mail registrieren