Merge branch 'master' of raven.am28.uni-tuebingen.de:scientificComputing
This commit is contained in:
commit
0921a2f4ef
@ -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}}}
|
||||
|
@ -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')
|
||||
|
@ -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}.
|
||||
|
Reference in New Issue
Block a user