Navigation: [[:p:ki:machinelearning1|🤖 Teil 1]] - [[:p:ki:machinelearning2|🤖 Teil 2]] - [[:p:ki:machinelearning3|🤖 Teil 3]] - [[:p:ki:machinelearning4|🤖 Teil 4]]{{gem/mgr}}{{ gem/pageinfo}}
====== 🤖 Wie funktioniert maschinelles Lernen 1 ======
🎯 In dieser Reihe erfährst du, wie ein Computer mithilfe von Daten lernen kann.
~~INTOC~~
\\
===== - Was ist maschinelles Lernen? =====
; Maschinelles Lernen / Machine Learning
: Unter maschinellem Lernen oder Machine Learning werden Computerprogramme verstanden, welche aus Daten lernen können. Im Gegensatz zur künstlichen Intelligenz geht es dabei nicht um das Nachahmen menschlicher Intelligenz, sondern um das Lösen praktischer Probleme.
In dieser vierteiligen Reihe erfährst du,...
* **Teil 1:** ... was es bedeutet ein Programm mithilfe von Daten so einzustellen, dass ein Problem gelöst werden kann.
* **Teil 2:** ... dass maschinelles Lernen Problemlösungen nur annähern kann und lernst drei Strategien des maschinellen Lernens kennen.
* **Teil 3:** ... wie maschinelles Lernen mit dem Gradientenverfahren umgesetzt werden kann und worauf dabei zu achten ist.
* **Teil 4:** ... wie genau ein neuronales Netz aufgebaut ist und wie genau damit gelernt werden kann.
\\
===== - Welche Probleme können gelöst werden? =====
{{gdraw>1bBHJTaPCQK7qx-p6mln-myDpP9h9E5XS41E73Mt9a0Q width=400 center}}
\\ Abb.1: Machine-Learning-Lösung als "Black Box"((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]])).
Ein Machine-Learning-Verfahren braucht Daten als Eingabe und produziert darauf hin Daten als Ausgabe. In Abb.1 ist die Machine-Learning-Lösung als "Black Box" dargestellt.
⚠️ Zwingend ist, dass alle Daten für die Ein- und Ausgabe auch als Zahlen dargestellt werden können. Ein Computerchip kann am Ende nur Zahlen verarbeiten.
✅ Gelöst werden können somit Probleme bei welchen ...
* ... aufgrund von Daten etwas entschieden oder erkannt werden soll. Beispiele sind:
* Entscheiden, ob ein Fisch ein Hering oder eine Lodde ist aufgrund von verschiedenen Messgrössen (z.B. Länge, Lichtreflektivität)
* Aufgrund von medizinischen Scans festlegen, ob eine Krebserkrankung vorliegt und falls ja, welche
* Aufgrund eines Kamerabildes die Autonummer eines vorbeifahrenden Autos erkennen\\ \\
* ... aufgrund von Daten weitere Daten erzeugt werden sollen. Beispiele sind:
* Einen passenden Antworttext formulieren aufgrund einer Frage (KI Chatbot)
* Meteorologische Grössen, wie Temperatur oder Windgeschwindigkeit vorhersagen aufgrund meteorologischer Messdaten
* Beim automatischen Einparken aufgrund von Kamerabildern und Abstandssensoren, Lenkung und Geschwindigkeit eines Autos regulieren
\\
===== - Wie ist ein Maschine-Learning-Verfahren aufgebaut? =====
{{gdraw>1SuM1M1LKtFW1uf5_-22hr3uALCawmcn-zBw4vUNdDP4 width=269 center}}
\\ Abb.2: Schieberegler((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]])).\\ \\ {{gdraw>10ILWe2_uxn8Kolk3uC7BhhhDhFPTRq6dGzwSJUx7DDY width=269 center}}\\ Abb.3: Black-Box-Verfahren((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]])).
Am besten lässt sich das mit einem Lautstärkeregler erklären. Auf deinem Smartphone kannst du die Lautstärke mit einem Schieberegler einstellen (siehe Abb.2). Ist der Schieberegler auf einen niedrigen Wert eingestellt, wird alles leise abgespielt. Ist der Schieberegler auf einen hohen Wert eingestellt, wird alles laut abgespielt. Der Schieberegler kann als "Parameter" bezeichnet werden, welcher verschiedene Werte annehmen kann. Je nach Wert des Parameters kommen verschiedene Lautstärken aus deinem Smartphone heraus.
Mathematisch gesehen ist ein Maschine-Learning-Verfahren eine mathematische Funktion, welche ein oder mehrere verstellbare Parameter beinhaltet. Z.B. könnte die Funktion $y = f(x) = a\cdot x$ mit dem Parameter $a$ die Lautstärkeregelung darstellen. Die abgespeicherte Musik wäre die Eingabe $x$ und der Ton, den du am Ende hörst, die Ausgabe $y$. Die Lautstärke wird mit $a\cdot x$ berechnet. Konkret würde ein Ton mit der Signalstärke $x = 1$ bei einer Lautstärkeeinstellung von $a=10$ mit der Endlautstärke $y = f(x) = a\cdot x = 10$ wiedergegeben werden. Derselbe Ton $x = 1$ würde mit der Parametereinstellung $a = 20$ mit der Endlautstärke $y = f(x) = a\cdot x = 20$ wiedergegeben werden.
Kurz gesagt, ein Maschine-Learning-Verfahren kann als Funktion $y = f(x)$ dargestellt werden, welche mehrere einstellbare Parameter beinhaltet. Der Eingang wird als $x$ bezeichnet, der Ausgang als $y$ (siehe Abb.3).
\\
===== - Was bedeutet es, ein Problem zu lösen? =====
💡
Ein Problem mit Maschine Learning zu lösen, bedeutet die Parameter der Machine-Learning-Funktion $f(x)$ so einzustellen, dass alle Eingangsdaten $x$ wie gewünscht in die Ausgangsdaten $y$ abgebildet werden.
\\
== ✍ Auftrag Parameter einstellen ==
👉 Hier lernst du, was es bedeutet, einen Parameter einer Funktion einzustellen.
Das untenstehende Programm zeichnet die Funktion $y=f(x)=a\cdot x$ (die blaue Linie). Die Eingangswerte $x$ sind auf der horizontalen Achse angegeben, die Ausgangswerte $y$ auf der vertikalen. Mit dem Schieberegler kannst du den Parameter $a$ einstellen.
* Stelle den Parameter $a$ so ein, dass der Eingangswert $x = 100$ in den Ausgangswert $y = 50$ abgebildet wird, d.h. sodass $y = f(100) = 50$ ergibt (dann geht die blaue Linie durch das grüne Kreuz).
* Schreibe den gefundenen Wert für den Parameter $a$ in das Textfeld {{gem/match?0=N4IgLgpgHmIFwgIYAIC8yQBoQCcIHNoAHeJNAOgCoAGcgVhAF8g#a2f225d63d6030af}}
{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20global%20variables%0Alet%20slider%3B%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20axes%0A%2F%2F%0Afunction%20drawAxes%28%29%20%7B%0A%09%2F%2F%20frame%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2840%2C%200%2C%2040%2C%20140%29%3B%0A%09line%2840%2C%20140%2C%20300%2C%20140%29%3B%0A%09%2F%2F%20axis%20names%0A%09strokeWeight%281%29%3B%0A%09text%28%22y%22%2C%2020%2C%2010%29%3B%0A%09text%28%22x%22%2C%20285%2C%20160%29%3B%0A%09%2F%2F%20origin%0A%09strokeWeight%280%29%3B%0A%09text%28%220%22%2C%2020%2C%20140%29%3B%0A%09text%28%220%22%2C%2040%2C%20160%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20indicate%20point%0A%2F%2F%0Afunction%20indicatePoint%28%29%20%7B%0A%09%2F%2F%20cross%0A%09stroke%28%22lime%22%29%3B%0A%09strokeWeight%283%29%3B%0A%09line%28175%2C%2065%2C%20185%2C%2075%29%3B%0A%09line%28175%2C%2075%2C%20185%2C%2065%29%3B%0A%09%2F%2F%20grid%20lines%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%281%29%3B%0A%09line%2840%2C%2070%2C%20180%2C%2070%29%3B%0A%09line%28180%2C%2070%2C%20180%2C%20140%29%3B%0A%09%2F%2F%20coordinates%0A%09strokeWeight%280%29%3B%0A%09text%28%2250%22%2C%2020%2C%2070%29%3B%0A%09text%28%22100%22%2C%20180%2C%20160%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20update%20slider%20values%0A%2F%2F%0Afunction%20updateSlider%28%29%20%7B%0A%09%2F%2F%20update%20slider%20value%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%280%29%3B%0A%09text%28%22a%20%3D%20%22%20%2B%20%28slider.value%28%29%20%2F%2010%29.toFixed%281%29%2C%2050%2C%20190%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20draw%20function%0A%2F%2F%0Afunction%20drawFunction%28%29%20%7B%0A%09%2F%2F%20draw%20function%0A%09stroke%28%22%230075ff%22%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2840%2C%20140%2C%20300%2C%20140%20-%20slider.value%28%29%20%2F%2010%20%2a%20260%29%3B%0A%7D%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%0A%0A%09%2F%2F%20create%20canvas%20%0A%09createCanvas%28300%2C%20200%29%3B%0A%0A%09%2F%2F%20set%20text%20properties%0A%09textSize%2820%29%3B%0A%09textAlign%28CENTER%2C%20CENTER%29%3B%0A%0A%09%2F%2F%20create%20slider%0A%09slider%20%3D%20createSlider%280%2C%2020%2C%202%29%3B%0A%09slider.position%28100%2C%20187%29%3B%0A%09slider.size%28200%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20draw%28%29%0A%2F%2F%0Afunction%20draw%28%29%20%7B%0A%0A%09%2F%2F%20clear%20everything%0A%09background%28%22white%22%29%3B%0A%0A%09%2F%2F%20draw%20everything%0A%09drawAxes%28%29%3B%0A%09indicatePoint%28%29%3B%0A%09updateSlider%28%29%3B%0A%09drawFunction%28%29%3B%0A%0A%09%2F%2F%20write%20title%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%281%29%3B%0A%09text%28%22y%20%3D%20a%E2%8B%85x%22%2C%20260%2C%2010%29%3B%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E&height=360px#parameter1}}
\\
== ✍ Auftrag Problem lösen ==
👉 Hier lernst du, was es bedeutet, ein Problem durch die Einstellung mehrerer Parameter zu lösen.
Gesucht ist eine Formel zum Berechnen einer Note aus der erzielten Punktzahl. Die Notenskala soll linear sein (d.h. vom Programm als Linie dargestellt werden). Für $0$ Punkte soll die Note $1$ ausgeben werden und für $10$ Punkte die Note $6$ (d.h. die blaue Linie soll durch die beiden grünen Kreuze gehen). Dafür wird die Funktion $y = f(x) = a\cdot x + b$ mit den beiden zu bestimmenden Parametern $a$ und $b$ verwendet.
* Stelle die Parameter $a$ und $b$ so ein, dass $f(0)=1$ und $f(10) = 6$ ergibt (d.h. dass die blaue Linie durch die beiden grünen Kreuze geht).
* Schreibe die gefundenen Werte für die Parameter $a$ und $b$ in das Textfeld {{gem/match?0=N4IgLgpgHmIFwgIYAIC8yA6A7ARm5IANCAE4QDm0ADvEmgHQBUADPQKxPZ6pMCMIAXyA#a4634fe3d94909b5}}
{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20global%20variables%0Alet%20slider%3B%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20axes%0A%2F%2F%0Afunction%20drawAxes%28%29%20%7B%0A%09%2F%2F%20frame%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2860%2C%200%2C%2060%2C%20120%29%3B%0A%09line%2860%2C%20120%2C%20300%2C%20120%29%3B%0A%09%2F%2F%20axis%20names%0A%09strokeWeight%281%29%3B%0A%09text%28%22Note%22%2C%2030%2C%2010%29%3B%0A%09text%28%22Punkte%22%2C%20265%2C%20135%29%3B%0A%09%2F%2F%20origin%0A%09strokeWeight%280%29%3B%0A%09text%28%221%22%2C%2040%2C%20120%29%3B%0A%09text%28%220%22%2C%2060%2C%20140%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20indicate%20point%0A%2F%2F%0Afunction%20indicatePoint%28%29%20%7B%0A%09%2F%2F%20crosses%0A%09stroke%28%22lime%22%29%3B%0A%09strokeWeight%283%29%3B%0A%09line%2855%2C%20115%2C%2065%2C%20125%29%3B%0A%09line%2855%2C%20125%2C%2065%2C%20115%29%3B%0A%09line%28195%2C%2035%2C%20205%2C%2045%29%3B%0A%09line%28195%2C%2045%2C%20205%2C%2035%29%3B%0A%09%2F%2F%20grid%20lines%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%281%29%3B%0A%09line%2860%2C%2040%2C%20200%2C%2040%29%3B%0A%09line%28200%2C%2040%2C%20200%2C%20120%29%3B%0A%09%2F%2F%20coordinates%0A%09strokeWeight%280%29%3B%0A%09text%28%226%22%2C%2040%2C%2040%29%3B%0A%09text%28%2210%22%2C%20200%2C%20135%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20update%20slider%20values%0A%2F%2F%0Afunction%20updateSliders%28%29%20%7B%0A%09%2F%2F%20update%20slider%20values%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%280%29%3B%0A%09text%28%22a%20%3D%20%22%20%2B%20%28slider1.value%28%29%20%2F%2010%29.toFixed%281%29%2C%2050%2C%20170%29%3B%0A%09text%28%22b%20%3D%20%22%20%2B%20%28slider2.value%28%29%20%2F%2010%29.toFixed%281%29%2C%2050%2C%20190%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20draw%20function%0A%2F%2F%0Afunction%20drawFunction%28%29%20%7B%0A%09%2F%2F%20draw%20function%0A%09stroke%28%22%230075ff%22%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2860%2C%20136%20-%2016%20%2a%20slider2.value%28%29%20%2F%2010%2C%20340%2C%20136%20-%20slider1.value%28%29%20%2F%2010%20%2a%20320%20-%2016%20%2a%20slider2.value%28%29%20%2F%2010%29%3B%0A%7D%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%0A%0A%09%2F%2F%20create%20canvas%20%0A%09createCanvas%28300%2C%20200%29%3B%0A%0A%09%2F%2F%20set%20text%20properties%0A%09textSize%2820%29%3B%0A%09textAlign%28CENTER%2C%20CENTER%29%3B%0A%0A%09%2F%2F%20create%20sliders%0A%09slider1%20%3D%20createSlider%280%2C%2020%2C%202%2C%201%29%3B%0A%09slider1.position%28100%2C%20167%29%3B%0A%09slider1.size%28200%29%3B%0A%09slider2%20%3D%20createSlider%280%2C%2020%2C%2018%2C%202%29%3B%0A%09slider2.position%28100%2C%20187%29%3B%0A%09slider2.size%28200%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20draw%28%29%0A%2F%2F%0Afunction%20draw%28%29%20%7B%0A%0A%09%2F%2F%20clear%20everything%0A%09background%28%22white%22%29%3B%0A%0A%09%2F%2F%20draw%20everything%0A%09indicatePoint%28%29%3B%0A%09drawAxes%28%29%3B%0A%09updateSliders%28%29%3B%0A%09drawFunction%28%29%3B%0A%0A%09%2F%2F%20write%20title%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%281%29%3B%0A%09text%28%22Note%20%3D%20a%E2%8B%85Punkte%20%2B%20b%22%2C%20200%2C%2010%29%3B%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E&height=360px#parameter2}}
\\
===== - Woher weiss der Computer, was gut oder schlecht ist? =====
Ein Computer hat keine Vorstellung davon, wann ein Problem gut oder schlecht gelöst wird. Für diesen Zweck wird ein Fehlerwert oder eine Punktzahl berechnet. Praktisch alle Machine-Learning-Verfahren versuchen, den Fehler möglichst klein (oder alternativ die Punktzahl möglichst gross) zu bekommen.
⚠️ Achtung! Beim Machine Learning wird nicht das Problem selber gelöst, es wird versucht ein Fehler zu minimieren (oder eine Punktzahl zu maximieren). Wenn der Fehler (die Punktzahl) zum Problem passt, kommt oft etwas Sinnvolles heraus. Wenn jedoch der Fehler (die Punktzahl) nicht zum Problem passt, dann wird auch etwas gelernt – aber sicher nicht das gewünschte Problem gelöst.
\\
== ✍ Auftrag Fehler minimieren ==
👉 Hier lernst du, was es bedeutet, ein Problem durch das Minimieren eines Fehlers zu lösen.
Dazu noch einmal das Programm, das die Funktion $y=f(x)=a\cdot x$ zeichnet. Neu wird rot ein Fehler angegeben. Einfach gesagt gibt der rote Fehler an, wie weit die blaue Linie oberhalb oder unterhalb des grünen Kreuzes durchgeht. Etwas genauer gesagt beschreibt der Fehler für die Eingabe $x = 100$, wie stark der mit dem Parameter $a$ berechnete Ausgabewert $y = f(100)$ (die blaue Linie) vom gewünschten Ausgabewert $y = 50$ (dem grünen Kreuz) abweicht.
* Verschiebe den Regler für den Parameter $a$ hin und her und betrachte, wie sich der Fehler dabei verändert.
* Gehe von folgender Situation aus. Der Regler befindet sich an einer zufälligen Position. Es ist unbekannt, bei welcher Reglerposition der Fehler am kleinsten ist. D.h. zu Beginn weist du nicht, ob du den Regler nach links oder nach rechts verschieben musst. Sehen kannst du nur die Reglerposition und den Fehlerwert. Die blaue Linie und das grüne Kreuz siehst du nicht. Schreibe für diese Situation eine kurze, rezeptartige Anleitung, wie du den Regler schrittweise hin- und herschieben musst, um in jedem Fall den kleinsten Fehler zu finden und danach aufzuhören. {{gem/plain?0=N4XyA#c31d7f16c94af8ef}}
* Diskutiere deine Lösung mit einer Kollegin, einem Kollegen.
* Wenn du zufrieden mit deiner Lösung bist, ++öffne diesen Text durch draufklicken|\\ \\ 🎉 Gratuliere, du hast soeben deinen ersten eigenen Machine-Learning-Algorithmus geschrieben!\\ \\ ++
{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20global%20variables%0Alet%20slider%3B%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20axes%0A%2F%2F%0Afunction%20drawAxes%28%29%20%7B%0A%09%2F%2F%20frame%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2840%2C%200%2C%2040%2C%20140%29%3B%0A%09line%2840%2C%20140%2C%20300%2C%20140%29%3B%0A%09%2F%2F%20axis%20names%0A%09strokeWeight%281%29%3B%0A%09fill%28%22black%22%29%3B%0A%09text%28%22y%22%2C%2020%2C%2010%29%3B%0A%09text%28%22x%22%2C%20285%2C%20160%29%3B%0A%09%2F%2F%20origin%0A%09strokeWeight%280%29%3B%0A%09text%28%220%22%2C%2020%2C%20140%29%3B%0A%09text%28%220%22%2C%2040%2C%20160%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20indicate%20point%0A%2F%2F%0Afunction%20indicatePoint%28%29%20%7B%0A%09%2F%2F%20cross%0A%09stroke%28%22lime%22%29%3B%0A%09strokeWeight%283%29%3B%0A%09line%28175%2C%2065%2C%20185%2C%2075%29%3B%0A%09line%28175%2C%2075%2C%20185%2C%2065%29%3B%0A%09%2F%2F%20grid%20lines%0A%09stroke%28%22black%22%29%3B%0A%09strokeWeight%281%29%3B%0A%09line%2840%2C%2070%2C%20180%2C%2070%29%3B%0A%09line%28180%2C%2070%2C%20180%2C%20140%29%3B%0A%09%2F%2F%20coordinates%0A%09strokeWeight%280%29%3B%0A%09fill%28%22black%22%29%3B%0A%09text%28%2250%22%2C%2020%2C%2070%29%3B%0A%09text%28%22100%22%2C%20180%2C%20160%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20update%20slider%20values%0A%2F%2F%0Afunction%20updateSlider%28%29%20%7B%0A%09%2F%2F%20update%20slider%20value%0A%09stroke%28%22black%22%29%3B%0A%09fill%28%22black%22%29%3B%0A%09strokeWeight%280%29%3B%0A%09text%28%22a%20%3D%20%22%20%2B%20%28slider.value%28%29%20%2F%2010%29.toFixed%281%29%2C%2050%2C%20190%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20draw%20function%0A%2F%2F%0Afunction%20drawFunction%28%29%20%7B%0A%09%2F%2F%20draw%20function%0A%09stroke%28%22%230075ff%22%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2840%2C%20140%2C%20300%2C%20140%20-%20slider.value%28%29%20%2F%2010%20%2a%20260%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20indicate%20error%0A%2F%2F%0Afunction%20indicateError%28%29%20%7B%0A%09%2F%2F%20draw%20error%20line%20and%20display%20error%20number%0A%09stroke%28%22red%22%29%3B%0A%09fill%28%22red%22%29%3B%0A%09strokeWeight%283%29%3B%0A%09line%28180%2C%2070%2C%20180%2C%20140%20-%20slider.value%28%29%20%2F%2010%20%2a%20140%29%3B%0A%09strokeWeight%281%29%3B%0A%09text%28%22Fehler%3A%20%22%20%2B%20abs%2850%20-%20slider.value%28%29%20%2F%2010%20%2a%20100%29%2C%20250%2C%2070%29%3B%0A%7D%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%0A%0A%09%2F%2F%20create%20canvas%20%0A%09createCanvas%28300%2C%20200%29%3B%0A%0A%09%2F%2F%20set%20text%20properties%0A%09textSize%2820%29%3B%0A%09textAlign%28CENTER%2C%20CENTER%29%3B%0A%0A%09%2F%2F%20create%20slider%0A%09slider%20%3D%20createSlider%280%2C%2010%2C%202%29%3B%0A%09slider.position%28100%2C%20187%29%3B%0A%09slider.size%28200%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20draw%28%29%0A%2F%2F%0Afunction%20draw%28%29%20%7B%0A%0A%09%2F%2F%20clear%20everything%0A%09background%28%22white%22%29%3B%0A%0A%09%2F%2F%20draw%20everything%0A%09drawAxes%28%29%3B%0A%09indicatePoint%28%29%3B%0A%09updateSlider%28%29%3B%0A%09drawFunction%28%29%3B%0A%09indicateError%28%29%0A%0A%09%2F%2F%20write%20title%0A%09stroke%28%22black%22%29%3B%0A%09fill%28%22black%22%29%3B%0A%09strokeWeight%281%29%3B%0A%09text%28%22y%20%3D%20a%E2%8B%85x%22%2C%20260%2C%2010%29%3B%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E&height=360px#fehler1}}
🤩 Freiwillig für Schnelle oder Interessierte
* Du hast deinen obigen Algorithmus vermutlich so formuliert, dass dieser fertig ist, wenn der Fehler gleich null ist. Gehe neu davon aus, dass der Fehler durch das Verschieben des Reglers zwar grösser und kleiner wird, jedoch nie den Wert $0$ erreicht. Passe deinen obigen Algorithmus so an, dass trotzdem der tiefst mögliche Fehler gefunden wird.
\\
===== - Fortsetzung folgt... ======
Jetzt hast du eine erste Vorstellung davon, was maschinelles Lernen bzw. Machine Learning bedeutet. Im [[:p:ki:machinelearning2|🤖 Teil 2]] erfährst du, wie ein Computer dazu gebracht werden kann, selbständig einen Fehler zu minimieren.
\\
=== Eigene Notizen ===
{{gem/quill#5330dd31e3c4a8ec}}