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