diff --git a/ML_Zusammenfassung.tex b/ML_Zusammenfassung.tex index 87e70af..7ea973a 100644 --- a/ML_Zusammenfassung.tex +++ b/ML_Zusammenfassung.tex @@ -52,7 +52,7 @@ \part{Neural Networks} \label{part:Neural Networks} \input{chapters/Neural_Networks/Basics.tex} - \input{chapters/Neural_Networks/Neural_Networks_and_Backpropagation.tex} + \input{chapters/Neural_Networks/Backpropagation.tex} \input{chapters/Neural_Networks/CNNs_and_LSTMs.tex} \part{Classical Unsupervised Learning} diff --git a/Packages.tex b/Packages.tex index 095db22..6a588fe 100644 --- a/Packages.tex +++ b/Packages.tex @@ -120,6 +120,7 @@ rightsub = \grq% \DeclareMathOperator*{\loss}{loss} \DeclareMathOperator*{\loglik}{loglik} \DeclareMathOperator*{\softmax}{softmax} + %special symbols \usepackage{fontawesome} \usepackage{amssymb} diff --git a/chapters/Neural_Networks/Backpropagation.tex b/chapters/Neural_Networks/Backpropagation.tex new file mode 100644 index 0000000..5a69b22 --- /dev/null +++ b/chapters/Neural_Networks/Backpropagation.tex @@ -0,0 +1,78 @@ +\chapter{Backpropagation}% +\label{cha:Backpropagation} +Um die einzelnen Gewichte rückwirkend durch die verschiedenen Schichten eines Neural Networks einzulernen wird das Verfahren der Backpropagation benutzt. +Bei diesem Verfahren wird der \nameref{sec:Gradient Descent} verwendet. +Die eigentliche Backpropagation findet erst dann statt, +wenn die Anpassungen, +die sich aus dem \nameref{sec:Gradient Descent} ergeben rückwirkend auf die verschiedenen Schichten des Neural Networks angewandt werden sollen. +Die Loss Function errechnet sich hier durch +\begin{equation} \label{eq:backpropagration_loss_function} + \mathcal L(\bm\theta,\mathcal D) = \sum_{i=1}^N l(\bm x_i,\bm\theta) + \nomeq{regularization_factor}\text{ penalty}(\bm\theta) +\end{equation} +\begin{wrapfigure}{r}{.5\textwidth} + \vspace*{-5mm} + \centering + \includegraphics[width=.8\linewidth]{back_propagation.png} + \caption{Zusammenhang zwischen Errechnung der Loss Function und Errechnung der partiellen Ableitungen} + \label{fig:backpropagation} + \vspace*{-15mm} +\end{wrapfigure} +Um die Gewichtsvektoren auf Basis dieser Loss Function anzupassen muss die partielle Ableitung für die jeweilige Gewichtsmatrix und den Biasvektor gezogen werden. +Hierfür ist die Kettenregel nützlich, +die die Regeln für die partielle Ableitung vorgibt +\begin{equation} \label{eq:chain_rule} + \frac{d}{dt}f(x(t)) = \frac{df}{dx}\frac{dx}{dt} +\end{equation} +In \cref{fig:backpropagation} ist dieser Ablauf am Beispiel eines zweistufigen Neuronalen Netzes gezeigt. +Hier berechnet sich der Loss durch +\begin{align} \label{eq:forward_pass} + z &= wx + b\\ + y &= \sigma(z)\\ + \mathcal L &= \frac{1}{2}(y-t)^2 +\end{align} +Für dieses Neural Network ist die Backpropagation dann +\begin{alignat}{5} \label{eq:backward_pass} + \frac{\partial \mathcal L}{\partial y} &= y - t && + &&=\overline{y}\\ + \frac{\partial \mathcal L}{\partial z} &= \frac{\partial\mathcal L}{\partial y}\frac{\partial y}{\partial z} &&= \frac{\partial\mathcal L}{\partial y}\sigma'(z) + &&=\overline{z} &&= \overline{y}\sigma'(z)\\ + \frac{\partial \mathcal L}{\partial w} &= \frac{\partial\mathcal L}{\partial z}\frac{\partial z}{\partial w} &&= \frac{\partial\mathcal L}{\partial z} x + &&=\overline{w} &&= \overline{z}x \\ + \frac{\partial \mathcal L}{\partial b} &= \frac{\partial\mathcal L}{\partial z}\frac{\partial z}{\partial b} + &&= \frac{\partial\mathcal L}{\partial z} \cdot 1 &&=\overline{b} &&=\overline{z} +\end{alignat} +Wenn sich der Graph des Neural Networks sich allerdings verzweigt (mehrere Neuronen auf einer Schicht) muss die multivariable Kettenregel (multivariable chain rule) verwendet werden +\begin{equation} \label{eq:multivariable_chain_rule} + \frac{d}{dt}f(x(t),y(t)) = \frac{\partial f}{\partial x}\frac{dx}{dt} + \frac{\partial f}{\partial y}\frac{dy}{dt} +\end{equation} +Die Anwendung dieser Regel wird in den folgenden zwei Beispielen deutlich + +\paragraph{Example: univariate logistic least squares regression}% +\label{par:Example: univariate logistic least squares regression} +\mbox{}\\ +\includegraphics[scale=.65]{univariate_logisitc_least_squares_regression.png} + +\paragraph{Example: Multi-layer Perceptron (multiple outputs)}% +\label{par:Example: Multi-layer Perceptron} +\mbox{}\\ +\includegraphics[scale=.65]{multi-layer_perceptron.png}\\ +Mithilfe der Matrix-Rechentricks aus \cref{sec:Matrix-Calculus} ist es möglich die Backpropagation für das Multi-layer Perceptron in Matrix-Form aufzuschreiben:\\ +({\color{red}Herleitung Vorlesung 08 Folien 52 und 53})\\ +\includegraphics[scale=.65]{multi-layer_perceptron_matrix_form.png} + +\section{Computational costs}% +\label{sec:Computational costs} +Die Computational Costs für eine Backpropagation ergibt sich als Summe aus dem Forward Pass und dem Backward Pass. +Die Kosten für den Forward Pass sind in etwa linear in der Anzahl der Gewichte, +da für jedes Gewicht in etwa eine Addition und Multiplikation nötig ist. +\begin{equation} \label{eq:computational_cost_forward_pass} + \bm z = \bm W\bm x + \bm b +\end{equation} +Die Kosten für den Backward Pass sind ebenfalls in etwa linear, +mit jeweils zwei Additionen und Multiplikationen pro Gewicht. +\begin{equation} \label{eq:computational_cost_backward_pass} + \overline{\bm W} = \overline{\bm h}\bm z^T,\quad\overline{\bm h} = \bm W^T\overline{\bm y} +\end{equation} +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. diff --git a/chapters/Neural_Networks/Neural_Networks_and_Backpropagation.tex b/chapters/Neural_Networks/Neural_Networks_and_Backpropagation.tex deleted file mode 100644 index 84e128a..0000000 --- a/chapters/Neural_Networks/Neural_Networks_and_Backpropagation.tex +++ /dev/null @@ -1,3 +0,0 @@ -\chapter{Neural Networks and Backpropagation}% -\label{cha:Neural Networks and Backpropagation} - diff --git a/images/back_propagation.png b/images/back_propagation.png new file mode 100644 index 0000000..84f55af Binary files /dev/null and b/images/back_propagation.png differ diff --git a/images/g542.png b/images/g542.png new file mode 100644 index 0000000..4b2b734 Binary files /dev/null and b/images/g542.png differ diff --git a/images/multi-layer_perceptron.png b/images/multi-layer_perceptron.png new file mode 100644 index 0000000..2a2a808 Binary files /dev/null and b/images/multi-layer_perceptron.png differ diff --git a/images/multi-layer_perceptron_matrix_form.png b/images/multi-layer_perceptron_matrix_form.png new file mode 100644 index 0000000..5a69eab Binary files /dev/null and b/images/multi-layer_perceptron_matrix_form.png differ diff --git a/images/multi-layer_perceptron_matrix_form.png.png b/images/multi-layer_perceptron_matrix_form.png.png new file mode 100644 index 0000000..4b2b734 Binary files /dev/null and b/images/multi-layer_perceptron_matrix_form.png.png differ diff --git a/images/univariate_logisitc_least_squares_regression.png b/images/univariate_logisitc_least_squares_regression.png new file mode 100644 index 0000000..6d741cd Binary files /dev/null and b/images/univariate_logisitc_least_squares_regression.png differ