\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}
siehe \cref{sec:Beispiel: Neural Network: XOR}

\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 \dref{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}
siehe \cref{sec:Beispiel: Neural Networks: Feature Learning}
