diff --git a/Glossary.tex b/Glossary.tex index 0f494ee..c005fee 100644 --- a/Glossary.tex +++ b/Glossary.tex @@ -83,6 +83,8 @@ \newacronym{MLP}{MLP}{Multi-Layer Perceptron} \newacronym{ReLU}{ReLU}{Rectified Linear Unit} \newacronym{ELU}{ELU}{Exponential Linear Units} +\newacronym{GPU}{GPU}{Graphic Processing Unit} +\newacronym{RMS}{RMS}{Root Mean Square} %-------------------- %nomenclature diff --git a/ML_Zusammenfassung.tex b/ML_Zusammenfassung.tex index b148e28..5ea94d0 100644 --- a/ML_Zusammenfassung.tex +++ b/ML_Zusammenfassung.tex @@ -53,6 +53,7 @@ \label{part:Neural Networks} \input{chapters/Neural_Networks/Basics.tex} \input{chapters/Neural_Networks/Gradient_Descent.tex} + \input{chapters/Neural_Networks/Regularization.tex} \input{chapters/Neural_Networks/CNNs_and_LSTMs.tex} \part{Classical Unsupervised Learning} diff --git a/Packages.tex b/Packages.tex index 6a588fe..922a6dc 100644 --- a/Packages.tex +++ b/Packages.tex @@ -24,6 +24,8 @@ \usepackage{subcaption} %borders around images \usepackage[export]{adjustbox} +%align graphics at bottom +\usepackage{graphbox} %-------------------- %german quotation diff --git a/chapters/Classical_Supervised_Learning/Linear_Classification.tex b/chapters/Classical_Supervised_Learning/Linear_Classification.tex index fed4653..36f4a39 100644 --- a/chapters/Classical_Supervised_Learning/Linear_Classification.tex +++ b/chapters/Classical_Supervised_Learning/Linear_Classification.tex @@ -218,6 +218,7 @@ Dies stellt eine Approximation des tatsächlich erwarteten Verlustes nach dem Pr \includegraphics[width=0.8\linewidth]{batch_vs_stochastic_gradient_descent.png} \caption{Batch vs. Stochastic Gradient Descent} \label{fig:batch_vs_stochastic_gradient_descent} + \vspace*{-20mm} \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} @@ -231,7 +232,7 @@ Allerdings ist die Evaluation der Loss Function wesentlich effizienter als beim \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} +Dies ist weniger rechenintensiv (vor allem, wenn die Mini-Batch-Größe an die verwendete \gls{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) diff --git a/chapters/Neural_Networks/Gradient_Descent.tex b/chapters/Neural_Networks/Gradient_Descent.tex index 3c8cdbf..e47a1f8 100644 --- a/chapters/Neural_Networks/Gradient_Descent.tex +++ b/chapters/Neural_Networks/Gradient_Descent.tex @@ -1,5 +1,13 @@ \chapter{Gradient Descent}% \label{cha:Gradient Descent} +Zum Einlernen von Neuronalen Netzwerken wird zumeist das \nameref{cha:Gradient Descent} Verfahren mit Mini-Batches (\cref{sub:Mini-Batches}) verwendet. +Dies ist dadurch begründet, +dass sich diese Verfahren am effizientesten mithilfe von \glspl{GPU} berechnen lassen +und die Größe der Batches an die Anzahl der \gls{GPU} Rechenkerne angepasst ist. +\begin{equation} \label{eq:neural_networks:mini-batches} + \bm{\theta}_{t+1} = \bm{\theta}_t - \dfrac{\eta}{b}\sum_i \nabla_{\bm{\theta}} l(\bm{x}_i;\bm{\theta}_t) +\end{equation} +Um den Gradienten für die einzelnen Gewichte zu errechnen wird die \nameref{sec:Backpropagation} verwendet. \section{Backpropagation}% \label{sec:Backpropagation} @@ -76,3 +84,109 @@ mit jeweils zwei Additionen und Multiplikationen pro Gewicht. In Summe ergeben sich also \say{nur} etwa 3 Additionen und Multiplikationen pro Gewicht. Da der Algorithmus allerdings während des Trainings eines Neural Networks sehr sehr oft durchlaufen wird, ist der Rechenaufwand dennoch sehr hoch, weshalb sich Neural Networks erst in den letzten 5"~10 Jahren durchsetzen konnten. + +\section{Learning Rate}% +\label{sec:Neural Networks:Learning Rate} +Wie schon von anderen Anwendungen des \nameref{sec:Gradient Descent} Verfahrens bekannt, +ist es wichtig die richtige Lernrate zu wählen:\\ +\includegraphics[scale=.7]{neural_net_learning_rate.png}\\ + +\subsection{Variable Learning Rates}% +\label{sub:Variable Learning Rates} +Ein Problem von \glspl{SDG} ist, +dass gerade bei störbehafteten Loss Functions (z.B. wegen der Verwendung von Mini-Batches), +die Möglichkeit besteht, +dass der \nameref{cha:Gradient Descent} sehr langsam voran kommt. +Daher ist es sinnvoll, +eine variable Lernrate zu wählen. +Für die Wahl der aktuellen Lernrate gibt es verschiedene Verfahren. + +\paragraph{Momentum Term}% +\label{par:Momentum Term} +Bei diesem Verfahren wird nicht die Lernrate an sich verändert, +sondern der Gradient, +der für die Anpassung der Gewichte verwendet wird. +Hierbei wir auf Basis der Gradienten $\bm g$ ein Moment $\bm m$ berechnet, +wobei es verschiedene Algorithmen zur Berechnung von $\bm m$ gibt +\begin{itemize} + \item $\bm m_0 = 0,\quad \bm m_{k+1} = \gamma_k\bm m_k + (1-\gamma_k)\bm g_k$ + \item Geometric Average (constant $\gamma$): + $\bm m_k = (1-\gamma)\sum_{i=1}^k \gamma^{k-i} \bm g_i$ + \item Arithmetic Average ($\gamma = \frac{k-1}{k}$): + $\bm m_k = \frac{1}{k}\sum_{i=1}^k \bm g_i$ +\end{itemize} +Anschließend wird das Moment $m$ anstatt dem Gradient $g$ für die Anpassung der Parameter verwendet. +\begin{equation} \label{eq:gradient_descent:momentum_update} + \bm\theta_{k+1} = \bm\theta_k - \eta\bm m_{k+1} +\end{equation} + +\paragraph{Gradient Normalisiation}% +\label{par:Gradient Normalisiation} +Ein Algorithmus, +der Wahlweise auch als ADADELTA oder \glsxtrshort{RMS}Prop bezeichnet wird, +ist die Gradient Normalisiation. +Hierbei wird die Lernrate normalisiert. +\begin{align} \label{eq:Gradient Normalisation} + \bm g_k &= \nabla\mathcal L(\bm\theta_k)\\ + \bm v_{k+1,i} &= \gamma\bm v_{k,i} + (1+\gamma)\bm g_{k,i}^2\\ + \bm\theta_{k+1,i} &= \bm\theta_{k,i} - \frac{\eta}{\sqrt{\bm v_{k+1} + \epsilon}}\bm g_{k,i} +\end{align} +\begin{itemize} + \item $\bm v_{k,i}$ errechnet fortlaufend den Durchschnitt der quadrierten Gradienten (\gls{RMS}) + \item $\epsilon$ ist nur enthalten um einer Division mit 0 vorzubeugen (sehr klein) +\end{itemize} + +\paragraph{Adaptive Momentum (Adam)}% +\label{par:Adaptive Momentum} +Eine Kombination aus \nameref{par:Momentum Term} und \nameref{par:Gradient Normalisiation}. +Allerdings kann hierbei nicht mehr sichergestellt werden, +dass die Funktion konvergiert. +\begin{align} \label{eq:adam} + \bm g_k &= \nabla\mathcal L(\bm\theta_k)\\ + \bm v_{k+1,i} &= \gamma_1\bm v_{k,i} + (1+\gamma_1)\bm g_{k,i}^2\\ + \bm m_{k+1} &=\gamma_2\bm m_k + (1-\gamma_2)\bm g_k\\ + \bm\theta_{k+1,i} &= \bm\theta_{k,i} - \frac{\eta c_2(k)}{\sqrt{c_1(k)\bm v_{k+1} + \epsilon}}\bm m_{k+1,i} +\end{align} +\begin{itemize} + \item Initialisierung mit $\bm m_0 =0,\quad\bm v_0=0,\quad c_i(k) = \frac{1}{1-\gamma_i^k}$ + \item $\gamma_1=0.9,\quad\gamma_2=0.999,\quad\epsilon=10^{-8}$ sind gute Werte für die Parameter von Adam +\end{itemize} + +\paragraph{Learning Rate Decay}% +\label{par:Learning Rate Decay} +Unter Learning Rate Decay fallen alle Algorithmen, +bei denen die Lernrate abhängig von der Anzahl der Durchläufe des \nameref{cha:Gradient Descent} Algorithmus nachlässt. +\begin{table}[H] + \centering + \caption{Verschiedene Learning Rate Decay Algorithmen} + \label{tab:learning_rate_decay_algorithms} + \begin{tabularx}{\textwidth}{X|Y|Y} + \bfseries\centering Verfahren & \bfseries Learning Rate & \bfseries Training Loss\\ + \hline + \textbf{Step:} Lernrate verändert sich nach einer bestimmten Anzahl von Algorithmus-Durchläufen & & \includegraphics[width=\linewidth,align=c]{learning_rate_decay_step.png}\\ + \hline + \textbf{Cosine:}$\alpha_t = \frac{1}{2}\alpha_0(1+\cos(\frac{t\pi}{T}))$ & + \includegraphics[width=\linewidth,align=c]{learning_rate_decay_cosine_learning_rate.png} & + \includegraphics[width=\linewidth,align=c]{learning_rate_decay_cosine_training_loss.png} \\ + \hline + \textbf{Linear:}$\alpha_t = \alpha_0(1-\frac{t}{T})$ & + \includegraphics[width=\linewidth,align=c]{learning_rate_decay_linear_learning_rate.png} & \\ + \hline + \textbf{Inverse sqrt:}$\alpha_t = \frac{\alpha_0}{\sqrt{t}}$ & + \includegraphics[width=\linewidth,align=c]{learning_rate_decay_inverse_sqrt.png} & \\ + \end{tabularx} + ($\alpha_0$: inital learning rate, $\alpha_t$: learning rate at epoch $t$, $T$: total number of epochs) +\end{table} + +\section{Second Order Optimization}% +\label{sec:Second Order Optimization} +Statt den Gradienten durch eine lineare Funktion zu approximieren ist es auch möglich, +den Gradienten durch eine Funktion 2-ten Grades zu approximieren. +Dies hat den Vorteil, +dass eine solche Approximation immer einen Tiefpunkt hat (da konvex), +welcher als neuer Punkt für den nächsten Schritt des \nameref{cha:Gradient Descent}s verwendet werden kann. +Zudem benötigt diese Art von Approximation keine Hyper-Parameter oder Lernraten und brauchen zudem weniger Schritte zum Ziel. +Der Nachteil ist jedoch, +dass Funktionen dieser Art sehr rechenintensiv sind.\\ +({\color{red}mehr Informationen in Vorlesung 08 Folie 74 und 76}) + diff --git a/chapters/Neural_Networks/Regularization.tex b/chapters/Neural_Networks/Regularization.tex new file mode 100644 index 0000000..b3c438e --- /dev/null +++ b/chapters/Neural_Networks/Regularization.tex @@ -0,0 +1,107 @@ +\chapter{Regularization with Neural Networks}% +\label{cha:Regularization with Neural Networks} +Obwohl die Modell-Komplexität bei Neuronalen Netzwerken aufgrund des Double Descent Effektes (\cref{sec:Double Descent effect for DNNs}) nicht nach oben beschränkt sein sollte, +ist es dennoch sinnvoll ein Neuronales Netzwerk zu regularisieren um eine bessere Generalisierung zu erreichen. +Neben den aus \cref{cha:Model Selection} bekannten Methoden (z.B. Data Augmentation) gibt es zusätzliche Methoden der Regularisierung von neuronalen Netzwerken. + +\paragraph{Model Ensembles}% +\label{par:Model Ensembles} +Bei diesem Ansatz werden mehrere unabhängige Modelle Trainiert und die Testdaten anhand des durchschnittlichen Vorhersage der trainierten Modelle evaluiert. +Dies führt im Allgemeinen zu einer etwa 2\% höheren Genauigkeit. + +Eine Abwandlung von dieser Methode verwendet Snapshots eines einzigen Modells zu unterschiedlichen Trainingsständen. +Oft wird bei diesem Verfahren nach dem Snapshot die Lernrate wieder hochgesetzt um dem Modell die Möglichkeit zu geben ein neues lokales Optimum zu finden. +Dies hat den Vorteil, +dass nur ein einzelnes Modell trainiert werden muss. +\begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{images/model_ensembles_snapshots.png} + \caption{Model Ensembles mit Snapshots} + \label{fig:model_ensembles_snapshots} +\end{figure} + +\paragraph{Dropout}% +\label{par:Dropout} +\begin{wrapfigure}{r}{.4\textwidth} + \centering + \includegraphics[width=0.8\linewidth]{dropout.png} + \caption{Neuronal Network mit Dropout} + \label{fig:dropout} +\end{wrapfigure} +Bei diesem Ansatz werden zufällig bei jedem Forward Pass ein Teil der Neuronen auf 0 gesetz (üblicherweise mit einer Wahrscheinlichkeit von 50\%). +Dies regularisiert das neuronale Netzwerk, +da es selbiges zu einer redundanten Repräsentation zwingt. +Zudem wird vermieden, +dass Duplikate zwischen den Neuronen, +da gleiche Gewichtsvektoren nicht mehr gleich angepasst werden. + +Diese Methode kann auch als eine Art der \nameref{par:Model Ensembles} Methode verstanden werden, +da auch hier verschiedene Modelle trainiert werden. + +Es gibt zwei zentrale Ansätze wie ein Modell, +welches auf diese Weise trainiert wurde getestet werden kann. +\begin{enumerate} + \item \textbf{Ensemble View:} Wie bei der \nameref{par:Model Ensembles} Methode wird der Durchschnitt der Vorhersage mehrere Modelle genommen. + Die verschiedenen Modelle sind hier lediglich das gleiche Modell mit unterschiedlichen Dropout Neuronen. + \item \textbf{Expectation View:} Alle Neuronen werden aktiv gelassen und die Aktivierungsfunktion mit den Wahrscheinlichkeitsfaktor des Dropout multipliziert. + Letzteres ist nötig, da die Aktivierungsfunktionen für ein lückenhaftes neuronales Netz trainiert wurden. +\end{enumerate} + +\paragraph{Drop Connect}% +\label{par:Drop Connect} +Eine Abwandlung von \nameref{par:Dropout}, +bei der alle Neuronen erhalten bleiben und lediglich Kanten zwischen den Neuronen weggelassen werden. +\begin{figure}[H] + \centering + \includegraphics[width=0.6\textwidth]{drop_connect.png} + \caption{Drop Connect} + \label{fig:drop_connect} +\end{figure} + +\section{\texorpdfstring{Double Descent effect for \glsxtrshortpl{DNN}}{Double Descent effect for \glsfmtshortpl{DNN}}}% +\label{sec:Double Descent effect for DNNs} + +\begin{wrapfigure}{r}{.5\textwidth} + \vspace*{-10mm} + \centering + \includegraphics[width=\linewidth]{double_descent.png} + \caption{Double Descent Effekt eines \glsxtrshortpl{DNN}} + \label{fig:double_descent} +\end{wrapfigure} +Wie die meisten anderen Algorithmen haben auch Neuronale Netzwerke das Problem, +dass sie die Trainingsdaten overfitten und daher keine guten Ergebnisse auf den Validierungsdaten liefern. +Allerdings lässt sich bei \glspl{DNN} ein Double Descent beobachten. +Bis heute ist die Ursache für diesen Effekt noch nicht vollständig verstanden. +Nichtsdestotrotz lässt sich der Graph aus \cref{fig:double_descent} in 3 Bereiche einteilen: +\begin{enumerate} + \item \say{classical regime}: Verhält sich wie jeder andere Algorithmus + \item \say{interpolation threshold}: Die Trainingsdaten werden genau gelernt (Training Loss $\rightarrow$0), + wobei hier die Anzahl der benötigten Parameter in etwa der Anzahl der gesampelten Datensätze entspricht + \item \say{\say{Modern} interpolating regime}: Training Loss bleibt gering, allerdings senkt sich auch der Validation Loss auf wundersame Art +\end{enumerate} +Ein Beispiel hierfür ist der Populäre MNIST Datensatz ({\color{red}Vorlesung 08 Folie 82}) + +\subsection{Sample-wise non-monotonicity}% +\label{sub:Sample-wise non-monotonicity} +Der Zusammenhang zwischen interpolation threshold und Sample Size hat zur Folge, +dass es negative Folgen haben kann größere Sample zu nehmen, +da hier der interpolation threshold später erreicht wird. +\begin{figure}[H] + \centering + \includegraphics[width=0.6\textwidth]{sample-wise_non-monotonicity.png} + \caption{Sample-wise non-monotonicity} + \label{fig:sample-wise_non-monotonicity} +\end{figure} + +\subsection{Episode-wise non-monotonicity}% +\label{sub:Episode-wise non-monotonicity} +Die interpolation threshold kann dazu führen, +dass ein längeres Training das Ergebniss erst verschlechtert und dann verbessert. +\begin{figure}[H] + \centering + \includegraphics[width=0.48\textwidth]{episode-wise_non-monotonicity_train_error.png} + \hfill + \includegraphics[width=0.48\textwidth]{episode-wise_non-monotonicity_test_error.png} + \caption{Episode-wise non-monotonicity} + \label{fig:episode-wise_non-monotonicity} +\end{figure} diff --git a/images/double_descent.png b/images/double_descent.png new file mode 100644 index 0000000..7c51c13 Binary files /dev/null and b/images/double_descent.png differ diff --git a/images/drop_connect.png b/images/drop_connect.png new file mode 100644 index 0000000..595004b Binary files /dev/null and b/images/drop_connect.png differ diff --git a/images/dropout.png b/images/dropout.png new file mode 100644 index 0000000..189184a Binary files /dev/null and b/images/dropout.png differ diff --git a/images/episode-wise_non-monotonicity_test_error.png b/images/episode-wise_non-monotonicity_test_error.png new file mode 100644 index 0000000..23cb6e2 Binary files /dev/null and b/images/episode-wise_non-monotonicity_test_error.png differ diff --git a/images/episode-wise_non-monotonicity_train_error.png b/images/episode-wise_non-monotonicity_train_error.png new file mode 100644 index 0000000..976ac2c Binary files /dev/null and b/images/episode-wise_non-monotonicity_train_error.png differ diff --git a/images/learning_rate_decay_cosine_learning_rate.png b/images/learning_rate_decay_cosine_learning_rate.png new file mode 100644 index 0000000..bf686c8 Binary files /dev/null and b/images/learning_rate_decay_cosine_learning_rate.png differ diff --git a/images/learning_rate_decay_cosine_training_loss.png b/images/learning_rate_decay_cosine_training_loss.png new file mode 100644 index 0000000..27c46d0 Binary files /dev/null and b/images/learning_rate_decay_cosine_training_loss.png differ diff --git a/images/learning_rate_decay_inverse_sqrt.png b/images/learning_rate_decay_inverse_sqrt.png new file mode 100644 index 0000000..f5239d6 Binary files /dev/null and b/images/learning_rate_decay_inverse_sqrt.png differ diff --git a/images/learning_rate_decay_linear_learning_rate.png b/images/learning_rate_decay_linear_learning_rate.png new file mode 100644 index 0000000..9ad80c8 Binary files /dev/null and b/images/learning_rate_decay_linear_learning_rate.png differ diff --git a/images/learning_rate_decay_step.png b/images/learning_rate_decay_step.png new file mode 100644 index 0000000..15c9265 Binary files /dev/null and b/images/learning_rate_decay_step.png differ diff --git a/images/model_ensembles_snapshots.png b/images/model_ensembles_snapshots.png new file mode 100644 index 0000000..7cc12f5 Binary files /dev/null and b/images/model_ensembles_snapshots.png differ diff --git a/images/neural_net_learning_rate.png b/images/neural_net_learning_rate.png new file mode 100644 index 0000000..ef5a761 Binary files /dev/null and b/images/neural_net_learning_rate.png differ diff --git a/images/sample-wise_non-monotonicity.png b/images/sample-wise_non-monotonicity.png new file mode 100644 index 0000000..cebe94b Binary files /dev/null and b/images/sample-wise_non-monotonicity.png differ