diff --git a/header.tex b/header.tex index e1a16fe..8118614 100644 --- a/header.tex +++ b/header.tex @@ -167,6 +167,9 @@ \newcommand{\reZpN}{\mathds{R^+_0}} \newcommand{\koZ}{\mathds{C}} +%%%%% english terms: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\enterm}[1]{``#1''} + %%%%% code/matlab commands: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{textcomp} \newcommand{\code}[1]{\setlength{\fboxsep}{0.5ex}\colorbox{blue!10}{\texttt{#1}}} diff --git a/regression/code/errorSurface.m b/regression/code/errorSurface.m index 421c11c..40d225f 100644 --- a/regression/code/errorSurface.m +++ b/regression/code/errorSurface.m @@ -5,16 +5,13 @@ load('lin_regression.mat'); slopes = -5:0.25:5; intercepts = -30:1:30; - error_surf = zeros(length(slopes), length(intercepts)); - for i = 1:length(slopes) for j = 1:length(intercepts) error_surf(i,j) = lsqError([slopes(i), intercepts(j)], x, y); end end - % plot the error surface figure() [N,M] = meshgrid(intercepts, slopes); @@ -25,7 +22,7 @@ zlabel('error') set(gca,'xtick', (-5:2.5:5)) grid on view(3) + set(gcf, 'paperunits', 'centimeters', 'papersize', [15, 15], ... 'paperposition', [0., 0., 15, 15]) - -saveas(gcf, 'error_surface', 'pdf') \ No newline at end of file +saveas(gcf, 'error_surface', 'pdf') diff --git a/regression/lecture/regression.tex b/regression/lecture/regression.tex index 1eb22a4..ba7faf5 100644 --- a/regression/lecture/regression.tex +++ b/regression/lecture/regression.tex @@ -1,64 +1,57 @@ \chapter{\tr{Optimization and Gradient Descent}{Optimierung und Gradientenabstiegsverfahren}} -Ein sehr \"ubliches Problem ist, dass die Abh\"angigkeit von -Messwerten von einem Input Parameter durch ein Modell erkl\"art werden -soll. Die Frage ist, wie man die beste Parametrisierung des Modells -findet. Den Prozess der Prarmeteranpassung nennt man auch Optimierung -oder English Fitting. Betrachtet man zum Beispiel die Punktewolke in -Abbildung \ref{linregressiondatafig} liegt es nahe einen -(verrauschten) linearen Zusammenhang zwischen Einganggr\"{\ss}e -(Input) und Systemantwort (output) zu postulieren. - -\begin{figure} - \includegraphics[width=0.45\columnwidth]{lin_regress.pdf} - \caption{\textbf{Blick auf die Rohdaten.} F\"ur eine Reihe von - Eingangswerten, z.B. Stimulusintensit\"aten wurden die Antworten - eines Systems gemessen.}\label{linregressiondatafig} +Ein sehr h\"aufiges Problem ist, dass die Abh\"angigkeit von +Messwerten von einer Eingangsgr\"o{\ss}e durch ein Modell erkl\"art +werden soll. Das Modell enth\"alt \"ublicherweise einen oder mehrere +Parameter, die den Zusammenhang modifizieren. Wie soll die beste +Parameterisierung des Modells gefunden werden, so dass das Modell die +Daten am besten beschreibt? Dieser Prozess der Parameteranpassung ist +ein Optimierungsproblem, der besser als Kurvenfit bekannt ist +(\enterm{curve fitting}). + +\begin{figure}[tp] + \includegraphics[width=0.32\columnwidth]{lin_regress}\hfill + \includegraphics[width=0.32\columnwidth]{lin_regress_slope}\hfill + \includegraphics[width=0.32\columnwidth]{lin_regress_abscissa} + \titlecaption{.}{F\"ur eine Reihe von Eingangswerten $x$, + z.B. Stimulusintensit\"aten, wurden die Antworten $y$ eines + Systems gemessen (links). Der postulierte lineare Zusammenhang hat + als freie Parameter die Steigung (mitte) und den + $y$-Achsenabschnitt (rechts).}\label{linregressiondatafig} \end{figure} -Wir nehmen an, dass die lineare Geradengleichung ein guten Modell -f\"ur das zugrundeliegende System ist. -\[f_{m,n}(x) = m\cdot x + n \] +Die Punktewolke in \figref{linregressiondatafig} legt +zum Beispiel nahe einen (verrauschten) linearen Zusammenhang zwischen +der Eingangsgr\"o{\ss}e $x$ (\enterm{input}) und der Systemantwort +$y$ (\enterm{output}) zu postulieren. +Wir nehmen also an, dass die Geradengleichung +\[y = f_{m,n}(x) = m\cdot x + n \] ein gutes Modell f\"ur das +zugrundeliegende System sein k\"onnte (Abbildung +\ref{linregressiondatafig}). Die Geradengleichung hat die +beiden Parameter Steigung $m$ und $y$-Achsenabschnitt $n$ und es wird +die Kombination von $m$ und $n$ gesucht, die die Systemantwort am +besten vorhersagt. -wobei $x$ die Eingangswerte, $f_{m,n}(x)$ die Systemantwort, $m$ die Steigung -und $n$ der y-Achsenabschnitt darstellen (Abbildung -\ref{linregressionslopeintersectfig}). In dieser Gleichung gibt es nur zwei Parameter -und es wird die Kombination von Steigung ($m$) und y-Achsenabschnitt -($n$) gesucht, die die Systemantwort am besten vorhersagen. +In folgenden Kapitel werden wir anhand dieses Beispiels zeigen, +welchen Methoden hinter einem Kurvenfit stecken, wie also die optimale +Kombination aus Steigung und $y$-Achsenabschnitt gefunden werden kann. -\begin{figure} - \begin{minipage}[t]{0.45\columnwidth} - \includegraphics[width=\textwidth]{figures/lin_regress_slope.pdf} - \end{minipage} - \begin{minipage}[t]{0.45\columnwidth} - \includegraphics[width=\textwidth]{figures/lin_regress_abscissa.pdf} - \end{minipage} - \caption{\textbf{Ver\"anderungen der Parameter und ihre Folgen.} Die - linke Abbildung zeigt den Effekt einer Ver\"anderung der Steigung - w\"ahrend die reche Abbildung die Ver\"anderung des - y-Achsenabschnittes - illustriert. }\label{linregressionslopeintersectfig} -\end{figure} -Wie wird nun die optimale Kombination aus Steigung und y-Achsenabschnitt gefunden? - -\section{Methode der kleinsten Quadratischen Abweichung} +\section{Methode der kleinsten quadratischen Abweichung} Um die optimale Parameterkombination zu finden muss zun\"achst ein Ma{\ss} f\"ur den Unterschied zwischen den tats\"achlich gemessenen und den unter Verwendung eines Parametersatzes vorhergesagten Werten definiert werden. Eine der am h\"aufigsten verwendeten -Fehlersch\"atzungen ist der \emph{mittlere qaudratische Abstand} (im -Englischen auch mean square error genannt, Abbildung \ref{leastsquareerrorfig}). - -\[ e = \frac{1}{N}\sum^{N}_{1=1} \left( y_i - y^{est}_i)\right )^2\] - +Fehlersch\"atzungen ist der \emph{mittlere qaudratische Abstand} +(``mean square error'', Abbildung \ref{leastsquareerrorfig}) +\[ e = \frac{1}{N}\sum^{N}_{1=1} \left( y_i - y^{est}_i\right)^2 \; ,\] wobei $e$ der Fehler, $N$ die Anzahl gemessener Datenpunkte $y_i$ die Messwerte und $y^{est}_i$ die Vorhersagewerte an den enstprechenden Stellen sind. -\begin{figure} - \includegraphics[width=0.5\columnwidth]{figures/linear_least_squares.pdf} +\begin{figure}[tp] + \includegraphics[width=0.5\columnwidth]{linear_least_squares} \caption{\textbf{Ermittlung des Mittleren quadratischen Abstands.} Der Abstand zwischen der Vorhersage und dem Modell wird f\"ur jeden gemessenen Datenpunkt ermittelt. Die Differenz zwischen @@ -102,15 +95,15 @@ Passung zu optimieren. \section{Fehlerfl\"ache} -Die beiden Parameter $m$ und $n$ spanngen eine F\"ache auf. F\"ur jede +Die beiden Parameter $m$ und $n$ spannen eine F\"ache auf. F\"ur jede Kombination aus $m$ und $n$ erhalten wir Vorhersagewerte, die von den gemessenen Werten abweichen werden. Es gibt also f\"ur jeden Punkt in der sogenannten \emph{Fehlerfl\"ache} einen Fehler. In diesem Beispiel -eines 2-dimensionalen Problems (zwei freie Parameter) kann man die -Fehlerfl\"ache graphisch durch einen 3-d ``surface-plot'' -darstellen. Wobei auf der x- und y-Achse die beiden Parameter und auf -der z-Achse der Fehlerwert aufgetragen wird (Abbildung -\ref{errorsurfacefig}). +eines 2-dimensionalen Problems (zwei freie Parameter) kann die +Fehlerfl\"ache graphisch durch einen 3-d ``surface-plot'' dargestellt +werden. Dabei werden auf der $x$- und der $y$-Achse die beiden +Parameter und auf der $z$-Achse der Fehlerwert aufgetragen +(\figref{errorsurfacefig}). \clearpage \begin{figure} @@ -122,13 +115,12 @@ der z-Achse der Fehlerwert aufgetragen wird (Abbildung und der Fehlerwert geplottet.}\label{errorsurfacefig} \end{figure} -Die Fehlerfl\"ache zeigt uns nun an bei welcher Parameterkombination -der Fehler minimal, beziehungsweise die Parametertrisierung optimal an +Die Fehlerfl\"ache zeigt an, bei welcher Parameterkombination +der Fehler minimal, beziehungsweise die Parameterisierung optimal an die Daten angepasst ist. Wie kann die Fehlerfunktion und die durch sie -definierte Fehlerfl\"ache nun benutzt werden um den +definierte Fehlerfl\"ache nun benutzt werden, um den Optimierungsprozess zu leiten? - \begin{exercise}{errorSurface.m}{}\label{errorsurfaceexercise} Ladet den Datensatz \textit{lin\_regression.mat} in den Workspace. und schreibt ein Skript \code{errorSurface.m} dass den @@ -150,16 +142,15 @@ Position berechnet werden. Die Steigung einer Funktion an einer Stelle ist die Ableitung der Funktion an dieser Stelle, die durch den Differenzquotienten f\"ur -unendlich kleine Schritte bestimmt wird. - +unendlich kleine Schritte $h$ bestimmt wird. \[f'(x) = \lim\limits_{h \rightarrow 0} \frac{f(x + h) - f(x)}{h} \] Bei unserem Fittingproblem h\"angt die Fehlerfunktion von zwei Parametern ab und wir bestimmen die Steigung partiell f\"ur jeden -Parameter einzeln. Die Partielle Ableitung nach \code{m} sieht so aus: +Parameter einzeln. Die partielle Ableitung nach $m$ sieht so aus: \[\frac{\partial g(m,n)}{\partial m} = \lim\limits_{h \rightarrow 0} \frac{g(m + h, n) - g(m,n)}{h}\] Da wir die Ver\"anderung des Fehlers in Abh\"angigkeit der beiden -Parameter bewerten ist der Gradient an der Stelle $(m,n)$ ein -zweielementigen Vektor der aus den partiellen Ableitungen nach $m$ und +Parameter bewerten, ist der Gradient an der Stelle $(m,n)$ ein +zweielementigen Vektor, der aus den partiellen Ableitungen nach $m$ und nach $n$ besteht. Die Richtung des Gradienten zeigt die Richtung der gr\"o{\ss}ten Steigung an, seine L\"ange repr\"asentiert die St\"arke des Gef\"alles. @@ -196,10 +187,10 @@ gelangen sollte man also die entgegengesetzte Richtung einschlagen. \end{exercise} \begin{exercise}{errorGradient.m}{} - Benutzt die Funktion aus verheriger \"Ubung (\ref{gradientexercise}) + Benutzt die Funktion aus vorheriger \"Ubung (\ref{gradientexercise}), um f\"ur die jede Parameterkombination aus der Fehlerfl\"ache (\"Ubung \ref{errorsurfaceexercise}) auch den Gradienten zu - berechnen und darzustellen. Vektoren im Raum kann man mithilfe der + berechnen und darzustellen. Vektoren im Raum k\"onnen mithilfe der Funktion \code{quiver} geplottet werden. \end{exercise} @@ -214,21 +205,22 @@ f\"ur den Abstieg lautet: \begin{enumerate} \item Starte mit einer beliebigen Parameterkombination $p_0 = (m_0, n_0)$. -\item Wiederhole die folgenden Schritte solange, wie die der Gradient \"uber einer bestimmten - Schwelle ist (Es kann z.B. die L\"ange des Gradienten \code{norm(gradient) > 0.1} - benutzt werden): - \begin{itemize} - \item Berechne den Gradienten an der akutellen Position $p_t$. - \item Gehe einen kleinen Schritt ($\epsilon = 0.01$) in die entgegensetzte Richtung des - Gradienten: - \[p_{t+1} = p_t - \epsilon \cdot \bigtriangledown g(m_t, n_t)\] - \end{itemize} +\item \label{computegradient} Berechne den Gradienten an der akutellen Position $p_i$. +\item Wenn die L\"ange des Gradienten einen bestimmten Wert + unterschreitet, haben wir das Minum gefunden und k\"onnen die Suche + abbrechen. Wir suchen ja das Minimum, bei dem der Gradient gleich + Null ist. Da aus numerischen Gr\"unden der Gradient nie exakt Null + werden wird, k\"onnen wir nur fordern, dass er hinreichend klein + wird (z.B. \code{norm(gradient) < 0.1}). +\item \label{gradientstep} Gehe einen kleinen Schritt ($\epsilon = + 0.01$) in die entgegensetzte Richtung des Gradienten: + \[p_{i+1} = p_i - \epsilon \cdot \bigtriangledown g(m_i, n_i)\] +\item Wiederhole die Schritte \ref{computegradient} -- \ref{gradientstep}. \end{enumerate} - Abbildung \ref{gradientdescentfig} zeigt den Verlauf des Gradientenabstiegs. Von einer Startposition aus wird die Position -solange ver\"andert, wie der Gradint eine bestimmte Gr\"o{\ss}e +solange ver\"andert, wie der Gradient eine bestimmte Gr\"o{\ss}e \"uberschreitet. An den Stellen, an denen der Gradient sehr stark ist ist auch die Ver\"anderung der Position gro{\ss} und der Abstand der Punkte in Abbildung \ref{gradientdescentfig} gro{\ss}.