\chapter{\acfp{CNN}} \label{cnn} \acp{CNN} enthalten 3 wichtige Bestandteilen: \begin{center} \includegraphics[width=.7\textwidth]{cnn_building_blocks.png} \end{center} 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: \begin{center} \includegraphics[width = .7\textwidth]{cnn_complete.png} \end{center} \section{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}{r}{.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:\\ \vspace{30mm} \includegraphics[width=\textwidth]{convolutional filter.png} \pagebreak \subsection{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=.6\textwidth]{cnn_example1.png}\\ Über den Parameter \say{stride} kann eingestellt werden, um wieviele Elemente der Filter jeweils verschoben wird:\\ \includegraphics[width = .7\textwidth]{cnn_example_stride1.png}\\ \includegraphics[width = .7\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}\\ \pagebreak \subsection{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} \section{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 = .9\textwidth]{non-linear_functions.png} \section{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} \subsection{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{Regularisierung} \label{cnn: regularisierung} Um Overfitting zu vermeiden können die Verlustfunktionen (Zusammenfassung KI), mithilfe derer die Gewichte über Backpropagation (\ref{knn: backpropagation}) geupdated werden, regularisiert werden.\\ \textbf{Vorsicht:} eine zu starke Regularisierung kann zu einem Underfitting führen, wohingegen eine zu schwache Regularisierung das Overfitting nicht verhindert. Meist lässt sich die \say{Stärke} der Regularisierung durch eine Parameter ($\lambda$) vorgeben. \subsection{Lasso Regularisierung} \label{cnn: lasso regularisierung} Die Lasso Regularisierung nutzt die $L_1$-Norm: $$L_1(\bm{w})=\sum_{w_i\in\bm{w}}|w_i|$$ Hierdurch ergibt sich für den Wert, mit dem die Gewichte geupdated werden: $$V(y,y')+\lambda\cdot L_1(\bm{w}) = V(y,y') + \lambda\cdot\sum_{w_i\in\bm{w}}|w_i|$$ \subsection{Tikhonov Regularisierung} \label{cnn: ridge regression} Die auch als \say{Ridge Regression} bekannte Regularisierung nutzt die $L_2$-Norm: $$L_2(\bm{w})=\sqrt{\sum_{w_i\in\bm{w}}|w_i|^2}$$ Hierdurch ergibt sich für den Wert, mit dem die Gewichte geupdated werden: $$V(y,y')+\lambda\cdot L_2^2(\bm{w}) = V(y,y') + \lambda\cdot\sum_{w_i\in\bm{w}}|w_i|^2$$ \subsection{Early Stopping} \label{cnn: early stopping} Das Verfahren des \say{Early Stopping} kann als eine Regularisierung in der Zeit betrachtet werden. Hierbei wird nach einer bestimmten Anzahl von Epochen das Lernen beendet. Dies kann ebenfalls ein Overfitting verhindern.