Neural Networks Grundlagen hinzugefügt.

This commit is contained in:
paul-loedige 2022-02-16 21:48:44 +01:00
parent 1dc2ea3a94
commit 5a2303eb23
14 changed files with 177 additions and 0 deletions

View File

@ -80,6 +80,9 @@
\newacronym{RBF}{RBF}{Radial Basis Function Kernel}
\newacronym{SVM}{SVM}{Support Vector Machine}
\newacronym{ARD}{ARD}{Automatic Relevance Determination}
\newacronym{MLP}{MLP}{Multi-Layer Perceptron}
\newacronym{ReLU}{ReLU}{Rectified Linear Unit}
\newacronym{ELU}{ELU}{Exponential Linear Units}
%--------------------
%nomenclature
@ -134,6 +137,7 @@
\newnom{gaussian_distribution}{Gaußsche Normalverteilung}{\mathcal{N}}{}
\newnom{gaussian_process}{Gaußscher Prozess}{\mathcal{GP}}{}
\newnom{hyper_parameters}{Hyper-Parameter}{\bm{\beta}}{}
\newnom{activation_function}{Aktivierungsfunktion}{\phi}{}
\shorthandoff{"}
\makeglossaries

View File

@ -51,6 +51,7 @@
\part{Neural Networks}
\label{part:Neural Networks}
\input{chapters/Neural_Networks/Basics.tex}
\input{chapters/Neural_Networks/Neural_Networks_and_Backpropagation.tex}
\input{chapters/Neural_Networks/CNNs_and_LSTMs.tex}

View File

@ -22,6 +22,8 @@
\usepackage{svg}
%subfigures
\usepackage{subcaption}
%borders around images
\usepackage[export]{adjustbox}
%--------------------
%german quotation
@ -117,6 +119,7 @@ rightsub = \grq%
\DeclareMathOperator*{\lik}{lik}
\DeclareMathOperator*{\loss}{loss}
\DeclareMathOperator*{\loglik}{loglik}
\DeclareMathOperator*{\softmax}{softmax}
%special symbols
\usepackage{fontawesome}
\usepackage{amssymb}

View File

@ -0,0 +1,169 @@
\chapter{Basics}%
\label{cha:Neural Networks:Basics}
Neuronale Netze sind vom menschlichen Gehirn inspiriert.
Dieses besteht aus einer Vielzahl ($\approx 10^11$) Neuronen,
die untereinander stark verknüpft sind ($\approx 10^4$ Verknüpfungen pro Neuron).
Das Signal der eingehenden Neuronen muss stark genug sein,
damit ein angesteuertes Neuron ein Signal ausgibt.
Diesem Prinzip folgend bestehen auch Neuronale Netze aus einfachen Bestandteilen (den Neuronen\slash\,Perzeptronen).
Ein Neuron hat dabei mehrere Eingänge und einen Ausgang.
Die Berechnung des Ausgabewertes ergibt sich durch
\begin{equation} \label{eq:perceptron_output_function}
y = \nomeq{activation_function}(\bm{w}^T\bm x + b)
\end{equation}
\begin{wrapfigure}{r}{.5\textwidth}
\vspace*{-5mm}
\centering
\includegraphics[width=0.8\linewidth]{perceptron.png}
\caption{Aufbau eines Perzeptron}
\label{fig:perceptron}
\vspace*{-20mm}
\end{wrapfigure}
\begin{itemize}
\item $y$:\tabto{15mm}Output
\item \nomsym{activation_function}:\tabto{15mm}\noms{activation_function}
\item $\bm w$:\tabto{15mm}Gewichte
\item $\bm x$:\tabto{15mm} Inputs
\item $b$:\tabto{15mm}Bias
\end{itemize}
Ein Beispiel für eine solche Output-Funktion ist schon aus \cref{cha:Linear Regression} bekannt.
\section{Feedforward Neural Networks}%
\label{sec:Feedforward Neural Networks}
\begin{wrapfigure}{r}{.4\textwidth}
\vspace*{-10mm}
\centering
\includegraphics[width=\linewidth]{feedforward_neural_network.png}
\caption{Feedforward Neural Network}
\label{fig:feedforward_neural_network}
\end{wrapfigure}
Ein Feedforward Neural Network ist ein Neurales Netzwerk,
bei dem die einzelnen Neuronen in Schichten aufgebaut sind,
wobei jedes Neutronen nur Inputs aus der darunterliegenden Schicht erhält und an die darüberliegende Schicht weitergibt.
Feedforward Neural Networks werden daher auch als \glspl{MLP} bezeichnet.
Das Netzwerk hat daher die Form eines gerichteten azyklischen Graphens (Directed Acyclic Graph).
Hierbei werden die Eingabewerte an die Eingabeschicht (Input Layer) übergeben und die Ausgabe des Neuralen Netzwerkes erfolgt an der Output Layer.
Alle Schichten zwischen Input und Output Layer werden als verdeckte Schichten (Hidden Layer) bezeichnet.
Die Gewichte zwischen den einzelnen Layern bilden eine Matrix $\bm W$.
Der Ausgabevektor $\bm y$,
bestehend aus den Ausgabewerten der in der Schicht enthaltenen Neuronen,
ergibt sich durch:
\begin{equation} \label{eq:output_function_feedforward_layer}
\bm y = \nomeq{activation_function}(\bm W\bm x + \bm b)
\end{equation}
\begin{wrapfigure}{r}{.3\textwidth}
\vspace*{-8mm}
\centering
\includegraphics[width=0.8\linewidth]{feedforward_neural_network_composition.png}
\caption{Feedforward Neural Network mit Funktionen}
\label{fig:feedforward_neural_network_composition}
\vspace*{-20mm}
\end{wrapfigure}
Da jede Layer einen Vektor als Eingabe und Ausgabe hat,
kann man sie auch als vektorwertige Funktion schreiben
\begin{align} \label{eq:feedforward_neural_network_vector_valued_function}
\bm h^{(1)} &= f^{(1)}(\bm x)\\
\bm h^{(2)} &= f^{(2)}(\bm h^{(1)})\\
\vdots\\
\bm y &= f^{(L)}(\bm h^{(L-1)})
\end{align}
Daher kann man die Ausgabe eines Feedforward Neural Networks auch als Komposition der Funktionen der einzelnen Schichten betrachten.
\begin{equation} \label{eq:feedforward_neural_network_composition}
\bm y = f^{(L)}\circ f^{(L-1)}\circ\dots f^{(1)}(\bm x)
\end{equation}
Hieraus ergibt sich allerdings auch,
dass jedes mehrschichtige Feedforward Neural Network auch durch ein Netzwerk mit nur einer Schicht ersetzt werden kann (Universal Representation).
Hierzu wären allerdings eine exponentielle Anzahl an Neuronen nötig,
weshalb in der Praxis mehrschichtige Netzwerke verwendet werden (Compact Representation).
\subsection{Example: XOR}%
\label{sub:Example: XOR}
({\color{red}siehe Vorlesung 08 Folie 25 und 26})
\section{\nomf{activation_function}}%
\label{sec:Activation Function}
Die \nomf{activation_function} gibt vor,
ab welchem Schwellwert das Produkt aus Eingangswerten und Gewichten zu relevanten Ausgabewert führt.
In den meisten Fällen wird die \glsxtrshort{ReLU} \noms{activation_function} verwendet,
wobei es sich auch lohnt, die Leaky \glsxtrshort{ReLU} oder \glsxtrshort{ELU} auszubrobieren.
Die Sigmoid Funktion (\cref{ssub:Logistic sigmoid function}) sollte ausschließlich als \noms{activation_function} in Klassifikationsproblemen verwendet werden.\\
\includegraphics[scale=.7]{sigmoid_activation_function.png}\\
\hrule{\textwidth,1mm}
\includegraphics[scale=.7]{tanh_activation_function.png}\\
\hrule{\textwidth,1mm}
\includegraphics[scale=.7]{ReLU_activation_function.png}\\
\hrule{\textwidth,1mm}
\includegraphics[scale=.7]{Leaky_ReLU_activation_function.png}\\
\hrule{\textwidth,1mm}
\includegraphics[scale=.7]{exponential_linear_units_activation_function.png}\\
\section{Optimization}%
\label{sec:Optimization}
Die Optimierung der Parameter $\bm \theta$ erfolgen nach allgemeinen ML Rezept:
\begin{equation} \label{eq:neural_network_parameter_optimization}
\bm\theta^* = \argmin_{\bm\theta} \sum_{i=1}^N l(\bm x_i,\bm\theta) + \nomeq{regularization_factor}\text{ penalty}(\bm\theta)
\end{equation}
Welche Loss Function $l$ verwendet werden sollte hängt dabei vom Anwendungsgebiet ab:
\begin{table}[H]
\centering
\caption{Loss Functions für verschiedene Anwendungsaufgaben}
\label{tab:loss_functions_for_different_tasks}
\begin{tabularx}{\textwidth}{|c|Y|Y|}
\hline
& \bfseries Deterministic & \bfseries Probabilistic \\
\hline
\hline
\multicolumn{3}{|c|}{\bfseries Regression} \\
\hline
\bfseries Output Layer &
\begin{tabular}{@{}c@{}} linear \\ $\bm f = \bm W^{(L)}\bm h^{(L-1)}+\bm b^{(L)}$ \end{tabular} &
\begin{tabular}{@{}c@{}} linear Gaussian \\ $p(\bm y|\bm x) = \nomeq{gaussian_distribution}(\bm y|\bm W^{(L)}\bm h^{(L-1)} + \bm b^{(L)}, \nomeq{covariance})$\end{tabular}\\
\hline
\bfseries Loss &
\begin{tabular}{@{}c@{}} squared error \\ $l_i(\bm x_i,\bm\theta) = \frac{1}{2}(\bm f(\bm x_i)-\bm y_i)^2$\end{tabular} &
\begin{tabular}{@{}c@{}} negative log-likelihood \\ $l_i(\bm x_i,\bm\theta) = -\log\nomeq{gaussian_distribution}(\bm y_i|\bm\mu(\bm x_i),\nomeq{covariance})$ \end{tabular}\\
\hline
\hline
\multicolumn{3}{|c|}{\bfseries Binary Classification} \\
\hline
\bfseries Output Layer &
\begin{tabular}{@{}c@{}} linear \\ $\bm f = \bm W^{(L)}\bm h^{(L-1)}+ b^{(L)}$ \end{tabular} &
\begin{tabular}{@{}c@{}} sigmoid \\ $f = \sigma(\bm W^{(L)}\bm h^{(L-1)} + b^{(L)})$\end{tabular}\\
\hline
\bfseries Loss &
\begin{tabular}{@{}c@{}} \nameref{sub:Hinge Loss} \\ $l(\bm x_i, \bm\theta) = \max(0,1-y_i f(\bm x_i))$\end{tabular} &
\begin{tabular}{@{}c@{}} negative log-likelihood \\ $l_i(\bm x_i,\bm\theta) = -c_i \log f(\bm x_i)$\end{tabular}\\
\hline
\hline
\multicolumn{3}{|c|}{\bfseries Multi-class Classification} \\
\hline
\bfseries Output Layer &
\begin{tabular}{@{}c@{}} linear \\ $\bm f = \bm W^{(L)}\bm h^{(L-1)} + \bm b^{(L)}$\end{tabular} &
\begin{tabular}{@{}c@{}} sigmoid \\ $\bm f = \softmax(\bm W^{(L)}\bm h^{(L-1)} + \bm b^{(L)})$\end{tabular}\\
\hline
\bfseries Loss &
\begin{tabular}{@{}c@{}} Multi-class SVM loss \\ {\color{red} in diesem Fach nicht behandelt} \end{tabular} &
\begin{tabular}{@{}c@{}} negative log-likelihood \\ $l_i(\bm x_i,\bm\theta) = -\sum_{k=1}^K \bm h_{c_i,k} \log y_k(\bm x_i)$\end{tabular}\\
\hline
\end{tabularx}
\end{table}
\section{Feature Learning}%
\label{sec:Feature Learning}
Die letzte Schicht eines Neural Networks macht im Prinzip nur eine \nameref{cha:Linear Regression},
welche durch die vorhergegangenen Schichten vorbereitet wird.
\begin{figure}[H]
\centering
\includegraphics[width=0.7\textwidth]{feature_learning.png}
\caption{Schichten vor dem letzten Layer bereiten die Daten für eine \nameref{cha:Linear Regression} vor}
\label{fig:feature_learning}
\end{figure}
\subsection{Beispiel}%
\label{sub:Feature Learning:Beispiel}
{\color{red} siehe Vorlesung 08 Folie 35}

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 KiB

BIN
images/feature_learning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
images/perceptron.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB