Und aus meiner eigenen Beobachtung: Wenn eine Katze einen gewagten Sprung macht und zielgenau landet, dann nicht, weil sie vorher exakt ausgerechnet hat, wie die Flugbahn ist – sondern weil sie oft genug gesprungen ist und sich langsam rangetastet hat (Katzen sind schließlich vorsichtig), und aus diesen vielen Erfahrungen recht gut interpolieren/extrapolieren kann, wie sie den aktuellen Sprung angehen muss.
Oder das Sprechen einer Sprache:
Ich habe das implizit anders gemeint: Intelligenz bedeutet für mich, den Kontext zu verstehen, also viel Hintergrundwissen zu haben und anzuwenden. Das hieße bei einem Auto: Nicht nur Menschen als bewegliche Objekte erkennen und deren Bewegungsablauf zu extrapolieren – sondern auch zu wissen, wie Menschen üblicherweise ticken. Und damit zu wissen, dass z.B. kleine Kinder weniger vorausschauend handeln, oder z.B. zu erkennen, dass der Mensch offensichtlich betrunken ist und damit viel unberechenbarer als ein normaler Mensch, auch wenn er optisch gleich aussieht. Und das fehlt mir bei KI.
Diese drei Beispiele sind auch von künstlichen neuronalen Netzen zu meistern. Wenn ich vorhin gesagt hatte, daß wir nicht genug Rechenleistung hätten, um ein Großes Netz mit etlichen Funktionsgruppen zu simulieren, so stimmt das nur halb. Wäre das Netz fertig angelernt, wäre das kein Problem. Die Anwendung des Gelernten geht schnell, aber das Lernen ist das, was noch zu zeitaufwendig ist.
Zudem kommt dazu, daß unser Gehirn ja immer dazu lernt bzw. vorhandene Muster verfestigt, gerade die, die mit Sinneswahrnehmung zu tun haben. Jahrzehntelang, auf einem massiv parallelen Gehirn. Würden wir uns die Zeit auch bei künstlichen neuronalen Netzen nehmen, und sie 18 Jahre anlernen, bevor wir sie fahren lassen, sähe das bestimmt auch mit den jetzigen Methoden ganz anders aus. Im Moment fahren ja noch Säuglinge.
Doch auch wir können einen Betrunkenen nicht sofort erkennen, sondern müssen erst warten, bis er sich bewegt, damit unser Realitätsmodell angepasst, und die Person umklassifiziert werden kann.
Vielleicht sollte ich mal kurz erklären, wie künstliche neuronale Netze funktionieren, vor allem um ein Bauchgefühl zu schaffen, und die Dinger zu entzaubern.
Künstliche neuronale Netzwerke basieren ganz einfach auf einem Nachbau des Gehirns. Als man anfig, es in Scheiben zu schneiden und unter dem Mikroskop anzusehen, sah man etwas, was wie elektrische Schaltnetze aussah (Elektrizität war damals gerade neu). Die ersten bis heute relevanten Modelle sind aber auch schon fast 100 Jahre alt (
https://de.wikipedia.org/wiki/McCulloch-Pitts-Zelle).
Der Begriff 'Deep Learning' resultiert aus der Verwendung von mehr- bis viellagigen neuronalen Netzwerken. Jede Neuronenschicht kann man quasi als Abstraktionsebene betrachten, bis am Ende der Input korrekt klassifiziert werden kann.
Schauen wir uns mal ein Netz an, das gelernt hat, drei Arten von Tieren in Bildern zu erkennen. Oben werden die Pixeldaten hineingetan, dann passiert (im Moment noch) Magie und unten purzelt die Klassifikation heraus. Jedes Neuron ist dabei mit allen anderen Neuronen der jeweils folgenden Schicht verbunden, die somit alle dessen Output bekommen.
Es ist offensichtlich, daß in der Realität Bilder mit nur drei Pixeln nicht funktionieren würden. Und in der Tat haben solche Netze etliche tausend Inputs und u.U. mehrere hundert Zwischenlayer mit definitiv nicht bloß zwei Neuronen. Das Prinzip bleibt aber gleich. Die unbefriedigende Antwort auf die Frage, wieviele Zwischenlayer mit wievielen Neuronen nötig sind, lautet leider noch „Erfahrungssache“.
Ein künstliches Neuron ist folgendermaßen aufgebaut:
Es werden die Inputsignale aufsummiert und dann durch eine Aktivierungsfunktion geschickt, so daß das Neuron u.U. erst ab einem bestimmten Wert durchschaltet, und diesen dann an die Neuronen der nächsten Schicht weitergibt. Ein bißchen wie ein Transistor. Jede Aktivierungsfunktion hat ihre vor- und Nachteile. Prinzipiell kann man alles verwenden, monoton steigende Funktionen haben sich jedoch am besten bewährt.
Die eigentliche Funktionalität des Netzes wird durch die Verbindungen der Neuronen hergestellt. Diese Verbindungen sind gewichtet, das heißt sie haben einen Wert, mit dem der Output eines Neurons multipliziert wird, bevor er in den Input des nächsten Neurons gegeben wird. Es ist die Auswahl dieser Gewichte, die Einfluß darauf hat, ob das Netz funktioniert und wie gut.
Wie findet man nun die richtigen Gewichte? Raten? Alle Kombinationen ausprobieren?
Nehmen wir mal ein kleines Netz, das 3 x 3 Pixel große Bilder bearbeitet, also 9 Inputs hat. Bei drei Layern gleicher Größe würde das 9 Neuronen pro Schicht x jeweils 9 Verbindungen zu den Neuronen des nächsten Layers x 2 Layer, die einem anderen folgen = 162 Gewichte ergeben.
Sagen wir nun spaßeshalber, daß nur ganzzahlige Gewichte zwischen 1 und 10 erlaubt wären, so ergäbe das schon 10^162 Kombinationsmöglichkeiten. Selbst bei einer trillion Rechnern auf der Welt, von denen jeder eine trillion Kombinationsmöglichkeiten pro Sekunde testen könnte (es gibt z.Zt. noch keinen, der das könnte), würde das noch 10^162 / 10^18 / 10^18 / 31536000 sek/a = 3x10^118 Jahre dauern, was etwa 2x10^108 mal so lang ist, wie das Universum alt ist. Also: nein, brute force Ausprobieren macht keinen Sinn. Schon bei diesem Beispiel von gerade mal 27 Neuronen mit absolut unsinnig stark eingeschränkten Möglichkeiten zur Gewichtung nicht.
Sowas von nicht! Aber wie können dann millionen von Neuronen in hunderten von Schichten funktioneren?
Durch lernen.
Fangen wir an und initialisieren das Netz mit zufälligen Gewichten. Wenn wir jetzt ein Katzenbild oben hineingeben, kommt unten natürlich völliger Quatsch heraus. Aber das macht nichts!
Da wir den Sollwert kennen (Hund: 0, Katze: 1, Maus: 0), können wir anhand des Istwertes den Fehler ausrechnen, den das Netz gemacht hat. Diese Fehlerberechnung machen wir für alle Trainingsbilder und können daran sehen, wie gut das Netz arbeitet. Das Ziel muß also sein, den Fehler über alle Trainingsbilder hinweg zu minimieren.
Wir schauen uns dazu den Fehler an und betrachten ihn als Ergebnis der Funktion aller Netzkomponenten, die auf ihn Einfluß haben, aber in Abhängigkeit eines bestimmten Gewichts im Netz (im Prinzip „Auflösen nach x“, in diesem Fall nach dem einen Gewicht). Wir haben jetzt also eine Fehlerfunktion für dieses eine Gewicht, die uns anzeigt, wie groß der Fehler für jeden Wert dieses Gewichts ist. Nun geht es darum, mittels Kurvenanalyse den Tiefpunkt dieser Fehlerfunktion zu ermitteln, und dem Gewicht den Wert an dieser Stelle zu geben.
Allerdings... ganz so einfach ist es nicht.
Das Problem ist, daß jedes Gewicht Einfluß auf alle Klassifikationen aller Bilder und indirekt auf viele andere Gewichte hat, da alle Informationen quasi überall gespeichert sind. Ändert man nun ein Gewicht, könnte dadurch ein anderes bei der Klassifikation von Daten das Ergebnis so beeinflussen, daß es am Ende schlechter wird. Man muß also alle Fehlerfunktionen aller Gewichte für alle Trainingsdaten gleichzeitig betrachten!
Hierzu kombiniert man alle (eindimensionalen) Fehlerfunktionen und kombiniert sie zu einer (multidimensionalen) Oberfläche. Das folgende Bild visualisiert das für ein Netz mit insgesamt lediglich
zwei Gewichten. Hier kann man nun in Abhängigkeit der Werte der beiden Gewichte g1 und g2 den Fehler als Höhe im Geländemodell ablesen.
Die aktuellen Gewichte bestimmen also unsere Position auf der „Landkarte“. Und da wir nicht ausprobieren können, wo das absolute Minimum liegt (s.o., 3x10^118 Jahre), die Karte für uns also unbekannt ist und wir nur unseren aktuellen Punkt kennen, an dem wir uns gerade befinden, leiten wir die Fehlerfunktionen der Gewichte an unserem momentanen Standpunkt ab. Da die Ableitung einer Kurve die Steigung ergibt, können wir die Ableitungen aller Fehlerfunktionen an unserer Position zu einem Richtungsvektor kombinieren, der uns zeigt, wo es nach unten geht und wie steil. Anhand dieser Information können wir nun einen Schritt „nach unten“ machen, übernehmen die jeweiligen neuen Koordinaten als Gewichte, wiederholen die gesamte Fehlerermittlung über alle Testdaten und die Ableiterei an unserem neuen Standpunkt, um zu sehen, wie es nun aussieht und weiter geht. Es ist das Äquivalent zum Fallenlassen einer Kugel irgendwo über dem Fehlerfunktionsgebirge und zu schauen, wo sie hinrollt. Wenn wir zufrieden mit dem Fehler sind, hat das Netz ausgelernt (es gibt kein 'Fertig', denn wir kennen ja die "Landkarte" nicht).
Natürlich verstecken sich sich hinter „einen Schritt nach unten machen“ erneut Probleme. Welche Schrittweite nehme ich? Wie stelle ich sicher, daß ich dabei kein Minimum (und dabei vielleicht das globale) überspringe? Wie „verliere ich nicht die Lust“, wenn das Gefälle über lange Zeit sehr gering ist, ich mich aber auf einem „Fehlerhochplateu“ befinde, das aber natürlich nicht weiß? Wie verhindere ich, in einem nur lokalen Minimum schon der Meinung zu sein, besser geht’s nicht?
Natürlich hat die „Fehleroberfläche“ auch soviele Dimensionen wie das Netz Gewichte. Das ist der Mathematik egal, aber zum Verstehen des Konzeptes reicht der zweidimensionale Fall vollauf und ist wesentlich anschaulicher, als ein Formelwust.
Das Funktionsprinzip eines (ausgelernten) künstlichen Neuronalen Netzes entspricht der Funktionsweise von Gehirnen, auch wenn echte Neuronen durch binäre Pulse kommunizieren und nicht mit kontinuierlichen Werten. Das Lernen nach dieser Methode (
Backpropagation) wird definitiv nicht in biologischen Netzen angewandt, allein schon weil es dort keine Taktung gibt, die dazu notwendig ist. Aber egal, denn lernen tun beide Systeme und beide tun sich sehr schwer damit. Die Anwendung des gelernten ist jedoch extrem schnell und effizient. Hier zeigt jemand sein Netz mit 12 Neuronen, das von 0 bis 7 zählen kann. Um das anzulernen hat er 680.000 Lernschritte benötigt.
Komplexe Netze lernen über Monate auf riesigen Clustern im Facebook-Rechenzentrum, in der Anwendung müssen sie für jede Klassifikation jedoch nur wenige hundert Millionen Berechnungen durchführen, was heutzutage auch auf Billigtelefonen in unter einer Sekunde möglich ist.
Der Input ist natürlich nicht auf Bilder beschränkt. Ein Feld von Tastsensoren könnte zur Identifikation von Oberflächen eingesetzt werden, die Analyse von Partikeln in der Luft zum „Erschnuppern“ was gerade in der Küche gekocht wird. Oder einen Haufen persönlicher Daten (Bekanntschaften, Bewegungsmuster, etc.) um damit Verbrechensvorhersage zu betreiben. Ähm...
Durch das Zusammenspiel kleiner Einheiten nach simpelsten Regeln können extrem komplexe Muster und Mechanismen entstehen. So entsteht durch das Zusammenspiel der zweieinhalb Hirnzellen jeder Ameise ein gigantisches und geordnetes Staatsgebilde mit wie geplant aussehenden Bauwerken und Infrastruktur.
Überhaupt ist das gesamte Leben auf diesem Planeten den simplen Eigenschaften des Kohlenstoffatoms und seiner Bindungsfähigkeit zuzuschreiben, wodurch die Emergenz von DNA und deren Replikation in Eukaryoten ermöglicht wurde. Somit ist sogar Evolution ein emergenter Vorgang.
Worauf ich hinaus will ist die Tatsache, daß sich in mehrlagigen neuronalen Netzen von selbst Abstraktionshierarchien herausbilden. Während die ersten Schichten lediglich auf grundlegende Muster wie „horizontal“, „vertikal“ oder „kreisförmig“ reagieren, werden diese Konzepte in späteren Schichten weiter kombiniert und abstrahiert. So könnten z.B. „Stäbe, vertikal, unten“ und „oval, horizontal, oben“ irgendwann zu „Hocker“ und in einem weiteren Abstraktionsschritt zu „Sitzmöbel“ werden, was wiederum in das Konzept „Möbel“ mündet.
In neuronale Netzen entsteht also eine emergente Konzepthierarchie, die man vielleicht auch Vokabular nennen könnte. Alles in allem sind es aber nur Gewichte zwischen Neuronen, die in ihrem komplexen Zusammenspiel diese Dinge ermöglichen. Genauso verhält es sich mit der „internen Sprache“ eines Sprach-Übersetzungsnetzwerkes. Die interne Sprache ist die emergente Manifestation der Fehlerfunktionsminimierung und besteht auch hier nicht aus Wörterbuch und Grammatikheft, sondern nur aus einem Zusammenspiel von Gewichten. Und niemand weiß, was genau nun wirklich passiert oder warum diese Emergenz stattfindet.
...Mike