forked from TH_General/Template_Summary
128 lines
5.5 KiB
TeX
128 lines
5.5 KiB
TeX
\chapter{\texorpdfstring{\glsxtrshortpl{CNN} and \glsxtrshortpl{RNN}}{\glsfmtshortpl{CNN} and \glsfmtshortpl{RNN}}}%
|
|
\label{cha:CNNs and RNNs}
|
|
\glspl{CNN} kommen in einer Vielzahl verschiedener Anwendungsbereiche zum Einsatz.
|
|
Vor allem im Bereich der Bildverarbeitung sind diese besonders nützlich (Beispiele: {\color{red} Vorlesung 09 Folien 3 und 4}).
|
|
\glspl{CNN} bestehen aus einer Verkettung verschiedenartiger Schichten.
|
|
\begin{figure}[H]
|
|
\centering
|
|
\includegraphics[width=0.6\textwidth]{CNN.png}
|
|
\caption{Beispiel eines \texorpdfstring{\glsxtrshort{CNN}}{\glsfmtshort{CNN}}}
|
|
\label{fig:cnn}
|
|
\end{figure}
|
|
|
|
\section{Image-based Inputs}%
|
|
\label{sec:Image-based Inputs}
|
|
Der Nachteil von Bilddateien ist,
|
|
dass diese sehr viele Daten enthalten.
|
|
Schon ein 32x32 Pixel großes Bild mit 3 Farben (RGB) hat $32\cdot32\cdot3=3072$ Datenpunkte.
|
|
Würde man diese Daten ein einen Vektor verpacken
|
|
und anschließend mit einem neuronalen Netzwerk mit (nur) 10 Neuronen verarbeiten,
|
|
führt dies bereits zu einer Anzahl von $10^3072$ Gewichten,
|
|
welche trainiert werden müssen.
|
|
\begin{figure}[H]
|
|
\centering
|
|
\includegraphics[width=0.8\textwidth]{image-based_inputs.png}
|
|
\caption{Beispiel für die Anzahl der nötigen Gewichte eines 32x32 Bildes}
|
|
\label{fig:image-based_inputs}
|
|
\end{figure}
|
|
|
|
\section{Convolutional Layers}%
|
|
\label{sec:Convolutional Layers}
|
|
Das Convolutional Layer akzeptiert Eingabedaten mit dem Volumen $W_1\times H_1\times D_1$ und erzeugt daraus Daten mit dem Volumen $W_2\times H_2\times D_2$.
|
|
\begin{itemize}
|
|
\item Es gibt 4 Hyper-Parameter:
|
|
\begin{itemize}
|
|
\item Filteranzahl \tabto{7cm}$K$
|
|
\item Filtergröße (spacial extend\slash\,kernel size) \tabto{7cm}$F$
|
|
\item Schrittweite (Stride)\tabto{7cm}$S$
|
|
\item Padding \tabto{7cm}$P$
|
|
\end{itemize}
|
|
\item die Dimension der Ausgabe errechnet sich aus der Eingabe und den Hyper-Parametern
|
|
\begin{itemize}
|
|
\item $W_2 = \frac{(W_1 - F + 2P)}{S} + 1$
|
|
\item $H_2 = \frac{H_1 - F + 2P}{S} + 1$
|
|
\item $D_2 = K$
|
|
\end{itemize}
|
|
\item Die Anzahl der zu trainierenden Gewichte ist $F\cdot F\cdot D_1\cdot K$
|
|
\end{itemize}
|
|
Mithilfe eines Convolutional Layers werden Filter auf gegebene Daten angewant.
|
|
\begin{figure}[H]
|
|
\centering
|
|
\includegraphics[width=0.6\textwidth]{convolutional_layer.png}
|
|
\caption{Convolutional Layer}
|
|
\label{fig:convolutional_layer}
|
|
\end{figure}
|
|
Jeder Filter errechnet mithilfe einer Filtermatrix ein Produkt aus einer Teilmenge der Eingangsdaten.
|
|
Jedes dieser Produkte ergibt einen einzelnen Datenpunkt auf der \say{activation map}.
|
|
\begin{figure}[H]
|
|
\centering
|
|
\includegraphics[width=0.6\textwidth]{1-channel_convolution_example.png}
|
|
\caption{Beispiel einer 1-Kanal Convolutional}
|
|
\label{fig:1-channel_convolution_example}
|
|
\end{figure}
|
|
Meist werden in einem Convolutional Layer mehrere Filter verwendet,
|
|
was zu mehreren Activation Maps führt.
|
|
\begin{figure}[H]
|
|
\centering
|
|
\includegraphics[width=0.6\textwidth]{convolutional_layer_stack_filter.png}
|
|
\caption{Convolutional Layer mit mehreren gestapelten (stacked) Filtern}
|
|
\label{fig:convolutional_layer_stack_filter}
|
|
\end{figure}
|
|
|
|
\subsection{Stride and Padding}%
|
|
\label{sub:Stride and Padding}
|
|
\begin{wrapfigure}{r}{.5\textwidth}
|
|
\centering
|
|
\includegraphics[width=\linewidth]{padding_and_stride.png}
|
|
\caption{Beispiel für Padding und Stride}
|
|
\label{fig:padding_and_stride}
|
|
\end{wrapfigure}
|
|
Neben der Filtergröße sind die zwei wichtigsten Parameter eines Convolution Layers die Schrittweite (Stride)
|
|
und die Wahl des Paddings.
|
|
Die Schrittweite gibt an,
|
|
wie weit sich dein Filter zwischen jeder Berechnung verschiebt.
|
|
Eine größere Schrittweite führt dazu,
|
|
dass die Dimension der Daten stärker reduziert wird.
|
|
Beim Padding werden zusätzliche Daten (meist nur Nullen) um die Eingabedaten des Convolution Layers herum erzeugt.
|
|
Ein Beispiel hier für ist in {\color{red} Vorlesung 09 Folie 14 und 15} zu sehen.
|
|
|
|
\section{Pooling Layers}%
|
|
\label{sec:Pooling Layers}
|
|
\begin{wrapfigure}{r}{.4\textwidth}
|
|
\vspace*{-10mm}
|
|
\centering
|
|
\includegraphics[width=.8\linewidth]{pooling_layer.png}
|
|
\caption{Pooling Layer}
|
|
\label{fig:pooling_layer}
|
|
\end{wrapfigure}
|
|
Pooling Layer werden dazu verwendet die Dimensionalität der Daten zu reduzieren.
|
|
Die Dimension der Eingabedaten wird von $W_1\times H_1\times D_1$ zu $W_2\times H_2\times D_2$ reduziert.
|
|
\begin{itemize}
|
|
\item 2 Hyper-Parameter
|
|
\begin{itemize}
|
|
\item Filtergröße (spacial extend\slash\,kernel size) \tabto{7cm}$F$
|
|
\item Schrittweite (Stride)\tabto{7cm}$S$
|
|
\end{itemize}
|
|
\item die Dimension der Ausgabe errechnet sich aus der Eingabe und den Hyper-Parametern
|
|
\begin{itemize}
|
|
\item $W_2 = \frac{(W_1 - F)}{S} + 1$
|
|
\item $H_2 = \frac{H_1 - F}{S} + 1$
|
|
\item $D_2 = D_1$
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\subsection{Max-Pooling}%
|
|
\label{sub:Max-Pooling}
|
|
\begin{wrapfigure}{r}{.5\textwidth}
|
|
\vspace*{-10mm}
|
|
\centering
|
|
\includegraphics[width=\linewidth]{max-pooling.png}
|
|
\caption{Max-Pooling}
|
|
\label{fig:max-pooling}
|
|
\end{wrapfigure}
|
|
Die am häufigsten verwendete Variante eines Pooling Layers verwendet das Max-Pooling verfahren.
|
|
Hierbei wird die Dimensionalität einfach reduziert,
|
|
indem der mehrere Datenpunkte zu einem Datenpunkt zusammengefasst werden,
|
|
wobei der Wert des neuen Datenpunktes gleich dem höchsten Wert der zusammengefassten Datenpunkte entspricht.
|
|
|
|
|