ai-academy

Deep Dive in das fastai Framework. Implementiere Optimizer, Training und spezielle Modellarchitekturen für deep learning.

In diesem Spezialkurs lernst du, die fundamentale Umsetzung von Kernelementen des deep learning im fastai Framework kennen. Wir implementieren einen CNN-Learner und verwenden den UNET-Learner zur Programmierung des Siamese Twin Problems. Programmiere deinen eigenen Optimizer für das Training von neuronalen Netzen!

Was lerne ich in diesem Kurs?

Dieser Kurs richtet sich an fortgeschrittene User, die bereits Erfahrung in der Implementierung von Algorithmen für künstliche Intelligenz mithilfe von Deep Learning haben. Deep Learning Frameworks für Python wie PyTorch oder fastai sollten dir auch bereits bekannt sein.

Das fastai Framework bietet uns eine tolle Unterstützung zur schnellen Umsetzung von Prototypen mit nur wenigen Zeilen Python Code. Wenn wir allerdings tiefer in die Materie von künstlicher Intelligenz und Deep Learning eintauchen, so wollen - und brauchen - wir mehr Kontrolle über den Aufbau und den Trainingsprozess unserer KI-Modelle.

Fastai baut als Framework auf den bekannten (und inzwischen in der Wissenschaft am häufigsten eingesetzen) Framework PyTorch auf. Das heißt, jeder, der bereits Erfahrungen mit dem deep learning Framework PyTorch gesammelt hat, für den erscheint auch das fastai Framework geläufig.

Lernziele in diesem Kurs

Dieser Spezialkurs ist in drei Abschnitte geteilt. Abschnitt 1 fokussiert auf besondere Modellarchitekturen und deren Umsetzung im fastai Framework. In Abschnitt 2 behandeln wir den Trainingsprozess eines deep learning Modells für künstliche Intelligenz und Abschnitt 3 beschließt den Kurs mit der Präsentation der Mid-Level API vom fastai Framework.

Teil 1 - Spezielle Modellarchitekturen im fastai Framework

  • Der CNN-Learner: Fastai bietet mit der Klasse CNN-Learner bereits eine massive Unterstützung für die Implementierung von Convolutional Neural Networks an. Der CNN-Learner kapselt eine Menge an Funktionalität. Wir analysieren die Klasse und programmieren selbst einen Learner, speziell für Convolutional Neural Networks.
  • Der UNET-Learner: Ein UNET ist eine spezielle - U-förmige - Modellarchitektur für die Verarbeitung von Bilddaten mithilfe von deep learning und neuronalen Netzen. Auch für UNETs bietet fastai eine standardisierte Unterstützung mithilfe der Klasse UnetLearner. Genauso wie beim CNN-Learner für Convolutions, analysieren wir die Funktionalität des UNET-Learners, indem wir diese selbst mit Python Code nachprogrammieren.
  • Anwendungsbeispiel Siamese Twins: Unter dem Siamese Twins-Problem verstehen wir im Rahmen der künstlichen Intelligenz ein Modell, das entscheiden kann, ob zwei Bilder ident sind oder nicht. Mit unseren Kenntnissen aus dem Bereich deep learning für Computer Vision implementieren wir ein solches Siames Twins Modell auf Basis des fastai Frameworks.

Teil 2 - Der Trainingsprozess eines tiefen neuronalen Netzes im Detail

  • Stochastic Gradient Descent (SGD); Wir analysieren den Trainingsprozess eines neuronalen Netzes mithilfe vom SGD - Stochastic Gradient Descent - Algorithmus. Auf dieser Basis implementieren wir einen eigenen generischen Optimizer für unser Deep Learning Modell und bauen diesen schrittweise aus, indem wir zum Beispiel ein Momentum hinzufügen.
  • RMSProp Optimizer: Auch wenn der RMSProp Optimizer für das Training von neuronalen Netzen nie wirklich publiziert, sondern nur in einem online Kurs zu Machine Learning von Geoffrey Hinton vorgestellt wurde, so genießt er dennoch einen großen Bekanntheitsgrad innerhalb der Community für künstliche Intelligenz.
  • Adam Optimizier: Der Adam Optimizer stellt einen weiteren, sehr bekannten, Optimizer für das Trainieren von neuronalen Netzen dar. Wir implementieren die wesentlischen Elemente des Adam-Optimizers und überlegen, welche Rolle das Konzept von decoupled weight decay in diesem Zusammenhang spielt.
  • Callbacks in fastai: Callbacks sind ein gängiges Entwurfsmuster für Entwicklungsframeworks. Mithilfe von Callbacks kann individueller Quellcode an bestimmten Stellen (den sogenannten Callbacks) während der Laufzeit des Programms injiziert werden. Auf diese Weise können wir die Trainingsschleife unseres neuronalen Netzes mit dem fastai Framework kontrollieren.

Teil 3 - Die Mid-Level API vom fastai Framework

  • Übersicht der Mid-Level API: Das fastai Framework bietet für viele Standardanwendungen aus dem Bereich der künstlichen Intelligenz und Machine Learning bereits sehr komfortable high-level Programmierschnittstellen, die eine rasche Prototypenentwicklung ermöglichen. Für individuelle Projekte und die individuelle (Vor)verarbeitung der Trainingsdaten sind diese jedoch oft nicht geeignet. Hier zeigt sich die volle Flexibilität des fastai Frameworks. Mithilfe der Mid-Level API können individuelle Daten-Pipelines geschrieben werden, die vollständig zum individuellen Machine Learning Problem passen.
  • Eigene Datenpipelines und Transforms implementieren: Wir programmieren gemeinsam eigene Datenpipelines und TransformedLists, um unser fastai-Modell den individuellen Bedürfnissen unserer Datenlage anpassen zu können.
  • Siamese Twins mit der Mid-Level-API: Mithilfe der Werkzeuge, die uns die Mid-Level API vom fastai Framework zur Verfügung stellt, implementieren wir das Siamese Twins Problem neu.

Teil 4 - Die Learner Klasse aus dem fastai Deep Learning Framework

In diesem Teil des Kurses analysieren wir die Funktionsweise der Learner-Klasse aus dem fastai Deep Learning Framework. Wir implementieren alle Elemente, die wir zum Aufbau unseres Learners benötigen und vergleichen unsere Implementierung mit jener aus dem fastai-Framework.

  • Präsentation des Datensets, das wir für den Aufbau unseres eigenen Learner Objekts verwenden.
  • Implementieren der Dataloader und Aufbereitung der Daten für die einzelnen Mini-Batches.
  • Normalisierung der Trainingsdaten mithilfe von Mittelwert und Standardabweichung
  • Funktionsweise der Klasse Parameter für unser Modell.
  • Aufbau unseres eigenen Convolutional-Neural-Net Modells für die spätere Verwendung mit unserem Learner-Objekt.
  • Implementierung der Loss-Funktion, die wir später in unserem Modell einsetzen wollen.
  • Analyse und Implementierung der erforderlichen Callbacks, die den Trainingsprozess beeinflussen werden.
  • Wie sind lr_find (Learning-Rate-Finder) und one-cycle-training mit learning-rate-annealing implementiert? Wir integrieren die automatische Anpassung der Learningrate während des Trainingsprozesses unseres neuronalen Netzes in das implementierte Modell.

Für wen ist dieser Kurs interessant?

Dieser Kurs richtet sich an bereits fortgeschrittene Entwickler, die schon erste deep learning Projekte mithilfe von Frameworks wie PyTorch oder fastai umgesetzt haben und nun weiter in die Tiefe der Frameworks hinunter steigen wollen.

Welche Vorkenntnisse sollte ich für diesen Kurs mitbringen?

Für diese Kurs solltest du neben Programmierkenntnissen mit der Programmiersprache Python auch Kenntnisse über künstliche Intelligenz und die Umsetzung von KI-Algorithmen mithilfe von deep learning Frameworks wie PyTorch oder fastai mitbringen.

Eine gute Grundausbildung zum Thema künstliche Intelligenz und Programmierung von ersten Anwendungen für KI-Algorithmen bietet unsere Kursreihe “welcome2ki”:

Wie kann ich mich für den Kurs einschreiben?

Dieser Kurs wird über die Online-Lernplattform Udemy angeboten. Gleich Kurs buchen

Wie lange habe ich Zeit, den Kurs zu absolvieren?

Der Kurs ist für dich lebenslang zugänglich. Du kannst den Kurs in individuellen Tempo absolvieren und auch nach erfolgreichem Abschluß jederzeit wieder auf die Unterlagen und Videos zugreifen.

Hintergrund Infos zu den Kursinhalten

Warum betrachten wir die Inhalte in diesem Kurs für dich als relevant? Wir geben hier einige Infos zu dem Themenschwerpunkten des aktuellen Kurses.

UNET Modellarchitektur

Die UNET Modellarchitektur stellt einen Spezialfall eines CNN (Convolutional Neural Networks) dar und wurde erstmals im Jahr 2015 von Olaf Ronneberger, Phillip Fischer und Thomas Brox vorgeschlagen, um effizienter medizischen Bilddaten segmentieren zu können (Image Segmentation).

Unter Image Segmentation verstehen wir den Prozess, ein Bild in unterschiedliche Bereiche einzuteilen und diese bestimmten Klassen zuzuordnen. Im Bereich der medizinischen Anwendung wird Image Segmentation hauptsächlich zur Tumorerkennung auf radiologischen Bilddaten eingesetzt.

Was das UNET im Vergleich zu anderen CNN-Modellarchitekturen auszeichnet

Die Reduktion der Dimensionen (Höhe und Breite) der Bilder, welche während des Durchlaufens einer Convolution angewendet (durch die entsprechenden pooling layer) wird, wird in der zweiten Hälfte des Modells wieder rückgängig gemacht.

Der pooling layer verringert die Höhe und Breite des Bildes, indem er die Anzahl der Kanäle der Input Matrix konstant hält. Mit dieser Berechnung wird die Komplexität reduziert. Der pooling layer bezieht sich auf einen Pixel des Bildes, der für eine ganze Gruppe von Pixel steht. Auf diese Weise reduziert der pooling layer die Größe der Bilddaten in einem Convolutional Neural Net.

Zur Ausgabe werden die Ausgabewerte wieder mit hochauflösenden Features auf der Horizontalachse des Modells kombiniert. Ein sequentieller convolution layer generiert auf diese Weise einen präziseren Output auf der jeweiligen Ausgabeebene des Modells.

Quelle: https://heartbeat.fritz.ai/deep-learning-for-image-segmentation-u-net-architecture-ff17f6e4c1cf

Die Bezeichnung UNET kommt von der Architektur des deep learning Modells, die in der Visualisierung dem Buchstaben U gleicht.

Optimizer und der Trainingsprozess des Deep Learning Modells

Insbesondere durch das stetige Anwachsen der Anzahl an Ebenen in den eingesetzten (tiefen) neuronalen Netzen kommt dem Trainingsprozess - und damit dem Optimizer eine immer höhere Bedeutung hinsicht der Präzision des implementierten deep learning Modells zu. Daher betrachten wir in diesem online Kurs zu künstlicher Intelligenz in Teil 2 verschiedene Typen von Optimizern für das Training neuronaler Netze.

SGD - Stochastic Gradient Descent Algorithmus

Die wohl bekannteste Optimizer Algorithmus im Umfeld künstlicher Intelligenz ist SGD (Stochastic Gradient Descent). SGD stellt sozusagen die Basis für das Training neuronaler Netze dar. Als Gradient wird allgemein die Steigung einer Funktion bezeichnet. Descent steht für “Absteigen”. Stochastic Gradient Descent bedeutet also, stetig entlang des stärksten Gefälle heruntersteigen. Bei der linearen Regression etwa, wollen wir die Summe der Quadrate der “Residuals” minimieren. Wir wissen, dass eine Funktion dort ein Minimum aufweist, wo die erste Ableitung (=Steigung) gleich 0 ist. Auf diese Weise kann das Problem der linearen Regression gelöst werden und der Vektor mit den Gewichten berechnet werden.

(Stochastic) Gradient Descent ist also ein iterativer Algorithmus, der an einem zufälligen Punkt der Funktion beginnt und weiter talwärts entlang der höchsten negativen Steigung optimiert. Solange, bis er an einem Minimum angelangt ist.

Adam Optimizer (Adaptive Moment Estimation)

Der Adam Optimizer zeichnet sich vor allem durch vor allem durch hohe Recheneffizienz aus und ist so in der Lage, schneller gegen einen Grenzwert zu konvergieren und ist zusätzlich auch speichereffizienter als der klassische Gradient Descent Algorithmus, da er die Zwischenwerte der Gewichte nicht über den gesamten Prozess hinweg aufsummiert.

Mithilfe von Adaptive Moment Estimation wird die Bestimmung der passenden Learningrate für jeden einzelnen Parameter durch die Verwendung von Momentum der Gradienten erleichtert.

Durch die erhöhte Speichereffizienz zeichnet sich der ADAM Optimizer vor allem bei großen Trainingsdatensets aus. Die Aktualisierung der Parameter (Gewichtematrix) ist absolut invariant hinsichtliche der Skalierung der Gradienten. Der ADAM Optimizer Algorithmus konvergiert sogar wenn sich die Zielfunktion über die Zeit ändert. Die einzige Schwachstelle am ADAM Optimizer ist das Fakt, dass dieses Prozedere die Berechnung der Ableitung zweiten Grades benötigt.

RMSProp Optimizer

Die Idee zu RMSProp lieferte Geoffry Hinton in seinem online Kurs “Neural Networks für Machine Learning”. RMSProp setzt auf das Konzept einer adaptiven Learning Rate für die unterschiedlichen Trainingszyklen von neuronalen Netzen. Obwohl RMSProp nicht wirklich öffentlich publiziert wurde, erfreut sich der Optimierungsalgorithmus für neuronale Netze hoher Bekanntheit und Beliebtheit in der künstlichen Intelligenz Community. Das Zentrale Anliegen der Optimierung mittels RMSProp Algorithmus liegt in der Auflösung des Problems einer hohen Varianz und Standardabweichung der Werte der Gewichte.

Um die Details der verschiedenen Optimizer Algorithmen für (tiefe) neuronale Netze - deep neural networks - genauer kennenzulernen, implementieren wir in diesem Kurs die wesentlichen Passagen mit reinem Python Code nach und erleben auf diese Weise die vielfältigen Optimierungen für Algorithmen und Training künstlicher Intelligenz im fastai Framework.