\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<presentation>
{
  \usetheme{Singapore}
  \setbeamercovered{opaque}
  \usecolortheme{tuebingen}
  \setbeamertemplate{navigation symbols}{}
  \usefonttheme{default}
  \useoutertheme{infolines}
  % \useoutertheme{miniframes}
}

\AtBeginSection[]
{
  \begin{frame}<beamer>
    \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}