\chapter{Auto-Encoders}%
\label{cha:Auto-Encoders}
\begin{wrapfigure}{r}{.5\textwidth}
    \centering
    \includegraphics[width=\linewidth]{auto-encoder.png}
    \caption{Auto-Encoder}
    \label{fig:auto-encoder}
\end{wrapfigure}
Auto-Encoder sind \nameref{sec:Feedforward Neural Networks} (\cref{sec:Feedforward Neural Networks}),
welche auf Basis einer Eingabe $\bm x$ $\bm x$ vorhersagen.
Die Besonderheit liegt darin,
dass ein Auto-Encoder ein Bottelneck-Layer enthält,
welches eine deutlich geringere Dimension als die Eingabedaten hat.
Dies zwingt den Auto-Encoder implizit zu einer \dref{cha:Dimensionality Reduction}.
Das Ziel ist es den Reconstruction Loss $L(\bm\theta)$ zu minimieren.
\begin{equation} \label{eq:auto-encoder_reconstruction_loss}
    L(\bm\theta) = \sum_i \|\dec_{\bm\theta}(\enc_{\bm\theta}(\bm x_i)) - \bm x_i \|^2
\end{equation}
Die einfachste Form eines Auto-Encoders verwendet jeweils nur eine lineare Schicht für das Encoden und Decoden (meist \gls{PCA} (\cref{sub:PCA})).

\paragraph{Anwendungsgebiete}%
\label{par:Auto-Encoders:Anwendungsgebiete}
Es gibt mehrere Gründe für den Einsatz von Auto-Encodern:
\begin{itemize}
    \item Mapping von höherdimensionalen Daten in zweidimensionale Visualisierung
    \item Datenkompression (hierfür werden \glsxtrshortpl{VAE}(\cref{sec:VAEs}) benötigt)
    \item Lernen von abstrakten Features als Datenvorverarbeitung für einen Supervised Learning Algorithmus (\cref{part:Classical Supervised Learning})
    \item \say{semantically meaningful representation}, die z.B. eine Interpolation zwischen Bildern ermöglicht (\cref{??})
\end{itemize}

\section{Deep Auto-Encoders}%
\label{sec:Deep Auto-Encoders}
Deep Auto-Encoders sind Auto-Encoder,
welche die Daten nicht auf eine linearen Unterraum projizieren,
sondern stattdessen auf eine nichtlineare \gls{manifold} abbildet.
Nichtlineare Auto-Encoder haben den vorteil,
dass sie deutlich mächtigere \say{Codes} lernen können als lineare Auto-Encoder.
\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{linear_nonlinear_auto-encoder_comparison.png}
    \caption{Vergleich von linearen und nichtlinearen Auto-Encodern}
    \label{fig:linear_nonlinear_auto-encoder_comparion}
\end{figure}

\subsection{Generative Model}%
\label{sub:Generative Model}
\begin{wrapfigure}{r}{.4\textwidth}
    \vspace*{-10mm}
    \centering
    \includegraphics[width=0.8\linewidth]{noisy_decoder.png}
    \caption{Noisy Decoder}
    \label{fig:noisy_decoder}
\end{wrapfigure}
Da Deep Auto-Encoder keine Verteilung erlernen können sie eigentlich nicht als generative Modelle verwendet werden.
Dies liegt vor allem daran,
dass der Decoder für einen Deep Auto-Encoder deterministisch arbeitet.
Dies lässt sich umgehen,
indem ein \say{Noisy Decoder}\slash\,\say{Noisy Observation Model} definiert wird.
\begin{equation} \label{eq:noisy_decoder}
    p(\bm x|\bm z) = \nomeq{gaussian_distribution}{\bm x|\bm\mu_{\bm\theta}(\bm z),\nomeq{variance}\nomeq{identity_matrix}}
\end{equation}
\begin{itemize}
    \item $\bm\mu_{\bm\theta(\bm z)}$: Funktion des Decoders mit den Parametern $\bm\theta$
\end{itemize}


\section{\glstopfullpl{VAE}}%
\label{sec:VAEs}
Ein \gls{VAE} unterscheidet sich von normalen Auto-Encodern darin,
dass es zugleich ein Generative Model ist.
Hierbei verwenden \glspl{VAE} das Verfahren der Amortized Variational Inference (\cref{par:Special Case 2: Amortized Variational Inference}) für die \dref{cha:Dimensionality Reduction}.

\subsection{Class\-/conditional \glstopshort{VAE}}%
\label{sub:Class-conditional VAE}
\begin{wrapfigure}{r}{.3\textwidth}
    \centering
    \includegraphics[width=0.8\linewidth]{class-conditional_VAE.png}
    \caption{Class\-/conditional VAE}
    \label{fig:class-conditional_VAE}
\end{wrapfigure}
Eine Erweiterung des \gls{VAE} sind Class"~conditional \glspl{VAE}.
Hierbei wird das Label der Eingabedaten sowohl an den Encoder als auch an den Decoder mit übergeben.
Dies ist vor allem für den Decoder eine große Vereinfachung,
da er nun nur noch versuchen muss eine Variation (z.B. Schriftart) einer bekannten Ausgabe (z.B. die Zahl 3) zu regenerieren.
\begin{itemize}
    \item Durch die Veränderung von zwei latenten Dimensionen (z.B. Dimensionen von $\bm z$) bei gleichbleibenden $y$ kann der \say{latent space} visualisiert werden.
        \begin{figure}[H]
            \centering
            \includegraphics[width=0.8\linewidth]{latent_space.png}
            \caption{Latent Space}
            \label{fig:latent_space}
        \end{figure}
    \item Durch die Veränderung des Labels $y$ bei gleichbleibenden $\bm z$ können Analogien von Bildern erzeugt werden
        \begin{figure}[H]
            \centering
            \includegraphics[width=0.7\textwidth]{image_analogies.png}
            \caption{Image Analogies}
            \label{fig:image_analogies}
        \end{figure}
    \item die Interpolation zwischen zwei Vektoren im \say{latent space} kann zu interessanten Ergebnissen führen
        \begin{figure}[H]
            \centering
            \includegraphics[width=0.8\textwidth]{latent_space_vector_interpolation.png}
            \label{fig:latent_space_vector_interpolation}
        \end{figure}
\end{itemize}

