98 lines
5.7 KiB
TeX

\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.