Kampis Elektroecke

Machine Learning mit Keras

Seit etwa einem Jahr beschäftige ich mich mit dem Thema Machine Learning, vorzugsweise im Bereich der Bilderkennung. Alles in allem ist das ein sehr spannendes Thema, welches ich gerne näher ausführen möchte.

Was versteht man unter “maschinellen Lernen”?:

Unter machinellen Lernen versteht man die Möglichkeit einem künstlichen System Wissen und Erfahrungen “lernen” zu lassen. In vielen Anwendungen geht es z. B. darum einem Computer eine Mustererkennung beizubringen. Prominente Beispiele sind z. B. Siri, Alexa oder ähnliche Spracherkennungsdienste, die heutzutage in unseren Geräten arbeiten. Auch Spamfilter etc. arbeiten mit Algorithmen aus dem Bereich des maschinellen Lernens. Der Bereich “maschinelles Lernen” umfasst eine Vielzahl von Möglichkeiten, mit denen ein Computer Dinge lernen kann, von denen jede einzelne ein komplettes Buch füllen kann. Ich möchte nach und nach ein paar Methoden vorstellen, mit denen man selber im Bereich maschinelles Lernen “spielen” kann.

Wie fange ich am besten an?:

Grundsätzlich stellt sich die Frage, welches Framework man für das machinelle Lernen verwenden möchte. Wenn man sich umschaut wird man feststellen, dass Tensorflow der “Platzhirsch” in diesem Gebiet ist. Die Bibliothek mit denen ich meine Versuche durchgeführt habe nennt sich Keras, eine High-Level API für Python. Das Ziel von Keras ist es, den Umgang mit Tensorflow zu erleichtern und um verschiedene andere Frameworks zu bündeln und ein einheitliches Framework zu bilden. 

Grundbegriffe im Bereich maschinelles Lernen:

Bevor man sich genauer mit der Thematik beschäftigen kann, sind einige Grundbegriffe zu klären. Das komplette Feld des maschinellen Lernens lässt sich in zwei Kategorien einteilen:

  • Überwachtes Lernen
  • Unüberwachtes Lernen

Ich werde mich hauptsächlich mit dem ersten Punkt beschäftigen, dem überwachten Lernen. Doch was versteht man darunter?
Damit ein Computer ein oder mehrere bestimmte Muster lernen kann, muss man ihm Trainingdaten geben. Bei Trainingsdaten handelt es sich um Daten, die ein Mensch im Vorfeld ausgesucht und klassifiziert hat. Ein Beispiel ist z. B. der MNIST Datensatz. Bei diesem Datensatz handelt es sich um eine Sammlung von Bildern der Zahlen 0 – 9, die ein Mensch einzeln klassifiziert hat. Jedem einzelnen Bild ist eine Klasse zugeordnet, wobei die Klassen bei diesem Datensatz die Zahlen 0 bis 9 sind. Beim überwachten Lernen bekommt der Algorithmus somit die Trainingsdaten (im Fall des MNIST Datensatzes die Bilder) und die Label zu jedem einzelnen Bild (also die Zahlen 0 bis 9). Mit diesen Daten wird der Algorithmus und das Netzwerk dann trainiert. Nach dem Training werden dann unbekannte Daten (Verifikationsdaten) in das Netzwerk gegeben und das Netzwerk gibt (im Idealfall) die korrekte Klasse der Daten, also im Fall des MNIST-Datensatzes die korrekte Ziffer auf dem Bild, aus.

Das unüberwachte Lernen ist genau das Gegenteil des überwachten Lernens. Beim unüberwachten Lernen würde der Algorithmus lediglich die Trainingsdaten ohne Label (also z. B. beim MNIST-Datensatz nur die Bilder) zum trainieren bekommen. Nach dem Training ist der Algorithmus lediglich dazu in der Lage Ähnlichkeiten zwischen den Verifikationsdaten und den Trainingsdaten zu finden. Er gibt also als Ergebnis nicht das Label (sprich eine Zahl von 0 bis 9) aus, sondern die Ähnlichkeit zu einem bestimmten Trainingsdatenpunkt (also z. B. die Ähnlichkeit zu einem bestimmten Trainingsbild).

Beide Lernmethoden sind komplett verschieden und bevor man einen Lernalgorithmus implementieren möchte, muss man sich Gedanken darüber machen, welchen Algorithmus man implementieren möchte. Von der Wahl des Algorithmus hängen die Anforderungen an die Trainingsdaten ab!

Wie ist der Stand der Technik?:

Die ersten Algorithmen im Bereich des maschinellen Lernens waren keine “richtigen” neuronalen Netze und sie hatten auch nichts mit “maschinellen Lernen” zu tun. Vielmehr waren es einfache Klassifizierungsalgorithmen, wie z. B. ein k-NN. Bei diesen Algorithmen wurden bei den Trainingsdaten bestimmte Merkmale festgelegt und diese Merkmale wurden in ein N-dimensionales Koordinatensystem eingetragen, wobei N die Anzahl der Merkmale ist. Wenn nun etwas unbekanntes klassifiziert werden soll, wurden von diesem unbekannten Objekt die Merkmale bestimmt und das Objekt dann ebenfalls in das Koordinatensystem eingetragen. Anhand der Abstände zu den bekannten Punkten konnte dann das unbekannte Objekt bestimmt werden. Zu diesem Thema werde ich aber noch einen separaten Beitrag verfassen.

Die ersten Algorithmen, die auch tatsächlich etwas mit maschinellen Lernen zu tun hatten, waren die neuronalen Netze. Mit ihnen versucht man die Funktionen des menschlichen Gehirns nachzuahmen, indem man künstliche Neuronen geschickt hintereinander schaltet.

 


Quelle: Wikipeda

Die Eingabewerte können z. B. Pixel eines Bildes oder Spannungswerte eines Signals sein. Jeder dieser Eingangswerte gewichtet, wobei die Gewichte während des Trainings festgelegt werden. Anschließend werden die gewichteten Werte miteinander verrechnet und eine Aktivierungsfunktion bestimmt dann anhand des berechneten Wertes ob das Neuron “aktiv” wird oder nicht. Werden viele derartiger Neuronen zusammengeschaltet, so spricht man von einem neuronalen Netz.


Quelle: Wikipeda

In dem dargestellten Bild ist jeder Punkt ein solches Neuron, wobei die beiden grünen Neuronen jeweils nur einen Eingangswert haben und das gelbe Neuron nur einen Ausgangswert. Das dargestellte neuronale Netz besitzt als Architektur einen Eingangs-Layer (grün), einen Hidden-Layer (blau) und einen Ausgangs-Layer (gelb). Werden sehr viele Hidden-Layer verwendet, so spricht man auch von einem Deep Neural Network. Ein sehr prominentes Beispiel ist z. B. Googles AlphaGo.
Der aktuelle Trend geht aktuell zu sogenannten Convolutional Neural Networks, oder auch CNNs.


Quelle: Wikipedia

Solche Netzwerke bestehen aus einem oder mehreren Faltungs-Layern und eignen sich damit sehr gut zur Mustererkennung in Bild- oder Audiodaten, da diese Netzwerke, bedingt durch die verwendete Faltung, die trainierten Objekte trotz einer Verschiebung oder einer Drehung etc. noch sehr zuverlässig erkennen.

Wie geht es weiter?:

Dieser Beitrag sollte eine kurze Einführung in die Welt des maschinellen Lernens werden. Ich werde nach und nach weitere Beitrage zu diesem Thema verfassen und dabei auf konkrete Situationen eingehen und diese mit Hilfe des maschinellen Lernens lösen.

Bis dahin
Daniel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.