\chapter{Deep Learning}
\label{chapter: deep learning}
    Das \say{Deep Learning} ist ein Teilbereich des \ac{ML}.
    Dieses ist wiederum ein Teilbereich der \ac{KI}.
    Obwohl es faktisch ein Teilbereich ist haben sich \ac{KI} und \ac{ML} zu separaten Forschungsfeldern entwickelt.\\
    \includegraphics[width = \textwidth]{ai_and_ml.png}\\
    Allgemein beschrieben wird bei dem Deep Learning ein Modell aus mehreren Schichten aufgebaut.
    Diese Schichten sind grundsätzlich hierarchisch aufgebaut und verarbeiten jeweils die Ausgabe des vorhergegangenen Schicht.
    Hierfür werden sowohl Methoden aus dem Supervised Learning (siehe Zusammenfassung ML: Supervised Learning), als auch Methoden aus dem Unsupervised Learning (siehe Zusammenfassung ML: Unsupervised Learning) verwendet.
    Da die Modelle meist an das Menschliche Gehirn angelehnt sind werden hierfür Neurale Netzwerke verwendet.
    Im Allgemeinen kommen 2 Arten von Neuralen Netzwerken zum Einsatz:
    \begin{itemize}
        \item \textbf{Faltunsnetzwerke (\ref{cnn}):}\\
            für statische Daten (Bilder, Sprachaufnahmen, \dots)
        \item \textbf{Zyklische Netzwerke (\ac{RNN}):}\\
            für sequentielle Daten (Videostream, Fließtext, \dots)
    \end{itemize}

    \section{Allgemeines Lernprinzip}
    \label{deep learning: principle}
        \includegraphics[width=\textwidth]{deep-learing_learning-principle.png}

    \section{Exkurs: Bilderkennung}
    \label{bilderkennung}
        \subsection{Neuro-biologisches Konzept}
        \label{neuro-biological concept}
            \includegraphics[width=.8\textwidth]{neuro-biological_concept.png}

        \subsection{Bild Klassifizierung}
        \label{image classification}
            Der Inhalt eines Bildes soll klassifiziert werden.\\
            \includegraphics[width=.8\textwidth]{image-classification.png}\\
            Hierbei gibt es viele Probleme:
            \begin{itemize}
                \item \textbf{Semantic Gap:}\\
                    Der Computer sieht das Bild als eine Datenmenge von unabhängigen Pixeln.\\
                    \includegraphics[width=.6\textwidth]{semantical gap.png}
                \item \textbf{Viewpoint Variation:}\\
                    Eine kleine Veränderung in der Kameraposition kann dazu führen, dass sich alle Pixel verändern.\\
                    \includegraphics[width=\textwidth]{viewpoint variation.png}
                \item \textbf{Beleuchtung:}\\
                    Eine Veränderung der Beleuchtung kann zu sehr unterschiedlichen Pixeldaten führen.\\
                    \includegraphics[width=.8\textwidth]{illumination.png}
                \item \textbf{Deformation:}\\
                    Die Objekte im Bild können unterschiedlich verzerrt sein.\\
                    \includegraphics[width=.8\textwidth]{deformation.png}
                \item \textbf{Occlusion:}\\
                    Die zu klassifizierenden Objekte können teilweise verdeckt sein.\\
                    \includegraphics[width = .8\textwidth]{occlusion.png}
                \item \textbf{Background Clutter:}\\
                    Das Bild kann einen Hintergrund mit starker Ähnlichkeit zu dem Objekt haben.\\
                    \includegraphics[width = .8\textwidth]{background clutter.png}
            \end{itemize}
            Um diese Probleme zu umgehen werden mehrschichtige Erkennungsmodelle verwendet.
            Hierdurch wird versucht eine abstraktere Erkennung der Objekte zu ermöglichen.\\
            \includegraphics[width=\textwidth]{abstract catifier.png}\\
            Ein Beispiel für die einzelnen Features könnte wie folgt aussehen:\\
            \includegraphics[width = \textwidth]{car features.png}
            
    \section{\acp{CNN}}
    \label{cnn}
        \acp{CNN} enthalten 3 wichtige Bestandteilen:\\
        \includegraphics[width=.8\textwidth]{cnn_building_blocks.png}\\
        Diese Bestandteile können beliebig oft hintereinander geschaltet sein.
        Zudem ist an ein komplettes \ac{CNN} zumeist noch ein weiteres Netzwerk für die Ausgabe der Vorhersage angeschlossen:\\
        \includegraphics[width = \textwidth]{cnn_complete.png}

        \subsection{convolutional stage}
        \label{cnn: convolutional stage}
            In der \say{convolutional stage} werden \say{convolutional layer} (Faltunsschicht) verwendet.
            Diese wenden einen beweglichen Filter (detector) auf die Daten der vorhergegangenen Schicht an.
            Hierbei stellt der detector ein Rezeptives Feld dar (vergleichbar mit dem Auge).\\
            \includegraphics[width = \textwidth]{convolutional_operation.png}\\
            \begin{wrapfigure}{h}{.4\textwidth}
                \includegraphics[width = .4\textwidth]{cnn_inter_layer_connection.png}
            \end{wrapfigure}
            Aufgrund der geringen Größe des rezeptiven Feldes ist jedes Neuron in der nachfolgenden Schicht jeweils nur mit wenigen Neuronen in der unterliegenden Schicht verbunden:\\
            \includegraphics[width=\textwidth]{convolutional filter.png}\\

            \subsubsection{Beispiel}
            \label{cnn: example}
                Im folgenden wird das Verfahren des convolutional layers anhand von $3\times 3$ Filtern demononstriert.
                Diese werden auf einem $6\times 6$ Bild verschoben.
                Die Filter sollen jeweils unterschiedliche geometrische Formen erkennen (Filter1: Diagonalen)\\
                \includegraphics[width=.8\textwidth]{cnn_example1.png}\\
                Über den Parameter \say{stride} kann eingestellt werden, um wieviele Elemente der Filter jeweils verschoben wird:\\
                \includegraphics[width = .8\textwidth]{cnn_example_stride1.png}\\
                \includegraphics[width = .8\textwidth]{cnn_example_stride2.png}\\
                Für jeden Filter entsteht durch diese Anwendung ein kleineres Bild, welches aus dem Ausgangsbild errechnet wurde:\\
                \includegraphics[width=.8\textwidth]{cnn_feature_map1.png}\\
                Durch die Anwendung der verschiedenen Filter entsteht hierbei eine mehrdimensionale \say{Feature Map}.
                Diese wird allgemein als \say{Tensor} bezeichnet:\\
                \includegraphics[width=.8\textwidth]{cnn_feature_map2.png}\\

            \subsubsection{Convolutional vs. Fully Connected}
            \label{cnn: convolutional vs. fully connected}
                Der Vorteil, den der Ansatz der Faltungsschichten gegenüber dem einsatz von \say{fully connected layers} hat ist,
                dass deutlich weniger Parameter benötigt werden.\\
                \includegraphics[width = .8\textwidth]{convolutional_vs_fully-connected.png}

        \subsection{non-linear stage}
        \label{cnn: non-linear stage}
            Es ist mathematisch beweisbar, dass für die Abbildung von gleichen Äquivalenzklassen auf eine Referenzklasse eine nicht-linear Funktion benötigt wird.
            Hierbei gibt es mehrere mögliche Funktionen.
            Die bekannteste ist hierbei die \say{Sigmoid}-Funktion.
            Bei \acp{CNN} wird allerdings meistens die \say{ReLU}-Funktion verwendet.\\
            \includegraphics[width = \textwidth]{non-linear_functions.png}

        \subsection{Pooling}
        \label{cnn:pooling}
            Beim \say{Pooling} wird die Menge der Elemente in einer Schicht reduziert.
            Hierbei wird darauf geachtet, dass nur unwichtige Daten \say{verloren gehen}.
            Man spricht auch von \say{Subsampling}.\\
            \includegraphics[width = .8\textwidth]{subsampling.png}

            \subsubsection{Max Pooling}
            \label{cnn: max pooling}
                Das \say{Max Pooling} ist eine Form des Poolings, bei dem mehrere Elemente einer schicht dadurch zusammengefasst werden,
                dass nur die Element mit dem höchsten Wert erhalten bleiben.\\
                \includegraphics[width = .8\textwidth]{max_pooling.png}

    \section{classsical \ac{ML} vs. Deep Learning}
        \includegraphics[width = \textwidth]{classical_ml_vs_deep_learning.png}

    \section{Probleme des Deep Learning}
        \begin{itemize}
            \item \textbf{Deep Learning ist gierig:}\\
                Es werden Millionen von Datensätze für das Training von Deep Learning Modellen benötigt.
            \item \textbf{Deep Learing ist undurchsichtig:}\\
                Deep Learing Modelle sind Black Box Modelle, die kontextunabhängig arbeiten
            \item \textbf{Deep Learning ist spröde:}\\
                Deep Learning Modelle können bei manchen Anwendungen gut funktionieren und bei anderen komplett scheitern;
                sie sind nicht-linerare Natur
        \end{itemize}
        \includegraphics[width = \textwidth]{deep_learing_problems.png}\\
        \includegraphics[width = \textwidth]{dumm_aber_raffiniert.png}

    \section{aktuelle Trends}
        \includegraphics[width = \textwidth]{trends.png}
