KI: Fast alles, was ich darüber weiß (Teil 3: Neuronale Netze)

Letztes Mal ging es um Neuronen und einfache Perzeptrone. Die Weiterentwicklung davon heißt künstliches neuronales Netz. Das heißt so, weil es aus nachgebauten Neuronen bestehen und an echte biologische neuronale Netze angelehnt ist, sie aber keinesfalls tatsächlich nachbaut.

Wie ein neuronales Netz aufgebaut ist (der langweilige Teil)

Hier ist ein einfaches neuronales Netz, das aus fünf Neuronen besteht:

Es gibt links drei Eingangswerte. Das heißt, es gehen drei Zahlen in unser System hinein. Es könnten auch mehr oder weniger sein. Manchmal liest man auch “Eingangsneuronen”, obwohl diese Neuronen dann eigentlich nichts tun, außer einen Wert weiterzuleiten. Wenn man so zählte, hätte man acht Neuronen.

In der Mitte ist eine versteckte Neuronenschicht, “hidden layer”. Sie besteht in diesem Fall aus drei Neuronen, es könnten auch mehr oder weniger sein.

Und rechts ist die Schicht an Ausgangsneuronen, in diesem Fall sind es zwei. Das heißt, es kommen zwei Zahlen aus unserem System heraus. Es könnten auch mehr oder weniger sein. An deren Ausgängen liest man das gesuchte Ergebnis ab. (Manchmal will man ja mehr als eine ja/nein-Antwort, deshalb mehrere Ausgangsneuronen.)

Jedes Neuron hat für jeden Eingangswert wieder eine eigene Gewichtung, und einen eigenen Schwellenwert/Bias. Der Eingangswert wird mit der Gewichtung multipliziert, alle Produkte werden addiert, und der eventuell vorhandene Bias-Wert wird addiert – und vom Ergebnis hängt ab, was das Neuron dann ausgibt. Jedes Neuron hat nur einen Ausgangswert, der aber an mehrere andere Neuronen der nächsten Schicht weitergeben werden kann.

Ich habe geschrieben “vom Ergebnis hängt ab, was das Neuron dann ausgibt” – das entscheidet die Aktivierungsfunktion. Im Perzeptron war das eine ganz einfache Funktion: Ist das Rechenergebnis >=0, wird 1 weitergegeben (bzw. 0.99), sonst 0 (bzw. 0.01). Diese Funktion heißt auch hard limit und hat eine ganze Reihe weiterer Namen. Es gibt auch andere Aktivierungsfunktionen, bei neuronalen Netzen nimmt man häufig, aber auch nicht immer, eine Sigmoidfunktion: Bei einem äußerst, sehr oder halbwegs kleinen Eingangswert kommt ein Ausgangswert nahe 0 heraus; bei einem äußerst, sehr oder halbwegs großen Eingangswert kommt ein Ausgangswert nahe 1 heraus, bei mittleren Eingangswerten um die 0.5. Hier zwei Sigmoid-Varianten in Form der logistischen Funktion zum Veranschaulichen:

Fußnote 1: Wenn es mehr als eine versteckte Schicht in der Mitte gibt, spricht man von deep learning, glaube ich. Große neuronale Netze für schwierige Aufgaben bestehen aus Milliarden von Neuronen in vielen Schichten.

Fußnote 2: Manchmal sieht man das Bias als eigenes Neuron. dargestellt, als zusätzlichen Eingangswert je Neuron. Dann sieht man gleich, dass jedes Neuron einen eigenen Wert dafür haben kann. Manchmal sieht man auch das Bias als ein Neuron je Schicht dargestellt, dann kriegt das innerhalb jedes Neurons noch eine eigene Gewichtung – was im Endeffekt das gleiche heißt, nämlich dass je Neuron effektiv ein eigener Biaswert vorliegt.

Fußnote 3: In dem Beispiel oben ist jedes Neuron bzw. jeder Eingangswert mit allen Neuronen der folgenden Schicht und nur mit denen verbunden. Es gibt auch kompliziertere Versionen.

Was man mit einem neuronalen Netz machen kann (etwas interessanter)

Ein neuronales Netz ist auch nur eine Art Funktion. Es gehen ein Haufen Zahlen rein, und ein Haufen Zahlen kommt raus. Weil wir aber gelernt haben, dass bei einer Funktion immer nur 1 Ergebnis herauskommt, schreiben wir statt Haufen lieber Vektor: es geht 1 Vektor rein und es kommt 1 Vektor heraus. Vektor ist Fachsprache für Haufen, wenn der Haufen eine Reihenfolge hat. Wobei Elemente im Haufen auch mehrfach auftauchen können, also bleiben wir lieber bei Vektor.

1. Arbeiten mit Mustern, die für den Menschen einfach zu erkennen, aber schwer zu erklären sind

Ein Mensch sieht schnell, ob auf einem Bild eine Katze oder ein Hund abgebildet ist. Aber für einen Computer nachvollziehbar zu erklären, warum das eine eine Katze ist und das andere nicht, das ist schwer.

Ein Mensch sieht auch schnell, dass die folgenden Muster, bestehend aus 784 Zahlenwerten, alle der Ziffer 7 entsprechen. Aber einen Algorithmus zu formulieren, die einen Rechner entscheiden lässt, welches Muster nun eine 7 ist und welches nicht, das ist schwer.

Ein neuronales Netz kann man mit vielen Ziffern füttern, so dass sich der Algorithmus von selbst einstellt. Danach kann der Algorithmus, also das Netz, auch andere Ziffern als die zur Übung verwendeten richtig erkennen.

Dazu würde man ein Netz mit 784 Eingangswerten und 10 Ausgangswerten verwenden: Der erste Ausgangswert gibt die Wahrscheinlichkeit an, dass es eine 0 ist, der zweite für die 1, und so weiter; der letzte für die 9. Für den letzten Haufen Vektor von 784 Eingangswerten spuckt mein nur wenig trainiertes Übungsnetz aus:

Ausgabe: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Ausgabe: 0.12 | 0.06 | 0.08 | 0.06 | 0.10 | 0.06 | 0.06 | 0.62 | 0.11 | 0.17

Also mit 62% eine 7 und keine anderen ernsthaften Kandidaten. (Es gab im Netz 1 verstecktes Layer mit 100 Knoten zwischen Ein- und Ausgang. Keine Ahnung, ob das für die Aufgabe angemessen ist.)

Zu dieser Art Aufgabe gehört auch maschinelles Übersetzen: Es gibt einen Eingangstext und einen Ausgangstext, und ein kundiger Mensch kann leicht beurteilen, ob die Übersetzung gut ist – aber wie man übersetzt, das lässt sich kaum beschreiben. Aber der DeepL-Translator kann das trotzdem. (Deep wegen deep learning, übrigens.) Die Aufgabe ist allerdings sehr viel schwieriger als das Erkennen von Ziffern.

Zu dieser Art Aufgabe gehören auch Deepfakes. Dabei wird in einem Film zum Beispiel das Gesicht von Schauspieler A gegen das Gesicht von Schauspieler B ausgetauscht, oder Text und Mimik von Gesicht A wird auf Gesicht B übertragen. Für den Menschen leicht zu beurteilen, aber unmöglich in Regeln zu fassen:

Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.

Hier wird gezeigt, dass man aus einer relativ kleinen Reihe von Gesichtsfotos, vielleicht nur eines, vielleicht acht oder sechzehn, ein voll animiertes Gesicht erzeugen kann, auf das fremde Bewegungen übertragen werden können:

Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.

2. Erkennen von Mustern, die für den Menschen nicht unmittelbar einsichtig, aber eigentlich doch halbwegs errechenbar sind

Hier hat jemand ein Auto trainiert, das beliebige Spielzeugstrecken entlang fahren kann. Es gibt 7 Eingangswerte – der Abstand zur nächsten Streckenentfernung nach vorne, rechts, links, halbrechts, halblinks, dazu aktuelle Richtung und Geschwindigkeit. Es gibt vermutlich 4 Ausgangswerte, interpretiert als: Wahrscheinlichkeit zu beschleunigen, zu bremsen, nach links und nach rechts zu steuern. Der maschinelle Fahrer überprüft regelmäßig anhand der 7 Eingangswerte, welche Aktion als nächste drankommt.

Vermutlich könnte man mit einigermaßen Überlegung einen Algorithmus formulieren, der anhand der 7 Eingangsdaten – Entfernungsmessungen, Geschwindigkeit, Richtung – entscheidet, was in dieser Situation zu tun ist, um alle möglichen Kurven meistern zu können. Man kann aber auch mit den Belegungen der Gewichtungen für ein neuronales Netz so lange experimentieren, bis man am Ende die Belegungen, also die Konfiguration, des Netzes hat, die das gewünschte Ergebnis hervorrufen:

Der Inhalt ist nicht verfügbar.
Bitte erlaube Cookies, indem du auf Übernehmen im Banner klickst.

(Hier wurde wohl mit einem genetischen Algorithmus gearbeitet und nicht mit anderen, häufigeren Verfahren: Einfach 100 Autos/Belegungen zufällig erstellen und ausprobieren, und dann mit dem weitermachen, das am erfolgversprechendsten Aussieht. In jeder Generation werden 100 Klone erzeugt, aber keine perfekten, sondern mit Abwandlungen, Mutationen. Und in der nächsten sucht man wieder den erfolgreichsten Kandidaten aus und macht mit dem weiter.)

Das mit den Autos würde ich gerne mal ausprobieren, übrigens. Vielleicht in den nächsten Sommerferien. (Aber: Braucht man dafür überhaupt ein neuronales Netz? Reicht da nicht ein genetischer Algorithmus allein?)

3. Erkennen von Mustern, die für den Menschen nicht erkennbar sind

Kann man mit maschinellem Lernen Börsenentwicklungen voraussehen? Man kann, sofern hinter diesen wirklich ein System steckt.

Kann man mit maschinellem Lernen Röntgenbilder analysieren und daraufhin Diagnosen stellen? Vielleicht: https://www.zeit.de/wissen/2019–09/kuenstliche-intelligenz-medizin-diagnose-krankheiten-bilddiagnostik – hier wird das als zumindest ähnlich erfolgreich wie bei Diagnosen durch Menschen geschildert.

Kann man mit maschinellem Lernen aus Patientendaten die Wahrscheinlichkeit für eine spätere Alzheimer-Erkrankung ablesen? Vielleicht, jedenfalls wird genau an so etwas geforscht. Wenn die KI das dann kann, wäre der nächste Schritt, herauszufinden, was die KI weiß, das wir noch nicht wissen. Also welches Muster die KI in den Daten sieht, das die Medizin noch nicht erkannt hat.

Hier bricht dieser Eintrag ab, weil ich aus dem eigentlich vorgesehenen Rest einen längeren Exkurs gemacht habe, also noch einen Extrateil, der die wirklich spannenden Sachen enthält. Dafür gibt es jetzt noch ein paar unzusammenhängende Links:

3 Antworten auf „KI: Fast alles, was ich darüber weiß (Teil 3: Neuronale Netze)“

  1. Nette Serie, hat mir gut gefallen!

    Ja, manches das für Computer lächerlich einfach ist, ist für Menschen schwer, und umgekehrt.
    Passender XKCD dazu:
    https://xkcd.com/1425/

    Zu dem mit den Autos:
    Die gleiche Frage habe ich mir auch gestellt als ich es zum ersten mal gesehen habe. Mir hat sich nicht unmittelbar erschlossen, wozu man dazu machine learning braucht. Das sah für mich klassisch algorithmisch besser lösbar aus.
    Vor allem weil der Entwickler auch noch die “besten” jeder Generation von Hand ausgewählt hat.
    Aber ich möchte seine Leistung dabei nicht schmälern, das ist ein cooles Stück Technik, eine Demo für machine learning. Das besondere ist eigentlich daran, dass die KI-Fahrzeuge nicht wissen was das erwartete Verhalten des Autos ist, sie die Strecke nicht kennen (und wenn ich das richtig verstehe auch auf anderen Strecken funktionieren müssten) und auch nicht aufwändig von Hand darauf hingewiesen werden müssen, wie die Sensoreingaben zusammenhängen.
    Die einzigen Parameter die am Ende zählen sind Strecke und Zeit. Alles dazwischen notwendige (wie man lenkt, wann man in einer Kurve bremst und Gas gibt etc.) lernt die KI selbstständig.
    Und sobald es eine Möglichkeit gibt, die “Gewinner” einer Generation automatisch zu wählen, kann man tausende Generationen pro Stunde rechnen. Das skaliert ja mit Rechenleistung.
    Und das ist der entscheidende Punkt.

    Als PC-Spieler und Programmierer weiss ich wie schwer es ist, eine gute (will heißen: Für den Anwendungsfall glaubhaftes Verhalten imitierende) “KI” (keine KI im eigentlichen Sinne aber das was man sagt) zu bauen. Rennspiele und – simulationen z.B. benutzen für die KI-Fahrer Splines auf der Strecke, die ein Menschlicher Fahrer aufgezeichnet hat, und die KI-Fahrer fahren denen nur nach und variieren ein bisschen je nach Situation. Das ist in manchen Simulationen durchaus einigermaßen glaubhaft, aber ohne die Splines die wie Schienen funktionieren sind die “KI“s absolut nutzlos, weswegen z.B. in “Assetto Corsa” Modder immer mal wieder mit tollen neuen Tweaks für KI-Splines experimentieren. Aber das hat seine Grenzen.

    Im Moment wird das noch so gemacht weil echte KI noch nicht so weit ist, der Aufwand ist gigantisch. Aber es gibt Unternehmen die an so etwas arbeiten, und ich rechne damit, dass in Kürze der break-even-point erreicht sein wird, an dem für den Rennspiel-Programmierer der Aufwand für die Implementierung des KI-Frameworks geringer sein wird, als die “KI” selbst zu schreiben.
    Bei First Person Shootern und Rollenspielen gibt es so etwas schon. In den 90ern hatten auch Levels in der Quake Engine oder Unreal Engine z.B. noch “Schienen” für die Bots. Die Bots konnten zwar von Schiene zu Schiene springen etc., aber viel mehr nicht. Und so richtig koordiniert waren sie auch nicht.
    Da hat sich schon einiges getan.

    Gruß
    Aginor

Schreibe einen Kommentar

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