83 lines
3.0 KiB
TeX
83 lines
3.0 KiB
TeX
\documentclass[12pt,a4paper,pdftex]{exam}
|
|
|
|
\usepackage[german]{babel}
|
|
\usepackage{natbib}
|
|
\usepackage{graphicx}
|
|
\usepackage[small]{caption}
|
|
\usepackage{sidecap}
|
|
\usepackage{pslatex}
|
|
\usepackage{amsmath}
|
|
\usepackage{amssymb}
|
|
\setlength{\marginparwidth}{2cm}
|
|
\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref}
|
|
|
|
%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
|
|
\pagestyle{headandfoot}
|
|
\ifprintanswers
|
|
\newcommand{\stitle}{: Solutions}
|
|
\else
|
|
\newcommand{\stitle}{}
|
|
\fi
|
|
\header{{\bfseries\large Exercise 11\stitle}}{{\bfseries\large Gradient descent}}{{\bfseries\large January 9th, 2018}}
|
|
\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email:
|
|
jan.grewe@uni-tuebingen.de}
|
|
\runningfooter{}{\thepage}{}
|
|
|
|
\setlength{\baselineskip}{15pt}
|
|
\setlength{\parindent}{0.0cm}
|
|
\setlength{\parskip}{0.3cm}
|
|
\renewcommand{\baselinestretch}{1.15}
|
|
|
|
\newcommand{\code}[1]{\texttt{#1}}
|
|
\renewcommand{\solutiontitle}{\noindent\textbf{Solution:}\par\noindent}
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\begin{document}
|
|
|
|
\input{instructions}
|
|
|
|
\begin{questions}
|
|
|
|
\question Implementiere den Gradientenabstieg f\"ur das Problem der
|
|
Parameteranpassung der linearen Geradengleichung an die Messdaten in
|
|
der Datei \emph{lin\_regression.mat}.
|
|
|
|
Die daf\"ur ben\"otigten Zutaten haben wir aus den vorangegangenen
|
|
\"Ubungen bereits vorbereitet. Wir brauchen: 1. Die Fehlerfunktion
|
|
(\code{meanSquareError()}), 2. die Zielfunktion (\code{lsqError()})
|
|
und 3. den Gradienten (\code{lsqGradient()}). Der Algorithmus f\"ur
|
|
den Abstieg lautet:
|
|
|
|
\begin{enumerate}
|
|
\item Starte mit einer beliebigen Parameterkombination $p_0 = (m_0,
|
|
b_0)$.
|
|
\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 \nabla f_{cost}(m_i, b_i)\]
|
|
\item Wiederhole die Schritte \ref{computegradient} --
|
|
\ref{gradientstep}.
|
|
\end{enumerate}
|
|
|
|
|
|
\begin{parts}
|
|
\part Implementiere den Gradientenabstieg und merke Dir f\"ur jeden Schritt
|
|
die Parameterkombination und den zugehörigen Fehler.
|
|
\part Erstelle einen Plot der die Originaldaten sowie die Vorhersage mit der
|
|
besten Parameterkombination darstellt.
|
|
\part Stelle in einem weiteren Plot die Entwicklung des Fehlers als Funktion der
|
|
Optimierungsschritte dar.
|
|
\end{parts}
|
|
|
|
\end{questions}
|
|
|
|
\end{document}
|