Merge branch 'master' of raven.am28.uni-tuebingen.de:scientificComputing

This commit is contained in:
Jan Grewe 2015-11-09 19:00:59 +01:00
commit 0921a2f4ef
3 changed files with 70 additions and 78 deletions

View File

@ -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}}}

View File

@ -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')
saveas(gcf, 'error_surface', 'pdf')

View File

@ -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}.