diff --git a/doc/Grundlagen_des_maschinellen_lernens.aux b/doc/Grundlagen_des_maschinellen_lernens.aux index 4883c89..aefa978 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.aux +++ b/doc/Grundlagen_des_maschinellen_lernens.aux @@ -24,121 +24,123 @@ \babel@aux{ngerman}{} \abx@aux@cite{1} \abx@aux@segm{0}{0}{1} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1}Was ist maschinelles Lernen?}{2}{section.1}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Klassifizierungsprobleme}{2}{subsection.1.1}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Bin\IeC {\"a}rklassifizierung\relax }}{3}{figure.caption.2}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {1}Was ist maschinelles Lernen?}{3}{section.1}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Klassifizierungsaufgaben}{3}{subsection.1.1}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Bin\IeC {\"a}rklassifizierung\relax }}{4}{figure.caption.2}\protected@file@percent } \providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}} -\newlabel{Classification}{{1}{3}{Binärklassifizierung\relax }{figure.caption.2}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Regressionsprobleme}{3}{subsection.1.2}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Regression\relax }}{3}{figure.caption.3}\protected@file@percent } -\newlabel{Regression}{{2}{3}{Regression\relax }{figure.caption.3}{}} +\newlabel{Classification}{{1}{4}{Binärklassifizierung\relax }{figure.caption.2}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Regressionsprobleme}{4}{subsection.1.2}\protected@file@percent } \abx@aux@cite{4} \abx@aux@segm{0}{0}{4} \abx@aux@cite{5} \abx@aux@segm{0}{0}{5} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Gefahren von maschinellem Lernen}{4}{subsection.1.3}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.1}Die Daten}{4}{subsubsection.1.3.1}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.2}Overfitting}{5}{subsubsection.1.3.2}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Overfitting\relax }}{5}{figure.caption.4}\protected@file@percent } -\newlabel{Overfitting}{{3}{5}{Overfitting\relax }{figure.caption.4}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2}Verschiedene Techniken maschinellen Lernens}{6}{section.2}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}\IeC {\"U}berwachtes Lernen}{6}{subsection.2.1}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Un\IeC {\"u}berwachtes Lernen}{6}{subsection.2.2}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Best\IeC {\"a}rkendes Lernen}{6}{subsection.2.3}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Regression\relax }}{5}{figure.caption.3}\protected@file@percent } +\newlabel{Regression}{{2}{5}{Regression\relax }{figure.caption.3}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {1.3}Gefahren von maschinellem Lernen}{5}{subsection.1.3}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.1}Die Daten}{6}{subsubsection.1.3.1}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {1.3.2}Overfitting}{6}{subsubsection.1.3.2}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Klassengrenzen mit und ohne Overfitting\relax }}{7}{figure.caption.4}\protected@file@percent } +\newlabel{Overfitting}{{3}{7}{Klassengrenzen mit und ohne Overfitting\relax }{figure.caption.4}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {2}Verschiedene Techniken maschinellen Lernens}{7}{section.2}\protected@file@percent } +\newlabel{sec:verschiedene-techniken-maschinellen-lernens}{{2}{7}{Verschiedene Techniken maschinellen Lernens}{section.2}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}\IeC {\"U}berwachtes Lernen}{8}{subsection.2.1}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Un\IeC {\"u}berwachtes Lernen}{8}{subsection.2.2}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Best\IeC {\"a}rkendes Lernen}{8}{subsection.2.3}\protected@file@percent } \abx@aux@cite{2} \abx@aux@segm{0}{0}{2} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3}Neuronale Netze}{7}{section.3}\protected@file@percent } -\newlabel{sec:neuronale-netze}{{3}{7}{Neuronale Netze}{section.3}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Maschinelles Lernen und menschliches Lernen}{7}{subsection.3.1}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Neuron \newline Quelle: simple.wikipedia.org/wiki/File:Neuron.svg\newline Copyright: CC Attribution-Share Alike von Nutzer Dhp1080,\newline bearbeitet}}{7}{figure.caption.5}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Der Aufbau eines neuronalen Netzes}{8}{subsection.3.2}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Berechnung des Ausgabevektors}{8}{subsection.3.3}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Ein einfaches neuronales Netz\relax }}{9}{figure.caption.6}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Der Plot der Sigmoid Funktion $\sigma (x)=\frac {e^x}{e^x+1}$\relax }}{10}{figure.caption.7}\protected@file@percent } -\newlabel{Sigmoid}{{6}{10}{Der Plot der Sigmoid Funktion $\sigma (x)=\frac {e^x}{e^x+1}$\relax }{figure.caption.7}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Formel zur Berechnung eines Ausgabevektors aus einem Eingabevektor durch ein Layer Neuronen. \relax }}{11}{figure.caption.8}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Der Lernprozess}{11}{subsection.3.4}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Fehlerfunktionen}{11}{subsection.3.5}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {3}Neuronale Netze}{9}{section.3}\protected@file@percent } +\newlabel{sec:neuronale-netze}{{3}{9}{Neuronale Netze}{section.3}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Maschinelles Lernen und menschliches Lernen}{9}{subsection.3.1}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Neuron \newline Quelle: simple.wikipedia.org/wiki/File:Neuron.svg\newline Copyright: CC Attribution-Share Alike von Nutzer Dhp1080,\newline bearbeitet}}{9}{figure.caption.5}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Der Aufbau eines neuronalen Netzes}{10}{subsection.3.2}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Ein einfaches neuronales Netz\relax }}{11}{figure.caption.6}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Berechnung des Ausgabevektors}{11}{subsection.3.3}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Der Plot der Sigmoid Funktion $\sigma (x)=\frac {e^x}{e^x+1}$\relax }}{12}{figure.caption.7}\protected@file@percent } +\newlabel{Sigmoid}{{6}{12}{Der Plot der Sigmoid Funktion $\sigma (x)=\frac {e^x}{e^x+1}$\relax }{figure.caption.7}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Formel zur Berechnung eines Ausgabevektors aus einem Eingabevektor durch eine Schicht von Neuronen. \relax }}{13}{figure.caption.8}\protected@file@percent } \abx@aux@cite{3} \abx@aux@segm{0}{0}{3} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Der Lernprozess}{14}{subsection.3.4}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Fehlerfunktionen}{14}{subsection.3.5}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.1}MSE -- Durchschnittlicher quadratischer Fehler}{14}{subsubsection.3.5.1}\protected@file@percent } \abx@aux@segm{0}{0}{3} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.1}MSE -- Durchschnittlicher quadratischer Fehler}{12}{subsubsection.3.5.1}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen quadratischen Fehler\relax }}{12}{figure.caption.9}\protected@file@percent } -\newlabel{MSE_equation}{{8}{12}{Die Gleichung für den durchschnittlichen quadratischen Fehler\relax }{figure.caption.9}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.2}MAE -- Durchschnitztlicher absoluter Fehler}{12}{subsubsection.3.5.2}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen absoluten Fehler\relax }}{12}{figure.caption.10}\protected@file@percent } -\newlabel{MAE_equation}{{9}{12}{Die Gleichung für den durchschnittlichen absoluten Fehler\relax }{figure.caption.10}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.3}Kreuzentropiefehler}{12}{subsubsection.3.5.3}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Der Graph der Kreuzentropie Fehlerfunktion wenn das tats\IeC {\"a}chliche Label 1 ist\relax }}{13}{figure.caption.11}\protected@file@percent } -\newlabel{CEL_Graph}{{10}{13}{Der Graph der Kreuzentropie Fehlerfunktion wenn das tatsächliche Label 1 ist\relax }{figure.caption.11}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces Die Gleichung f\IeC {\"u}r den Kreuzentropiefehler\relax }}{13}{figure.caption.12}\protected@file@percent } -\newlabel{CEL_Function}{{11}{13}{Die Gleichung für den Kreuzentropiefehler\relax }{figure.caption.12}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen absoluten Fehler\relax }}{14}{figure.caption.13}\protected@file@percent } -\newlabel{CEL_Finction_cummulative}{{12}{14}{Die Gleichung für den durchschnittlichen absoluten Fehler\relax }{figure.caption.13}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Gradientenverfahren und Backpropagation}{14}{subsection.3.6}\protected@file@percent } -\newlabel{Gradient_section}{{3.6}{14}{Gradientenverfahren und Backpropagation}{subsection.3.6}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces Die Gleichung f\IeC {\"u}r den Gradienten der Fehlerfunktion\relax }}{14}{figure.caption.14}\protected@file@percent } -\newlabel{Gradient_Function}{{13}{14}{Die Gleichung für den Gradienten der Fehlerfunktion\relax }{figure.caption.14}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.1}Lernrate}{14}{subsubsection.3.6.1}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces Die Gleichung f\IeC {\"u}r die Anpassung eines einzelnen Parameters\relax }}{14}{figure.caption.15}\protected@file@percent } -\newlabel{Learning_Rate_Function}{{14}{14}{Die Gleichung für die Anpassung eines einzelnen Parameters\relax }{figure.caption.15}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {15}{\ignorespaces $\eta $ ist hier zu gro\IeC {\ss } gew\IeC {\"a}hlt\relax }}{15}{figure.caption.16}\protected@file@percent } -\newlabel{Learning_Rate_Graphic}{{15}{15}{$\eta $ ist hier zu groß gewählt\relax }{figure.caption.16}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.7}Verschiedene Layerarten}{15}{subsection.3.7}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.1}Convolutional Layers}{16}{subsubsection.3.7.1}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {16}{\ignorespaces Eine Verbildlichung der Vorg\IeC {\"a}nge in einem convolutional Layer\newline Aus einer Animation von\newline https://github.com/vdumoulin/conv\_arithmetic/blob/master/README.md Vincent Dumoulin, Francesco Visin - A guide to convolution arithmetic for deep learning (BibTeX)}}{16}{figure.caption.17}\protected@file@percent } -\newlabel{Convolution_illustration}{{16}{16}{Eine Verbildlichung der Vorgänge in einem convolutional Layer\newline Aus einer Animation von\newline https://github.com/vdumoulin/conv\_arithmetic/blob/master/README.md\\ Vincent Dumoulin, Francesco Visin - A guide to convolution arithmetic for deep learning (BibTeX)}{figure.caption.17}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {17}{\ignorespaces Erkennt obere horizontale Kanten\relax }}{17}{figure.caption.18}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {18}{\ignorespaces Erkennt linke vertikale Kanten\relax }}{17}{figure.caption.18}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {19}{\ignorespaces Erkennt untere horizontale Kanten\relax }}{17}{figure.caption.18}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {20}{\ignorespaces Erkennt rechte vertikale Kanten\relax }}{17}{figure.caption.18}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {21}{\ignorespaces Das Beispielbild aus dem Mnist Datensatz\relax }}{17}{figure.caption.19}\protected@file@percent } -\newlabel{Filter_Example_raw}{{21}{17}{Das Beispielbild aus dem Mnist Datensatz\relax }{figure.caption.19}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.\relax }}{17}{figure.caption.20}\protected@file@percent } -\newlabel{Filter_output dargestellt}{{22}{17}{Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.\relax }{figure.caption.20}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {23}{\ignorespaces Beispiele f\IeC {\"u}r low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}}{18}{figure.caption.21}\protected@file@percent } -\newlabel{HL_features_conv}{{23}{18}{Beispiele für low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}{figure.caption.21}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.2}Pooling Layers}{18}{subsubsection.3.7.2}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {24}{\ignorespaces Max Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling CC BY NC SA Lizenz}}{19}{figure.caption.22}\protected@file@percent } -\newlabel{Maxpool}{{24}{19}{Max Pooling mit $2\times 2$ großen Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling\\ CC BY NC SA Lizenz}{figure.caption.22}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {25}{\ignorespaces Average Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}}{19}{figure.caption.23}\protected@file@percent } -\newlabel{AvgPool}{{25}{19}{Average Pooling mit $2\times 2$ großen Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}{figure.caption.23}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {26}{\ignorespaces Gegen\IeC {\"u}berstellung von Max und Average Pooling\relax }}{20}{figure.caption.24}\protected@file@percent } -\newlabel{Pooling_Mnist}{{26}{20}{Gegenüberstellung von Max und Average Pooling\relax }{figure.caption.24}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4}PyTorch}{20}{section.4}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Datenvorbereitung}{21}{subsection.4.1}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {27}{\ignorespaces Der Code zum Laden des MNIST Datensatzes\relax }}{21}{figure.caption.25}\protected@file@percent } -\newlabel{MNIST_Dataloader_Code}{{27}{21}{Der Code zum Laden des MNIST Datensatzes\relax }{figure.caption.25}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen quadratischen Fehler\relax }}{15}{figure.caption.9}\protected@file@percent } +\newlabel{MSE_equation}{{8}{15}{Die Gleichung für den durchschnittlichen quadratischen Fehler\relax }{figure.caption.9}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.2}MAE -- Durchschnittlicher absoluter Fehler}{15}{subsubsection.3.5.2}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen absoluten Fehler\relax }}{15}{figure.caption.10}\protected@file@percent } +\newlabel{MAE_equation}{{9}{15}{Die Gleichung für den durchschnittlichen absoluten Fehler\relax }{figure.caption.10}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.3}Kreuzentropiefehler}{15}{subsubsection.3.5.3}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Der Graph der Kreuzentropie Fehlerfunktion wenn das tats\IeC {\"a}chliche Label 1 ist\relax }}{16}{figure.caption.11}\protected@file@percent } +\newlabel{CEL_Graph}{{10}{16}{Der Graph der Kreuzentropie Fehlerfunktion wenn das tatsächliche Label 1 ist\relax }{figure.caption.11}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {11}{\ignorespaces Die Gleichung f\IeC {\"u}r den Kreuzentropiefehler\relax }}{16}{figure.caption.12}\protected@file@percent } +\newlabel{CEL_Function}{{11}{16}{Die Gleichung für den Kreuzentropiefehler\relax }{figure.caption.12}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {12}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen absoluten Fehler\relax }}{17}{figure.caption.13}\protected@file@percent } +\newlabel{CEL_Finction_cummulative}{{12}{17}{Die Gleichung für den durchschnittlichen absoluten Fehler\relax }{figure.caption.13}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Gradientenverfahren und Backpropagation}{17}{subsection.3.6}\protected@file@percent } +\newlabel{Gradient_section}{{3.6}{17}{Gradientenverfahren und Backpropagation}{subsection.3.6}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {13}{\ignorespaces Die Gleichung f\IeC {\"u}r den Gradienten der Fehlerfunktion\relax }}{17}{figure.caption.14}\protected@file@percent } +\newlabel{Gradient_Function}{{13}{17}{Die Gleichung für den Gradienten der Fehlerfunktion\relax }{figure.caption.14}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.6.1}Lernrate}{17}{subsubsection.3.6.1}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {14}{\ignorespaces Die Gleichung f\IeC {\"u}r die Anpassung eines einzelnen Parameters\relax }}{18}{figure.caption.15}\protected@file@percent } +\newlabel{Learning_Rate_Function}{{14}{18}{Die Gleichung für die Anpassung eines einzelnen Parameters\relax }{figure.caption.15}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {15}{\ignorespaces $\eta $ ist hier zu gro\IeC {\ss } gew\IeC {\"a}hlt\relax }}{18}{figure.caption.16}\protected@file@percent } +\newlabel{Learning_Rate_Graphic}{{15}{18}{$\eta $ ist hier zu groß gewählt\relax }{figure.caption.16}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {3.7}Verschiedene Layerarten}{18}{subsection.3.7}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.1}Convolutional Layers}{19}{subsubsection.3.7.1}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {16}{\ignorespaces Eine Verbildlichung der Vorg\IeC {\"a}nge in einem convolutional Layer\newline Aus einer Animation von\newline https://github.com/vdumoulin/conv\_arithmetic/blob/master/README.md Vincent Dumoulin, Francesco Visin - A guide to convolution arithmetic for deep learning (BibTeX)}}{20}{figure.caption.17}\protected@file@percent } +\newlabel{Convolution_illustration}{{16}{20}{Eine Verbildlichung der Vorgänge in einem convolutional Layer\newline Aus einer Animation von\newline https://github.com/vdumoulin/conv\_arithmetic/blob/master/README.md\\ Vincent Dumoulin, Francesco Visin - A guide to convolution arithmetic for deep learning (BibTeX)}{figure.caption.17}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {17}{\ignorespaces Erkennt obere horizontale Kanten\relax }}{20}{figure.caption.18}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {18}{\ignorespaces Erkennt linke vertikale Kanten\relax }}{20}{figure.caption.18}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {19}{\ignorespaces Erkennt untere horizontale Kanten\relax }}{20}{figure.caption.18}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {20}{\ignorespaces Erkennt rechte vertikale Kanten\relax }}{20}{figure.caption.18}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {21}{\ignorespaces Das Beispielbild aus dem Mnist Datensatz\relax }}{21}{figure.caption.19}\protected@file@percent } +\newlabel{Filter_Example_raw}{{21}{21}{Das Beispielbild aus dem Mnist Datensatz\relax }{figure.caption.19}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.\relax }}{21}{figure.caption.20}\protected@file@percent } +\newlabel{Filter_output dargestellt}{{22}{21}{Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.\relax }{figure.caption.20}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {23}{\ignorespaces Beispiele f\IeC {\"u}r low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}}{22}{figure.caption.21}\protected@file@percent } +\newlabel{HL_features_conv}{{23}{22}{Beispiele für low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}{figure.caption.21}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.7.2}Pooling Layers}{22}{subsubsection.3.7.2}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {24}{\ignorespaces Max Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling CC BY NC SA Lizenz}}{23}{figure.caption.22}\protected@file@percent } +\newlabel{Maxpool}{{24}{23}{Max Pooling mit $2\times 2$ großen Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling\\ CC BY NC SA Lizenz}{figure.caption.22}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {25}{\ignorespaces Average Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}}{23}{figure.caption.23}\protected@file@percent } +\newlabel{AvgPool}{{25}{23}{Average Pooling mit $2\times 2$ großen Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}{figure.caption.23}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {26}{\ignorespaces Gegen\IeC {\"u}berstellung von Max und Average Pooling\relax }}{24}{figure.caption.24}\protected@file@percent } +\newlabel{Pooling_Mnist}{{26}{24}{Gegenüberstellung von Max und Average Pooling\relax }{figure.caption.24}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {4}PyTorch}{24}{section.4}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Datenvorbereitung}{24}{subsection.4.1}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {27}{\ignorespaces Der Code zum Laden des MNIST Datensatzes\relax }}{25}{figure.caption.25}\protected@file@percent } +\newlabel{MNIST_Dataloader_Code}{{27}{25}{Der Code zum Laden des MNIST Datensatzes\relax }{figure.caption.25}{}} \abx@aux@cite{6} \abx@aux@segm{0}{0}{6} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Definieren des Netzes}{22}{subsection.4.2}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {28}{\ignorespaces Code um ein einfaches Netz in Pytorch zu definieren\relax }}{23}{figure.caption.26}\protected@file@percent } -\newlabel{Net_simple_definition}{{28}{23}{Code um ein einfaches Netz in Pytorch zu definieren\relax }{figure.caption.26}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Definieren des Netzes}{27}{subsection.4.2}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {28}{\ignorespaces Code um ein einfaches Netz in Pytorch zu definieren\relax }}{27}{figure.caption.26}\protected@file@percent } +\newlabel{Net_simple_definition}{{28}{27}{Code um ein einfaches Netz in Pytorch zu definieren\relax }{figure.caption.26}{}} \abx@aux@cite{7} \abx@aux@segm{0}{0}{7} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Trainieren des Netzes}{24}{subsection.4.3}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {29}{\ignorespaces Code um das Netz auf einem Datensatz zu trainieren\relax }}{24}{figure.caption.27}\protected@file@percent } -\newlabel{Code_train_loop}{{29}{24}{Code um das Netz auf einem Datensatz zu trainieren\relax }{figure.caption.27}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Pytorch und weights and biases}{25}{subsection.4.4}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {5}Ein Klassifizierungsnetzwerk f\IeC {\"u}r handgeschriebene Ziffern}{26}{section.5}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Aufgabe}{26}{subsection.5.1}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Der MNIST Datensatz}{26}{subsection.5.2}\protected@file@percent } -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Das Netz}{26}{subsection.5.3}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {30}{\ignorespaces Der Code um das in diesem Projekt genutzte Klassifizierungsnetz zu definieren.\relax }}{27}{figure.caption.28}\protected@file@percent } -\newlabel{net}{{30}{27}{Der Code um das in diesem Projekt genutzte Klassifizierungsnetz zu definieren.\relax }{figure.caption.28}{}} -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {31}{\ignorespaces Der Graph der ReLu Aktivierungsfunktion\relax }}{27}{figure.caption.29}\protected@file@percent } -\newlabel{ReLu}{{31}{27}{Der Graph der ReLu Aktivierungsfunktion\relax }{figure.caption.29}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Ergebnis}{28}{subsection.5.4}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {32}{\ignorespaces Ein Plot der Trefferquote aufgetragen gegen die Trainingszeit\relax }}{28}{figure.caption.30}\protected@file@percent } -\newlabel{accuracy}{{32}{28}{Ein Plot der Trefferquote aufgetragen gegen die Trainingszeit\relax }{figure.caption.30}{}} -\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6}Schlusswort}{28}{section.6}\protected@file@percent } -\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {33}{\ignorespaces Ein Plot des Kreuzentropiefehlers aufgetragen gegen die Trainingszeit\relax }}{29}{figure.caption.31}\protected@file@percent } -\newlabel{loss}{{33}{29}{Ein Plot des Kreuzentropiefehlers aufgetragen gegen die Trainingszeit\relax }{figure.caption.31}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Trainieren des Netzes}{28}{subsection.4.3}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {29}{\ignorespaces Code um das Netz auf einem Datensatz zu trainieren\relax }}{29}{figure.caption.27}\protected@file@percent } +\newlabel{Code_train_loop}{{29}{29}{Code um das Netz auf einem Datensatz zu trainieren\relax }{figure.caption.27}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Pytorch und weights and biases}{30}{subsection.4.4}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {5}Ein Klassifizierungsnetzwerk f\IeC {\"u}r handgeschriebene Ziffern}{30}{section.5}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Aufgabe}{31}{subsection.5.1}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Der MNIST Datensatz}{31}{subsection.5.2}\protected@file@percent } +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.3}Das Netz}{31}{subsection.5.3}\protected@file@percent } +\newlabel{sec:das-netz}{{5.3}{31}{Das Netz}{subsection.5.3}{}} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {30}{\ignorespaces Der Code um das in diesem Projekt genutzte Klassifizierungsnetz zu definieren.\relax }}{32}{figure.caption.28}\protected@file@percent } +\newlabel{net}{{30}{32}{Der Code um das in diesem Projekt genutzte Klassifizierungsnetz zu definieren.\relax }{figure.caption.28}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {subsection}{\numberline {5.4}Ergebnis}{32}{subsection.5.4}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {31}{\ignorespaces Der Graph der ReLu Aktivierungsfunktion\relax }}{33}{figure.caption.29}\protected@file@percent } +\newlabel{ReLu}{{31}{33}{Der Graph der ReLu Aktivierungsfunktion\relax }{figure.caption.29}{}} +\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{\numberline {6}Schluss}{33}{section.6}\protected@file@percent } +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {32}{\ignorespaces Ein Plot der Trefferquote aufgetragen gegen die Trainingszeit\relax }}{34}{figure.caption.30}\protected@file@percent } +\newlabel{accuracy}{{32}{34}{Ein Plot der Trefferquote aufgetragen gegen die Trainingszeit\relax }{figure.caption.30}{}} \bibcite{1}{1} \bibcite{2}{2} \bibcite{3}{3} \bibcite{4}{4} \bibcite{5}{5} +\@writefile{lof}{\defcounter {refsection}{0}\relax }\@writefile{lof}{\contentsline {figure}{\numberline {33}{\ignorespaces Ein Plot des Kreuzentropiefehlers aufgetragen gegen die Trainingszeit\relax }}{35}{figure.caption.31}\protected@file@percent } +\newlabel{loss}{{33}{35}{Ein Plot des Kreuzentropiefehlers aufgetragen gegen die Trainingszeit\relax }{figure.caption.31}{}} \bibcite{6}{6} \bibcite{7}{7} \gdef\minted@oldcachelist{, diff --git a/doc/Grundlagen_des_maschinellen_lernens.lof b/doc/Grundlagen_des_maschinellen_lernens.lof index 6ca51d9..511b0f2 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.lof +++ b/doc/Grundlagen_des_maschinellen_lernens.lof @@ -1,68 +1,68 @@ \boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax \babel@toc {ngerman}{} \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {1}{\ignorespaces Bin\IeC {\"a}rklassifizierung\relax }}{3}{figure.caption.2}% +\contentsline {figure}{\numberline {1}{\ignorespaces Bin\IeC {\"a}rklassifizierung\relax }}{4}{figure.caption.2}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {2}{\ignorespaces Regression\relax }}{3}{figure.caption.3}% +\contentsline {figure}{\numberline {2}{\ignorespaces Regression\relax }}{5}{figure.caption.3}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {3}{\ignorespaces Overfitting\relax }}{5}{figure.caption.4}% +\contentsline {figure}{\numberline {3}{\ignorespaces Klassengrenzen mit und ohne Overfitting\relax }}{7}{figure.caption.4}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {4}{\ignorespaces Neuron \newline Quelle: simple.wikipedia.org/wiki/File:Neuron.svg\newline Copyright: CC Attribution-Share Alike von Nutzer Dhp1080,\newline bearbeitet}}{7}{figure.caption.5}% +\contentsline {figure}{\numberline {4}{\ignorespaces Neuron \newline Quelle: simple.wikipedia.org/wiki/File:Neuron.svg\newline Copyright: CC Attribution-Share Alike von Nutzer Dhp1080,\newline bearbeitet}}{9}{figure.caption.5}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {5}{\ignorespaces Ein einfaches neuronales Netz\relax }}{9}{figure.caption.6}% +\contentsline {figure}{\numberline {5}{\ignorespaces Ein einfaches neuronales Netz\relax }}{11}{figure.caption.6}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {6}{\ignorespaces Der Plot der Sigmoid Funktion $\sigma (x)=\frac {e^x}{e^x+1}$\relax }}{10}{figure.caption.7}% +\contentsline {figure}{\numberline {6}{\ignorespaces Der Plot der Sigmoid Funktion $\sigma (x)=\frac {e^x}{e^x+1}$\relax }}{12}{figure.caption.7}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {7}{\ignorespaces Formel zur Berechnung eines Ausgabevektors aus einem Eingabevektor durch ein Layer Neuronen. \relax }}{11}{figure.caption.8}% +\contentsline {figure}{\numberline {7}{\ignorespaces Formel zur Berechnung eines Ausgabevektors aus einem Eingabevektor durch eine Schicht von Neuronen. \relax }}{13}{figure.caption.8}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {8}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen quadratischen Fehler\relax }}{12}{figure.caption.9}% +\contentsline {figure}{\numberline {8}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen quadratischen Fehler\relax }}{15}{figure.caption.9}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {9}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen absoluten Fehler\relax }}{12}{figure.caption.10}% +\contentsline {figure}{\numberline {9}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen absoluten Fehler\relax }}{15}{figure.caption.10}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {10}{\ignorespaces Der Graph der Kreuzentropie Fehlerfunktion wenn das tats\IeC {\"a}chliche Label 1 ist\relax }}{13}{figure.caption.11}% +\contentsline {figure}{\numberline {10}{\ignorespaces Der Graph der Kreuzentropie Fehlerfunktion wenn das tats\IeC {\"a}chliche Label 1 ist\relax }}{16}{figure.caption.11}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {11}{\ignorespaces Die Gleichung f\IeC {\"u}r den Kreuzentropiefehler\relax }}{13}{figure.caption.12}% +\contentsline {figure}{\numberline {11}{\ignorespaces Die Gleichung f\IeC {\"u}r den Kreuzentropiefehler\relax }}{16}{figure.caption.12}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {12}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen absoluten Fehler\relax }}{14}{figure.caption.13}% +\contentsline {figure}{\numberline {12}{\ignorespaces Die Gleichung f\IeC {\"u}r den durchschnittlichen absoluten Fehler\relax }}{17}{figure.caption.13}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {13}{\ignorespaces Die Gleichung f\IeC {\"u}r den Gradienten der Fehlerfunktion\relax }}{14}{figure.caption.14}% +\contentsline {figure}{\numberline {13}{\ignorespaces Die Gleichung f\IeC {\"u}r den Gradienten der Fehlerfunktion\relax }}{17}{figure.caption.14}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {14}{\ignorespaces Die Gleichung f\IeC {\"u}r die Anpassung eines einzelnen Parameters\relax }}{14}{figure.caption.15}% +\contentsline {figure}{\numberline {14}{\ignorespaces Die Gleichung f\IeC {\"u}r die Anpassung eines einzelnen Parameters\relax }}{18}{figure.caption.15}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {15}{\ignorespaces $\eta $ ist hier zu gro\IeC {\ss } gew\IeC {\"a}hlt\relax }}{15}{figure.caption.16}% +\contentsline {figure}{\numberline {15}{\ignorespaces $\eta $ ist hier zu gro\IeC {\ss } gew\IeC {\"a}hlt\relax }}{18}{figure.caption.16}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {16}{\ignorespaces Eine Verbildlichung der Vorg\IeC {\"a}nge in einem convolutional Layer\newline Aus einer Animation von\newline https://github.com/vdumoulin/conv\_arithmetic/blob/master/README.md Vincent Dumoulin, Francesco Visin - A guide to convolution arithmetic for deep learning (BibTeX)}}{16}{figure.caption.17}% +\contentsline {figure}{\numberline {16}{\ignorespaces Eine Verbildlichung der Vorg\IeC {\"a}nge in einem convolutional Layer\newline Aus einer Animation von\newline https://github.com/vdumoulin/conv\_arithmetic/blob/master/README.md Vincent Dumoulin, Francesco Visin - A guide to convolution arithmetic for deep learning (BibTeX)}}{20}{figure.caption.17}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {17}{\ignorespaces Erkennt obere horizontale Kanten\relax }}{17}{figure.caption.18}% +\contentsline {figure}{\numberline {17}{\ignorespaces Erkennt obere horizontale Kanten\relax }}{20}{figure.caption.18}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {18}{\ignorespaces Erkennt linke vertikale Kanten\relax }}{17}{figure.caption.18}% +\contentsline {figure}{\numberline {18}{\ignorespaces Erkennt linke vertikale Kanten\relax }}{20}{figure.caption.18}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {19}{\ignorespaces Erkennt untere horizontale Kanten\relax }}{17}{figure.caption.18}% +\contentsline {figure}{\numberline {19}{\ignorespaces Erkennt untere horizontale Kanten\relax }}{20}{figure.caption.18}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {20}{\ignorespaces Erkennt rechte vertikale Kanten\relax }}{17}{figure.caption.18}% +\contentsline {figure}{\numberline {20}{\ignorespaces Erkennt rechte vertikale Kanten\relax }}{20}{figure.caption.18}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {21}{\ignorespaces Das Beispielbild aus dem Mnist Datensatz\relax }}{17}{figure.caption.19}% +\contentsline {figure}{\numberline {21}{\ignorespaces Das Beispielbild aus dem Mnist Datensatz\relax }}{21}{figure.caption.19}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {22}{\ignorespaces Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.\relax }}{17}{figure.caption.20}% +\contentsline {figure}{\numberline {22}{\ignorespaces Die jeweils oben stehenden Filter wurden auf das Beispielbild angewandt.\relax }}{21}{figure.caption.20}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {23}{\ignorespaces Beispiele f\IeC {\"u}r low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}}{18}{figure.caption.21}% +\contentsline {figure}{\numberline {23}{\ignorespaces Beispiele f\IeC {\"u}r low- mid- und high-level Features in Convolutional Neural Nets\newline Quelle: https://tvirdi.github.io/2017-10-29/cnn/}}{22}{figure.caption.21}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {24}{\ignorespaces Max Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling CC BY NC SA Lizenz}}{19}{figure.caption.22}% +\contentsline {figure}{\numberline {24}{\ignorespaces Max Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Quelle: https://computersciencewiki.org/index.php/Max-pooling\_/\_Pooling CC BY NC SA Lizenz}}{23}{figure.caption.22}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {25}{\ignorespaces Average Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}}{19}{figure.caption.23}% +\contentsline {figure}{\numberline {25}{\ignorespaces Average Pooling mit $2\times 2$ gro\IeC {\ss }en Submatritzen\newline Aus: Dominguez-Morales, Juan Pedro. (2018). Neuromorphic audio processing through real-time embedded spiking neural networks. Abbildung 33}}{23}{figure.caption.23}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {26}{\ignorespaces Gegen\IeC {\"u}berstellung von Max und Average Pooling\relax }}{20}{figure.caption.24}% +\contentsline {figure}{\numberline {26}{\ignorespaces Gegen\IeC {\"u}berstellung von Max und Average Pooling\relax }}{24}{figure.caption.24}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {27}{\ignorespaces Der Code zum Laden des MNIST Datensatzes\relax }}{21}{figure.caption.25}% +\contentsline {figure}{\numberline {27}{\ignorespaces Der Code zum Laden des MNIST Datensatzes\relax }}{25}{figure.caption.25}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {28}{\ignorespaces Code um ein einfaches Netz in Pytorch zu definieren\relax }}{23}{figure.caption.26}% +\contentsline {figure}{\numberline {28}{\ignorespaces Code um ein einfaches Netz in Pytorch zu definieren\relax }}{27}{figure.caption.26}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {29}{\ignorespaces Code um das Netz auf einem Datensatz zu trainieren\relax }}{24}{figure.caption.27}% +\contentsline {figure}{\numberline {29}{\ignorespaces Code um das Netz auf einem Datensatz zu trainieren\relax }}{29}{figure.caption.27}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {30}{\ignorespaces Der Code um das in diesem Projekt genutzte Klassifizierungsnetz zu definieren.\relax }}{27}{figure.caption.28}% +\contentsline {figure}{\numberline {30}{\ignorespaces Der Code um das in diesem Projekt genutzte Klassifizierungsnetz zu definieren.\relax }}{32}{figure.caption.28}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {31}{\ignorespaces Der Graph der ReLu Aktivierungsfunktion\relax }}{27}{figure.caption.29}% +\contentsline {figure}{\numberline {31}{\ignorespaces Der Graph der ReLu Aktivierungsfunktion\relax }}{33}{figure.caption.29}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {32}{\ignorespaces Ein Plot der Trefferquote aufgetragen gegen die Trainingszeit\relax }}{28}{figure.caption.30}% +\contentsline {figure}{\numberline {32}{\ignorespaces Ein Plot der Trefferquote aufgetragen gegen die Trainingszeit\relax }}{34}{figure.caption.30}% \defcounter {refsection}{0}\relax -\contentsline {figure}{\numberline {33}{\ignorespaces Ein Plot des Kreuzentropiefehlers aufgetragen gegen die Trainingszeit\relax }}{29}{figure.caption.31}% +\contentsline {figure}{\numberline {33}{\ignorespaces Ein Plot des Kreuzentropiefehlers aufgetragen gegen die Trainingszeit\relax }}{35}{figure.caption.31}% diff --git a/doc/Grundlagen_des_maschinellen_lernens.log b/doc/Grundlagen_des_maschinellen_lernens.log index 82831e3..3d9ac3e 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.log +++ b/doc/Grundlagen_des_maschinellen_lernens.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.1.22) 4 FEB 2020 23:18 +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.1.22) 10 FEB 2020 10:56 entering extended mode \write18 enabled. %&-line parsing enabled. @@ -7,8 +7,8 @@ entering extended mode LaTeX2e <2018-12-01> (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls Document Class: article 2018/09/03 v1.4i Standard LaTeX document class -(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo -File: size10.clo 2018/09/03 v1.4i Standard LaTeX file (size option) +(/usr/share/texlive/texmf-dist/tex/latex/base/size11.clo +File: size11.clo 2018/09/03 v1.4i Standard LaTeX file (size option) ) \c@part=\count80 \c@section=\count81 @@ -1498,138 +1498,146 @@ File: T1LinuxBiolinumT-TLF.fd 2017/03/20 (autoinst) Font definitions for T1/Lin uxBiolinumT-TLF. ) LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be -(Font) scaled to size 10.0pt on input line 37. -LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be -(Font) scaled to size 17.28pt on input line 41. -LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be -(Font) scaled to size 24.88pt on input line 41. -LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be -(Font) scaled to size 20.74pt on input line 41. -LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be -(Font) scaled to size 14.4pt on input line 41. +(Font) scaled to size 10.95pt on input line 37. -Overfull \hbox (5.0pt too wide) in paragraph at lines 41--41 - | - [] +Package Fancyhdr Warning: \headheight is too small (12.0pt): +Make it at least 13.59999pt. +We now make it that large for the rest of the document. +This may cause the page layout to be inconsistent, however. + +[1 + +] LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be -(Font) scaled to size 12.0pt on input line 41. -LaTeX Font Info: Try loading font information for OT1+txr on input line 41. -(/usr/share/texlive/texmf-dist/tex/latex/txfonts/ot1txr.fd +(Font) scaled to size 17.28pt on input line 42. +LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be +(Font) scaled to size 24.88pt on input line 42. +LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be +(Font) scaled to size 20.74pt on input line 42. +LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be +(Font) scaled to size 14.4pt on input line 42. +LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/m/n' will be +(Font) scaled to size 12.0pt on input line 42. +LaTeX Font Info: Try loading font information for OT1+txr on input line 42. + (/usr/share/texlive/texmf-dist/tex/latex/txfonts/ot1txr.fd File: ot1txr.fd 2000/12/15 v3.1 ) -LaTeX Font Info: Try loading font information for U+txmia on input line 41. +LaTeX Font Info: Try loading font information for U+txmia on input line 42. (/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxmia.fd File: utxmia.fd 2000/12/15 v3.1 ) -LaTeX Font Info: Try loading font information for U+txsya on input line 41. +LaTeX Font Info: Try loading font information for U+txsya on input line 42. (/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsya.fd File: utxsya.fd 2000/12/15 v3.1 ) -LaTeX Font Info: Try loading font information for U+txsyb on input line 41. +LaTeX Font Info: Try loading font information for U+txsyb on input line 42. (/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyb.fd File: utxsyb.fd 2000/12/15 v3.1 ) -LaTeX Font Info: Try loading font information for U+txsyc on input line 41. +LaTeX Font Info: Try loading font information for U+txsyc on input line 42. (/usr/share/texlive/texmf-dist/tex/latex/txfonts/utxsyc.fd File: utxsyc.fd 2000/12/15 v3.1 -) [1 - -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./Grundlagen_des_maschine -llen_lernens.toc -LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/bx/n' in size <10> not av -ailable +)pdfTeX warning (ext4): destination with the same identifier (name{page.}) has +been already used, duplicate ignored + + \relax +l.42 \end{titlepage} + [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] +(./Grundlagen_des_maschinellen_lernens.toc +LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/bx/n' in size <10.95> not + available (Font) Font shape `T1/LinuxBiolinumT-TLF/b/n' tried instead on inp ut line 4. LaTeX Font Info: Font shape `T1/LinuxBiolinumT-TLF/b/n' will be -(Font) scaled to size 10.0pt on input line 4. +(Font) scaled to size 10.95pt on input line 4. ) \tf@toc=\write8 \openout8 = `Grundlagen_des_maschinellen_lernens.toc'. -[1] + [1] [2] -LaTeX Warning: Citation '1' on page 2 undefined on input line 49. +LaTeX Warning: Citation '1' on page 3 undefined on input line 50. -<../graphics/Classification.png, id=199, 467.5869pt x 464.6961pt> +<../graphics/Classification.png, id=206, 467.5869pt x 464.6961pt> File: ../graphics/Classification.png Graphic file (type png) -Package pdftex.def Info: ../graphics/Classification.png used on input line 62. +Package pdftex.def Info: ../graphics/Classification.png used on input line 63. -(pdftex.def) Requested size: 137.9979pt x 137.14088pt. -[2] -<../graphics/Regression.png, id=206, 467.5869pt x 464.6961pt> +(pdftex.def) Requested size: 143.9978pt x 143.10414pt. +[3] +<../graphics/Regression.png, id=213, 467.5869pt x 464.6961pt> File: ../graphics/Regression.png Graphic file (type png) -Package pdftex.def Info: ../graphics/Regression.png used on input line 72. -(pdftex.def) Requested size: 137.9979pt x 137.14088pt. - [3 <../graphics/classification.png> <../graphics/regression.png>] - -LaTeX Warning: Citation '4' on page 4 undefined on input line 80. - - -LaTeX Warning: Citation '5' on page 4 undefined on input line 84. - -[4] -<../graphics/overfitting.png, id=223, 467.5869pt x 529.0164pt> -File: ../graphics/overfitting.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/overfitting.png used on input line 91. -(pdftex.def) Requested size: 207.0021pt x 234.1967pt. - -Overfull \hbox (1.84744pt too wide) in paragraph at lines 88--98 -\T1/LinuxBiolinumT-TLF/m/n/10 Overfitting ist ein häu-fig auf-tre-ten-des Pro-b -lem bei Klas-si-fi-zie-rungs-auf-ga-ben. Die Klas- - [] - -[5 <../graphics/overfitting.png>] [6] -<../graphics/Neuron.png, id=241, 299.9205pt x 158.994pt> -File: ../graphics/Neuron.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/Neuron.png used on input line 115. -(pdftex.def) Requested size: 299.91975pt x 158.9936pt. - - -LaTeX Warning: Citation '2' on page 7 undefined on input line 121. - -[7 <../graphics/Neuron.png>] -<../graphics/Neural_Net.png, id=249, 548.16795pt x 432.8973pt> -File: ../graphics/Neural_Net.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/Neural_Net.png used on input line 126. -(pdftex.def) Requested size: 345.0pt x 272.45592pt. - -Underfull \hbox (badness 10000) in paragraph at lines 123--130 - - [] +Package pdftex.def Info: ../graphics/Regression.png used on input line 73. +(pdftex.def) Requested size: 143.9978pt x 143.10414pt. LaTeX Warning: `h' float specifier changed to `ht'. +[4 <../graphics/classification.png>] + +LaTeX Warning: Citation '4' on page 5 undefined on input line 81. + + +LaTeX Warning: Citation '5' on page 5 undefined on input line 85. + +[5 <../graphics/regression.png>] +<../graphics/overfitting.png, id=231, 467.5869pt x 529.0164pt> +File: ../graphics/overfitting.png Graphic file (type png) + +Package pdftex.def Info: ../graphics/overfitting.png used on input line 92. +(pdftex.def) Requested size: 216.0022pt x 244.37566pt. + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[6] [7 <../graphics/overfitting.png>] +Overfull \hbox (8.48325pt too wide) in paragraph at lines 103--104 +\T1/LinuxBiolinumT-TLF/m/n/10.95 so-wie die ge-wünsch-te Aus-ga-be sind be-kann +t. Dies trifft so-wohl auf Klassifizierungs- + [] + [8] +<../graphics/Neuron.png, id=253, 299.9205pt x 158.994pt> +File: ../graphics/Neuron.png Graphic file (type png) + +Package pdftex.def Info: ../graphics/Neuron.png used on input line 116. +(pdftex.def) Requested size: 299.91975pt x 158.9936pt. + + +LaTeX Warning: Citation '2' on page 9 undefined on input line 122. + +[9 <../graphics/Neuron.png>] +<../graphics/Neural_Net.png, id=262, 548.16795pt x 432.8973pt> +File: ../graphics/Neural_Net.png Graphic file (type png) + +Package pdftex.def Info: ../graphics/Neural_Net.png used on input line 127. +(pdftex.def) Requested size: 360.0pt x 284.29953pt. + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[10] Missing character: There is no . in font nullfont! Missing character: There is no 0 in font nullfont! Missing character: There is no 1 in font nullfont! Missing character: There is no p in font nullfont! Missing character: There is no t in font nullfont! + [11 <../graphics/Neural_Net.png>] [12] [13] + +LaTeX Warning: Citation '3' on page 14 undefined on input line 236. LaTeX Warning: `h' float specifier changed to `ht'. -[9 <../graphics/Neural_Net.png>] +[14] -LaTeX Warning: `h' float specifier changed to `ht'. - -[10] [11] - -LaTeX Warning: Citation '3' on page 12 undefined on input line 235. - - -LaTeX Warning: Citation '3' on page 12 undefined on input line 246. +LaTeX Warning: Citation '3' on page 15 undefined on input line 247. Missing character: There is no . in font nullfont! Missing character: There is no 0 in font nullfont! @@ -1646,181 +1654,212 @@ NOTE: coordinate (2Y1.6669998e0],3Y0.0e0]) has been dropped because it is unbou nded (in y). (see also unbounded coords=jump). NOTE: coordinate (2Y5.559998e-1],3Y0.0e0]) has been dropped because it is unbou nded (in y). (see also unbounded coords=jump). -[12] LaTeX Warning: `h' float specifier changed to `ht'. -[13] -<../graphics/gdf_big_lr.png, id=305, 484.57034pt x 482.0409pt> +[15] + +LaTeX Warning: `h' float specifier changed to `ht'. + +[16] +<../graphics/gdf_big_lr.png, id=326, 484.57034pt x 482.0409pt> File: ../graphics/gdf_big_lr.png Graphic file (type png) -Package pdftex.def Info: ../graphics/gdf_big_lr.png used on input line 321. -(pdftex.def) Requested size: 172.5pt x 171.60013pt. - [14] [15 <../graphics/gdf_big_lr.png>] -<../graphics/conv/conv008.png, id=322, 396.48125pt x 450.68375pt> +Package pdftex.def Info: ../graphics/gdf_big_lr.png used on input line 322. +(pdftex.def) Requested size: 180.0pt x 179.05844pt. + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[17] [18 <../graphics/gdf_big_lr.png>] +<../graphics/conv/conv008.png, id=344, 396.48125pt x 450.68375pt> File: ../graphics/conv/conv008.png Graphic file (type png) -Package pdftex.def Info: ../graphics/conv/conv008.png used on input line 339. -(pdftex.def) Requested size: 68.99895pt x 78.43071pt. - [16 <../graphics/conv/conv008.png>] -<../graphics/mnist_5/mnist_5_raw.png, id=332, 462.528pt x 346.896pt> +Package pdftex.def Info: ../graphics/conv/conv008.png used on input line 340. +(pdftex.def) Requested size: 71.9989pt x 81.84164pt. + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[19] +<../graphics/mnist_5/mnist_5_raw.png, id=353, 462.528pt x 346.896pt> File: ../graphics/mnist_5/mnist_5_raw.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/mnist_5_raw.png used on input lin -e 402. -(pdftex.def) Requested size: 172.5pt x 129.37639pt. -<../graphics/mnist_5/conv_only/mnist_5_upper_edges.png, id=333, 462.528pt x 346 +e 403. +(pdftex.def) Requested size: 180.0pt x 135.00305pt. +<../graphics/mnist_5/conv_only/mnist_5_upper_edges.png, id=354, 462.528pt x 346 .896pt> File: ../graphics/mnist_5/conv_only/mnist_5_upper_edges.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_upper_edges.png - used on input line 411. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_only/mnist_5_left_edges.png, id=334, 462.528pt x 346. + used on input line 412. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_only/mnist_5_left_edges.png, id=355, 462.528pt x 346. 896pt> File: ../graphics/mnist_5/conv_only/mnist_5_left_edges.png Graphic file (type p ng) Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_left_edges.png -used on input line 416. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_only/mnist_5_lower_edges.png, id=335, 462.528pt x 346 +used on input line 417. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_only/mnist_5_lower_edges.png, id=356, 462.528pt x 346 .896pt> File: ../graphics/mnist_5/conv_only/mnist_5_lower_edges.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_lower_edges.png - used on input line 421. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_only/mnist_5_right_edges.png, id=336, 462.528pt x 346 + used on input line 422. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_only/mnist_5_right_edges.png, id=357, 462.528pt x 346 .896pt> File: ../graphics/mnist_5/conv_only/mnist_5_right_edges.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_right_edges.png - used on input line 426. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/features.png, id=339, 833.1125pt x 388.45125pt> + used on input line 427. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/features.png, id=360, 833.1125pt x 388.45125pt> File: ../graphics/features.png Graphic file (type png) -Package pdftex.def Info: ../graphics/features.png used on input line 437. -(pdftex.def) Requested size: 345.0pt x 160.86047pt. +Package pdftex.def Info: ../graphics/features.png used on input line 438. +(pdftex.def) Requested size: 360.0pt x 167.85466pt. -Underfull \hbox (badness 10000) in paragraph at lines 348--444 +Underfull \hbox (badness 10000) in paragraph at lines 349--445 [] -[17 <../graphics/mnist_5/mnist_5_raw.png> <../graphics/mnist_5/conv_only/mnist_ + +LaTeX Warning: `h' float specifier changed to `ht'. + + +LaTeX Warning: `h' float specifier changed to `ht'. + +[20 <../graphics/conv/conv008.png>] + +LaTeX Warning: `h' float specifier changed to `ht'. + + +Overfull \hbox (1.54195pt too wide) in paragraph at lines 446--448 +\T1/LinuxBiolinumT-TLF/m/n/10.95 Pooling Layers wer-den eben-falls haupt-säch-l +ich in Con-vo-lu-tio-nal Neural Net-works + [] + +[21 <../graphics/mnist_5/mnist_5_raw.png> <../graphics/mnist_5/conv_only/mnist_ 5_upper_edges.png> <../graphics/mnist_5/conv_only/mnist_5_left_edges.png> <../g raphics/mnist_5/conv_only/mnist_5_lower_edges.png> <../graphics/mnist_5/conv_on -ly/mnist_5_right_edges.png>] [18 <../graphics/features.png>] -<../graphics/MaxpoolSample2.png, id=361, 164.25pt x 68.547pt> +ly/mnist_5_right_edges.png>] +<../graphics/MaxpoolSample2.png, id=382, 164.25pt x 68.547pt> File: ../graphics/MaxpoolSample2.png Graphic file (type png) -Package pdftex.def Info: ../graphics/MaxpoolSample2.png used on input line 455 +Package pdftex.def Info: ../graphics/MaxpoolSample2.png used on input line 456 . -(pdftex.def) Requested size: 241.49895pt x 100.79422pt. -<../graphics/Average-Pooling-Example.png, id=362, 746.79pt x 337.26pt> +(pdftex.def) Requested size: 251.9989pt x 105.17671pt. +<../graphics/Average-Pooling-Example.png, id=383, 746.79pt x 337.26pt> File: ../graphics/Average-Pooling-Example.png Graphic file (type png) Package pdftex.def Info: ../graphics/Average-Pooling-Example.png used on input - line 463. -(pdftex.def) Requested size: 241.49895pt x 109.0627pt. + line 464. +(pdftex.def) Requested size: 251.9989pt x 113.80232pt. File: ../graphics/mnist_5/conv_only/mnist_5_upper_edges.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_upper_edges.png - used on input line 473. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. + used on input line 474. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. File: ../graphics/mnist_5/conv_only/mnist_5_left_edges.png Graphic file (type p ng) Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_left_edges.png -used on input line 478. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. +used on input line 479. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. File: ../graphics/mnist_5/conv_only/mnist_5_lower_edges.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_lower_edges.png - used on input line 483. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. + used on input line 484. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. File: ../graphics/mnist_5/conv_only/mnist_5_right_edges.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/conv_only/mnist_5_right_edges.png - used on input line 488. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_pool/upper_horiz_pooled.png, id=364, 462.528pt x 346. + used on input line 489. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_pool/upper_horiz_pooled.png, id=385, 462.528pt x 346. 896pt> File: ../graphics/mnist_5/conv_pool/upper_horiz_pooled.png Graphic file (type p ng) Package pdftex.def Info: ../graphics/mnist_5/conv_pool/upper_horiz_pooled.png -used on input line 493. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_pool/left_vert_pooled.png, id=365, 462.528pt x 346.89 +used on input line 494. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_pool/left_vert_pooled.png, id=386, 462.528pt x 346.89 6pt> File: ../graphics/mnist_5/conv_pool/left_vert_pooled.png Graphic file (type png ) Package pdftex.def Info: ../graphics/mnist_5/conv_pool/left_vert_pooled.png us -ed on input line 498. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_pool/lower_horiz_pooled.png, id=366, 462.528pt x 346. +ed on input line 499. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_pool/lower_horiz_pooled.png, id=387, 462.528pt x 346. 896pt> File: ../graphics/mnist_5/conv_pool/lower_horiz_pooled.png Graphic file (type p ng) Package pdftex.def Info: ../graphics/mnist_5/conv_pool/lower_horiz_pooled.png -used on input line 503. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_pool/right_vert_pooled.png, id=367, 462.528pt x 346.8 +used on input line 504. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_pool/right_vert_pooled.png, id=388, 462.528pt x 346.8 96pt> File: ../graphics/mnist_5/conv_pool/right_vert_pooled.png Graphic file (type pn g) Package pdftex.def Info: ../graphics/mnist_5/conv_pool/right_vert_pooled.png u -sed on input line 508. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png, id=368, 462.528pt x 3 +sed on input line 509. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png, id=389, 462.528pt x 3 46.896pt> File: ../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.png Graphic file (typ e png) Package pdftex.def Info: ../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.pn -g used on input line 513. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_pool/left_vert_avgpooled.png, id=369, 462.528pt x 346 +g used on input line 514. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_pool/left_vert_avgpooled.png, id=390, 462.528pt x 346 .896pt> File: ../graphics/mnist_5/conv_pool/left_vert_avgpooled.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/conv_pool/left_vert_avgpooled.png - used on input line 518. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png, id=370, 462.528pt x 3 + used on input line 519. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png, id=391, 462.528pt x 3 46.896pt> File: ../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.png Graphic file (typ e png) Package pdftex.def Info: ../graphics/mnist_5/conv_pool/lower_horiz_avgpooled.pn -g used on input line 523. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. -<../graphics/mnist_5/conv_pool/right_vert_avgpooled.png, id=371, 462.528pt x 34 +g used on input line 524. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. +<../graphics/mnist_5/conv_pool/right_vert_avgpooled.png, id=392, 462.528pt x 34 6.896pt> File: ../graphics/mnist_5/conv_pool/right_vert_avgpooled.png Graphic file (type png) Package pdftex.def Info: ../graphics/mnist_5/conv_pool/right_vert_avgpooled.png - used on input line 528. -(pdftex.def) Requested size: 68.99895pt x 51.7463pt. + used on input line 529. +(pdftex.def) Requested size: 71.9989pt x 53.99593pt. -Underfull \hbox (badness 10000) in paragraph at lines 451--534 +Underfull \hbox (badness 10000) in paragraph at lines 452--535 [] -[19 <../graphics/MaxpoolSample2.png> <../graphics/Average-pooling-example.png>] +[22 <../graphics/features.png>] + +LaTeX Warning: `h' float specifier changed to `ht'. + +[23 <../graphics/MaxpoolSample2.png> <../graphics/Average-pooling-example.png>] \openout5 = `Grundlagen_des_maschinellen_lernens.pyg'. (./_minted-Grundlagen_des_maschinellen_lernens/default-pyg-prefix.pygstyle) @@ -1841,18 +1880,18 @@ File: ts1txtt.fd 2000/12/15 v3.1 (./_minted-Grundlagen_des_maschinellen_lernens/A4B374C1656F7019947BB217D7D8C34B -F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) [20 <../graphics/mnist_5/conv_pool/upp +F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) [24 <../graphics/mnist_5/conv_pool/upp er_horiz_pooled.png> <../graphics/mnist_5/conv_pool/left_vert_pooled.png> <../g raphics/mnist_5/conv_pool/lower_horiz_pooled.png> <../graphics/mnist_5/conv_poo l/right_vert_pooled.png> <../graphics/mnist_5/conv_pool/upper_horiz_avgpooled.p ng> <../graphics/mnist_5/conv_pool/left_vert_avgpooled.png> <../graphics/mnist_ 5/conv_pool/lower_horiz_avgpooled.png> <../graphics/mnist_5/conv_pool/right_ver -t_avgpooled.png>] +t_avgpooled.png>] [25] \openout6 = `Grundlagen_des_maschinellen_lernens.pyg'. (./_minted-Grundlagen_des_maschinellen_lernens/0CC230EAEF969F875162D94A43EECC44 -F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) [21] +F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) \openout6 = `Grundlagen_des_maschinellen_lernens.pyg'. @@ -1897,7 +1936,7 @@ F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) (./_minted-Grundlagen_des_maschinellen_lernens/090D83D976E5CEECA0A0961BB3B3A5A6 -F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) +F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) [26] \openout6 = `Grundlagen_des_maschinellen_lernens.pyg'. @@ -1964,7 +2003,7 @@ F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) (./_minted-Grundlagen_des_maschinellen_lernens/6361598B18370336863B24D1B6FAE96E F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) -LaTeX Warning: Citation '6' on page 22 undefined on input line 614. +LaTeX Warning: Citation '6' on page 27 undefined on input line 615. \openout6 = `Grundlagen_des_maschinellen_lernens.pyg'. @@ -1975,14 +2014,14 @@ F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) (./_minted-Grundlagen_des_maschinellen_lernens/5A0B7618927FB8AEA4B96F5552228CD8 -F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) [22] [23] +F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) [27] \openout5 = `Grundlagen_des_maschinellen_lernens.pyg'. (./_minted-Grundlagen_des_maschinellen_lernens/B39808E7C45EEBD5237FE1E82D273879 53A0C9FE66949F8EC4BED65B31F6975B.pygtex) -LaTeX Warning: Citation '7' on page 24 undefined on input line 656. +LaTeX Warning: Citation '7' on page 28 undefined on input line 657. \openout6 = `Grundlagen_des_maschinellen_lernens.pyg'. @@ -1998,7 +2037,11 @@ F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) (./_minted-Grundlagen_des_maschinellen_lernens/684559E268B2B047D1C82BB00E985301 -F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) [24] +F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) + +LaTeX Warning: `h' float specifier changed to `ht'. + +[28] [29] \openout6 = `Grundlagen_des_maschinellen_lernens.pyg'. @@ -2019,16 +2062,18 @@ F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) (./_minted-Grundlagen_des_maschinellen_lernens/B51E2DE1996D35173C012720F7A4FDA4 F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) -Overfull \hbox (1.4092pt too wide) in paragraph at lines 658--661 -[] \T1/LinuxBiolinumT-TLF/m/n/10 das Pro-jekt in-itia-li-siert. Da-nach muss +Overfull \hbox (1.3531pt too wide) in paragraph at lines 662--662 +[]\T1/txr/bx/n/14.4 Ein Klas-si-fi-zie-rungs-netz-werk für hand-ge-schrie-be-ne + Zif- [] -[25] -Overfull \hbox (3.56537pt too wide) in paragraph at lines 666--667 -\T1/LinuxBiolinumT-TLF/m/n/10 nor-ma-li-siert, was die-sen Da-ten-satz be-son-d -ers ge-eig-net für Ein-stei-ger macht. Die meiÿ- - [] +Package Fancyhdr Warning: \headheight is too small (13.59999pt): +Make it at least 26.9054pt. +We now make it that large for the rest of the document. +This may cause the page layout to be inconsistent, however. + +[30] \openout5 = `Grundlagen_des_maschinellen_lernens.pyg'. @@ -2042,77 +2087,77 @@ F6C426F58C5CCC27D3C7BD698FEC22DB.pygtex) LaTeX Warning: `h' float specifier changed to `ht'. - -Package Fancyhdr Warning: \headheight is too small (12.0pt): -Make it at least 24.02502pt. -We now make it that large for the rest of the document. -This may cause the page layout to be inconsistent, however. - -[26] -<../graphics/Wandb_accuracy.png, id=448, 1758.57pt x 867.24pt> -File: ../graphics/Wandb_accuracy.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/Wandb_accuracy.png used on input line 721 -. -(pdftex.def) Requested size: 345.0pt x 170.13667pt. -<../graphics/Wandb_loss.png, id=450, 1758.57pt x 867.24pt> -File: ../graphics/Wandb_loss.png Graphic file (type png) - -Package pdftex.def Info: ../graphics/Wandb_loss.png used on input line 728. -(pdftex.def) Requested size: 345.0pt x 170.13667pt. - [27] +[31] LaTeX Warning: `h' float specifier changed to `ht'. -[28 <../graphics/Wandb_accuracy.png>] [29 <../graphics/Wandb_loss.png>] -Underfull \hbox (badness 10000) in paragraph at lines 747--751 -\T1/LinuxBiolinumT-TLF/m/n/10 Quelle: https://towardsdatascience.com/common-los -s-functions-in-machine- +<../graphics/Wandb_accuracy.png, id=477, 1758.57pt x 867.24pt> +File: ../graphics/Wandb_accuracy.png Graphic file (type png) + +Package pdftex.def Info: ../graphics/Wandb_accuracy.png used on input line 722 +. +(pdftex.def) Requested size: 360.0pt x 177.53392pt. +<../graphics/Wandb_loss.png, id=479, 1758.57pt x 867.24pt> +File: ../graphics/Wandb_loss.png Graphic file (type png) + +Package pdftex.def Info: ../graphics/Wandb_loss.png used on input line 729. +(pdftex.def) Requested size: 360.0pt x 177.53392pt. + +LaTeX Warning: `h' float specifier changed to `ht'. + +[32] + +LaTeX Warning: `h' float specifier changed to `ht'. + +[33] [34 <../graphics/Wandb_accuracy.png>] +Underfull \hbox (badness 10000) in paragraph at lines 748--752 +\T1/LinuxBiolinumT-TLF/m/n/10.95 Quelle: https://towardsdatascience.com/common- +loss-functions-in- [] -Underfull \hbox (badness 10000) in paragraph at lines 752--756 -\T1/LinuxBiolinumT-TLF/m/n/10 https://www.bloomberg.com/news/articles/2019-12-1 -1/face-recognition-tech- +Underfull \hbox (badness 10000) in paragraph at lines 753--757 +\T1/LinuxBiolinumT-TLF/m/n/10.95 https://www.bloomberg.com/news/articles/2019-1 +2-11/face-recognition- [] -Underfull \hbox (badness 10000) in paragraph at lines 757--761 -\T1/LinuxBiolinumT-TLF/m/n/10 https://www.technologyreview.com/f/614986/ai-face --recognition-racist-us- +Underfull \hbox (badness 10000) in paragraph at lines 758--762 +\T1/LinuxBiolinumT-TLF/m/n/10.95 https://www.technologyreview.com/f/614986/ai-f +ace-recognition-racist-us- [] -(./Grundlagen_des_maschinellen_lernens.lof [30] -Overfull \hbox (21.8196pt too wide) in paragraph at lines 34--34 - \T1/LinuxBiolinumT-TLF/m/n/10 https://github.com/vdumoulin/conv_arithmetic/blo -b/master/README.md +[35 <../graphics/Wandb_loss.png>] (./Grundlagen_des_maschinellen_lernens.lof +Overfull \hbox (41.66722pt too wide) in paragraph at lines 34--34 + \T1/LinuxBiolinumT-TLF/m/n/10.95 https://github.com/vdumoulin/conv_arithmetic/ +blob/master/README.md + [] + +[36] +Overfull \hbox (43.93332pt too wide) in paragraph at lines 50--50 + \T1/LinuxBiolinumT-TLF/m/n/10.95 Quelle: https://computersciencewiki.org/index +.php/Max-pooling_/_Pooling [] -Overfull \hbox (5.42265pt too wide) in paragraph at lines 48--48 - [][] [][]\T1/LinuxBiolinumT-TLF/m/n/10 Beispiele für low- mid- und high-level -Fea-tu-res in Con-vo-lu-tio-nal Neural - [] - - -Overfull \hbox (23.8891pt too wide) in paragraph at lines 50--50 - \T1/LinuxBiolinumT-TLF/m/n/10 Quelle: https://computersciencewiki.org/index.ph -p/Max-pooling_/_Pooling +Overfull \hbox (4.45813pt too wide) in paragraph at lines 68--68 + [][] [][]\T1/LinuxBiolinumT-TLF/m/n/10.95 Ein Plot des Kreu-zen-tro-pie-feh-le +rs auf-ge-tra-gen ge-gen die Trai-nings- [] ) \tf@lof=\write9 \openout9 = `Grundlagen_des_maschinellen_lernens.lof'. - [31] -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 772. -Package atveryend Info: Empty hook `AfterLastShipout' on input line 772. + [37] +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 773. +Package atveryend Info: Empty hook `AfterLastShipout' on input line 773. (./Grundlagen_des_maschinellen_lernens.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 772. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 772. +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 773. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 773. Package rerunfilecheck Info: File `Grundlagen_des_maschinellen_lernens.out' has not changed. -(rerunfilecheck) Checksum: F3BFAB17E10D5F868AE74D618EB3723D;2546. +(rerunfilecheck) Checksum: 491CE07912FA2AF4E8ED72CFA9408B7C;2541. LaTeX Warning: There were undefined references. @@ -2130,32 +2175,31 @@ un.xml'. ) Here is how much of TeX's memory you used: - 41658 strings out of 492609 - 935498 string characters out of 6131462 - 1497875 words of memory out of 5000000 - 44635 multiletter control sequences out of 15000+600000 - 98228 words of font info for 130 fonts, out of 8000000 for 9000 + 41666 strings out of 492609 + 935642 string characters out of 6131462 + 1496046 words of memory out of 5000000 + 44636 multiletter control sequences out of 15000+600000 + 97218 words of font info for 129 fonts, out of 8000000 for 9000 1143 hyphenation exceptions out of 8191 - 62i,14n,100p,3352b,3452s stack positions out of 5000i,500n,10000p,200000b,80000s + 62i,14n,100p,3352b,3454s stack positions out of 5000i,500n,10000p,200000b,80000s {/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}{/usr/share/texliv e/texmf-dist/fonts/enc/dvips/libertine/lbtn_25tcsq.enc} -Output written on Grundlagen_des_maschinellen_lernens.pdf (32 pages, 1547143 by +ist/fonts/type1/public/txfonts/rtxmi.pfb> +Output written on Grundlagen_des_maschinellen_lernens.pdf (39 pages, 1550898 by tes). PDF statistics: - 614 PDF objects out of 1000 (max. 8388607) - 511 compressed objects within 6 object streams - 132 named destinations out of 1000 (max. 500000) + 649 PDF objects out of 1000 (max. 8388607) + 540 compressed objects within 6 object streams + 140 named destinations out of 1000 (max. 500000) 418 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/doc/Grundlagen_des_maschinellen_lernens.out b/doc/Grundlagen_des_maschinellen_lernens.out index a089a56..5419c69 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.out +++ b/doc/Grundlagen_des_maschinellen_lernens.out @@ -1,5 +1,5 @@ \BOOKMARK [1][-]{section.1}{Was ist maschinelles Lernen?}{}% 1 -\BOOKMARK [2][-]{subsection.1.1}{Klassifizierungsprobleme}{section.1}% 2 +\BOOKMARK [2][-]{subsection.1.1}{Klassifizierungsaufgaben}{section.1}% 2 \BOOKMARK [2][-]{subsection.1.2}{Regressionsprobleme}{section.1}% 3 \BOOKMARK [2][-]{subsection.1.3}{Gefahren von maschinellem Lernen}{section.1}% 4 \BOOKMARK [3][-]{subsubsection.1.3.1}{Die Daten}{subsection.1.3}% 5 @@ -15,7 +15,7 @@ \BOOKMARK [2][-]{subsection.3.4}{Der Lernprozess}{section.3}% 15 \BOOKMARK [2][-]{subsection.3.5}{Fehlerfunktionen}{section.3}% 16 \BOOKMARK [3][-]{subsubsection.3.5.1}{MSE \205 Durchschnittlicher quadratischer Fehler}{subsection.3.5}% 17 -\BOOKMARK [3][-]{subsubsection.3.5.2}{MAE \205 Durchschnitztlicher absoluter Fehler}{subsection.3.5}% 18 +\BOOKMARK [3][-]{subsubsection.3.5.2}{MAE \205 Durchschnittlicher absoluter Fehler}{subsection.3.5}% 18 \BOOKMARK [3][-]{subsubsection.3.5.3}{Kreuzentropiefehler}{subsection.3.5}% 19 \BOOKMARK [2][-]{subsection.3.6}{Gradientenverfahren und Backpropagation}{section.3}% 20 \BOOKMARK [3][-]{subsubsection.3.6.1}{Lernrate}{subsection.3.6}% 21 @@ -32,4 +32,4 @@ \BOOKMARK [2][-]{subsection.5.2}{Der MNIST Datensatz}{section.5}% 32 \BOOKMARK [2][-]{subsection.5.3}{Das Netz}{section.5}% 33 \BOOKMARK [2][-]{subsection.5.4}{Ergebnis}{section.5}% 34 -\BOOKMARK [1][-]{section.6}{Schlusswort}{}% 35 +\BOOKMARK [1][-]{section.6}{Schluss}{}% 35 diff --git a/doc/Grundlagen_des_maschinellen_lernens.pdf b/doc/Grundlagen_des_maschinellen_lernens.pdf index e11fab2..10c12c1 100644 Binary files a/doc/Grundlagen_des_maschinellen_lernens.pdf and b/doc/Grundlagen_des_maschinellen_lernens.pdf differ diff --git a/doc/Grundlagen_des_maschinellen_lernens.synctex.gz b/doc/Grundlagen_des_maschinellen_lernens.synctex.gz index 4a9484f..08bca06 100644 Binary files a/doc/Grundlagen_des_maschinellen_lernens.synctex.gz and b/doc/Grundlagen_des_maschinellen_lernens.synctex.gz differ diff --git a/doc/Grundlagen_des_maschinellen_lernens.tex b/doc/Grundlagen_des_maschinellen_lernens.tex index d27ff52..d34d567 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.tex +++ b/doc/Grundlagen_des_maschinellen_lernens.tex @@ -1,6 +1,6 @@ % Preamble % --- -\documentclass{article} +\documentclass[11pt]{article} % Packages % --- @@ -36,6 +36,7 @@ \begin{document} \biolinum \pagenumbering{gobble} +\ \begin{titlepage} \maketitle \end{titlepage} @@ -51,12 +52,12 @@ Die wohl bekannteste und am häufigsten zitierte Definiton des maschinellen Lern ---Arthur Samuel, 1959 \end{flushright} \end{quote} -Beim maschinellen lernen werden Computer also nicht mit einem bestimmten Algorythmus programmiert um eine Aufgabe zu lösen, sondern lernen eigenständig diese Aufgabe zu bewältigen. Dies geschieht zumeist, indem das Programm aus einer großen, bereits \glqq gelabelten'', Datenmenge mit Hilfe bestimmter Methoden, die im Folgenden weiter erläutert werden sollen, lernt, gewisse Muster abzuleiten um eine ähnliche Datenmenge selber \glqq labeln'' zu können. Als Label bezeichent man in diesem Fall die gewünschte Ausgabe des Programmes. Dies kann beispielsweise eine Klassifikation sein. Soll das Programm etwa handgeschriebene Ziffern erkennen können, so bezeichnet man das (bearbeitete) Bild der Ziffer als \glqq Input Verctor'' und die Information welche Ziffer der Copmputer hätte erkennen sollen, als \glqq Label ''. Soll jedoch maschinell erlernt werden, ein simuliertes Auto zu fahren, so bestünde der Input Vector aus Sensorinformationen und das Label würde aussagen, in welche Richtung das Lenkrad hätte gedreht werden sollen, wie viel Gas das Programm hätte geben sollen oder andere Steuerungsinformationen. Der Input Vector ist also immer die Eingabe, die der Computer erhält um daraus zu lernen und das Label ist die richtige Antwort, die vom Programm erwartet wurde. Für maschinelles Lernen wird also vor allem eins benötigt: Ein enormer Datensatz, der bereits gelabelt wurde, damit das Programm daraus lernen kann.\newline -Natürlich werden für maschinelles Lernen trotzdem Algorythmen benötigt. Diese Algorythmen sind jedoch keine problemspezifischen Algorythmen, sondern Algorythmen für maschinelles Lernen. Eine der populärsten Methoden des maschinellen Lernens ist das sogenannte \glqq Neuronale Netz''. Dies wird für die zwei Hauptproblemklassen, die man unterscheidet, verwendet. Klassifizierungs und Regressionsprobleme. -\subsection{Klassifizierungsprobleme} -Als Klassifizierfung bezeichnet man das Finden einer Funktion, die eine Menge von Eingabevariablen zu einer diskreten Menge von Ausgabevariablen, die auch als Klassen oder Labels bezeichnet werden, zuordnet. Dies kann beispielsweise das Erkennen von Mail Spam sein. Die Eingabevariablen sind die E-Mails und sie sollen den zwei Klassen \glqq Spam'' und \glqq nicht Spam'' zugeortnet werden.\\ -Das in Dieser Arbeit gegebene Beispiel ist auch ein Klassifizierungsproblem. Die gegebenen Bilder von Ziffern sollen den zehn Klassen \glqq 0 bis 9'' zugeordnet werden. Die Bilder sind hier die Eingabevariablen und die Klassen null bis neun beschreibt die endliche Menge diskreter Labels.\\ -Das Erste Beispiel würde man als \glqq Binärklassifizierung'' bezeichnen, da zwei Klassen unterschieden werden. Letzteres wird als \glqq Multiklassenklassifizierung'' bezeichnet, da mehr als zwei Klassen unterschieden werden. Die Binärklassifizierung ist in Abbildung \ref{Classification} verbildlicht. +Beim maschinellen lernen werden Computer also nicht mit einem bestimmten Algorithmus programmiert, um eine Aufgabe zu lösen, sondern lernen eigenständig diese Aufgabe zu bewältigen. Dies geschieht zumeist, indem das Programm aus einer großen, bereits \glqq gelabelten'' Datenmenge mit Hilfe bestimmter Methoden, die im Folgenden weiter erläutert werden sollen, lernt gewisse Muster abzuleiten, um eine ähnliche Datenmenge selber \glqq labeln'' zu können. Als Label bezeichent man in diesem Fall die gewünschte Ausgabe des Programms. Dies kann beispielsweise eine Klassifikation sein. Soll das Programm etwa handgeschriebene Ziffern erkennen können, so bezeichnet man das (bearbeitete) Bild der Ziffer als \glqq Input Vector'' und die Information, welche Ziffer der Computer hätte erkennen sollen, als \glqq Label ''. Soll jedoch maschinell erlernt werden, ein simuliertes Auto zu fahren, so bestünde der Input Vector aus Sensorinformationen, und das Label würde aussagen, in welche Richtung das Lenkrad gedreht werden sollte, wie viel Gas das Programm hätte geben sollen oder andere Steuerungsinformationen. Der Input Vector ist also immer die Eingabe, die der Computer erhält um daraus zu lernen, und das Label ist die richtige Antwort, die vom Programm erwartet wurde. Für maschinelles Lernen wird also vor allem eins benötigt: Ein enormer Datensatz, der bereits gelabelt wurde, damit das Programm daraus lernen kann.\newline +Natürlich werden für maschinelles Lernen trotzdem Algorithmen benötigt. Diese Algorithmen sind jedoch keine problemspezifischen Algorithmen, sondern Algorithmen für maschinelles Lernen. Eine der populärsten Methoden des maschinellen Lernens ist das sogenannte \glqq Neuronale Netz''. Dies wird für die zwei Hauptproblemklassen, die man unterscheidet, verwendet: Klassifizierungs und Regressionsprobleme. +\subsection{Klassifizierungsaufgaben} +Als Klassifizierung bezeichnet man das Finden einer Funktion, die eine Menge von Eingabevariablen zu einer diskreten Menge von Ausgabevariablen, welche auch als Klassen oder Labels bezeichnet werden, zuordnet. Dies kann beispielsweise das Erkennen von Mail Spam sein. Die Eingabevariablen sind die E-Mails und sie sollen den zwei Klassen \glqq Spam'' und \glqq nicht Spam'' zugeordnet werden.\\ +Bei dem in dieser Arbeit behandelten Beispiel handelt es sich auch um eine Klassifizierungsaufgabe. Die zu klassifizierenden Bilder von Ziffern sollen den zehn Klassen \glqq 0 bis 9'' zugeordnet werden. Die Bilder sind hier die Eingabevariablen und die Klassen \glqq0 bis 9'' beschreibt die endliche Menge diskreter Labels.\\ +Das erste Beispiel, bezogen auf die Spam Mails, würde man als \glqq Binärklassifizierung'' bezeichnen, da zwei Klassen unterschieden werden. Letzteres wird als \glqq Multiklassenklassifizierung'' bezeichnet, da mehr als zwei Klassen unterschieden werden. Die Binärklassifizierung ist in Abbildung \ref{Classification} verdeutlicht. \begin{figure}[h] \centering \includegraphics[width=0.4\linewidth]{../graphics/Classification.png} @@ -66,7 +67,7 @@ Das Erste Beispiel würde man als \glqq Binärklassifizierung'' bezeichnen, da z \\ Die zwei Klassen wären hier \glqq grün'' und \glqq blau''. Die Linie stellt die Klassengrenze dar, die die zwei Klassen unterscheidet. Es sind außerdem einige Ausreißer in den Daten vorhanden. \subsection{Regressionsprobleme} -Als Regressionsproblem hingegen bezeichnet man das Finden einer Funktion, die eine Menge von Eingabevariablen einer Stetigen Menge von Ausgabevariablen zuordnet. Wenn beispielsweise ein Bild eines Menschen gegeben ist, könnte ein Regressionsproblem sein, seine Höhe oder sein Gewicht zu bestimmen. Auch eine Wettervorhersage ist ein typisches Regressionsproblem. Ein Beispiel eines Regressionsproblemens wird in dieser Arbeit nicht behandelt werden. Wie Regression verbildlicht dargestellt werden kann, ist in Abbildung \ref{Regression} gezeigt. +Als Regressionsproblem hingegen bezeichnet man das Finden einer Funktion, die eine Menge von Eingabevariablen einer stetigen Menge von Ausgabevariablen zuordnet. Wenn beispielsweise ein Bild eines Menschen gegeben ist, könnte ein Regressionsproblem sein, seine Höhe oder sein Gewicht zu bestimmen. Auch eine Wettervorhersage ist ein typisches Regressionsproblem. Ein Beispiel eines Regressionsproblemens wird in dieser Arbeit nicht behandelt werden. Wie Regression dargestellt werden kann, ist in Abbildung \ref{Regression} gezeigt. \begin{figure}[h] \centering \includegraphics[width=0.4\linewidth]{../graphics/Regression.png} @@ -74,41 +75,41 @@ Als Regressionsproblem hingegen bezeichnet man das Finden einer Funktion, die ei \label{Regression} \end{figure} \\ -Die Kurve stellt hier Keine Grenze, sondern die Funktion, die die Werte approximiert, dar. Die Punkte repräsentieren die Eingabedaten, in denen auch hier einige Ausreißer erkennbar sind. +Die Kurve stellt hier keine Grenze, sondern die Funktion, die die Werte approximiert, dar. Die Punkte repräsentieren die Eingabedaten, wobei auch hier einige Ausreißer erkennbar sind. \subsection{Gefahren von maschinellem Lernen} -Maschinelles Lernen kann eine mächtige Technologie sein. Eine Vielzahl von Problemen lässt sich damit lösen, alle jedoch nicht. Man sollte sich bevor man maschinelles Lernen nutzt also Fragen: Lässt sich dieses Problem nicht einfacher auf konventionelle Weise lösen? Außerdem sollte man sich stets bewusst sein, dass maschinelles Lernen im Gegensatz zu den meißten Algorythmen, keine Technologie ist, die eine Treffsicherheit von 100\% aufweist. In Systemen, wo eine korrekte Antwort kritisch ist, sollte man also nicht alleine auf maschinelles Lernen setzen.\\ -Auch ist für maschinelles Lernen stets eine enorme Datenmenge nötig. Diese Daten müssen erst gesammelt werden. Hier stellt sich natürlich sofort eine ethische Frage: Welche Daten können guten Gewissens gesammelt und ausgewertret werden? Dabei sollte das Persönlichkeitsrecht und das Recht auf Privatsphäre eine zentrale Rolle spielen. Niemals sollte der Nutzen der Technologie über die Rechte der Nutzer gestellt werden. Betrachtet man hier beispielsweise den Flukhafen von Peking, sind erschreckende Tendenzen festzustellen. Dort wird beim Check-In via Gesichtserkennung die Identität der Person mit ihrem Gesicht verknüpft. Danach läuft alles vom Ticketkauf bis hin zum Duty-free-shop mit Hilfe von Gesichtserkennung ab \cite{4}.\\ -Die zentralen Gefahren maschinellen Lernens sind also die eventuelle Unsicherheit im Ergebnis, der hohe Trainingsaufwand, der gegebenenfalls mit klassischen Algorythmen vermieden werden kann und die Verletzung von Rechten durch das Auswerten persönlicher Daten. +Maschinelles Lernen kann eine mächtige Technologie sein. Eine Vielzahl von Problemen lässt sich damit lösen, alle jedoch nicht. Bevor man maschinelles Lernen nutzt, sollte man sich also fragen: Lässt sich dieses Problem nicht einfacher auf konventionelle Weise lösen? Außerdem sollte man sich stets bewusst sein, dass maschinelles Lernen im Gegensatz zu den meisten Algorithmen keine Technologie ist, die eine Treffsicherheit von 100\% aufweist. In Systemen, wo eine korrekte Antwort kritisch ist, sollte man also nicht alleine auf maschinelles Lernen setzen.\\ +Auch ist für maschinelles Lernen stets eine enorme Datenmenge nötig. Diese Daten müssen erst gesammelt werden. Hier stellt sich natürlich sofort eine ethische Frage: Welche Daten können guten Gewissens gesammelt und ausgewertet werden? Dabei sollten das Persönlichkeitsrecht und das Recht auf Privatsphäre eine zentrale Rolle spielen. Niemals sollte der Nutzen der Technologie über die Rechte der Nutzer gestellt werden. Betrachtet man hier beispielsweise den Flughafen von Peking, sind erschreckende Tendenzen festzustellen. Dort wird beim Check-In via Gesichtserkennung die Identität der Person mit ihrem Gesicht verknüpft. Danach läuft alles vom Ticketkauf bis hin zum Duty-free-shop mit Hilfe von Gesichtserkennung ab \cite{4}.\\ +Die zentralen Gefahren maschinellen Lernens sind also die eventuelle Unsicherheit im Ergebnis, der hohe Trainingsaufwand, der gegebenenfalls mit klassischen Algorithmen vermieden werden kann, und die Verletzung von Rechten durch das Auswerten persönlicher Daten. \subsubsection{Die Daten} -Wie bereits erwähnt sind die Datensätze oft der limitierende Faktor beim maschinellen Lernen. Das gravierendste Problem ist, überhaupt einen passenden Datensatz für das Problem zu finden oder generieren zu können. Dabei muss man beachten, dass man in den alle für das Problem relevanten Faktoren berücksichtigt. Möchte man beispielsweise Gesichter jeglicher Art erkennen, genügt es nicht den Algorythmus auf einem Datensatz von Gesichtern hellhäutiger Menschen zu trainieren, da dieser zum Erkennen von Gesichtern dunkelhäuitiger Menschen dann nutzlos wäre. Dass dies kein theoretisches, sondern auch ein praktisch auftretendes Phänomen ist, zeigt eine Studie des National Institute for Standards and Technology (NIST)\cite{5}. Diese hat ergeben, dass beispielsweise ein in den USA entwickelter und dort sehr populärer Algorythmus eine extrem hohe Fehlerquote für afroamerikanische Frauen hat. Da dieses System unter anderem von der Polizei in den USA verwendet wird, haben afroamerikanische Frauen eine wesentlich höhere Chance fälschlicherweise einer Straftat beschuldigt zu werden.\\ -Man sollte außerdem beachten, dass der Datensatz gut ausgeglichen ist. Das bedeutet, dass alle Trainingsdaten gleichmäßig verteilt sind. Möchte man beispielsweise Eingabedaten in 4 verschiedene Klassen klassifizieren, so sollten etwa 25\% der Daten zu Klasse A gehören, 25\% zu Klasse B und so weiter. Der in dieser Arbeit später verwendete MNIST Datensatz hat einen Umfang von 60000 handgeschriebenben Ziffern von 0 bis 9. Den größten Anteil haben einsen mit rund 11\%, den niedrigsten haben Fünfen mir 9\%. Damit kann der Datensatz als ausgeglichen betrachtet werden. Eine genaue Definition, ab wann ein Datensatz nicht mehr ausgeglichen ist, existiert nicht.\\ -Datensätze müssen ausgeglichen sein, da das Netz sonst den Fehler minimiert, indem es öfter die Klasse mit dem höhsten Anteil als Antwort liefert. Es erkennt, dass die höhste Trefferquote vorliegt, wenn es diese Antwort gibt, da so die Wahrscheinlichkeit eines Treffers maximal ist\footnote{In diesem Fall wird dann in der Fehlerfunktion ein lokales Minnimum gefunden. Dazu mehr unter Abschnitt \ref{Gradient_section}, \nameref{Gradient_section}}. +Wie bereits erwähnt, sind die Datensätze oft der limitierende Faktor beim maschinellen Lernen. Das gravierendste Problem ist, überhaupt einen passenden Datensatz für das Problem zu finden oder generieren zu können. Dabei muss man beachten, dass man alle für das Problem relevanten Faktoren berücksichtigt. Möchte man beispielsweise Gesichter jeglicher Art erkennen, genügt es nicht den Algorithmus auf einem Datensatz von Gesichtern hellhäutiger Menschen zu trainieren, da dieser zum Erkennen von Gesichtern dunkelhäutiger Menschen nutzlos wäre. Dass dies kein theoretisches, sondern auch ein praktisch auftretendes Phänomen ist, zeigt eine Studie des National Institute for Standards and Technology (NIST)\cite{5}. Diese hat ergeben, dass beispielsweise ein in den USA entwickelter und dort sehr populärer Algorithmus eine extrem hohe Fehlerquote für afroamerikanische Frauen hat. Da dieses System unter anderem von der Polizei in den USA verwendet wird, haben afroamerikanische Frauen eine wesentlich höhere Chance, fälschlicherweise einer Straftat beschuldigt zu werden als andere Bürger.\\ +Man sollte außerdem beachten, dass der Datensatz gut ausgeglichen ist. Das bedeutet, dass alle Trainingsdaten gleichmäßig verteilt sind. Möchte man beispielsweise Eingabedaten in 4 verschiedene Klassen klassifizieren, so sollten etwa 25\% der Daten zur Klasse A gehören, 25\% zur Klasse B und so weiter. Der in dieser Arbeit später verwendete MNIST Datensatz hat einen Umfang von 60000 handgeschriebenen Ziffern von 0 bis 9. Den größten Anteil haben Einsen mit rund 11\%, den niedrigsten haben Fünfen mir 9\%. Damit kann der Datensatz als ausgeglichen betrachtet werden. Eine genaue Definition, ab wann ein Datensatz nicht mehr ausgeglichen ist, existiert nicht.\\ +Datensätze müssen ausgeglichen sein, da das Netz sonst den Fehler, der im Folgenden noch erläutert werden wird, minimiert, indem es öfter die Klasse mit dem höchsten Anteil als Antwort liefert. Es erkennt, dass die höchste Trefferquote vorliegt, wenn es diese Antwort gibt, da so die Wahrscheinlichkeit eines Treffers maximal ist\footnote{In diesem Fall wird dann in der Fehlerfunktion ein lokales Minimum gefunden. Dazu mehr unter Abschnitt \ref{Gradient_section}, \nameref{Gradient_section}}. \subsubsection{Overfitting} -Overfitting ist ein häufig auftretendes Problem bei Klassifizierungsaufgaben. Die Klassengrenzen werden dabei zu genau aber falsch definiert. In Abbildung \ref{Overfitting} ist dies dargestellt. +Overfitting ist ein häufig auftretendes Problem bei Klassifizierungsaufgaben. Die Klassengrenzen werden dabei zu sehr an die Trainingsdaten angepasst und dadurch falsch definiert. In Abbildung \ref{Overfitting} ist dies dargestellt. \begin{figure}[h] \centering \includegraphics[width=0.6\linewidth]{../graphics/overfitting.png} - \caption{Overfitting} + \caption{Klassengrenzen mit und ohne Overfitting} \label{Overfitting} \end{figure} \\ -Overfitting tritt auf, wenn man ein neuronales Netz zu lange auf einem Datensatz trainiert. Das Netz lernt dann die Daten auswendig, da es so einen Fehler von 0 erreichen kann. Dadurch wurden aber keine wirklichen Klassengrenzen erlernt.\\ -Um Overfitting entgegenzuwirken reicht es oftmals den Trainingsdatensatz in der Reihenfolge zu randomisieren. Dadurch kann das Netz diese gar nicht auswendig lernen. +Overfitting tritt auf, wenn man ein neuronales Netz zu lange auf einem Datensatz trainiert. Das Netz lernt dann die Daten auswendig, da es so einen Fehler von 0 erreichen kann. Dadurch werden aber keine wirklichen Klassengrenzen erlernt.\\ +Um Overfitting entgegenzuwirken, reicht es oftmals, den Trainingsdatensatz in der Reihenfolge zu randomisieren. Dadurch kann das Netz die Reihenfolge gar nicht auswendig lernen. -\section{Verschiedene Techniken maschinellen Lernens} -Es gibt viele verschiedene Ansätze und Algorythmen um maschinelles Lernen zu implementieren. Der wohl häufigste ist das Neuronale Netz, von dem diese Arbeit handelt. Aber auch sogenannte \glqq Support Vector machines'' sind eine bekannte Technik. Neuronale Netze können In vielen verschiedenen Szenarien angewandt werden um unterschiedliche Ergebnisse zu erzielen. Beim Adversarial Learning lässt man mehrere Netze gegen einander antreten, sodass sie sich gegenseitig trainieren. Beim Q-Learning beginnt man mit zufälligen Reaktionen auf eine Eingabe und \glqq belohnt'' das Netz, falls es wie gewünmscht reagiert hat. Ein Beispiel hierfür ist die hide and seek AI von OpenAI\footnote{https://openai.com/blog/emergent-tool-use/}. Im groben unterscheidet man jedoch in überwachtes (supervised), unüberwachtes (unsupervised) und bestärkendes (reinforcement) Lernen. +\section{Verschiedene Techniken maschinellen Lernens}\label{sec:verschiedene-techniken-maschinellen-lernens} +Es gibt viele verschiedene Ansätze und Algorithmen, um maschinelles Lernen zu implementieren. Der wohl häufigste ist das Neuronale Netz, von dem diese Arbeit handelt. Aber auch sogenannte \glqq Support Vector machines'' sind eine bekannte Technik, sollen aber hier nicht weiter behandelt werden. Neuronale Netze können in vielen verschiedenen Szenarien angewandt werden, um unterschiedliche Ergebnisse zu erzielen. Beim Adversarial Learning lässt man mehrere Netze gegeneinander antreten, sodass sie sich gegenseitig trainieren. Beim Q-Learning beginnt man mit zufälligen Reaktionen auf eine Eingabe und \glqq belohnt'' das Netz, falls es wie gewünscht reagiert hat. Ein Beispiel hierfür ist die \glqq hide and seek AI'' von OpenAI\footnote{https://openai.com/blog/emergent-tool-use/}. Grob unterscheidet man jedoch in überwachtes (supervised), unüberwachtes (unsupervised) und bestärkendes (reinforcement) Lernen. \subsection{Überwachtes Lernen} -Beim überwachten Lernen ist ein Trainingsdatensatz vorhanden und die Eingabe sowie die gewünschte Ausgabe ist bekannt. Dies trifft sowohl auf klassifizierungs, alsauch auf Regressionsprobleme zu. Um Überwachtes Lernen nutzen zu können muss man also vor allem über einen großen Datensatz verfügen. Wie genau überwachtes Lernen innerhalb des neuronalen Netzes von Statten geht ist im nächsten Abschnitt unter \glqq\nameref{sec:neuronale-netze}'' beschrieben. +Beim Überwachten Lernen ist ein Trainingsdatensatz vorhanden und, die Eingabe sowie die gewünschte Ausgabe sind bekannt. Dies trifft sowohl auf Klassifizierungs- als auch auf Regressionsprobleme zu. Um Überwachtes Lernen nutzen zu können, muss man also vor allem über einen großen Datensatz verfügen. Wie genau Überwachtes Lernen innerhalb des neuronalen Netzes vonstatten geht, ist im nächsten Abschnitt unter \glqq\nameref{sec:neuronale-netze}'' beschrieben. \subsection{Unüberwachtes Lernen} -Unüberwachtes Lernen erkennt automatisiert Muster in Datenmengen. Dies ist vergleichbar mit einem Kind, das zum ersten mal in seinem Leben einen Hund sieht und den nächsten Hund, den es sieht als einen solchen wiedererkennt. Das Kind hat nicht, wie es beim überwachten Lernen der Fall gewesen wäre, gesagt bekommen, dass es sich um einen Hund handelt. vielmehr hat es die Merkmale eines Hundes erkannt und sich diese gemerkt. -Bei unüberwachtem Lernen erkennt werden also automatisch Muster erkannt, die dem Algorythmus zuvor nicht mitgeteilt wurden. +Unüberwachtes Lernen erkennt automatisiert Muster in Datenmengen. Dies ist vergleichbar mit einem Kind, das zum ersten Mal in seinem Leben einen Hund sieht und den nächsten Hund, den es sieht, als solchen wiedererkennt. Das Kind hat nicht, wie es beim überwachten Lernen der Fall gewesen wäre, gesagt bekommen, dass es sich um einen Hund handelt. Vielmehr hat es die Merkmale eines Hundes erkannt und sich diese gemerkt. +Bei unüberwachtem Lernen werden also automatisch Muster erkannt, die dem Algorithmus zuvor nicht mitgeteilt wurden. \subsection{Bestärkendes Lernen} -Bestärkendes Lernen ist die dritte Klasse von Lerntypen, die oft unterschieden werden. Hier ist kein Eingabedatensatz vorhanden, sondern ein bekanntes Ziel definiert. Der Algorythmus soll einen möglichst effizienten Weg finden dieses Ziel zu erreichen. Oft ist dabei ein Handlungsträger (agent) in einer Umgebung gegeben. Dies kann beispielsweise ein Auto sein, das lernen soll selbst zu fahren. Auch die oben erwähnte Q-Learning Methode aus open-AIs hide and seek AI fällt in die Kategorie des bestärkenden Lernens. Der agent beginnt mit zufälligen Handlungen und erhält wenn er ein Zwischenziel erreicht Belohnungen, oder Strafen wenn er einen Fehler macht. Diese Belohnungen und Strafen werden in Form von Zahlen vergeben. Das selbstfahrende Auto würde beispielsweise eine Belohnung erhalten wenn es einen Streckenabschnitt fehlerfrei zurückgelegt hat und eine Strafe, wenn es gegen eine Wand fährt. Das Ziel ist es diese kummulativen Belohnungen zu minimieren und dadurch das vordefinierte Ziel zu erreichen. Hierfür häufig verwendete Algorythmen sind das Q-learning oder sogenannte \glqq Monte-Carlo Maschinen'' +Bestärkendes Lernen ist der letzte der drei häufig unterschiedenen Lerntypen. Hier ist kein Eingabedatensatz vorhanden, sondern ein bekanntes Ziel definiert. Der Algorithmus soll einen möglichst effizienten Weg finden dieses Ziel zu erreichen. Oft ist dabei ein Handlungsträger (agent) in einer Umgebung gegeben. Dies kann beispielsweise ein Auto sein, das lernen soll selbst zu fahren. Auch die in Abschnitt \ref{sec:verschiedene-techniken-maschinellen-lernens} erwähnte Q-Learning Methode aus open-AIs \glqq hide and seek AI'' fällt in die Kategorie des bestärkenden Lernens. Der durch die KI gesteuerte Handlungsträger beginnt mit zufälligen Handlungen und erhält, wenn er ein Zwischenziel erreicht, Belohnungen oder Strafen, wenn er einen Fehler macht. Diese Belohnungen und Strafen werden in Form von Zahlen vergeben. Das selbstfahrende Auto würde beispielsweise eine Belohnung erhalten, wenn es einen Streckenabschnitt fehlerfrei zurückgelegt hat, und eine Strafe, wenn es gegen eine Wand fährt. Das Ziel ist es diese kumulativen Belohnungen zu maximieren und dadurch das vordefinierte Ziel zu erreichen. Hierfür häufig verwendete Algorithmen sind das Q-learning oder sogenannte \glqq Monte-Carlo Maschinen''. \section{Neuronale Netze}\label{sec:neuronale-netze} -bei Neuronalen Netzen handelt es sich um eine programminterne Struktur, die für das maschinelle Lernen genutzt wird. Wie der Name bereits vermuten lässt, ist diese Methode ein Versuch das menschliche Lernen nachzuahmen. +Bei Neuronalen Netzen handelt es sich um eine programminterne Struktur, die für das maschinelle Lernen genutzt wird. Wie der Name bereits vermuten lässt, ist diese Methode ein Versuch das menschliche Lernen nachzuahmen. \subsection{Maschinelles Lernen und menschliches Lernen} -Das menschliche Gehirn ist aus sogenannten \glqq Neuronen'' aufgebaut. Ein Neuron ist eine Nervenzelle, die elektrische oder chemische Impulse annimmt, und gegebenenfalls einen elektrischen oder chemischen Impuls weitergibt. Die Nervenzellen berühren sich nicht direkt sondern sind nur über die sogenannten Synnapsen verbunden, über die diese Signale übertragen werden, sodass sich ein hoch komplexes Netzwerk von milliarden von Neuronen ergibt.\footnote{ +Das menschliche Gehirn ist aus sogenannten \glqq Neuronen'' aufgebaut. Ein Neuron ist eine Nervenzelle, die elektrische oder chemische Impulse annimmt und gegebenenfalls einen elektrischen oder chemischen Impuls weitergibt. Die Nervenzellen berühren sich nicht direkt, sondern sind nur über die sogenannten Synapsen verbunden, über die diese Signale übertragen werden, sodass sich ein hoch komplexes Netzwerk von Milliarden von Neuronen ergibt.\footnote{ Diese Definition ist stark vereinfacht. Sie enthält ausschließlich die wesentlichen Komponenten um das menschliche Gehirn mit einem neuronalen Netz vergleichen zu können.} \begin{figure}[h] \centering @@ -116,31 +117,31 @@ Diese Definition ist stark vereinfacht. Sie enthält ausschließlich die wesentl \caption[Neuron \newline Quelle: simple.wikipedia.org/wiki/File:Neuron.svg\newline Copyright: CC Attribution-Share Alike von Nutzer Dhp1080,\newline - bearbeitet]{Ein Neuron wie es im Gehirn vorliegt} + bearbeitet]{Vergleichende Darstellung eines Neurons im menschlichen Gehirn} \end{figure} -Ein neuronales Netz ist ähnlich aufgebaut. Es besteht aus \glqq Neuronen'', die eine theoretisch beliebige Anzahl von Eingaben annehmen können und mit einer entsprechenden Ausgabe reagieren, sowie Verbindungen zwischen den Neuronen. Auch das Lernprinzip entspricht dem eines Menschen. Das Netz nimmt immer Zahlen zwischen 0 und 1 als Eingabe an und berechnet eine entsprechende Ausgabe. Es erhält anschließend die Information, wie die richtige Lösung gelautet hätte und lernt dann aus seinen Fehlern, indem es gewisse Werte, die in die Berechnung einfließen, anpasst. Analog lernt ein Mensch, indem er ausprobiert, gegebenenfalls scheitert, anschließend die richtige Antwort durch eine externe Quelle erhält und somit aus seinem Fehler lernt. Im Menschlichen Gehirn verknüpfen sich Dabei oft genutzte neuronale Verbindungen stärker und weniger benutzte Verbindungen bauen sich ab\cite{2}. Die Verstärkung und der Abbau entsprechen dem Ändern der Gewichtung einer Verbindung im neuronalen Netz. Die Gewichtung ist eine Eigenschaft der Verbindung, die eine zentrale Rolle in der Berechnung spielt und soll im folgenden weiter erläutert werden. Diese Ähnlichkeiten sind kein Zufall, sondern viel mehr Intention. Ein neuronales Netz ist nämlich der gezielte Versuch das menschliche Lernen nachzuahmen um maschinelles Lernen zu ermöglichen. +Ein neuronales Netz ist ähnlich aufgebaut. Es besteht aus \glqq Neuronen'', die eine theoretisch beliebige Anzahl von Eingaben annehmen können und mit einer entsprechenden Ausgabe reagieren, sowie Verbindungen zwischen den Neuronen. Auch das Lernprinzip entspricht dem eines Menschen. Das Netz nimmt meißt Zahlen zwischen 0 und 1 als Eingabe an und berechnet eine entsprechende Ausgabe. Es erhält anschließend die Information, wie die richtige Lösung gelautet hätte und lernt dann aus seinen Fehlern, indem es gewisse Werte, die in die Berechnung einfließen, anpasst. Analog lernt ein Mensch, indem er ausprobiert, gegebenenfalls scheitert, anschließend die richtige Antwort durch eine externe Quelle erhält und somit aus seinem Fehler lernt. Im menschlichen Gehirn verknüpfen sich dabei oft genutzte neuronale Verbindungen stärker und weniger benutzte Verbindungen bauen sich ab\cite{2}. Die Verstärkung und der Abbau entsprechen der Änderung der Gewichtung einer Verbindung im neuronalen Netz. Die Gewichtung ist eine Eigenschaft der Verbindung, die eine zentrale Rolle in der Berechnung spielt, und soll im folgenden weiter erläutert werden. Diese Ähnlichkeiten zwischen maschinellem und menschlichem Lernen sind kein Zufall, sondern viel mehr Intention. Ein neuronales Netz ist nämlich der gezielte Versuch das menschliche Lernen nachzuahmen, um maschinelles Lernen zu ermöglichen. \subsection{Der Aufbau eines neuronalen Netzes} -Ein neuronales Netz besteht aus Neuronen und Verbindungen zwischen diesen. Es gibt einen sogenannten \glqq Input Layer'', der die Daten, den sogenannten \glqq Input Vector'', annimmt, eine beliebige Anzahl von sogenannten \glqq Hidden Layers'', in denen das eigentliche Lernen statt findet, und einen sogenannten \glqq Output Layar'', der für die Datenausgabe verantwortlich ist. Die Anzahl der Neuronen ist nach oben nicht begrenzt, wird jedoch zumeist der Aufgabe angepasst. Im Input Layer ist meißt ein Neuron pro Pixel des Eingabebildes vorhanden und im Output Layer ein Neuron pro möglicher Ausgabe. Sollen also 28$\times$28 Pixel große Bilder handgeschriebener Ziffern klassifiziert werden, so gibt es 784 Eingabeneuronen, da jedes Bild 784 Pixel groß ist, und 10 Ausgabeneuronen, da es 10 Ziffern gibt. +Ein neuronales Netz besteht aus Neuronen und Verbindungen zwischen diesen. Eine Schicht von Neuronen wird auch als Layer bezeichnet und die Verbindungen als Kanten. Es gibt einen sogenannten \glqq Input Layer'', der die Daten (also meißt die Zahlen von 0 bis 1), den sogenannten \glqq Input Vector'', annimmt, eine beliebige Anzahl von sogenannten \glqq Hidden Layers'', in denen das eigentliche Lernen statt findet, und einen sogenannten \glqq Output Layer'', der für die Datenausgabe verantwortlich ist. Die Anzahl der Neuronen ist nach oben nicht begrenzt, wird jedoch zumeist der Aufgabe angepasst. Im Input Layer ist meist ein Neuron pro Pixel des Eingabebildes vorhanden und im Output Layer ein Neuron pro möglicher Ausgabe. Sollen also 28$\times$28 Pixel große Bilder handgeschriebener Ziffern klassifiziert werden, so gibt es 784 Eingabeneuronen, da jedes Bild 784 Pixel groß ist\footnote{Um Bilder in das Netz einlesen zu können müssen die Matritzen, als die die Bilder gespeichert sind erst in einen Vektor konvertiert werden. Diesen Vorgang beschreibt man als \glqq flattening''}, und 10 Ausgabeneuronen, da es 10 Ziffern gibt. \begin{figure}[h] \centering \includegraphics[width=\linewidth]{../graphics/Neural_Net.png} \caption{Ein einfaches neuronales Netz} \end{figure} -Jedes Neuron hat außerdem eine sogenannte Aktivierungsfunktion, die sich von Neuron zu Neuron unterscheiden kann, und jede Kante eine asoziierte Gewichtung und einen Bias. Ein neuronales Netz besteht also aus:\newline +Jedes Neuron hat außerdem eine sogenannte Aktivierungsfunktion, die sich von Neuron zu Neuron unterscheiden kann, und jede Kante eine asoziierte Gewichtung und einen Bias. Ein neuronales Netz besteht also aus: \begin{enumerate} \item Neuronen mit gegebenenfalls verschiedenen Aktivierungsfunktionen, aufgeteilt in ein Input-, beliebig viele Hidden- und ein Output-Layer. - \item Verbindungen zwischen diesen Neuronen, die jeweils einen eigenen Bias und eine Gewichtung besitzen. + \item Verbindungen zwischen diesen Neuronen, die jeweils einen eigenen Bias und eine Gewichtung besitzen, und als Kanten bezeichnet werden. \end{enumerate} Sind alle Neuronen eines Layers jeweils mit allen Neuronen des nächsten Layers verbunden, wird das Layer als \glqq fully connected layer'' bezeichnet. \subsection{Berechnung des Ausgabevektors} Der Ausgabevektor wird berechnet, indem: \begin{enumerate} - \item Alle Ausgaben aus der vorherigen Schicht mit der Gewichtung der korrespondierenden Kante multipliziert werden - \item Alle gewichteten Eingabewerte summiert werden - \item Der Bias des Neurons hinzuaddiert wird - \item Die Aktivierungsfunktion auf diesen Wert angewandt wird + \item Alle Ausgaben aus der vorherigen Schicht mit der Gewichtung der korrespondierenden Kante multipliziert werden. + \item Alle gewichteten Eingabewerte summiert werden. + \item Der Bias des Neurons hinzu addiert wird. + \item Die Aktivierungsfunktion auf diesen Wert angewandt wird. \end{enumerate} -Die Aktivierungsfunktion hat dabei die Rolle die Werte zu normieren. Sie sorgt also dafür, dass alle Werte innerhalb des Netzes im Intervall $[0, 1]$ bleiben. Es gibt eine Vielzahl von Aktivierungsfunktionen. Die häufigste ist die in Abbildung \ref{Sigmoid} dargestellte \glqq Sigmoid'' Funktion. +Die Aktivierungsfunktion hat dabei die Rolle die Werte zu normieren. Sie sorgt also dafür, dass alle Werte innerhalb des Netzes im Intervall $[0, 1]$ bleiben. Es gibt eine Vielzahl von Aktivierungsfunktionen. Die häufigste ist die in Abbildung \ref{Sigmoid} dargestellte \glqq Sigmoid'' Funktion. Aber auch die in Kapitel \ref{sec:das-netz} näher erläuterte \glqq ReLu'' Funktion ist recht populär. \begin{figure}[h] \begin{center} \begin{tikzpicture} @@ -152,10 +153,10 @@ Die Aktivierungsfunktion hat dabei die Rolle die Werte zu normieren. Sie sorgt a \caption{Der Plot der Sigmoid Funktion $\sigma(x)=\frac{e^x}{e^x+1}$} \label{Sigmoid} \end{figure} -\newline -Im Gegensatz dazu haben Gewichtungen typischerweise etwa den doppelten Wert der Eingaben. Alle Were werden jedoch automatisch im Lernprozess angepasst. -\newline -Der Begriff Eingabe- und Ausgabevektor lassen bereits vermuten, dass es sich bei Neuronalen Netzen um Objekte aus dem Bereich der linearen Algebra handelt. Daher wird im Folgenden auch die Notationsweise mit Hilfe von linearer Algebra verwendet. Betrachtet man eine Ausgabe eines Neurons wird diese als $a^ {(layer)}_{neuron}$ bezeichnet. Den Ausgabevektor des Input Layers würde man also folgendermaßen schreiben: +\\ +Im Gegensatz dazu haben Gewichtungen typischerweise etwa den doppelten Wert der Eingaben. Alle Werte werden jedoch automatisch im Lernprozess angepasst. +\\ +Die Begriffe Eingabe- und Ausgabevektor lassen bereits vermuten, dass es sich bei Neuronalen Netzen um Objekte aus dem Bereich der linearen Algebra handelt. Daher wird im Folgenden auch die Notationsweise mit Hilfe von linearer Algebra verwendet. Betrachtet man eine Ausgabe eines Neurons, wird diese als $a^ {(layer)}_{neuron}$ bezeichnet. Den Ausgabevektor des Input Layers würde man also folgendermaßen schreiben: \begin{equation*} \begin{bmatrix} a^0_0\\ @@ -165,7 +166,7 @@ Der Begriff Eingabe- und Ausgabevektor lassen bereits vermuten, dass es sich bei a^0_n \end{bmatrix} \end{equation*} -Die Gewichtungen $w$ der jeweiligen Kanten werden notiert als $w^{(von\ Layer)}_{(zu\ Neuron, von\ Neuron)}$. \glqq von Layer'' bezeichnet dabei das Layer in dem das Neuron liegt, das die Information ausgibt. \glqq zu Neuron'' ist der Index des Neurons im nächsten Layer, das die Information annimmt und \glqq von Neuron'' der Index des Neurons, das die Information abgibt. Die Gewichtung der Kante, die das zweite Neuron im ersten Layer mit dem dritten Neuron im zweiten Layer verebindet würde also als $w^0_{3,2}$ bezeichnet werden. Dabei wird bei null begonnen zu zählen, sodass das erste Layer und das erste Neuron den Index 0 erhält.\newline +Die Gewichtungen $w$ der jeweiligen Kanten werden als $w^{(von\ Layer)}_{(zu\ Neuron, von\ Neuron)}$ notiert. \glqq Von Layer'' bezeichnet dabei das Layer, in dem das Neuron liegt, das die Information ausgibt. \glqq Zu Neuron'' ist der Index des Neurons im nächsten Layer, das die Information annimmt und \glqq von Neuron'' der Index des Neurons, das die Information abgibt. Die Gewichtung der Kante, die das zweite Neuron im ersten Layer mit dem dritten Neuron im zweiten Layer verbindet, würde also als $w^0_{3,2}$ bezeichnet werden. Dabei wird bei Null begonnen zu zählen, sodass das erste Layer und das erste Neuron den Index 0 erhält.\newline Die Gewichtungen aller Verbindungen eines Layers zum nächsten können also als folgende Matrix geschrieben werden: \begin{equation*} \begin{bmatrix} @@ -175,7 +176,7 @@ Die Gewichtungen aller Verbindungen eines Layers zum nächsten können also als w_{k,0} & w_{k,1} & \cdots & w_{k,n}\\ \end{bmatrix} \end{equation*} -Dabei ist $n$ hier die selbe Zahl wie $n$ im Ausgabevektor, da genau so viele Ausgaben vorhanden sein müssen, wie Neuronen in diesem Layer vorhanden sind, da jedes Neuron einen Wert ausgibt.\footnote{Es existieren auch Neuronen, die Daten verwerfen. Diese kommen im hier betrachteten Typ von neuronalem Netz allerdings nicht vor und werden daher der Einfachheit halber außenvor gelassen.}Der Bias Vektor wird genau so wie der Ausgabevektor bezeichnet. +Dabei ist $n$ hier dieselbe Zahl wie $n$ im Ausgabevektor, da genau so viele Ausgaben vorhanden sein müssen, wie Neuronen in diesem Layer vorhanden sind, da jedes Neuron einen Wert ausgibt\footnote{Es existieren auch Neuronen, die Daten verwerfen. Diese kommen im hier betrachteten Typ von neuronalem Netz allerdings nicht vor und werden daher der Einfachheit halber außenvor gelassen.}. Der Bias Vektor wird genau so wie der Ausgabevektor bezeichnet: \begin{equation*} \begin{bmatrix} b^0_0\\ @@ -185,7 +186,7 @@ Dabei ist $n$ hier die selbe Zahl wie $n$ im Ausgabevektor, da genau so viele Au b^0_n \end{bmatrix} \end{equation*} -Beachtet man jetzt noch, dass bei jedem Neuron die Aktivierungsfunktion angewandt werden muss ergibt sich folgende Gleichung für die Berechnung des Ausgabevektors $\vec{o}$ aus einem Einbagevektor $\vec{a}$ durch eine Schicht von Neuronen: +Beachtet man jetzt noch, dass bei jedem Neuron die Aktivierungsfunktion angewandt werden muss, ergibt sich folgende Gleichung für die Berechnung des Ausgabevektors $\vec{o}$ aus einem Einbagevektor $\vec{a}$ durch eine Schicht von Neuronen: \begin{figure}[h] \begin{equation*} \vec{o} = \sigma\left( @@ -212,18 +213,18 @@ Beachtet man jetzt noch, dass bei jedem Neuron die Aktivierungsfunktion angewand \end{bmatrix} \right) \end{equation*} - \caption{Formel zur Berechnung eines Ausgabevektors aus einem Eingabevektor durch ein Layer Neuronen. } + \caption{Formel zur Berechnung eines Ausgabevektors aus einem Eingabevektor durch eine Schicht von Neuronen. } \end{figure} \newline -Zur Vereinfachung wurde die Funktion hier auf den gesamten Ausgabevektor angewandt. Dies ist korrekt, sofern alle Neuronen eines Layers die selbe Aktivierungsfunktion aufweisen. Dies muss natürlich nicht immer so sein. Sind die Aktivierungsfunktionen der Neuronen eines Layers verschieden, so wird die Aktivierungsfunktion des jeweiligen Neurones separat auf das korrespondierende Element des Vektors $W\cdot\vec{a}+\vec{b}$ angewandt. +Zur Vereinfachung wurde die Funktion hier auf den gesamten Ausgabevektor angewandt. Dies ist korrekt, sofern alle Neuronen eines Layers dieselbe Aktivierungsfunktion aufweisen. Dies muss natürlich nicht immer so sein. Sind die Aktivierungsfunktionen der Neuronen eines Layers verschieden, so wird die Aktivierungsfunktion des jeweiligen Neurons separat auf das korrespondierende Element des Vektors $W\cdot\vec{a}+\vec{b}$ angewandt. \subsection{Der Lernprozess} -Der Lernprozess gliedert sich in wenige wesentliche Schritte. Zuerst wird unter Verwendung des oben beschriebenen Prozesses aus einem Eingabevektor ein Ausgabevektor berechnet. Diese Berechnung wird im Lernprozess extrem oft durchgeführt, weshalb sich neuronale Netze besonders schnell auf Grafikkarten trainieren lassen. Diese sind für mathematische Operationen im Bereich der linearen Algebra, wie Matritzenmultiplikation oder Addition optimiert und werden daher auch als Vektorprozessoren bezeichnet.\newline -Dieser Ausgabevektor wird nun, mit Hilfe einer Fehlerfunktion, mit dem erwarteten Ausgabevektor verglichen. Je größer dabei die Differenz zwischen erwartetem Ausgabevektor und tatsächlichem Ausgabevektor ist, desto größer ist der Wert der Fehlerfunktion. Der Ausgabewert dieser Fehlerfunktion wird als \glqq Fehler'' oder auch als \glqq Kosten'' bezeichnet. Wenn also das Minimum dieser Fehlerfunktion bestimmt wird, wird der Fehler minimiert und die tatsächliche Ausgabe des Netzes nähert sich der korrekten Ausgabe immer weiter an.\newline -Eine Methode, die hier erläutert werden soll, dieses Minimum zu finden ist das Gradientenverfahren. Nachdem mit Hilfe dieses Verfahrens der Fehler mimnimiert wurde, werden die Parameter, also die Gewichtungen und Biases, des neuronalen Netzes entsprechend angepasst. Diesen Prozess der Fehlerminimierung mittels des Gradientenverfahrens und der anschließenden Anpassung der Werte bezeichnet man auch als \glqq Backpropagation''. Es existieren auch noch andere Verfahren zur Fehlerminimierung, der Einfachheit halber soll hier aber nur Backpropagation erläutert werden. +Der Lernprozess gliedert sich in wenige wesentliche Schritte. Zuerst wird unter Verwendung des oben beschriebenen Prozesses aus einem Eingabevektor ein Ausgabevektor berechnet. Diese Berechnung wird im Lernprozess extrem oft durchgeführt, weshalb sich neuronale Netze besonders schnell auf Grafikkarten trainieren lassen, da diese für mathematische Operationen im Bereich der linearen Algebra wie Matritzenmultiplikation oder Addition optimiert sind, und daher oft auch als Vektorprozessoren bezeichnet werden.\\ +Dieser Ausgabevektor wird nun, mit Hilfe einer Fehlerfunktion, mit dem erwarteten Ausgabevektor verglichen. Je größer dabei die Differenz zwischen erwartetem Ausgabevektor und tatsächlichem Ausgabevektor ist, desto größer ist der Wert der Fehlerfunktion. Der Ausgabewert dieser Fehlerfunktion wird als \glqq Fehler'' oder auch als \glqq Kosten'' bezeichnet. Wenn also das Minimum dieser Fehlerfunktion bestimmt wird, wird der Fehler minimiert, und die tatsächliche Ausgabe des Netzes nähert sich der korrekten Ausgabe immer weiter an.\newline +Eine Methode dieses Minimum zu finden, ist das Gradientenverfahren. Nachdem mit Hilfe dieses Verfahrens der Fehler mimimiert wurde, werden die Parameter, also die Gewichtungen und Biases\footnote{Es gibt Netzarten, die mehr anpassbare Parameter aufweisen.}, des neuronalen Netzes entsprechend angepasst. Diesen Prozess der Fehlerminimierung mittels des Gradientenverfahrens und der anschließenden Anpassung der Werte bezeichnet man auch als \glqq Backpropagation''. Es existieren auch noch andere Verfahren zur Fehlerminimierung, der Einfachheit halber soll hier aber nur Backpropagation erläutert werden. \subsection{Fehlerfunktionen} -Es existiert eine Vielzahl von Fehlerfunktionen, die alle für unterschiedliche Anwendungsgebiete unterschiedlich passend sind. Im Groben lassen sich allerdings Fehlerfunktionen, die für Klassifizierungsprobleme geeignet sind von solchen unterscheiden, die für Regressionsprobleme geeignet sind. +Es existiert eine Vielzahl von Fehlerfunktionen, die alle für unterschiedliche Anwendungsgebiete passend sind. Im Groben lassen sich allerdings Fehlerfunktionen, die für Klassifizierungsprobleme geeignet sind, von solchen unterscheiden, die für Regressionsprobleme geeignet sind. \subsubsection{MSE -- Durchschnittlicher quadratischer Fehler} -Der sogenannte durchschnittliche quadratische Fehler ist eine häufig genutzte Fehlerfunktion für Regressionsprobleme. Die englische Bezeichnung lautet \glqq Mean squared error'', woraus sich auch die Abkürzung \glqq MSE loss'' ergibt. Sie ist wie in Abbildung \ref{MSE_equation} dargestellt, definiert. +Der sogenannte durchschnittliche quadratische Fehler ist eine häufig genutzte Fehlerfunktion für Regressionsprobleme, die nicht nur für Regression im Bereich des maschinellen Lernens verwendung findet, sondern auch bei statistischer Regression populär ist. Die englische Bezeichnung lautet \glqq Mean squared error'', woraus sich auch die Abkürzung \glqq MSE loss'' ergibt. Sie ist wie in Abbildung \ref{MSE_equation} dargestellt, definiert. \begin{figure}[h] \begin{equation*} MSE=\dfrac{\sum\limits_{i=1}^n(y_i-\hat{y_i})^2}{n} @@ -232,8 +233,8 @@ Der sogenannte durchschnittliche quadratische Fehler ist eine häufig genutzte F \label{MSE_equation} \end{figure} \newline -Wie der Name vermuten lässt, gibt diese Fehlerfunktion den Durchschnitt der quadrierten Differenzen zwischen dem vorausgesagten und dem tatsächlichen Ergebnis an. Aufgrund der Quadrierung des Fehlers, werden durch diese Funktion stark abweichende Werte wesentlich stärker gewichtet, als weniger stark abweichende Werte. Ihr Gradient ist außerdem einfach berechenbar, was für das Gradientenverfahren später relevant ist.\cite{3} -\subsubsection{MAE -- Durchschnitztlicher absoluter Fehler} +Wie der Name vermuten lässt, gibt diese Fehlerfunktion den Durchschnitt der quadrierten Differenzen zwischen dem vorausgesagten und dem tatsächlichen Ergebnis an. Aufgrund der Quadrierung des Fehlers werden durch diese Funktion stark abweichende Werte wesentlich stärker gewichtet, als weniger abweichende Werte. Ihr Gradient ist außerdem einfach berechenbar, was für das Gradientenverfahren später relevant ist.\cite{3} +\subsubsection{MAE -- Durchschnittlicher absoluter Fehler} Bei dem durchschnittlichen absoluten Fehler handelt es sich ebenfalls um eine Fehlerfunktion, die für Regressionsprobleme eingesetzt wird. Die englische Bezeichnung lautet \glqq Mean absolute error''. Sie ist ähnlich wie der durchschnittliche quadratische Fehler definiert. \begin{figure}[h] \begin{equation*} @@ -245,7 +246,7 @@ Bei dem durchschnittlichen absoluten Fehler handelt es sich ebenfalls um eine Fe \newline Auch hier wird die \glqq Richtung'' des Fehlers, in diesem Fall durch die Normierung, verworfen. Außerdem ist diese Fehlerfunktion nicht so anfällig gegenüber Ausreißern in den Daten, da dieser Fehler nicht quadriert wird. Ein Nachteil des durchschnittlichen absoluten Fehlers ist allerdings die höhere Komplexität zur Berechnung des Gradienten.\cite{3} \subsubsection{Kreuzentropiefehler} -Der Kreuzentropiefehler ist die am häufigsten verwendete Fehlerfunktion für Klassifizierungsprobleme. Sie gibt den Fehler für eine Klassifizierung an, die den gegebenen Klassen Wahrscheinlichkeiten im Intervall $I=[0;1]$ zuordnet. Dabei steigt der Fehler stärker, je weiter sich die Vorhersage vom tatsächlichen Wert entfernt. Wie aus Abbildung \ref{CEL_Graph} hervorgeht, wird also sicheren, aber falschen Vorhersagen der höhste Fehlerwert zugeordnet. +Der Kreuzentropiefehler ist die am häufigsten verwendete Fehlerfunktion für Klassifizierungsprobleme. Sie gibt den Fehler für eine Klassifizierung an, die den gegebenen Klassen Wahrscheinlichkeiten im Intervall $I=[0;1]$ zuordnet. Dabei steigt der Fehler stärker, je weiter sich die Vorhersage vom tatsächlichen Wert entfernt. Wie aus Abbildung \ref{CEL_Graph} hervorgeht, wird also sicheren, aber falschen Vorhersagen der höchste Fehlerwert zugeordnet. \begin{figure}[h] \begin{center} \begin{tikzpicture} @@ -260,12 +261,12 @@ Der Kreuzentropiefehler ist die am häufigsten verwendete Fehlerfunktion für Kl \end{axis} \end{tikzpicture} \end{center} - \caption{Der Graph der Kreuzentropie Fehlerfunktion wenn das tatsächliche Label 1 ist} + \caption{Der Graph der Kreuzentropie-Fehlerfunktion, wenn das tatsächliche Label 1 ist} \label{CEL_Graph} \end{figure} -\newline +\\ Der Fehler steigt also mit zunehmender Abweichung der Vorhersage zum tatsächlichen Label rapide an.\newline -Mathematisch ist der Kreuzentropiefehler nach der Funktion in Abbildung \ref{CEL_Function} definiert, wobei $y$ einen Binärindikator darstellt, der angibt ob das zu klassifizierende Objekt tatsächlich zur Klasse gehört (dann ist er 1) und $p$ die vorausgesagte Wahrscheinlichkeit ob das Objekt zur Klasse gehört, beschreibt. +Mathematisch ist der Kreuzentropiefehler nach der Funktion in Abbildung \ref{CEL_Function} definiert, wobei $y$ einen Binärindikator darstellt, der angibt, ob das zu klassifizierende Objekt tatsächlich zur Klasse gehört (dann ist er 1), und $p$ die vorausgesagte Wahrscheinlichkeit, ob das Objekt zur Klasse gehört, beschreibt. \begin{figure}[h] \begin{equation*} CrossEntropyLoss=-(yln(p)+(1-y)ln(1-p)) @@ -274,14 +275,14 @@ Mathematisch ist der Kreuzentropiefehler nach der Funktion in Abbildung \ref{CEL \label{CEL_Function} \end{figure} \newline -Hier fällt auf, dass, falls das Label 0 ist, der linke Teil der Gleichung weg fällt und falls es 1 ist, der Rechte. Wenn berechnetes und tatsächliches Label identisch sind, ist der Fehler stets 0.\newline -Existieren mehr als 2 Klassen, handelt es sich also nicht mehr um eine Binärklassifizierung, müssen die Fehler nach der Gleichung in Abbildung \ref{CEL_Finction_cummulative} summiert werden. +Hier fällt auf, dass, falls das Label 0 ist, der linke Teil der Gleichung wegfällt, und falls es 1 ist, der rechte. Wenn berechnetes und tatsächliches Label identisch sind, ist der Fehler stets 0.\\ +Existieren mehr als 2 Klassen handelt es sich also nicht mehr um eine Binärklassifizierung müssen die Fehler nach der Gleichung in Abbildung \ref{CEL_Function_cummulative} summiert werden. \begin{figure}[h] \begin{equation*} CrossEntropyLoss(M)=-\sum\limits_{c=1}^My_{o,c}ln(p_{o,c}) \end{equation*} \caption{Die Gleichung für den durchschnittlichen absoluten Fehler} - \label{CEL_Finction_cummulative} + \label{CEL_Function_cummulative} \end{figure} \newline Dabei gibt M die Anzahl der Klassen an, c das Label für die Klasse und o die berechnete Klassifizierung für diese Klasse. @@ -440,7 +441,7 @@ Hintereinander können convolutional Layers auch ganze Elemente eines Bildes erk \label{HL_features_conv} \end{figure} \\ -Das bemerkenswerte an Convolutional Layers ist vor allem, dass duch ähnliche Optimierungsalgorytmen auch hier maschinelles lernen möglich ist, dass sich ein neuronales Netz diese Filter also selbstständig beibringen kann. +Das bemerkenswerte an Convolutional Layers ist vor allem, dass duch ähnliche Optimierungsalgorithmen auch hier maschinelles lernen möglich ist, dass sich ein neuronales Netz diese Filter also selbstständig beibringen kann. \subsubsection{Pooling Layers} Pooling Layers werden ebenfalls hauptsächlich in Convolutional Neural Networks verwendet. Sie werden nach Convolutional Layers genutzt um das Ausgabebild herunterzutakten, also verlustbehaftet zu Komprimieren. Dabei wird die Feature Map im wesentlichen zusammengefasst um die Datenmenge, die das Folgende Convolutional Layer erhält zu reduzieren und sie Verschiebungen im Originalbild gegenüber immuner zu machen. Das ist deshalb notwendig, da die Convolutional Layers die Features lokal sehr begrenzt erkennen und daher eine kleine Verschiebung des Originalbildes zur Folge haben kann, dass im Folgenden Convolutional Layer die Kombination der Features gegebenenfalls nicht richtig erkannt wird. Das Pooling Layer kann diesem Effekt entgegenwirken, indem es die Features zusammenfasst. So kann aus einer ganzen Kante beispielsweise ein einziger Pixel werden.\\ Es werden im Wesentlichen zwei Techniken zum Pooling eingesetzt. @@ -535,8 +536,8 @@ Die Dimension der Submatritzen beträgt meißt $2\times2$. In Abbildung \ref{Poo Pytorch ist ein von der Facebook Research Group entwickeltes Framework für machinelles Lernen in Python. Es ermöglicht Programmierern, maschinelles Lernen einfach und hochoptimiret umzusetzen. Dafür stellt es unter anderem eine Schnittstelle für Grafikkarten bereit und lieferet viele Funktionen, die oft benötigt werden. So muss beispielsweise die Gradientenberechnung oder die Berechnung der Fehlerfunktion nicht in jedem Projekt erneut implementiert werden. Die Grundlage der Pytorch Library ist der Datentyp \glqq Tensor''. Dabei handelt es sich im wesentlichen um eine Matrix, die optimierte Funktionen für maschinelles Lernen aufweist und auf Grafikkarten transferiert werden kann. Alle Daten werden in Form dieser Tensoren gespeichert und verarbeitet. Sollen also Bilder erkannt werden, müssen diese erst zu Tensoren konvertiert werden. Neben den Fehlerfunktionen und der Gradientenberechnung ist besonders die Einfachheit mit der ein Netz in Pytorch definiert werden kann bezeichnend. Pytorch ermöglicht es also, dass die Entwicklung auf die Logik selber fokusiert sein kann und trotzdem komplexe mathematische Funktionen verwendet werden können. Häufig genannte Alternativen zu Pytorch sind die Frameworks \glqq Tensorflow'' oder \glqq Keras''. Tensorflow wird von Google entwickelt und ist auch für andere Sprachen als Python verfügbar. \subsection{Datenvorbereitung} Wie bereits erwähnt, müssen die Daten erst vorbereitet werden. Dies kann unter Umständen das größte Problem bei einem Projekt, das maschinelles Lernen involviert, darstellen, da die Datenvorbereitung sehr komplex werden kann. In einem einfachen Fall liegt der Datensatz bereits in Pytorchs interner Datenlibrary \glqq Torchvision'' vor und muss nur noch geladen werden. Im komplexesten Fall, kann es allerdings notwendig werden, mehrere sogenannte \glqq Transforms'' auf die Daten anzuwenden. Das sind kleine Funktionen, die die Daten verändern. Sie schneiden beispielsweise das Eingabebild zu, normalisieren es oder wenden eine vollständig selbst definierte Funktion darauf an.\\ -In ein neuronales Netz können immer nur Bilder der gleichen Größe gegeben werden, da die Größe der Eingabetensoren konstant ist und die Form des Eingabelayers definiert. Ist also ein Datensatz gegeben, in dem zum Beispiel einige Bilder im hoch und einige im Querformat vorliegen, müssen diese erst durch geschicktes Zuschneiden und verschieben auf eine Größe gebracht werden. Auch dafür lassen sich Transforms verwenden. Liegen die Daten allerdings nicht als Bilder vor, müssen gegebenenfalls angepasste Algorythmen angewandt werden um diese Daten zu Tensoren zu konvertieren.\\ -Aufgrund der Vielseitigkeit von PyTorch ist es ebenfalls möglich andere Librarys einzubinden um vor der Konvertierung der Bilder zu einem Tensor zum Beispiel einen Kantenerkennungsalgorythmus darauf anzuwenden. Im einfachsten Fall stellt sich das Laden der Daten wie in Abbildung \ref{MNIST_Dataloader_Code} dar. +In ein neuronales Netz können immer nur Bilder der gleichen Größe gegeben werden, da die Größe der Eingabetensoren konstant ist und die Form des Eingabelayers definiert. Ist also ein Datensatz gegeben, in dem zum Beispiel einige Bilder im hoch und einige im Querformat vorliegen, müssen diese erst durch geschicktes Zuschneiden und verschieben auf eine Größe gebracht werden. Auch dafür lassen sich Transforms verwenden. Liegen die Daten allerdings nicht als Bilder vor, müssen gegebenenfalls angepasste Algorithmen angewandt werden um diese Daten zu Tensoren zu konvertieren.\\ +Aufgrund der Vielseitigkeit von PyTorch ist es ebenfalls möglich andere Librarys einzubinden um vor der Konvertierung der Bilder zu einem Tensor zum Beispiel einen Kantenerkennungsalgorithmus darauf anzuwenden. Im einfachsten Fall stellt sich das Laden der Daten wie in Abbildung \ref{MNIST_Dataloader_Code} dar. \begin{figure}[h] \begin{minted}[ frame=lines, @@ -611,8 +612,8 @@ Das Definieren des Netzes ist in Pytorch bereits sehr einfach möglich, bietet j \label{Net_simple_definition} \end{figure}\\ Dieses Netz hat nur drei Layers: Ein Eingabelayer (\mintinline{python}{fc0}), das genau die Größe der Eingabedaten ($28\times28$) aufweist, ein hidden Layer (\mintinline{python}{fc1}), das 64 Skalere annimmt und 120 Skalare ausgibt und ein Ausgabelayer (\mintinline{python}{fc2}), das 120 Skalare annimmt und 10 ausgibt. Dass \mintinline{python}{fc2} 10 Ausgabeneuronen besitzt ist kein Zufall, sondern liegt darin begründet, dass dieses Klassifizierungsnetz genau 10 Klassen unterscheiden soll. Die Größe von \mintinline{python}{fc1} ist jedoch völlig frei gewählt. Es ist allerdings wichtig Acht zu geben, dass die Layers die Daten auch an einander weitergeben können. Ein Layer muss also stets so viele Ausgaben aufweisen, wie das Layer, an das die Daten weitergegeben werden sollen, Eingaben besitzt.\\ -Die \mintinline{python}{forward(self, x)} Funktion definiert, wie die Daten innerhalb des Netzes weitergegeben werden sollen. Hier werden sie erst in \mintinline{python}{fc0} gegeben, dann wird auf die Ausgabe aus \mintinline{python}{fc0} die Aktivierungsfunktion \glqq ReLu'' (REctified Linear Unit) angewandt. Die Ausgabe daraus wird dann in das hidden Layer \mintinline{python}{fc1} gegebnen und die Aktivierungsfunktion wird erneut angewandt. Im Output Layer geschieht dies nicht. Abschließend wird die Ausgabe von \mintinline{python}{F.log_softmax} zurück gegeben. Dies wendet erst einen SoftMax und dann einen Logarythmus auf die Daten an \cite{6} um diese zu normalisieren und ist in Klassifizierungsnetzwerken oft nötig um sogenannte \glqq One hot Vectors'' zu erstellen. Herkömmliche Ausgabevektoren haben einen Wert für jede Klasse und geben an wie wahrscheinlich das Netz die Eingabedaten dieser Klasse zuordnet. In One hot Vektoren ist immer der höhste Wert 1 und alle anderen Werte sind 0.\\ -Da die Netze als Klassen definiert werden und der Interne Datenverkehr in der\\ \mintinline{python}{forward(self, x)} Funktion abläuft, sind neuronale Netze in Pytorch also sehr anpassbar. So wäre es beispielsweise kein Problem zwischen Input und hidden Layer die Daten mit 2 zu multiplizieren (dafür würde man zwischen Zeile 9 und 10 den Code \glqq\mintinline{python}{x = x * 2}'' einfügen), auch wenn dies in den meißten Anwendungsbereichen keinen Sinn hätte. Pytorch kombiniert mit dieser Art Netze zu definieren also eine umfangreiche Flexibilität mit einfacher Bedienbartkeit. +Die \mintinline{python}{forward(self, x)} Funktion definiert, wie die Daten innerhalb des Netzes weitergegeben werden sollen. Hier werden sie erst in \mintinline{python}{fc0} gegeben, dann wird auf die Ausgabe aus \mintinline{python}{fc0} die Aktivierungsfunktion \glqq ReLu'' (REctified Linear Unit) angewandt. Die Ausgabe daraus wird dann in das hidden Layer \mintinline{python}{fc1} gegebnen und die Aktivierungsfunktion wird erneut angewandt. Im Output Layer geschieht dies nicht. Abschließend wird die Ausgabe von \mintinline{python}{F.log_softmax} zurück gegeben. Dies wendet erst einen SoftMax und dann einen Logarithmus auf die Daten an \cite{6} um diese zu normalisieren und ist in Klassifizierungsnetzwerken oft nötig um sogenannte \glqq One hot Vectors'' zu erstellen. Herkömmliche Ausgabevektoren haben einen Wert für jede Klasse und geben an wie wahrscheinlich das Netz die Eingabedaten dieser Klasse zuordnet. In One hot Vektoren ist immer der höhste Wert 1 und alle anderen Werte sind 0.\\ +Da die Netze als Klassen definiert werden und der Interne Datenverkehr in der\\ \mintinline{python}{forward(self, x)} Funktion abläuft, sind neuronale Netze in Pytorch also sehr anpassbar. So wäre es beispielsweise kein Problem zwischen Input und hidden Layer die Daten mit 2 zu multiplizieren (dafür würde man zwischen Zeile 9 und 10 den Code \glqq\mintinline{python}{x = x * 2}'' einfügen), auch wenn dies in den meisten Anwendungsbereichen keinen Sinn hätte. Pytorch kombiniert mit dieser Art Netze zu definieren also eine umfangreiche Flexibilität mit einfacher Bedienbartkeit. \subsection{Trainieren des Netzes} Das Trainieren des Netzes erfolgt in der sogenannten \glqq Training Loop''. Also in einer Schleife, die über den Datensatz iteriert. Zumeißt steht diese noch in einer Schleife, die über die Epochenzahl iteriert. In der Training loop wird ein Element des Datensatzes gelesen, in das Netz gegeben, die Ausgabe wird mit dem Label verglichen und schließlich werden die Parameter des Netzes Angepasst. Der Code dafür ist in Abbildung \ref{Code_train_loop} dargestellt. \begin{figure}[h] @@ -653,18 +654,18 @@ for epoch in range(EPOCHS): \caption{Code um das Netz auf einem Datensatz zu trainieren} \label{Code_train_loop} \end{figure}\\ -In Zeile 1 wird dafür zunächst das Netz instanziiert. In Zeile 3 und 4 Wird bestimmt ob eine Grafikkarte zum trainieren verfügbar ist und diese wird gegebenenfalls genutzt. Auch wird ausgegeben, auf welchem Gerät das Netz trainiert wird. Der Code in Zeile 6 verschiebt das Netz auf die Grafikkarte, um dort mit diesem rechnen zu können. In Zeile 8 wird die Fehlerfunktion definiert, hier der Kreuzentropiefehler. In der nächsten Zeile wird der sogenannte \glqq Optimizer'' instanziiert. Dieser berechnet später die Gradienten und passt die Parameter des Netzes an. Der Optimizer, der hier gewählt wurde nennt sich \glqq Adam''. Es handelt sich um einen gradienten basierten Optimierungsalgorythmus, der von Diederik P. Kingma und Jimmy Ba entwickelt wurde \cite{7}. Eine Liste aller Implementierten Optimierungsalgorythmen ist in der PyTorch Dokumentation unter https://pytorch.org/docs/stable/optim.html gegeben. In Zeile 11 folgt nun die Schleife, die Über die Anzahl der Epochen iteriert, in der nächste Zeile die Train loop. Sie iteriert pro Epoche ein mal über den Datensatz. In Zeile 13 werden die Daten entpackt, da diese als Tupel vorliegen. X stellt dabei eine batch von Eingabevektoren dar, y eine Batch von Features. Zeile 14 setzt die Gradienten auf 0 zurück. Dies ist notwendig, da diese sonsnt aufsummiert würden. Die Parameter würden also nicht nur den Gradienten aus diesem Schleifendurchgang entsprechend angepasst werden, sonndern entsprechend zu einer Suppe aus allen Gradienten. Das würde das Ergebnis verfälschen. Der Befehl in Zeile 15 verschiebt auch den Eingabevektor auf die Grafikkarte, da alle Daten, mit denen das Netz rechnen soll erst auf dieser sein müssen. In Zeile 16 wird dann die Ausgabe des Netzes aus den Daten berechnet. Hier wird eine weitere Einfachheit von PyTorch deutlich: Um eine Ausgabe eines Netzes zu berechnen reicht der Befehl \mintinline{python}{output = net(input)} völlig aus. \mintinline{python}{X.view(-1, n * n)} wandelt den 2-dimensionalen\footnote{Streng genommen ist der Tensor der Bilder aus dem Datensatz nicht 2, sondern 4-dimensional. Er weist die Dimensionen $Batch\_size\times Kanalanzahl\times n \times n$ auf. Die Kanalanzahl entspricht bei Bildern den Farbkanälen, liegt bei schwarz-weiß Bildern also bei 1 und sonst bei 3 bis 4 für RGBA} Tensor des Eingabebildes in einen Eingabevektor um. Auch hier muss das batching wieder beachtet werden, daher die -1. $n\times n$ stellt nämlich die Größe der Eingabebilder dar und -1 passt den ersten Wert automatisch an den zweiten an, entspricht hier also immer der Batch size. Nachdem der Ausgabevektor berechnet wurde wird er zunächst auf die CPU verschoben, da dort der Fehler berechnet wird und anschließend mit Hilfe der Fehlerfunktion mit dem Label verglichen. Dies geschieht in Zeile 17 und 18. \mintinline{python}{loss.backward()} in Zeile 19 sorgt dann dafür, dass der Optimizer alle Alle Anpassungen berechnet um sie in Zeile 20 anzuwenden. Der weitere Code dient dazu jede Epoche das Netz in einer Datei abzuspeichern. Dafür muss es erst auf die CPU verschoben werden und danach wieder zurück auf die Grafikkarte. +In Zeile 1 wird dafür zunächst das Netz instanziiert. In Zeile 3 und 4 Wird bestimmt ob eine Grafikkarte zum trainieren verfügbar ist und diese wird gegebenenfalls genutzt. Auch wird ausgegeben, auf welchem Gerät das Netz trainiert wird. Der Code in Zeile 6 verschiebt das Netz auf die Grafikkarte, um dort mit diesem rechnen zu können. In Zeile 8 wird die Fehlerfunktion definiert, hier der Kreuzentropiefehler. In der nächsten Zeile wird der sogenannte \glqq Optimizer'' instanziiert. Dieser berechnet später die Gradienten und passt die Parameter des Netzes an. Der Optimizer, der hier gewählt wurde nennt sich \glqq Adam''. Es handelt sich um einen gradienten basierten Optimierungsalgorithmus, der von Diederik P. Kingma und Jimmy Ba entwickelt wurde \cite{7}. Eine Liste aller Implementierten Optimierungsalgorithmen ist in der PyTorch Dokumentation unter https://pytorch.org/docs/stable/optim.html gegeben. In Zeile 11 folgt nun die Schleife, die Über die Anzahl der Epochen iteriert, in der nächste Zeile die Train loop. Sie iteriert pro Epoche ein mal über den Datensatz. In Zeile 13 werden die Daten entpackt, da diese als Tupel vorliegen. X stellt dabei eine batch von Eingabevektoren dar, y eine Batch von Features. Zeile 14 setzt die Gradienten auf 0 zurück. Dies ist notwendig, da diese sonsnt aufsummiert würden. Die Parameter würden also nicht nur den Gradienten aus diesem Schleifendurchgang entsprechend angepasst werden, sonndern entsprechend zu einer Suppe aus allen Gradienten. Das würde das Ergebnis verfälschen. Der Befehl in Zeile 15 verschiebt auch den Eingabevektor auf die Grafikkarte, da alle Daten, mit denen das Netz rechnen soll erst auf dieser sein müssen. In Zeile 16 wird dann die Ausgabe des Netzes aus den Daten berechnet. Hier wird eine weitere Einfachheit von PyTorch deutlich: Um eine Ausgabe eines Netzes zu berechnen reicht der Befehl \mintinline{python}{output = net(input)} völlig aus. \mintinline{python}{X.view(-1, n * n)} wandelt den 2-dimensionalen\footnote{Streng genommen ist der Tensor der Bilder aus dem Datensatz nicht 2, sondern 4-dimensional. Er weist die Dimensionen $Batch\_size\times Kanalanzahl\times n \times n$ auf. Die Kanalanzahl entspricht bei Bildern den Farbkanälen, liegt bei schwarz-weiß Bildern also bei 1 und sonst bei 3 bis 4 für RGBA} Tensor des Eingabebildes in einen Eingabevektor um. Auch hier muss das batching wieder beachtet werden, daher die -1. $n\times n$ stellt nämlich die Größe der Eingabebilder dar und -1 passt den ersten Wert automatisch an den zweiten an, entspricht hier also immer der Batch size. Nachdem der Ausgabevektor berechnet wurde wird er zunächst auf die CPU verschoben, da dort der Fehler berechnet wird und anschließend mit Hilfe der Fehlerfunktion mit dem Label verglichen. Dies geschieht in Zeile 17 und 18. \mintinline{python}{loss.backward()} in Zeile 19 sorgt dann dafür, dass der Optimizer alle Alle Anpassungen berechnet um sie in Zeile 20 anzuwenden. Der weitere Code dient dazu jede Epoche das Netz in einer Datei abzuspeichern. Dafür muss es erst auf die CPU verschoben werden und danach wieder zurück auf die Grafikkarte. \subsection{Pytorch und weights and biases} In den im folgenden erläuterten Projekten wurde ein Framework namens weights and biases verwendet. Es erlaubt während des Trainingsprozesses auf einer Seite Parameter des Netzes und wichtige Characteristika des Lernprozesses sowie Eigenschaften der Hardware zu tracken. Da es mit Pytorch gut kompatibel ist sind hierfür nur wenige Zeilen Code notwendig. Zunächst wird mit\\ \mintinline{python}{wandb.init(project='Beispielprojekt') } das Projekt initialisiert. Danach muss angegeben werden, welches Netz betrachtet werden soll. Dafür verwendet man nachdem das Netz initialisiert wurde den Befehl \mintinline{python}{wandb.watch(model)}, wobei \mintinline{python}{model} der Instanz des Netzes entspricht. Danach kann einfach über\\ \mintinline{python}{wandb.log({'loss': loss})} Zum Beispiel in der Training loop jedes Mahl der Fehler mitgeschrieben werden. \section{Ein Klassifizierungsnetzwerk für handgeschriebene Ziffern} -Die Klassifizierung handgeschriebener Ziffern aus dem MNIST Datensatz stellt etwa die \glqq Hello world'' Aufgabe des maschinellen Lernens dar. Sie ist gut zum Erlernen der verschiedenen Algorythmen geeignet, extrem gut Dokumentiert und daher leicht nachvollziehbar und ein Paradebeispiel eines Klassifizierungsproblemes. Wenn man sich mit maschinellem Lernen beschäftigt ist es also sehr wahrscheinlich, dass man als aller erstes ein Klassifizierungssystem für den MNIST Datensatz programmieren wird. +Die Klassifizierung handgeschriebener Ziffern aus dem MNIST Datensatz stellt etwa die \glqq Hello world'' Aufgabe des maschinellen Lernens dar. Sie ist gut zum Erlernen der verschiedenen Algorithmen geeignet, extrem gut Dokumentiert und daher leicht nachvollziehbar und ein Paradebeispiel eines Klassifizierungsproblemes. Wenn man sich mit maschinellem Lernen beschäftigt ist es also sehr wahrscheinlich, dass man als aller erstes ein Klassifizierungssystem für den MNIST Datensatz programmieren wird. \subsection{Aufgabe} Die Aufgabe besteht darin den die handgeschriebenen Ziffern des MNIST Datensatzes klassifizieren zu können. Das Ziel dabei ist es mit möglichst wenig Trainingsaufwand eine Genauigkeit von mindestens 97\% zu erreichen. Um dies zu bewältigen soll ein neuronales Netz in PyTorch programmiert und trainiert werden. \subsection{Der MNIST Datensatz} -Der MNIST Datensatz ist ein Datensatz aus $28\times28$ Pixel großen Graustufenbildern von handgeschriebenen Ziffern. Er weist 60000 Trainingsbilder und 10000 Testbilder auf und ist ein Teil des EMNIST Datensatzes vom National Institute for Standards and Technology, U.S. Department of Commerce. Der Datensatz ist frei unter http://yann.lecun.com/exdb/mnist/ verfügbar. Die Bilder sind bereits zentriert und normalisiert, was diesen Datensatz besonders geeignet für Einsteiger macht. Die meißten Bilder des Datensatzes sind auch von Menschen einfach zu erkennen, einige sind jedoch sehr schwierig einzuordnen und teilweise kaum als Zahl erkennbar. Aufgrund der Einfachheit der Daten sind durchaus hohe Erfolgsquoten zu erwarten. Diese liegen im Schnitt bei 98\%. -\subsection{Das Netz} +Der MNIST Datensatz ist ein Datensatz aus $28\times28$ Pixel großen Graustufenbildern von handgeschriebenen Ziffern. Er weist 60000 Trainingsbilder und 10000 Testbilder auf und ist ein Teil des EMNIST Datensatzes vom National Institute for Standards and Technology, U.S. Department of Commerce. Der Datensatz ist frei unter http://yann.lecun.com/exdb/mnist/ verfügbar. Die Bilder sind bereits zentriert und normalisiert, was diesen Datensatz besonders geeignet für Einsteiger macht. Die meisten Bilder des Datensatzes sind auch von Menschen einfach zu erkennen, einige sind jedoch sehr schwierig einzuordnen und teilweise kaum als Zahl erkennbar. Aufgrund der Einfachheit der Daten sind durchaus hohe Erfolgsquoten zu erwarten. Diese liegen im Schnitt bei 98\%. +\subsection{Das Netz}\label{sec:das-netz} Das Netz wurde für diese vergleichsweise unkomplizierte Aufgabe einfach gehalten. Es weist drei hidden Layers auf, besteht insgesamt also aus fünf Layers, die alle klassische Lineare Layers sind. Die Aktivierungsfunktion ist überall eine ReLu\footnote{ReLu steht für rectified linear unit. Diese Aktivierungsfunktion ist neben den Sigmoid Funktionen ebenfalls eine sehr populäre Aktivierungsfunktion. Sie ist als $f(x)=\max(0,x)$ definiert und ist somit für alle $x\le0$ $0$ und für alle $x>0$ $x$.}, deren Plot in Abbildung \ref{ReLu} dargestellt ist. Da es sich um eine Klassifizierungsaufgabe handelt hat das Ausgabelayer 10 Ausgabeneuronen, die die 10 Ziffern repräsentieren. Es ist wie in Abbildung \ref{net} dargestellt, definiert. \begin{figure}[h] \begin{minted}[ @@ -697,7 +698,7 @@ Das Netz wurde für diese vergleichsweise unkomplizierte Aufgabe einfach gehalte \end{figure} \\ Das erste Layer nimmt also einen Tensor der Größe $1\times 784$ an, da die Bilder genau so groß sind, und gibt einen $1\times 64$ großen Tensor aus. Dieser wird vom ersten hidden Layer angenommen, dass einen $1\times 120$ großen Tensor ausgibt. Im zweiten hidden Layer bleibt die Größe mit $1\times 120$ konstant und im dritten wird sie wieder auf $1\times 64$ reduiziert. Schlussendlich wird der Ausgabevektor mit den zehn Klassenwahrscheinlichkeiten berechnet.\\ -in der \mintinline{python}{forward()} Funktion wird jedem Layer außer dem output Layer noch eine ReLu Aktivierungsfunktion zugewiesen und der SoftMax sowie der Logarythmus werden angewandt. +in der \mintinline{python}{forward()} Funktion wird jedem Layer außer dem output Layer noch eine ReLu Aktivierungsfunktion zugewiesen und der SoftMax sowie der Logarithmus werden angewandt. \begin{figure}[h] \begin{center} \begin{tikzpicture} @@ -731,7 +732,7 @@ Aus den Daten geht hervor, dass der Anstieg der Trefferquote in den ersten 10 Ep \end{figure} \\ Auch hier lässt sich ein extremes Abnehmen des Fehlers in den ersten 10 Epochen ablesen, das von einem starken Schwanken bis etwa zur 75. Epoche gefolgt ist. Von da an stagniert der Fehler bei 0. Das Ziel von 97\% Genauigkeit wurde also um einen Prozent überschritten und somit lässt sich feststellen, dass das Netz sehr gut in der Lage ist handgeschriebene Ziffern zu klassifizieren. -\section{Schlusswort} +\section{Schluss} Maschinelles Lernen ist ein extrem komplexes Forschungsgebiet, das ein enormes Potential aufweist. Die daraus hervorgehenden Technologien können das Leben revolutionieren und haben dies bereits in vielen Bereichen getan. Neuronale Netze stellen hier eine häufig verwendete Methode maschinellen Lernens dar. Sie sind an das menschliche Lernen angelehnt und können klassifizierungs, regressions und viele weitere Probleme lösen. Ihnen liegen algebraische Prozesse zu grunde, die aus dem Bereich der Statistik stammen. Um die Netze zu trainieren müssen große Datensätze vorhanden sein. Dies kann ein großes datenschutztechnisches Problem darstellen. Die Ausgabe neuronaler Netze ist außerdem nie zu 100\% verlässlich. Trotz des großen Potentiales ist maschinelles Lernen jedoch nicht dass Allheilmittel und kann zwar viele aber bei weitem nicht alle Probleme lösen und ist bei einem Großteil der Problemen schlichtweg nicht effizient und verlässlich genug. maschinelles Lernen hat dennoch einen Einzug in unser Alltagsleben gefunden und wir begegnen ihm am Flughafen, im Supermarkt und am Smartphone (Die Gesichtserkennungssoftware zum Entsperren vieler Geräte nutzt maschinelles Lernen um eine höhere Genauigkeit zu erzielen). Von einer Welt, die von selbstbewussten und intelligenten Maschinen beherrscht wird, sind wir allerdings noch weit entfernt. \newpage \begin{thebibliography}{99} diff --git a/doc/Grundlagen_des_maschinellen_lernens.toc b/doc/Grundlagen_des_maschinellen_lernens.toc index 05f9a52..1c51a43 100644 --- a/doc/Grundlagen_des_maschinellen_lernens.toc +++ b/doc/Grundlagen_des_maschinellen_lernens.toc @@ -1,72 +1,72 @@ \boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax \babel@toc {ngerman}{} \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {1}Was ist maschinelles Lernen?}{2}{section.1}% +\contentsline {section}{\numberline {1}Was ist maschinelles Lernen?}{3}{section.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {1.1}Klassifizierungsprobleme}{2}{subsection.1.1}% +\contentsline {subsection}{\numberline {1.1}Klassifizierungsaufgaben}{3}{subsection.1.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {1.2}Regressionsprobleme}{3}{subsection.1.2}% +\contentsline {subsection}{\numberline {1.2}Regressionsprobleme}{4}{subsection.1.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {1.3}Gefahren von maschinellem Lernen}{4}{subsection.1.3}% +\contentsline {subsection}{\numberline {1.3}Gefahren von maschinellem Lernen}{5}{subsection.1.3}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {1.3.1}Die Daten}{4}{subsubsection.1.3.1}% +\contentsline {subsubsection}{\numberline {1.3.1}Die Daten}{6}{subsubsection.1.3.1}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {1.3.2}Overfitting}{5}{subsubsection.1.3.2}% +\contentsline {subsubsection}{\numberline {1.3.2}Overfitting}{6}{subsubsection.1.3.2}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {2}Verschiedene Techniken maschinellen Lernens}{6}{section.2}% +\contentsline {section}{\numberline {2}Verschiedene Techniken maschinellen Lernens}{7}{section.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {2.1}\IeC {\"U}berwachtes Lernen}{6}{subsection.2.1}% +\contentsline {subsection}{\numberline {2.1}\IeC {\"U}berwachtes Lernen}{8}{subsection.2.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {2.2}Un\IeC {\"u}berwachtes Lernen}{6}{subsection.2.2}% +\contentsline {subsection}{\numberline {2.2}Un\IeC {\"u}berwachtes Lernen}{8}{subsection.2.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {2.3}Best\IeC {\"a}rkendes Lernen}{6}{subsection.2.3}% +\contentsline {subsection}{\numberline {2.3}Best\IeC {\"a}rkendes Lernen}{8}{subsection.2.3}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {3}Neuronale Netze}{7}{section.3}% +\contentsline {section}{\numberline {3}Neuronale Netze}{9}{section.3}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {3.1}Maschinelles Lernen und menschliches Lernen}{7}{subsection.3.1}% +\contentsline {subsection}{\numberline {3.1}Maschinelles Lernen und menschliches Lernen}{9}{subsection.3.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {3.2}Der Aufbau eines neuronalen Netzes}{8}{subsection.3.2}% +\contentsline {subsection}{\numberline {3.2}Der Aufbau eines neuronalen Netzes}{10}{subsection.3.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {3.3}Berechnung des Ausgabevektors}{8}{subsection.3.3}% +\contentsline {subsection}{\numberline {3.3}Berechnung des Ausgabevektors}{11}{subsection.3.3}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {3.4}Der Lernprozess}{11}{subsection.3.4}% +\contentsline {subsection}{\numberline {3.4}Der Lernprozess}{14}{subsection.3.4}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {3.5}Fehlerfunktionen}{11}{subsection.3.5}% +\contentsline {subsection}{\numberline {3.5}Fehlerfunktionen}{14}{subsection.3.5}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {3.5.1}MSE -- Durchschnittlicher quadratischer Fehler}{12}{subsubsection.3.5.1}% +\contentsline {subsubsection}{\numberline {3.5.1}MSE -- Durchschnittlicher quadratischer Fehler}{14}{subsubsection.3.5.1}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {3.5.2}MAE -- Durchschnitztlicher absoluter Fehler}{12}{subsubsection.3.5.2}% +\contentsline {subsubsection}{\numberline {3.5.2}MAE -- Durchschnittlicher absoluter Fehler}{15}{subsubsection.3.5.2}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {3.5.3}Kreuzentropiefehler}{12}{subsubsection.3.5.3}% +\contentsline {subsubsection}{\numberline {3.5.3}Kreuzentropiefehler}{15}{subsubsection.3.5.3}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {3.6}Gradientenverfahren und Backpropagation}{14}{subsection.3.6}% +\contentsline {subsection}{\numberline {3.6}Gradientenverfahren und Backpropagation}{17}{subsection.3.6}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {3.6.1}Lernrate}{14}{subsubsection.3.6.1}% +\contentsline {subsubsection}{\numberline {3.6.1}Lernrate}{17}{subsubsection.3.6.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {3.7}Verschiedene Layerarten}{15}{subsection.3.7}% +\contentsline {subsection}{\numberline {3.7}Verschiedene Layerarten}{18}{subsection.3.7}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {3.7.1}Convolutional Layers}{16}{subsubsection.3.7.1}% +\contentsline {subsubsection}{\numberline {3.7.1}Convolutional Layers}{19}{subsubsection.3.7.1}% \defcounter {refsection}{0}\relax -\contentsline {subsubsection}{\numberline {3.7.2}Pooling Layers}{18}{subsubsection.3.7.2}% +\contentsline {subsubsection}{\numberline {3.7.2}Pooling Layers}{22}{subsubsection.3.7.2}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {4}PyTorch}{20}{section.4}% +\contentsline {section}{\numberline {4}PyTorch}{24}{section.4}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {4.1}Datenvorbereitung}{21}{subsection.4.1}% +\contentsline {subsection}{\numberline {4.1}Datenvorbereitung}{24}{subsection.4.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {4.2}Definieren des Netzes}{22}{subsection.4.2}% +\contentsline {subsection}{\numberline {4.2}Definieren des Netzes}{27}{subsection.4.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {4.3}Trainieren des Netzes}{24}{subsection.4.3}% +\contentsline {subsection}{\numberline {4.3}Trainieren des Netzes}{28}{subsection.4.3}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {4.4}Pytorch und weights and biases}{25}{subsection.4.4}% +\contentsline {subsection}{\numberline {4.4}Pytorch und weights and biases}{30}{subsection.4.4}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {5}Ein Klassifizierungsnetzwerk f\IeC {\"u}r handgeschriebene Ziffern}{26}{section.5}% +\contentsline {section}{\numberline {5}Ein Klassifizierungsnetzwerk f\IeC {\"u}r handgeschriebene Ziffern}{30}{section.5}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {5.1}Aufgabe}{26}{subsection.5.1}% +\contentsline {subsection}{\numberline {5.1}Aufgabe}{31}{subsection.5.1}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {5.2}Der MNIST Datensatz}{26}{subsection.5.2}% +\contentsline {subsection}{\numberline {5.2}Der MNIST Datensatz}{31}{subsection.5.2}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {5.3}Das Netz}{26}{subsection.5.3}% +\contentsline {subsection}{\numberline {5.3}Das Netz}{31}{subsection.5.3}% \defcounter {refsection}{0}\relax -\contentsline {subsection}{\numberline {5.4}Ergebnis}{28}{subsection.5.4}% +\contentsline {subsection}{\numberline {5.4}Ergebnis}{32}{subsection.5.4}% \defcounter {refsection}{0}\relax -\contentsline {section}{\numberline {6}Schlusswort}{28}{section.6}% +\contentsline {section}{\numberline {6}Schluss}{33}{section.6}%