diff --git a/ML_Zusammenfassung.tex b/ML_Zusammenfassung.tex index 9570371..e569b0c 100644 --- a/ML_Zusammenfassung.tex +++ b/ML_Zusammenfassung.tex @@ -18,38 +18,39 @@ \def \DATE{\today} \includeonly{ - %Einleitung - chapters/Einleitung, - %Classical_Supervised_Learning - chapters/Classical_Supervised_Learning/Linear_Regression, - chapters/Classical_Supervised_Learning/Linear_Classification, - chapters/Classical_Supervised_Learning/Model_Selection, - chapters/Classical_Supervised_Learning/k-Nearest_Neighbors, - chapters/Classical_Supervised_Learning/Trees_and_Forests, - %Kernel_Methods - chapters/Kernel_Methods/Kernel-Regression, - chapters/Kernel_Methods/Support_Vector_Machines, - chapters/Bayesian_Learning/Bayesian_Learning, - chapters/Bayesian_Learning/Bayesian_Regression_Algorithms, + %Einleitu%ng + %chapters/Einleitung, + %%Classical_Supervised_Learning + %chapters/Classical_Supervised_Learning/Linear_Regression, + %chapters/Classical_Supervised_Learning/Linear_Classification, + %chapters/Classical_Supervised_Learning/Model_Selection, + %chapters/Classical_Supervised_Learning/k-Nearest_Neighbors, + %chapters/Classical_Supervised_Learning/Trees_and_Forests, + %%Kernel_Methods + %chapters/Kernel_Methods/Kernel-Regression, + %chapters/Kernel_Methods/Support_Vector_Machines, + %chapters/Bayesian_Learning/Bayesian_Learning, + %chapters/Bayesian_Learning/Bayesian_Regression_Algorithms, %Neural_Networks chapters/Neural_Networks/Basics, chapters/Neural_Networks/Gradient_Descent, chapters/Neural_Networks/Regularization, chapters/Neural_Networks/Practical_Considerations, - chapters/Neural_Networks/CNNs_and_RNNs, - %Classical_Unsupervised_Learning - chapters/Classical_Unsupervised_Learning/Dimensionality_Reduction_and_Clustering, - chapters/Classical_Unsupervised_Learning/Density_Estimation_and_Mixture_Models, - chapters/Classical_Unsupervised_Learning/Variational_Auto-Encoders, - %Mathematische_Grundlagen - chapters/Mathematische_Grundlagen/Lineare_Algebra, - chapters/Mathematische_Grundlagen/Probability_Theory, - chapters/Mathematische_Grundlagen/Kernel_Basics, - chapters/Mathematische_Grundlagen/Sub-Gradients, - chapters/Mathematische_Grundlagen/Constraint_Optimization, - chapters/Mathematische_Grundlagen/Gaussian_Identities, - %Anhang - Appendix + chapters/Neural_Networks/CNN, + chapters/Neural_Networks/RNN, + %Classical%_Unsupervised_Learning + %chapters/Classical_Unsupervised_Learning/Dimensionality_Reduction_and_Clustering, + %chapters/Classical_Unsupervised_Learning/Density_Estimation_and_Mixture_Models, + %chapters/Classical_Unsupervised_Learning/Variational_Auto-Encoders, + %%Mathematische_Grundlagen + %chapters/Mathematische_Grundlagen/Lineare_Algebra, + %chapters/Mathematische_Grundlagen/Probability_Theory, + %chapters/Mathematische_Grundlagen/Kernel_Basics, + %chapters/Mathematische_Grundlagen/Sub-Gradients, + %chapters/Mathematische_Grundlagen/Constraint_Optimization, + %chapters/Mathematische_Grundlagen/Gaussian_Identities, + %%Anhang + %Appendix } \input{Glossary.tex} @@ -90,7 +91,8 @@ \include{chapters/Neural_Networks/Gradient_Descent.tex} \include{chapters/Neural_Networks/Regularization.tex} \include{chapters/Neural_Networks/Practical_Considerations.tex} - \include{chapters/Neural_Networks/CNNs_and_RNNs.tex} + \include{chapters/Neural_Networks/CNN.tex} + \include{chapters/Neural_Networks/RNN.tex} \part{Classical Unsupervised Learning} \label{part:Classical Unsupervised Learning} diff --git a/chapters/Neural_Networks/CNN.tex b/chapters/Neural_Networks/CNN.tex new file mode 100644 index 0000000..01e41aa --- /dev/null +++ b/chapters/Neural_Networks/CNN.tex @@ -0,0 +1,168 @@ +\chapter{\texorpdfstring{\glsxtrlongpl{CNN}}{\glsfmtlongpl{CNN}}}% +\label{cha:CNNs} +\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. + +\section{\texorpdfstring{\glsxtrshort{CNN}}{\glsfmtshort{CNN}} Architectures}% +\label{sec:CNN_architectures} +Da \glspl{CNN} schon seit vielen Jahren bekannt sind, +gab es in ihrer Architektur viele Entwicklungsschritte + +\paragraph{LeNet}% +\label{par:LeNet} + +{\color{red} Vorlesung 09 Folie 24} + +\paragraph{ImageNet}% +\label{par:ImageNet} +{\color{red} Vorlesung 09 Folie 25} + +\subparagraph{AlexNet}% +\label{subp:AlexNet} +{\color{red} Vorlesung 09 Folie 26-30} + +\subparagraph{VGG Net}% +\label{subp:VGG Net} +{\color{red} Vorlesung 09 Folie 33-34} + +\subparagraph{ResNet}% +\label{subp:ResNet} +{\color{red} Vorlesung 09 Folie 36-45} + +\subsection{Transfer Learning}% +\label{sub:Transfer Learning} +Da nicht für jede Anwendung Millionen von Trainingsdaten zur Verfügung stehen muss ein alternativer Weg gefunden werden, +\glspl{CNN} auch für diese Anwendungsgebiete zu trainieren. +Ein moderner Trick ist das \say{Transfer Learning}. +Hierbei wird das \gls{CNN} auf einem verwandten Problem trainiert +und anschließend mithilfe von den vorhandenen Datenpunkten spezialisiert. +Hierfür werden ein Teil der Schichten \say{eingefroren} und nur die letzten Schichten trainiert. +Abhängig davon, +wie viele Trainingsdaten für das jeweilige Problem vorhanden sind werden mehr oder weniger Schichten eingefroren. +\begin{figure}[H] + \centering + \includegraphics[width=0.8\textwidth]{transfer_learning.png} + \caption{Beispiel für Transfer Learning} + \label{fig:transfer_learning} +\end{figure} diff --git a/chapters/Neural_Networks/CNNs_and_RNNs.tex b/chapters/Neural_Networks/CNNs_and_RNNs.tex index d9dde75..7a63b86 100644 --- a/chapters/Neural_Networks/CNNs_and_RNNs.tex +++ b/chapters/Neural_Networks/CNNs_and_RNNs.tex @@ -1,2 +1,127 @@ \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. + + diff --git a/chapters/Neural_Networks/RNN.tex b/chapters/Neural_Networks/RNN.tex new file mode 100644 index 0000000..4ee58fa --- /dev/null +++ b/chapters/Neural_Networks/RNN.tex @@ -0,0 +1,3 @@ +\chapter{\texorpdfstring{\glsxtrlongpl{RNN}}{\glsfmtlongpl{CNN}}}% +\label{cha:RNNs} + diff --git a/images/1-channel_convolution_example.png b/images/1-channel_convolution_example.png new file mode 100644 index 0000000..36c7087 Binary files /dev/null and b/images/1-channel_convolution_example.png differ diff --git a/images/CNN.png b/images/CNN.png new file mode 100644 index 0000000..6b36152 Binary files /dev/null and b/images/CNN.png differ diff --git a/images/convolutional_layer.png b/images/convolutional_layer.png new file mode 100644 index 0000000..0e4ae46 Binary files /dev/null and b/images/convolutional_layer.png differ diff --git a/images/convolutional_layer_stack_filter.png b/images/convolutional_layer_stack_filter.png new file mode 100644 index 0000000..00f8f4f Binary files /dev/null and b/images/convolutional_layer_stack_filter.png differ diff --git a/images/image-based_inputs.png b/images/image-based_inputs.png new file mode 100644 index 0000000..34ad85f Binary files /dev/null and b/images/image-based_inputs.png differ diff --git a/images/max-pooling.png b/images/max-pooling.png new file mode 100644 index 0000000..8e73ae9 Binary files /dev/null and b/images/max-pooling.png differ diff --git a/images/padding_and_stride.png b/images/padding_and_stride.png new file mode 100644 index 0000000..9c871c7 Binary files /dev/null and b/images/padding_and_stride.png differ diff --git a/images/pooling_layer.png b/images/pooling_layer.png new file mode 100644 index 0000000..c4a3f5c Binary files /dev/null and b/images/pooling_layer.png differ diff --git a/images/transfer_learning.png b/images/transfer_learning.png new file mode 100644 index 0000000..1aef79c Binary files /dev/null and b/images/transfer_learning.png differ