\PassOptionsToPackage{table}{xcolor}
\documentclass{custombeamer}

\usepackage[ngerman]{babel}

\usepackage{biblatex}
\nocite{*}
\addbibresource{sources.bib}

\usetikzlibrary{decorations.pathreplacing, positioning}

\usepackage{tabularx}

\title{Machine Learning}
\subtitle{Eine Einführung}
\author{Simon Bruder}
%\titlegraphic{\includegraphics[scale=1.25]{focuslogo.pdf}}
\institute{Christian-von-Bomhard-Schule}
\usepackage{datetime}
\newdate{date}{09}{07}{2019}
\date{\displaydate{date}}

\begin{document}
 \begin{frame}
  \maketitle
 \end{frame}

 \begin{frame}[noframenumbering]
  \tableofcontents
 \end{frame}

 \section{Einsatzgebiete}
 \begin{frame}{Einsatzgebiete}
  \begin{itemize}
   \item{Computerspiele-»KI«}
   \item{Medizinische Diagnostik}
   \item{Personalisierte Werbung}
   \item{Selbstfahrende Autos}
   \item{Spracherkennung}
  \end{itemize}
 \end{frame}

 \section{Praxis: Tic Tac Toe}
 \begin{frame}{Tic Tac Toe}
  \begin{minipage}[t]{.5\textwidth}
   \textbf{Lernen}
   \begin{itemize}
    \item{Computer weiß nur, wann das Spiel gewonnen ist}
    \item{\textbf{Generator} gibt zufällige Züge zurück}
    \item{Wenn gewonnen: \textbf{Diskriminator} wertet Züge von Gewinner auf, Züge von Verlierer ab}
   \end{itemize}
  \end{minipage}%
  \begin{minipage}[t]{.5\textwidth}
   \textbf{Anwenden}
   \begin{itemize}
    \item{\textbf{Generator} weiß für jede Spielsituation, wie erfolgreich ein Zug ist}
    \item{Erfolgreichster Zug wird ausgeführt}
    \item{→ Immer Gewinn oder Unentschieden}
   \end{itemize}
  \end{minipage}

  \vspace{1em}
  \renewcommand*{\o}{$\pmb\bigcirc$}
  \newcommand*{\x}{$\pmb\times$}
  \begin{center}
   \pause
   \ttfamily\begin{tabularx}{7em}{|X|X|X|}
    \x & \o  & \x \\\hline
    1  & \o  & 0.5\\\hline
    \x & 0   & \o \\
   \end{tabularx}
   X am Zug
  \end{center}
 \end{frame}

 \section{Theorie: Neuronale Netzwerke}
 \begin{frame}{Neuronale Netzwerke: Eingabe}
  \begin{center}
   \begin{tikzpicture}
    \onslide<+>\node[] (traffic light) {\includegraphics[height=.75\textheight]{traffic-light-ryg}};
    \onslide<+->\node[] (traffic light) {\includegraphics[height=.75\textheight]{traffic-light-ryg-gray}};
    \onslide<+->
    \draw[decoration={brace, raise=1pt, amplitude=5pt}, decorate] (traffic light.north west) -- node[above=5pt] (width) {$25$} (traffic light.north east);
    \draw[decoration={brace, mirror, raise=1pt, amplitude=5pt}, decorate] (traffic light.south east) -- node[right=5pt] (height) {$75$} (traffic light.north east);
    \onslide<+->
    \node[right=5 of traffic light.north east] (input) {$25 \cdot 75 = 1875$};
    \draw[->, thick] (traffic light.north east) ++ (0.25,0) -- (input);
    \onslide<+->
    \node[below=1em of input] (values) {$[0 .. 255]$ → $[0, 1]$};
    \node[below=1em of values] {\includegraphics[width=.33\textwidth]{traffic-light-ryg-gray-values}};
    \onslide<1-> % I don’t use reveal because I have to do ugly hacks there … wait what?
   \end{tikzpicture}
  \end{center}
 \end{frame}

 \begin{frame}{Neuronale Netzwerke}
  % stolen from https://tex.stackexchange.com/a/153974
  \tikzset{%
    every neuron/.style={
      circle,
      draw,
      minimum size=1cm
    },
    neuron missing/.style={
      draw=none,
      scale=4,
      text height=0.333cm,
      execute at begin node=\color{black}$\vdots$
    },
  }

  \begin{tikzpicture}[x=2.4cm, y=1.5cm, >=stealth, font=\sffamily]

  \foreach \m/\l [count=\y] in {1,2,3,missing,4}
    \node [every neuron/.try, neuron \m/.try] (input-\m) at (0,2.5-\y) {};

  \foreach \m [count=\y] in {1,missing,2}
    \node [every neuron/.try, neuron \m/.try ] (hidden-\m) at (2,2-\y*1.25) {};

  \foreach \m [count=\y] in {1,2,3}
    \node [every neuron/.try, neuron \m/.try ] (output-\m) at (4,1.5-\y) {};

  \foreach \l [count=\i] in {1,2,3,1875}
    \draw [<-] (input-\i) -- ++(-1,0)
      node [above, midway] {$I_{\l}$};

  \foreach \l [count=\i] in {1,n}
    \node [above] at (hidden-\i.north) {$H_\l$};

  \foreach \l [count=\i] in {1,2,3}
    \draw [->] (output-\i) -- ++(1,0)
      node [above, midway] {$O_\l$};

  \foreach \i in {1,...,4}
    \foreach \j in {1,...,2}
      \draw [->] (input-\i) -- (hidden-\j);

  \foreach \i in {1,...,2}
    \foreach \j in {1,...,3}
      \draw [->] (hidden-\i) -- (output-\j);

  \foreach \l [count=\x from 0] in {Input, Hidden, Output}
    \node [align=center, above] at (\x*2,1.9) {\l \\ layer};

  \end{tikzpicture}
 \end{frame}

 \begin{frame}{Graphische Demo}
  \href{https://playground.tensorflow.org/\#activation=tanh&batchSize=10&dataset=gauss&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=4,2&seed=0.90019&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false&discretize_hide=true&numHiddenLayers_hide=true&regularizationRate_hide=true&learningRate_hide=true&batchSize_hide=true&dataset_hide=true&regularization_hide=true&noise_hide=true&problem_hide=true&activation_hide=true&showTestData_hide=false&percTrainData_hide=false}{playground.tensorflow.org}
 \end{frame}

 \section{Training in der Praxis}
 \begin{frame}{Training}
  \pause\begin{minipage}[t]{.30\textwidth}
   \textbf{Computer trainiert sich selbst}

   \begin{itemize}
    \item{Diskriminator hat Regelwerk vorliegen}
    \item{In zufälliger Generation ist auch ein richtiges Ergebnis vorhanden}
    \item{Funktioniert gut für Spiele}
   \end{itemize}
  \end{minipage}\hfill%
  \pause\begin{minipage}[t]{.30\textwidth}
   \textbf{Entwickelnde Menschen als Diskriminator}

   \begin{itemize}
    \item{Menschen geben Eingabe und gewünschte Ausgabe vor}
    \item{Teilweise existieren schon Datensätze}
    \item{Arbeitsaufwändig/Teuer}
   \end{itemize}
  \end{minipage}\hfill%
  \pause\begin{minipage}[t]{.30\textwidth}
   \includegraphics[height=.1\textheight]{im-not-a-robot} \\
   \includegraphics[height=.7\textheight]{captcha}
  \end{minipage}%
 \end{frame}

 \appendix
 \begin{frame}{Quellen}
  \printbibliography[heading=none]
 \end{frame}

 \begin{frame}[focus]
  Nicht ganz verstanden? \\
  Fragen?
 \end{frame}

 \begin{frame}{Bonus/Weiterführende Informationen}
  \begin{itemize}
   \item{Videoserie: \href{https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi}{3Blue1Brown: Neural networks}}
  \end{itemize}
 \end{frame}
\end{document}
