Archiv der Kategorie: Heli-Bot

Maschinelles Lernen mit Python 2b

zurück zu HeliHuBot Planung und Umsetzung


Training ML-Lernalgorithmen für die Klassifizierung

Mit Schwerpunkten auf:

  • Benutzung von pandas, NumPy und matplotlib zum Einlesen, Verarbeitung und Visialisierung
  • Implementierung linear classification Algos in Python

Schema Perceptron:

Achtung – Halt – Stop!
Einerseits ist es schade, dass ich meine Notizen zu „Maschinelles Lernen mit Python“ nun einstellen werde, aber anderseits erspart es mir viel Zeit und Aufwand. Ich wollte gerade das Schema oben besprechen und mir den ersten Python-Code notieren, als ich auf scikit stieß. Da meine Notizen sicher nicht übersichtlicher und besser werden können, erspare ich mir weitere Artikel zu diesen Thema.

Auf SciPy findet man den Einstieg für die hier, zur Verwendung geplanten Module. Auf UC Irvine Machine Learning Repository! findet man über 450 Datensätze und eine ausgezeichnete Beschreibung zu allen Bereichen findet sich auf scikit.

Weblinks und weitere Quellen:
SciPy
UC Irvine Machine Learning Repository!
Iris flower data set

Python und Docs, sowie Tutorial
Python unter Linux: Erste Schritte
PyPy
Künstliche Intelligenz von Stuart Russell und Peter Norvig; ISBN 978-3-86894-098-5
Python Machine Learning von Sebastian Raschka; ISBN 978-1-78355-513-0
Neuronale Netze von Günter Daniel Rey und Karl F. Wender; ISBN 978-3-456-54881-5

(35)

Maschinelles Lernen mit Python 2a

zurück zu HeliHuBot Planung und Umsetzung


Training ML-Lernalgorithmen für die Klassifizierung

Mit Schwerpunkten auf:

  • kurze Vorstellung eines Perceptrons und adaptive linearer Neuronen
  • erster Einblick in ML-Algorithmen

Vom Neuron zum Perzeptron

Ein biologisches Neuron (Nervenzelle) ist schematisch im folgenden grob umrissen:

Wer sich für Details interessiert, findet welche im Kapitel I, meiner Physiologie für Biologen und Mediziner. Besonders 1) Das Ruhemembranpotential, 2) Entstehung und Fortleitung eines Aktionspotentials und 5) Synapsen kann ich als Einstieg empfehlen.

Hier werden wir nicht auf neurophysiologische Details oder auf die Vernetzung (Konnektom) eingehen, sondern wir brauchen an dieser Stelle eigentlich nur zu wissen, dass an den Dendriten Synapsen von anderen Axonenden zu finden sind (stellt den Input dar), die hemmen oder erregen können und somit das Ruhemembranpotential (RM) der Membran (Umgibt den Körper der Nervenzelle) beeinflusst. Das RM summiert sich auf und nur wenn eine bestimmte Schwelle erreicht wird (Alles oder Nichts Prinzip), entsteht ein Aktionspotential am Axonhügel (dort wo das Axon vom Körper abgeht) und breitet sich über das Axon zu den Enden aus, wo sich wieder Synapsen befinden, welche auf die nächsten Dentriten hemmend oder erregend wirken können (unser Output).

Natürlich kann ich an dieser Stelle nicht umhin, W.S. McCulloch und W. Pitts, sowie Frank Rosenblatt zu erwähnen, die Pionierarbeit auf dem Gebiet der KI leisteten, sodass 1958 das Perzeptron, das erste, sehr vereinfachte neuronales Netz, basierend auf dem McCulloch-Pitts neuron, vorgestellt werden konnte. Mit den Perzepron-Regeln konnte Rosenblatt eine Algo entwickeln, der automatisch die optimalen Gewichungskoeffizienten lernte, die dann mit den Input-Features verknüpft entschieden, ob ein Neuron feuerte (die Schwelle erreicht wurde), oder nicht. Im Kontext von supervised learning und der Klassifikation bedeutet das, dass der Algo benutzt werden konnte, um eine Zuordnung zu einer Klasse zu erreichen.
Formal können wir dieses Problem als binäre Klassifikationsaufgabe darstellen, wobei wir zur Vereinfachung unsere beiden Klassen als 1 und -1 bezeichnen. Dann können wir eine Aktivierungsfunktion definieren \theta(z), welche eine lineare Kombination bestimmter Eingabewerte \vec{x} und eines entsprechenden Gewichtsvektors \vec{w} erfordert, wobei z der sogenannte net input ist z = (w1x1 + …. + wmxm):

\vec{w} =  \begin{bmatrix} w\textsubscript{1}	\\ \vdots	 \\ w\textsubscript{m}	 \end{bmatrix} , \vec{x} =  \begin{bmatrix} x\textsubscript{1}	\\ \vdots	 \\ x\textsubscript{m}	 \end{bmatrix}
Wenn die Aktivierung eines bestimmten Beispiels x(i), also die Ausgabe von \theta(z), größer ist als ein definierter Schwellenwert \phi, sagen wir Klasse 1 oder andernfalls Klasse -1 voraus.

\phi(z) = \biggl\{  \frac{1 if z \geq \theta}{-1 sonst}
Was die Notation betrifft, greife ich hier inkonsequent auf die grundlegende und oft übliche, kurze Schreibweise zurück, wie sie hier zu finden ist

Bemerkenswert ist hier, dass somit statt \sum\nolimits_{j=0}^m einfach xjwj = wTx geschrieben werden kann.

Die folgende Skizze zeigt, wie der Net-Input einen binären Output ergibt und wie die Aktivierugsfunktion benutzt werden kann, um zwischen zwei linear unterscheidbaren Klassen zu unterscheiden.

Wie oben schon angemerkt, ist die Tatsache, dass ein Neuron ab einen bestimmten Schwellwert feuert im MCP-Neuron einfach umgesetzt. Rosenblatt’s Initialisierungsregel für das Perzeptron ist daher einfach zu umschreiben:
1.) Initialisiere die Gewichtung mit 0 oder kleinen zufälligen Zahlen
2.) für jedes Training, Beispiel x(i) sind die folgenden Schritte durchzuführen
a.) berechene den Ourtput-Wert ŷ
b.) aktualisiere die Gewichtung
Der Output-Wert ist hier das vorausgesagte Class-Label mittels besprochener Heaviside step function und der gleichzeitigen Aktualisierung der Gewichtung des Gewichtungsvektor wi also wi := wi + \Deltawi
\Deltawi mit dem wi aktualisiert wird, wird mit der Perceptron Lernregel berechnet \Deltawi = \eta (y(i) – (ŷ(i))xj(i)
In dieser Lernregel ist \eta die Lernrate (zwischen 0,0 und 1,0)
yi ist das Klass-Label und
ŷi ist das vorausgesagte Klass-Label.
Es müssen alle Gewichtungen aktualisiert werden, bevor ŷi neu berechnet wird.
\Deltaw0 = \eta (y(i) – (output(i))
\Deltaw1 = \eta (y(i) – (output(i))x1(i)
\Deltaw2 = \eta (y(i) – (output(i))x2(i) ….
Wenn das Klass-Label richtig vorausgesagt wird, bleibt die Gewichtung unverändert.

Weblinks:
https://www.cs.cmu.edu/~zkolter/course/linalg/linalg_notes.pdf von Linear Algebra Review
Weitere Quellen
Künstliche Intelligenz von Stuart Russell und Peter Norvig; ISBN 978-3-86894-098-5
Python Machine Learning von Sebastian Raschka; ISBN 978-1-78355-513-0
Neuronale Netze von Günter Daniel Rey und Karl F. Wender; ISBN 978-3-456-54881-5

(71)

Maschinelles Lernen mit Python 1

zurück zu HeliHuBot Planung und Umsetzung


Bevor wir uns den ausgewählten Python-Modulen zuwenden ein kurzer Überblick über die kommenden Inhalte, also die Lernmethoden. Ich werde kurz auf supervised, unsupervised und reinforcement learning und wichtige Grundbegriffe eingehen, bevor ich die Installation der Python packages beschreibe.

Supervised learning

Mittels supervised learning gelangt man zu predictions für neue Daten, indem man ein Model mit labeled training data trainiert.

Siehe dazu auch Supervised vs Unsupervised Learning
Beim supervised learning sind vor allem die Classification (um class labels vorauszusagen) und die Regression hervorzuheben.
Maschinelles Lernen mit Python 1 weiterlesen

(42)

AIML und KI

Als ich jemanden erzählte, dass ich AIML (Artificial Intelligence Markup Language) für meinen Helibot verwenden werde, bekam dieser einen Lachanfall und meinte, dass AIML nicht das Geringste mit KI zu tun hätte. Vorgefertigte Antworten und Sätze zu verwenden, habe nichts mit Intelligenz zu tun.
Nun, das mag zwar sein, aber angenommen ich treffe eine mir bekannte Person und die begrüßt mich mit „Hallo H.“ dann benötige ich auch keine besonders ausgeprägte Intelligenz, um eine passende Antwort zu finden, sondern ich finde sie automatisch und denke gleichzeitig darüber nach, was mein Gesprächspartner, sagen wir X von mir wohl will. Woher ich ihn kenne, wann ich ihn unter welchen Umständen mit ihm das letzte mal kommuniziert habe. Will ich etwas von X und/oder will er etwas von mir – in dieser speziellen Situation (privat, im Beruf, beim Sport, Musizieren, …). D.h. ich denke hoffentlich nicht über die Antwort nach, sonder erledige diese wie mit einem AIML-file automatisch und gleichzeitig rufe ich mir alles zu X ins Gedächtnis.
Helibot soll es genau so machen und alle Verbindungen zu Daten die mit X in Verbindung stehen bereit stellen, währen er automatisch „Hallo X“ sagt, was natürlich schon voraus setzt, dass er X erkennt. Diese Daten (mit X verknüpft) werden dann für die Platzhalter in AIML genutzt. X wird nach der ersten Kommunikation (oder nach der ersten Betrachtung) bewertet und ausstehende, früher geplante Ereignisse sollen besprochen werden. Schuldet mir X € 10.- werde ich das ansprechen. Wollte ich mit X eine Veranstaltung besuchen, werde ich das ansprechen….
Helibot ebenfalls, er nimmt dazu die „Motivation“ aus dem Motivations-file, dem Bewertungs-file und den mit X verknüpften Daten, insbesondere den Log-files. Das Bewertungs-file wird dazu vorher in Assoziationszyklen bearbeitet, denn Helibot denkt immer. Damit hat Helibot schon eine Meinung und Einstellung zu X wenn er diesen trifft und wenn die Kommunikation beginnt. Auch diese Kommunikation und andere Tatsachen (sein neuer Job, seine äußerliche Veränderung, seine neunen Ansichten, ….. ) fließen in die nächste Bearbeitung der Bewertung ein. Damit werden neue Daten mit X verknüpft bzw. ändert sich die Stärke der Verknüpfung (Gewichtung) für die Platzhalter in AIML. Auch neue Sätze werden aufgenommen und neue Platzhalter werden generiert.
Ich überlege nicht, was ich sagen soll, wenn mich jemand begrüßt und wir einen Smalltalk führen, warum sollte es also Helibot?
Nein, das Bewerten und Verknüpfen der Information und Aktionen erfordert Intelligenz, aber nicht das Sprechen und ersteres soll in den Assoziationszyklen geschehen. Helibot soll 3 TB Speicher bekommen. 1 TB für aktuelle Programme und Daten, 1 TB für das Kurzzeitgedächtnis und 1 TB für das Langzeitgedächtnis. Das Schwierigste für Helibot wird wohl die Entscheidung werden, was für ihn essentiell, wichtig, weniger wichtig und was zum Löschen ist.

Ich benötige übrigens sogar zu dem sehr komplexen und schwierigen Unterfangen „aufrecht zu gehen“ keine besondere Intelligenz und muss auch nicht darüber nachdenken. Es geht ganz automatisch, aber wenn es mir gelänge eine Maschine zu bauen, die den aufrechten Gang beherrschte und gut, gefühlvoll Klavierspielen (nach Noten und ohne Intelligenz) könnte, dann … oh, darüber würde ich mich wirklich sehr darüber freuen.

Weblinks:
http://www.alicebot.org/aiml.html
https://de.wikipedia.org/wiki/Artificial_Intelligence_Markup_Language
https://www.tutorialspoint.com/aiml/

Randnotizen:
Vollständiger Turing-Test – Erst als die Gebrüder Wright aufhörten Vögel zu imitieren und sich mit Windkanälen und Aerodynamik beschäftigten, wurde der Traum vom „künstlichen Fliegen“ war. Lehrbücher der Luftfahrkunde haben eben nicht zum Ziel eine Maschine zu bauen, die genau so wie Tauben fliegen, sodass sie sogar andere Tauben täuschen können. Und so ist bei meinem Helibot auch nicht das wichtigste Ziel, dass er nicht von einem Menschen unterschieden werden kann, sondern, dass er sich rational entwickelt, im Alltag Lösungen findet die „gut genug“ sind, für schwierige Probleme die wahrscheinlichste Lösung (auch der Erfahrung nach) wählt und eine Art Selbstbewusstsein entwickelt.

Bestätigungstheorie von Carnap und Hempel
Unvollständigkeitstheorem von Gödel, Handhabbarkeit
Nutzen (Wenn McDonald einen Hamburger um € 1.- anbietet, dann behauptet das Unternehmen, dass es den Euro bevorzugt und hofft, dass der Kunde den Hamburger bevorzugt).
NP-Vollständigkeit, Wahrscheinlichkeit, Entscheidungstheorie, Spieltheorie, Markov’sche Entscheidungsprozesse, Anspuchserfüllung – „gut genug“ oft zielführender als „optimal“.

(55)

S.USV pi advanced für Helibot

zurück zu:
HeliHuBot – Planung und Umsetzung

usv So sieht die USV aus.

Und unten liegt sie neben dem Raspberry Pi, an dem ich schon die Halterung angeschraubt habe.
usvpihalterung

USV drauf stecken, anschrauben mit dem Akku verbinden und los geht’s.
rasppimitusv
S.USV pi advanced für Helibot weiterlesen

(528)