\documentclass{beamer} \usepackage{xcolor} \usepackage{listings} \usepackage{pgf} %\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade} %\usepackage{multimedia} \usepackage[english]{babel} \usepackage{movie15} \usepackage[latin1]{inputenc} \usepackage{times} \usepackage{amsmath} \usepackage{bm} \usepackage[T1]{fontenc} \usepackage[scaled=.90]{helvet} \usepackage{scalefnt} \usepackage{tikz} \usepackage{ textcomp } \usepackage{soul} \usepackage{hyperref} \definecolor{lightblue}{rgb}{.7,.7,1.} \definecolor{mygreen}{rgb}{0,1.,0} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \mode { \usetheme{Singapore} \setbeamercovered{opaque} \usecolortheme{tuebingen} \setbeamertemplate{navigation symbols}{} \usefonttheme{default} \useoutertheme{infolines} % \useoutertheme{miniframes} } \AtBeginSection[] { \begin{frame} \begin{center} \Huge \insertsectionhead \end{center} % \frametitle{\insertsectionhead} % \tableofcontents[currentsection,hideothersubsections] \end{frame} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 \setbeamertemplate{blocks}[rounded][shadow=true] \title[]{Scientific Computing -- Statistik} \author[]{Jan Grewe, Fabian Sinz\\Abteilung f\"ur Neuroethologie\\ Universit\"at T\"ubingen} \institute[Wissenschaftliche Datenverarbeitung]{} \date{12.10.2015 - 06.11.2015} %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}} \subject{Einf\"uhrung in die wissenschaftliche Datenverarbeitung} \vspace{1em} \titlegraphic{ \includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB} } %%%%%%%%%% configuration for code \lstset{ basicstyle=\ttfamily, numbers=left, showstringspaces=false, language=Matlab, commentstyle=\itshape\color{darkgray}, keywordstyle=\color{blue}, stringstyle=\color{green}, backgroundcolor=\color{blue!10}, breaklines=true, breakautoindent=true, columns=flexible, frame=single, captionpos=b, xleftmargin=1em, xrightmargin=1em, aboveskip=10pt } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\mycite}[1]{ \begin{flushright} \tiny \color{black!80} #1 \end{flushright} } \newcommand{\code}[1]{\texttt{#1}} \input{../../latex/environments.tex} \makeatother \begin{document} \begin{frame}[plain] \frametitle{} \vspace{-1cm} \titlepage % erzeugt Titelseite \end{frame} \begin{frame}[plain] \huge{Curve Fitting/Optimierung mit dem Gradientenabstiegsverfahren} \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{\"Ubersicht} \begin{enumerate} \item Das Problem: Wir haben beobachtete Daten und ein Modell, das die Daten erkl\"aren soll. \item Wie finden wir die Parameter (des Modells), die die Daten am Besten erkl\"aren? \item L\"osung: Anpassen der Parameter an die Daten (Fitting). \item Wie macht man das? \end{enumerate} \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Ein 1-D Beispiel} \begin{columns} \begin{column}{6.25cm} \begin{figure} \includegraphics[width=1.\columnwidth]{figures/one_d_problem_a.pdf} \end{figure} \end{column} \begin{column}{6.5cm} \begin{itemize} \item z.B. eine Reihe Me{\ss}werte bei einer Bedingung. \item Ich suche den y-Wert, der die Daten am besten repr\"asentiert. \item F\"ur jeden m\"oglichen y-Wert wird die mittlere quadratische Abweichung zu allen Daten berechnet:\\ \[ error = \frac{1}{N}\sum_{i=1}^{N}(y_i - y_{test})^2 \] \end{itemize} \end{column} \end{columns}\pause Wie finde ich den besten Wert heraus? \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Ein 1-D Beispiel} \only<1> { \begin{columns} \begin{column}{4.5cm} \begin{figure} \includegraphics[width=1.\columnwidth]{figures/one_d_problem_b.pdf} \end{figure} \end{column} \begin{column}{8cm} \begin{itemize} \item Man folgt dem Gradienten! \item Der Gradient kann numerisch berechnet werden indem man ein (sehr kleines) ``Steigungsdreieck'' an den Positionen anlegt.\\ \vspace{0.25cm} $\frac{\Delta error}{\Delta y} = \frac{error(y+h) - error(y)}{h}$ \end{itemize} \end{column} \end{columns} } \only<2>{ \begin{columns} \begin{column}{4.5cm} \begin{figure} \includegraphics[width=1.\columnwidth]{figures/one_d_problem_c.pdf} \end{figure} \end{column} \begin{column}{8cm} \begin{itemize} \item Man folgt dem Gradienten! \item Der Gradient kann numerisch berechnet werden indem man ein (sehr kleines) ``Steigungsdreieck'' an den Positionen anlegt.\\ \vspace{0.25cm} $\frac{\Delta error}{\Delta y} = \frac{error(y+h) - error(y)}{h}$ \item Da, wo der Gradient seine Nullstelle hat, liegt der beste y-Wert. \end{itemize} \end{column} \end{columns} } \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regression} \only<1-2> { \begin{figure} \includegraphics[width=0.45\columnwidth]{figures/lin_regress.pdf} \end{figure} } \only<2>{ Nehmen wir mal einen linearen Zusammenhang zwischen \textit{Input} und \textit{Output} an. ($y = m\cdot x + n$) } \only<3> { Ver\"anderung der Steigung: \begin{figure} \includegraphics[width=0.45\columnwidth]{figures/lin_regress_slope.pdf} \end{figure} } \only<4> { Ver\"anderung des y-Achsenabschnitts: \begin{figure} \includegraphics[width=0.45\columnwidth]{figures/lin_regress_abscissa.pdf} \end{figure} } \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regresssion} \huge{Welche Kombination ist die richtige?} \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung} \begin{columns} \begin{column}{4.5cm} \begin{figure} \includegraphics[width=\columnwidth]{figures/linear_least_squares.pdf} \end{figure} \footnotesize{\url{http://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)}} \end{column} \begin{column}{7cm} \begin{enumerate} \item Die am h\"aufigsten angewandte Methode ist die der kleinsten quadratischen Abweichungen. \item Es wird versucht die Summe der quadratischen Abweichung zu minimieren. \end{enumerate} \[g(m,n) = \frac{1}{N}\sum^{N}_{1=1} \left( y_i - f_{m, n}(x_i)\right )^2\] \end{column} \end{columns} \end{frame} \begin{frame}[fragile] \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichun} \begin{itemize} \item Was heisst das: Minimieren der Summe der kleinsten quadratischen Abweichungen? \item Kann man einen Algortihmus zur L\"osung des Problems erstellen? \item Kann man das visualisieren? \end{itemize}\pause \begin{columns} \begin{column}{5.5cm} \tiny \begin{lstlisting} x_range = linspace(-1, 1, 20); y_range = linspace(-5, 5, 20); [X, Y] = meshgrid(x_range, y_range); Z = X.^2 + Y.^2; surf(X, Y, Z); colormap('autumn') xlabel('x') ylabel('y') zlabel('z') \end{lstlisting} \end{column} \begin{column}{5.5cm} \begin{figure} \includegraphics[width=0.9\columnwidth]{figures/surface.pdf} \end{figure} \end{column} \end{columns} \end{frame} \begin{frame}[fragile] \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung} \textbf{Aufgabe} \begin{enumerate} \item Ladet den Datensatz \textit{lin\_regression.mat} in den Workspace. Wie sehen die Daten aus? \item Schreibt eine Funktion \code{lsq\_error}, die den Fehler brechnet: \begin{itemize} \item \"Ubernimmt einen 2-elementigen Vektor, der die Parameter \code{m} und \code{n} enth\"alt, die x-Werte und y-Werte. \item Die Funktion gibt den Fehler zur\"uck. \end{itemize} \item Schreibt ein Skript dass den Fehler in Abh\"angigkeit von \code{m} und \code{n} als surface plot darstellt (\code{surf} Funktion). \item Wie k\"onnen wir diesen Plot benutzen um die beste Kombination zu finden? \item Wo lieft die beste Kombination? \end{enumerate} \end{frame} \begin{frame}[fragile] \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung} \begin{itemize} \item Wie findet man die Extrempunkte in einer Kurve?\pause \item Ableitung der Funktion auf Null setzen und nach x aufl\"osen. \item Definition der Ableitung:\\ \vspace{0.25cm} \begin{center} $ f'(x) = \lim\limits_{h \rightarrow 0} \frac{f(x + h) - f(x)}{h} $ \vspace{0.25cm}\pause \end{center} \item Bei zwei Parametern $g(m,n)$ k\"onnen wie die partielle Ableitung bez\"uglich eines Parameters benutzen um die Ver\"anderung des Fehlers bei Ver\"anderung eines Parameters auszuwerten. \item Partielle Ableitung nach \code{m}?\\\pause \vspace{0.25cm} \begin{center} $\frac{\partial g(m,n)}{\partial m} = \lim\limits_{h \rightarrow 0} \frac{g(m + h, n) - g(m,n)}{h}$ \vspace{0.25cm} \end{center} \end{itemize} \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regression - Gradientenabstieg} \large{Der Gradient:} \begin{center} $\bigtriangledown g(m,n) = \left( \frac{\partial g(m,n)}{\partial m}, \frac{\partial g(m,n)}{\partial n}\right)$ \end{center} Ist der Vektor mit den partiellen Ableitungen nach \code{m} und \code{n}. \pause Numerisch kann die Ableitung durch einen sehr kleinen Schritt angen\"ahert werden. \begin{center} $\frac{\partial g(m,n)}{\partial m} = \lim\limits_{h \rightarrow 0} \frac{g(m + h, n) - g(m,n)}{h} \approx \frac{g(m + h, n) - g(m,n)}{h}$ \end{center} f\"ur sehr kleine Schritte \code{h}. \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regression - Gradientenabstieg} Plotten des Gradientenfeldes: \begin{itemize} \item Ladet die Daten in \code{lin\_regession.mat}. \item Schreibt eine Funktion \code{lsq\_gradient.m} in dem gleichen Muster wie \code{lsq\_error.m}. Die Funktion berechnet den Gradienten an einer Position (Kombination von Parametern), wenn ein kleiner Schritt gemacht wird (\code{h=1e-6;}). \item Variiert \code{m} im Bereich von -2 bis +5 und \code{n} im Bereich -10 bis 10. \item Plottet die Fehlerfl\"ache als \code{surface} und \code{contour} plot in die gleiche Abbildung. \item F\"ugt die Gradienten als \code{quiver} plot hinzu. \item Was sagen die Pfeile? Wie passen Pfeile und Fl\"ache zusammen? \end{itemize} \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Lineare Regression - Gradientenabstieg} \begin{itemize} \item Der Gradient zeigt in die Richtung des gr\"o{\ss}ten \textbf{Anstiegs}. \pause \item Wie kann der Gradient nun dazu genutzt werden zum Minimum zu kommen?\pause \item \textbf{Man nehme: $-\bigtriangledown g(m,n)$!}\pause \vspace{0.25cm} \item Wir haben jetzt alle Zutaten um den Gradientenabstieg zu formulieren. \end{itemize} \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Gradientenabstieg - Algorithums} \begin{enumerate} \item Starte mit einer beliebigen Parameterkombination $p_0 = (m_0, n_0)$. \item Wiederhole solange wie die der Gradient \"uber einer bestimmten Schwelle ist: \begin{itemize} \item Berechne den Gradienten an der akutellen Position $p_t$. \item Gehe einen kleinen Schritt in die entgegensetzte Richtung des Gradienten:\\ \begin{center} $p_{t+1} = p_t - \epsilon \cdot \bigtriangledown g(m_t, n_t)$ \end{center} wobei $\epsilon$ eine kleine Zahl (0.01) ist. \end{itemize} \end{enumerate} \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Gradientenabstieg - \"Ubung} \begin{enumerate} \item Implementiert den Grandientenabstieg f\"ur das Fitten der linearen Geradengleichung an die Daten. \item Plottet f\"ur jeden Schritt den surface plot und die aktuelle Position als roten Punkt (nutzt \code{plot3}). \item Plottet f\"ur jeden Schritt den Fit in einen separaten plot. \item Nutzt \code{pause(0.1)} nach jedem Schritt um die Entwicklung des Fits zu beobachten. \end{enumerate} \end{frame} \begin{frame} \frametitle{Fitting und Optimierung} \framesubtitle{Gradientenabstieg - \"Ubung II} \begin{columns} \begin{column}{6cm} \begin{figure} \includegraphics[width=1\columnwidth]{figures/charging_curve.pdf} \end{figure} \end{column} \begin{column}{7cm} \begin{itemize} \item Ladet die Daten aus der \code{membraneVoltage.mat}. \item Plottet die Rohdaten. \item Fittet folgende Funktion an die Daten:\\ \begin{center} $f_{A,\tau}(t) = A \cdot \left(1 - e^{-\frac{t}{\tau}}\right )$ \end{center} \item An welcher Stelle muss der Code von oben ver\"andert werden? \item Plottet die Daten zusammen mit dem Fit. \end{itemize} \end{column} \end{columns} \end{frame} \begin{frame}[fragile] \frametitle{Fitting und Optimierung} \framesubtitle{Fitting mit Matlab} \begin{itemize} \item Es gibt mehrere Funktionen in Matlab, die eine Optimierung automatisch durchf\"uhren. \item z.B. \code{fminunc, lsqcurvefit, fminsearch, lsqnonlin, ...} \item Einige der Funktionen stecken allerdings in der \textit{Optimization Toolbox}, die nicht zum Standard Matlab geh\"ort. \end{itemize} \begin{lstlisting} function param = estimated_regression(x, y, start_parameter) objective_function = @(p)(lsq_error(p, x, y)); param = fminunc(objective_function, start_parameter) \end{lstlisting} \end{frame} \end{document}