Regularization für Neural Networks hinzugefügt.
@ -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
|
||||
|
@ -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}
|
||||
|
@ -24,6 +24,8 @@
|
||||
\usepackage{subcaption}
|
||||
%borders around images
|
||||
\usepackage[export]{adjustbox}
|
||||
%align graphics at bottom
|
||||
\usepackage{graphbox}
|
||||
|
||||
%--------------------
|
||||
%german quotation
|
||||
|
@ -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)
|
||||
|
@ -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})
|
||||
|
||||
|
107
chapters/Neural_Networks/Regularization.tex
Normal file
@ -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}
|
BIN
images/double_descent.png
Normal file
After Width: | Height: | Size: 106 KiB |
BIN
images/drop_connect.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
images/dropout.png
Normal file
After Width: | Height: | Size: 89 KiB |
BIN
images/episode-wise_non-monotonicity_test_error.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
images/episode-wise_non-monotonicity_train_error.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
images/learning_rate_decay_cosine_learning_rate.png
Normal file
After Width: | Height: | Size: 64 KiB |
BIN
images/learning_rate_decay_cosine_training_loss.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
images/learning_rate_decay_inverse_sqrt.png
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
images/learning_rate_decay_linear_learning_rate.png
Normal file
After Width: | Height: | Size: 113 KiB |
BIN
images/learning_rate_decay_step.png
Normal file
After Width: | Height: | Size: 205 KiB |
BIN
images/model_ensembles_snapshots.png
Normal file
After Width: | Height: | Size: 1004 KiB |
BIN
images/neural_net_learning_rate.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
images/sample-wise_non-monotonicity.png
Normal file
After Width: | Height: | Size: 81 KiB |