diff --git a/Glossary.tex b/Glossary.tex index 27b8cc6..594acaa 100644 --- a/Glossary.tex +++ b/Glossary.tex @@ -69,6 +69,7 @@ \newacronym{FRM}{FRM}{\gls{full_rank_matrix}} \newacronym{MLE}{MLE}{Maximum Likelihood Estimation} \newacronym{iid}{iid}{\gls{identically_independently_distributed}} +\newacronym{SDG}{SDG}{Stochastic Gradient Descent} %-------------------- %nomenclature @@ -109,6 +110,8 @@ \newnom{mean-vector}{Mittelwerts-Vektor}{\bm{\mu}}{}{} \newnom{covariance}{Kovarianz-Matrix}{\bm{\Sigma}}{}{} \newnom{variance}{Varianz}{\sigma^2}{$\mathbb{E}_p[(X-\nomeq{mean})$]}{} +\newnom{sigmoid}{Sigmoid Function}{\sigma}{}{} +\newnom{learning_rate}{Learning Rate}{\eta}{}{} \shorthandoff{"} \makeglossaries diff --git a/Packages.tex b/Packages.tex index 9ad81f1..e225f32 100644 --- a/Packages.tex +++ b/Packages.tex @@ -112,6 +112,8 @@ rightsub = \grq% %-------------------- %math symbols and more \usepackage{amsmath} +\DeclareMathOperator*{\argmax}{arg\,max} +\DeclareMathOperator*{\argmin}{arg\,min} %special symbols \usepackage{fontawesome} \usepackage{amssymb} @@ -148,9 +150,15 @@ rightsub = \grq% \makeatother %boxes \usepackage[framemethod=tikz]{mdframed} +\newmdenv[roundcorner=2mm, linecolor=blue, backgroundcolor=blue!5]{mybox} %-------------------- % landscape %-------------------- \usepackage{pdflscape} +%-------------------- +% algorithms +%-------------------- +\usepackage{algorithm} +\usepackage{algpseudocode} diff --git a/chapters/Classical_Supervised_Learning/Linear_Classification.tex b/chapters/Classical_Supervised_Learning/Linear_Classification.tex index 3af5c46..a671bc7 100644 --- a/chapters/Classical_Supervised_Learning/Linear_Classification.tex +++ b/chapters/Classical_Supervised_Learning/Linear_Classification.tex @@ -1,3 +1,234 @@ \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} + +\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} + +WEITER AUF SEITE 166 diff --git a/chapters/Classical_Supervised_Learning/Linear_Regression.tex b/chapters/Classical_Supervised_Learning/Linear_Regression.tex index 1979e3a..5e24d63 100644 --- a/chapters/Classical_Supervised_Learning/Linear_Regression.tex +++ b/chapters/Classical_Supervised_Learning/Linear_Regression.tex @@ -116,8 +116,8 @@ ist es oft sinnvoll die Eingabedaten mittels \nomsym{vector_valued_function} umz \label{fig:2-d-linear-regression} \end{figure} -\section{Regularization}% -\label{sec:Regularization} +\section{Regularization of the Linear Regression}% +\label{sec:Regularization of the Linear Regression} Bei der Auswertung einer polynomialen Funktion (\cref{ssub:Polynomial Curve Fitting}) muss der Polynomialgrad der \nomf{vector_valued_function} hoch genug gewählt werden, damit die lineare Regression kein kleineres Polynom als die echte Grundfunktion verwendet (\gls{underfitting}). Allerdings darf der Grad des Polynoms auch nicht so hoch gewählt werden, diff --git a/images/batch_vs_stochastic_gradient_descent.png b/images/batch_vs_stochastic_gradient_descent.png new file mode 100644 index 0000000..5448914 Binary files /dev/null and b/images/batch_vs_stochastic_gradient_descent.png differ diff --git a/images/generalized_logistic_regression.png b/images/generalized_logistic_regression.png new file mode 100644 index 0000000..2026197 Binary files /dev/null and b/images/generalized_logistic_regression.png differ diff --git a/images/linear_classification.png b/images/linear_classification.png new file mode 100644 index 0000000..0d51b3f Binary files /dev/null and b/images/linear_classification.png differ diff --git a/images/linear_separability.png b/images/linear_separability.png new file mode 100644 index 0000000..527e45d Binary files /dev/null and b/images/linear_separability.png differ diff --git a/images/regression_loss.png b/images/regression_loss.png new file mode 100644 index 0000000..05b01f5 Binary files /dev/null and b/images/regression_loss.png differ diff --git a/images/sigmoid_function.png b/images/sigmoid_function.png new file mode 100644 index 0000000..564e9c5 Binary files /dev/null and b/images/sigmoid_function.png differ