\chapter{Linear Classification}%
\label{cha:Linear Classification}
Bei der Klassifikation eines Datensatzes $D  =\{(\bm{x}_i,c_i)\}_{i=1\dots N}$ geht es darum,
die einzelnen Datenelemente $\bm{x}_i\in\mathbb{R}^d$ einer Klasse $c\in\{1\dots K\}$ zuzuordnen.

\paragraph{Generative Modelling}%
\label{par:Generative Modelling}
Bei generativen Klassifikator-Modellen wird auf Basis der gegebenen Daten die Wahrscheinlichkeitsverteilung $p(c)$ für alle Klassen
sowie die Wahrscheinlichkeitsverteilungen $p(\bm{x}|c)$ für die Elemente innerhalb der einzelnen Klassen bestimmt.
Anschließend kann mittels der Regel von Bayes (\cref{sub:Bayes Rule}) die Wahrscheinlichkeit dafür errechnet werden,
in welcher Klasse ein gegebenes $\bm{x}$ liegt:
\begin{equation}
    p(c|\bm{x}) = \dfrac{p(\bm{x}|c)p(c)}{p(\bm{x})}
\end{equation}
Generative Modelle sind oft sehr komplex weshalb sie nicht näher behandelt werden.
\begin{itemize}
    \item $p(c_1)\hat{=}$die Wahrscheinlichkeit, dass ein Element der Klasse $c_1$ angehört
    \item $p(\bm{x}_1|c_1)\hat{=}$ die Wahrscheinlichkeit, dass ein Element, von dem bekannt ist, dass es zu $c_1$ gehört an Position $\bm{x}_1$ liegt
\end{itemize}

\paragraph{Discriminative Modelling}%
\label{par:Discriminative Modelling}
Bei diskriminativen Klassifikator-Modellen wird direkt $p(c|\bm{x})$ oder eine Prediktor-Funktion $f(\bm{x})$ ermittelt.
Diese Art von Klassifikator-Modellierung ist einfacher als das \nameref{par:Generative Modelling}.

\section{Binary Classification}%
\label{sec:Binary Classification}
Gibt es nur zwei Klassen ($c_i\in\{0,1\}$) spricht man von binärer Klassifikation.
Hierbei ist es das Ziel einen Klassifikator $f(\bm{x})$ anzulernen, sodass:
\begin{equation} \label{eq:binary_classification}
    f(\bm{x}_i) = \begin{cases} >0 &\text{falls }c_i=1\\ <0 &\text{falls }c_i=0 \end{cases}
\end{equation}

\subsection{Linear Classifiers}%
\label{sub:Linear Classifiers}
\begin{wrapfigure}{r}{.5\textwidth}
    \vspace*{-15mm}
    \centering
    \includegraphics[width=0.8\linewidth]{linear_classification.png}
    \caption{Lineare Klassifikation}
    \label{fig:linear_classification}
\end{wrapfigure}
Ein linearer Klassifikator hat die Form:
\begin{equation} \label{eq:linear_classifier}
    f(\bm{x}) = \bm{w}^T\bm{x} + b
\end{equation}
Die Gerade (2D) bzw. Hyper-Ebene (N-D),
die durch diese Funktion $f(x)=0$ gegeben ist wird als Diskriminante (discriminator) bezeichnet.
$\bm{w}$ ist der Normalvektor (normal) zur Geraden und $b$ das Bias.

\subsubsection{Linear Separability}%
\label{ssub:Linear Separability}
\includegraphics[width=\textwidth]{linear_separability.png}

\subsection{Optimization}%
\label{sub:Optimization}
Um den linearen Klassifikator zu optimieren sind mehrere Methoden denkbar.
\subsubsection{0-1 loss}%
\label{ssub:0-1 loss}
Es lässt sich eine Stufenfunktion definieren,
welche 1 für $f(\bm{x})>0$ und 0 für alle anderen Werte von $f(\bm{x})$ ist:
\begin{equation} \label{eq:0-1_prediction}
    y = \text{step}(f(\bm{x})) = \text{step}(\bm{w}^T\bm{x} + b)
\end{equation}
Eine Optimierung hätte dann das Ziel den 0-1-Verlust $L_0$ zu optimieren.
\begin{equation} \label{eq:0-1_loss}
    L_0(\bm{w}) = \sum_i \mathbb{I}(\text{step}(\bm{w}^T\bm{x} + b)\ne c_i)
\end{equation}
In der Formel für $L_0$ gibt $\mathbb{I}$ 1 zurück,
wenn der Inhalt der Klammern wahr ist.
Die Summe gibt daher die Anzahl der falsch klassifizierten Datenpunkte zurück.
Da es sich bei der Optimierung von $L_0$ um ein NP-hartes Problem handelt wird diese Methode in der Praxis fast nie verwendet.

\subsubsection{regression loss}%
\label{ssub:regression loss}
Eine Optimierung des Klassifikators mithilfe des Regression Loss $L_{reg}$ ist einfach,
da es sich hierbei der quadratische Verlust verwendet werden kann.
\begin{equation} \label{eq:regression_loss}
    L_{reg}(\bm{w}) = \sum_i (f(\bm{x}_i)-c_i)^2
\end{equation}
Allerdings hat diese Optimierungsmethode den Nachteil,
dass sie stark durch Ausreißer beeinflusst werden kann.
\begin{figure}[H]
    \centering
    \includegraphics[width=0.8\textwidth]{regression_loss.png}
    \caption{Auswirkung von Ausreißern auf die Verwendung des Regression Loss'}
    \label{fig:regression_loss}
\end{figure}

\subsubsection{Logistic \noms{sigmoid}}%
\label{ssub:Logistic sigmoid function}
\begin{wrapfigure}{r}{.5\textwidth}
    \vspace*{-15mm}
    \centering
    \includegraphics[width=0.8\linewidth]{sigmoid_function.png}
    \caption{die \noms{sigmoid}}
    \label{fig:sigmoid_function}
\end{wrapfigure}
Da sich sowohl eine lineare (auch außerhalb des relevanten Bereiches $\{0,1\}$),
als auch eine stufenförmige (nicht kontinuierlich) Optimierung nicht besonders gut eignen wird oft auf die \nomf{sigmoid} zurückgegriffen.
\begin{equation} \label{eq:sigmoid_function}
   \nomeq{sigmoid}(a) =  \dfrac{1}{1+\exp(-a)} 
\end{equation}
Auf der Basis dieser Funktion lässt sich eine Verlustfunktion definieren:
\begin{equation} \label{eq:sigmoid_loss_function}
    L(\bm{w}) = \sum_i (\nomeq{sigmoid}(f(\bm{x}_i)) - c_i)^2 = \sum_i (\nomeq{sigmoid}(\bm{w}^T\bm{x}_i + b) - c_i)^2 
\end{equation}
Die \noms{sigmoid} hat zudem folgende Eigenschaften:
\begin{itemize}
    \item \nomsym{sigmoid} ist begrenzt: $\nomeq{sigmoid}(a)\in(0,1)$
    \item \nomsym{sigmoid} ist symmetrisch: $1- \nomeq{sigmoid}(a) = \nomeq{sigmoid}(-a)$
    \item der Gradient kann einfach bestimmt werden: $\nomeq{sigmoid}'(a) = \frac{\exp(-a)}{(1+\exp(-a))^2} = \nomeq{sigmoid}(a)(1-\nomeq{sigmoid}(a))$
\end{itemize}

\subsubsection{Log-Likelihood}%
\label{ssub:Log-Likelihood}
Mithilfe des \noms{sigmoid} lässt sich die Wahrscheinlichkeitsdichtefunktion für die beiden Klassen aufstellen:
\begin{align} \label{eq:simoidial_probability_distribution}
    &p(c=1|\bm{x}) = \nomeq{sigmoid}(\bm{w}^T\bm{x}+b), p(c=0|\bm{x}) = 1 - \nomeq{sigmoid}(\bm{w}^T\bm{x}+b)\\
    \Leftrightarrow &p(c|\bm{x}) = p(c=1|\bm{x})^c p(c=0|\bm{x})^{1-c} = \nomeq{sigmoid}(\bm{w}^T\bm{x}+b)^c (1 - \nomeq{sigmoid}(\bm{w}^T\bm{x}+b))^{1-c}
\end{align}
Hierbei handelt es sich um eine bedingte Bernoulli Distribution (\cref{sub:Bernoulli Distribution}),
weshalb nun direkt die bedingte Bernoulli log-likelihood optimiert werden kann.
Die negative Likelihood wird auch oft als Cross-Entropy Loss bezeichnet
\begin{align} \label{eq:bernoulli_log-likelihood}
    \log\text{lik}(\tilde{\bm{w}},D) &= \sum_i \log p(c_i|\bm{x}_i)\\
                                     &= \sum_i \log(p(c=1|\bm{x}_i)^{c_i} p(c=0|\bm{x}_i)^{1-c_i})\\
                                     &= \dots\\
                                     &= \sum_i c_i \log \nomeq{sigmoid}(\tilde{\bm{w}}^T\tilde{\bm{x}}_i) + (1-c_i)\log(1 - \nomeq{sigmoid}(\tilde{\bm{w}}^T\tilde{\bm{x}}_i))
\end{align}

\subsubsection{Logistic Regression}%
\label{ssub:Logistic Regression}
Die Optimierung der Log-Likelihood einer \noms{sigmoid} nennt man \say{Logistic Regression},
obwohl es eigentlich eine Klasifizierung ist (alte Funktion; früher war man bei der Benennung noch nicht so streng).
\begin{equation} \label{eq:logistic_regression}
    \argmax_{\tilde{\bm{w}}}\log\text{lik}(\tilde{\bm{w}},D) = \argmax_{\tilde{\bm{w}}} \sum_i c_i \log \nomeq{sigmoid}(\tilde{\bm{w}}^T\tilde{\bm{x}}_i) + (1-c_i)\log(1 - \nomeq{sigmoid}(\tilde{\bm{w}}^T\tilde{\bm{x}}_i))
\end{equation}
Für diese Funktion kann gezeigt werden,
dass sie konvex ist (es existiert nur ein globales Maximum).
Allerdings handelt es sich anders als bei der linearen Regression (\cref{cha:Linear Regression}) nicht um eine \say{Closed Form Solution},
was bedeutet,
dass hier der \nameref{sec:Gradient Descent} für die Optimierung verwendet wird.

\subsubsection{Generalized Logistic Models}%
\label{ssub:Generalized Logistic Models}
Um das Verfahren zur Erstellung linearer Diskriminanten auch für nicht-lineare Feature-Räume zu verwenden,
muss ein ähnlicher Trick wie bei der \nameref{sec:Generalisierung der linearen Regression} verwendet werden.
Auch hier wird mittels einer \nomf{vector_valued_function} auf eine nicht-lineare Funktion abgebildet.
\begin{equation} \label{eq:generlized_logisitc_regression}
    \argmax_{\bm{w}}\log\text{lik}(\bm{w},D) = \argmax_{\bm{w}} \sum_i c_i \log \nomeq{sigmoid}(\bm{w}^T\bm{\phi}(\bm{x}_i)) + (1-c_i)\log(1 - \nomeq{sigmoid}(\bm{w}^T\bm{\phi}(\bm{x}_i)))
\end{equation}
\begin{figure}[H]
    \vspace*{-5mm}
    \centering
    \includegraphics[width=0.5\textwidth]{generalized_logistic_regression.png}
    \caption{Generalized Logistic Regression}
    \label{fig:generalized_logistic_regression}
\end{figure}

\subsubsection{Regularization of the Logistic Regression}%
\label{ssub:Regularization of the Logistic Regression}
Ähnlich wie bei der Regularisierung der linearen Regression (\cref{sec:Regularization of the Linear Regression}) ist es auch bei der Logistic Regression sinnvoll eine Regularization Penalty einzuführen,
um Overfitting zu vermeiden.
\begin{equation} \label{eq:regularized_logisitc_regression}
    L(\tilde{\bm{w}},D)=\log\text{lik}(\tilde{\bm{w}},D) - \nomeq{regularization_factor}\text{penalty}(\tilde{\bm{w}})
\end{equation}
Bei der Lositic Regression wird hierbei meist der der L2 Regularization Loss $\text{penalty}(\tilde{\bm{w}})= ||\tilde{\bm{w}}||^2$ verwendet

\section{Gradient Descent}%
\label{sec:Gradient Descent}
Der Gradient Descent ist ein Verfahren,
dass es ermöglicht den Extremwert einer konvexen Funktion zu finden.
Allgemein wird versucht eine Funktion,
die aus der Summe von Verlust $l$ und Penalty besteht zu optimieren.
\begin{equation} \label{eq:general_form_optimization}
    \argmin_{\text{parameters $\bm{\theta}$}}\sum_{i=1}^N l(\bm{x}_i,\bm{\theta}) + \nomeq{regularization_factor} \text{penalty}(\bm{\theta})
\end{equation}
Bei diesem Verfahren wird ein beliebiger Anfangspunkt im Werteraum gewählt,
der Gradient bestimmt und ein neuer Punkt in absteigender Richtung gewählt.
Dieser Schritt wird so lange wiederholt,
bis ein Minimum erreicht ist (Gradient = 0).
\begin{algorithm}
    \caption{Gradient Descent}\label{gradient_descent_algorithm}
    \begin{algorithmic}[1]
        \State $\bm{x}_0$ $\gets$ init, $t=0$
        \While{termination condition does not hold}
            \State $\bm{x}_{t+1}=\bm{x}_t-\nomeq{learning_rate}\nabla f(\bm{x}_t)$, $t=t+1$
        \EndWhile
    \end{algorithmic}
\end{algorithm}
Die \say{termination condition} des Algorithmus kann z.B. die Größe des Gradienten, die Änderung des Wertes von $f(\bm{x}_t)$
oder einfach eine bestimmte Anzahl an Schleifendurchläufen sein.

\subsection{\nomf{learning_rate}}%
\label{sub:learning_rate}
Meistens wird eine abnehmende \noms{learning_rate} verwendet (z.B. $\nomeq{learning_rate}_t = \frac{1}{t}$),
damit zu Beginn schnell Fortschritte in Richtung des Minimums gemacht werden und zudem vermieden wird,
im späteren Verlauf um das Minimum herumzuspringen.

\subsection{Batch Gradient Descent}%
\label{sub:Batch Gradient Descent}
Im Standardverfahren des Gradient Descents Loss Function über alle Datenpunkte evaluiert.
Man spricht daher auch von einem Batch Gradient Descent.
\begin{equation} \label{eq:batch_gradient_descent}
    \frac{1}{n}\sum_i l(\bm{x}_i;\bm{\theta})\qquad \bm{\theta}_{t+1} = \bm{\theta}_t - \dfrac{\eta}{n}\sum_i \nabla_{\bm{\theta}} l(\bm{x}_i;\bm{\theta}_t)
\end{equation}
Dies stellt eine Approximation des tatsächlich erwarteten Verlustes nach dem Prinzip der  \nameref{sub:Monte-carlo estimation} dar.
\begin{equation}
    \mathbb{E}_{\bm{x}}\left[l(\bm{x};\bm{\theta})\right]\qquad \bm{\theta}_{t+1} = \bm{\theta}_t - \eta\mathbb{E}_{\bm{x}}\left[\nabla_{\bm{\theta}} l(\bm{x};\bm{\theta}_t)\right]
\end{equation}

\subsection{\glsxtrfull{SDG}}%
\label{sub:SDG}
\begin{wrapfigure}{r}{.5\textwidth}
    \vspace*{-15mm}
    \centering
    \includegraphics[width=0.8\linewidth]{batch_vs_stochastic_gradient_descent.png}
    \caption{Batch vs. Stochastic Gradient Descent}
    \label{fig:batch_vs_stochastic_gradient_descent}
\end{wrapfigure}
Um die Loss Function nicht für alle Datenpunkte evaluieren zu müssen wird beim \gls{SDG} lediglich der Verlust an einem einzelnen, zufällig gewählten Punkt ermittelt
\begin{equation} \label{eq:stochastic_gradient_descent}
    l(\bm{x}_i;\bm{\theta})\qquad \bm{\theta}_{t+1} = \bm{\theta}_t - \eta\nabla_{\bm{\theta}} l(\bm{x}_i;\bm{\theta}_t)
\end{equation}
Dies hat zwar den Nachteil,
dass Die Funktion nicht immer absteigt (jedoch meistens).
Allerdings ist die Evaluation der Loss Function wesentlich effizienter als beim Batch Gradient Descent.

\subsection{Mini-Batches}%
\label{sub:Mini-Batches}
Die Verwendung von Mini-Batches für den Gradient Descent stellt eine Mischform von \nameref{sub:Batch Gradient Descent} und \nameref{sub:SDG} dar.
Hierbei wird nicht die Loss Function für einen kleinen Teil der Datenpunkte ausgewertet.
Dies ist weniger rechenintensiv (vor allem, wenn die Mini-Batch-Größe an die verwendete GPU angepasst ist) als beim \nameref{sub:Batch Gradient Descent}
aber auch zielgerichteter als beim \nameref{sub:SDG}.
\begin{equation} \label{eq:mini-batches}
    \frac{1}{b}\sum_i l(\bm{x}_i;\bm{\theta})\qquad \bm{\theta}_{t+1} = \bm{\theta}_t - \dfrac{\eta}{b}\sum_i \nabla_{\bm{\theta}} l(\bm{x}_i;\bm{\theta}_t)
\end{equation}

\subsection{Gradient for Logisitic Regression}%
\label{sub:Gradient for Logisitic Regression}
Die Loss Function für die Logistic Regression kann dank der Eigenschaften der \noms{sigmoid} (\cref{ssub:Logistic sigmoid function}) einfach aufgestellt werden:
\begin{align} \label{eq:gradient_for_logistic_regression}
    \dfrac{\partial\text{loss}_i}{\partial\bm{w}} 
    &= \dfrac{\partial}{\partial\bm{w}}\left(c_i\log\nomeq{sigmoid}(\bm{w}^T\bm{\phi}(\bm{x}_i)) + (1 - c_i) \log(1-\nomeq{sigmoid}(\bm{w}^T\bm{\phi}(\bm{x}_i)))\right)\\
    &= \dots\text{\color{red}siehe Vorlesung 02 Folie 65}\\
    &= (c_i - \nomeq{sigmoid}(\bm{w}^T\bm{\phi}(\bm{x}_i)))\phi(\bm{x}_i)
\end{align}

\section{Multiclass Classification}%
\label{sec:Multiclass Classification}
\begin{wrapfigure}{r}{.4\textwidth}
    \vspace*{-10mm}
    \centering
    \includegraphics[width=0.8\linewidth]{multiclass_linear_classification.png}
    \caption{Multiclass Linear Classification}
    \label{fig:multiclass_linear_classification}
    \vspace*{-10mm}
\end{wrapfigure}
Mithilfe der Linearen Klassifikation können auch mehr als zwei Klassen klassifiziert werden.
Hierfür wird die Softmax Likelihood Function verwendet:
\begin{equation} \label{eq:softmax_likelihood_function}
    p(c=c_i|\bm{x}) = \frac{\exp(\bm{w}_i^T\bm{\phi}{x})}{\sum_{k=1}^K \exp(\bm{w}_k^T\bm{\phi}(\bm{x}))}
\end{equation}
Hiebei erhält jede Klasse einen eigenen Gewichtsvektor.
Die Klassifizierung erfolgt,
indem geguckt wird, für welche klasse $c_i$ $\bm{w}_i^T\bm{\phi}(\bm{x})$ am höchsten ist.

Das Problem kann hierbei mithilfe des 1-Hot-Encodings als eine Conditional Multinomial Distribution aufgestellt werden (\cref{sub:Multinomial/Categorical Dristribution}):
\begin{align} \label{eq:multiclass_classification_distribution}
    p(c|\bm{x}) &= \prod_{k=1}^K p(c=k|\bm{x})^{\bm{h}_{c,k}}\\
                &= \prod_{k=1}^K \left(\frac{\exp(\bm{w}_k^T\bm{\phi}(\bm{x}_i))}{\sum_{k'=1}^K \exp(\bm{w}_{k'}^T\bm{\phi}(\bm{x}_i))} \right)^{\bm{h}_{c,k}}\\
\end{align}

\paragraph{Data log-likelihood}%
\label{par:multiclass_classification:Data log-likelihood}
\begin{align} \label{eq:multiclass_classification:Data log-likelihood}
    \loglik(\mathcal{D},\bm{w}_{1:K}) &= \sum_{i=1}^N\log p(c_i|\bm{x}_i)\\
                                      &= \dots \text{ \color{red}siehe Vorlesung 02 Folie 69}\\
                                      &= \sum_{i=1}^N\sum_{k=1}^K\bm{h}_{c_i,k}\bm{w}_k^T\bm{\phi}(\bm{x}_i) 
                                      - \underbrace{\log\left( \sum_{j=1}^K\exp(\bm{w}_j^T\bm{\phi}(\bm{x}_i))\right)}_\text{independent from $k$} \underbrace{\sum_k\bm{h}_{c_i,k}}_{=1}
\end{align}

\paragraph{Gradient}%
\label{par:multiclass_classification:Gradient}

\begin{alignat}{2} \label{eq:multiclass_classification:Gradient}
    &\frac{\partial\loss_i}{\partial\bm{w}_k}
        &&= \frac{\partial}{\partial \bm{w}_k}\left(\sum_{k=1}^K\bm{h}_{c_i,k}\bm{w}_k^T\bm{\phi}(\bm{x}_i) - \log\left( \sum_{j=1}^K\exp(\bm{w}_j^T\bm{\phi}(\bm{x}_i))\right) \right)\\
    &   &&= \dots\text{ \color{red} siehe Übung 2 Aufgabe 1.1 }\\
    &   &&= \bm h_{c_i,k} \bm\phi(\bm x_i) - \dfrac{\exp(\bm w_k^T\bm \phi(\bm x_i))}{\sum_j^K \exp(\bm w^T_j \bm \phi(\bm x_i))} \bm \phi(\bm x_i)\\
    \Leftrightarrow&\frac{\partial\loss_i}{\partial\bm{w}}
        &&= - \sum_i^N \left( \bm h_{i,k} \bm \phi(\bm x_i) - \dfrac{\exp(\bm w_k^T\bm \phi(\bm x_i))}{\sum_j^K \exp(\bm w^T_j \bm \phi(\bm x_i))} \bm \phi(\bm x_i) \right) \\
    &   &&= -\sum_i^N \bm \phi(\bm x_i) \left( h_{i,k} - p_{i,k} \right)
\end{alignat}

