KI: Fast alles, was ich darüber weiß (Teil 2: Neuronen)

Im ersten Teil ging es um allgemeine Gedanken, diesmal will ich etwas konkreter werde. Der Ausgangspunkt war der: Ein Computersystem soll lernen, Muster zu erkennen, also für uns eine Reihe von Datensätzen zu kategorisieren. Das können eine Menge als Farbwerte interpretierbare Zahlen sein, die das System als Ziffer erkennen soll:

Das kann ein Punkt in einem zweidimensionalen Koordinatensystem sein, bei dem das System entscheiden soll, ob der Punkt “links oben” sein soll. Hier ist eine Darstellung von ein paar hundert solcher Punkte:

Genau genommen geht es nicht um Punkte, sondern um zwei Werte, x und y, von denen der erste eher klein und der zweite eher groß sein soll – “links oben” ist nur die Kurzfassung.

Diese letzte Art der Kategorisierung ist schön einfach, fangen wir mal mit der an. Für die reicht nämlich ein ganz einfaches Modell, das an eine menschliche Nervenzelle angelehnt ist.

Perzeptron

Eine Nervenzelle oder Neuron ist eine Zelle, die ein Signal empfängt und dieses dann an weitere Zellen weiterleitet, oder auch nicht – je nach Stärke der Eingangsreize.

An den Dendriten kommen Signale von anderen Zellen an, hier sind es zwei, es könnten auch mehr sein. Je nachdem, ob an den Dendriten genügend starke Signale ankommen, diese also einen bestimmten Schwellenwert übersteigen, wird über das Axon ein neues Signal an die nächste Zelle weitergeleitet. (Die Verbindung zwischen zwei Neuronen heißt synaptischer Spalt, an den Biologieunterricht dazu kann ich mich noch gut erinnern, und weil ganz viele, vor allem biologische Gifte die Signalweitergabe um den synaptischen Spalt herum blockieren.)

Neuronale Netze als Algorithmus arbeiten ebenfalls mit Neuronen. Ein einzelnes Neuron heißt auch einfaches Perzeptron. Es funktioniert ein bisschen wie ein abstrahiertes biologisches Neuron und es kann schon eine ganze Menge.

Das Neuron ist nur ein bisschen mathematischer: Für jeden Eingang gibt es eine Gewichtung, die mit dem jeweiligen Eingangswert multipliziert wird. Die Produkte werden zusammengezählt, und wenn sie größer als ein bestimmter Schwellenwert sind, wird ein hoher Wert weitergeleitet (standardmäßig 0.99), ansonsten ein niedriger Wert (0.01). Ist die Gewichtung für einen Eingang 0, spielt dessen Wert für das Ergebnis keine Rolle, ist sie negativ, macht sie das Weiterleiten schwieriger, ist sie positiv, erleichtert sie das Weiterleiten – immer abhängig von den konkreten Eingangswerten.

Herumspielen mit einem einfachen Perzeptron

Weil ich mir das dann besser vorstellen kann, habe ich mir ein Programm gebaut und damit herumgespielt. Mein Neuron hat erst einmal nur zwei Eingänge, damit man das grafisch in einem Koordinatensystem zeigen kann.

Die Position des gezeichneten Punktes stellt die Eingangswerte dar: x = 0.92443, also recht hoch, und damit ziemlich weit rechts, und y = 0.3325, also unteres Drittel. Die Farbe des Punktes, schwarz, stellt dar, dass das Neuron für diese Eingangswerte einen niedrigen Wert ausgibt, 0.01. Wie das Neuron zu dieser Entscheidung kommt, liegt an der Gewichtung und am Schwellenwert, auch Bias genannt: Die Produkte der Eingangswerte und der Gewichtungen werden zum Bias addiert (das deswegen bei mir meist negativ ist), und wenn das Ergebnis größer ist als 0 (hier ist es: ‑0.35034), dann entscheidet das Neuron auf 0.01. Alle niedrigen Werte sind rot, alle hohen grün markiert.

Wenn ich das mit 400 zufälligen Punkten mache, kommt das heraus:

Man könnte auch sagen: Dieses Neuron überprüft, ob ein Punkt eher links oben ist, vielleicht mit einem Stich nach Mitte oben hin. Das liegt an den Gewichtungen. Das gleiche Neuron zeigt bei anderen Gewichtungen ein ganz anderes Entscheidungsverhalten:

Hier entscheidet das Neuron, ob die Punkte eher in der oberen Hälfte sind, wobei es bei größeren x‑Werten (also dem ersten Eingangswert) ein bisschen mehr y‑Wert verlangt (den zweiten Eingangswert) als bei niedrigen.

Durch Herumspielen kriegt man heraus, welche Art Entscheidungen so ein Neuron grundsätzlich zu treffen in der Lage ist: Alle Unterscheidungen, die anhand einer Linie quer durchs Koordinatensystem vorgenommen werden können. Für manche davon muss der Bias-Wert allerdings positiv sein, etwa für “nur die linke Hälfte”:

Das wäre eine denkbare Aufgabe für Schüler und Schülerinnen: Finde heraus, welche Muster sich überhaupt erzeugen lassen beziehungsweise welche Entscheidungen ein Neuron überhaupt treffen kann. Und dann gibt man ein paar Muster vor und lässt sie Werte suchen, die diese Muster erzeugen. Und dann müssen sie erklären, warum das so ist: Im Bild oben sieht man an der Gewichtung, dass der y‑Wert gar keine Rolle spielt, er wird immer zu 0 umgerechnet. Der y‑Wert wird mit negativem Vorzeichen versehen, bewegt sich also zwischen 0 und ‑1 – und wenn man dann den Bias abzieht, also 0.5 addiert, hat man eine 50%-Chance, über 0 zu kommen.

(Kann man nicht einfach den Bias negativ lassen und den y‑Eingang mit +1 gewichten? Ausprobieren macht klug!)

Übrigens: Bei drei Eingangswerten kann ein solches Neuron eine Unterscheidung machen zwischen allen Punkten, die getrennt werden durch eine Ebene, die ein dreidimensionales Koordinatensystem, also einen Würfel, schneidet. Und so weiter in höhere Dimensionen, aber das lässt sich alles schlecht zeichnen.

Hier das ganze als Video:

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

Was mit einem einfachen Perzeptron geht

Wenn beide Eingangswerte hoch sind, und nur dann, soll das Neuron mit 0.99 reagieren. Das entspricht der logischen UND-Funktion:

(Wie hoch die Werte dabei genau sein müssen, das lässt sich über Bias und Gewichtung regeln. Bei der Grafik oben müssen sie schon beide recht hoch sein.)

Wenn mindestens einer der beiden Eingangswerte hoch ist, soll das Neuron mit 0.99 reagieren. Das entspricht der logischen ODER-Funktion:

(Man sieht: Nur in Fällen, wo die Eingabewerte beide ziemlich klein sind, reagiert das Neuron mit 0.01.)

Was mit einem einfachen Perzeptron nicht geht

Wenn genau einer der beiden Eingangswerte hoch ist, aber nicht beide, soll das Neuron mit 0.99 reagieren. Das entspricht der logischen XOR-Funktion. Und das kann ein Neuron nicht. Schade! Auch das letztlich äquivalente Problem der Entscheidung, ob die beiden Eingangswerte ähnlich sind, also beide eher groß oder beide eher klein, kann ein einfaches Perzeptron bestehend aus einem Neuron nicht lösen.

Was mit einem etwas komplexeren Perzeptron dann doch geht

Ich kann mir ein logisches XOR zusammenbauen aus drei einfachen Neuronen. Dazu brauche ich ein Neuron, das “ist rechts unten” überprüft, logisch: X AND (NOT Y), also hohes x und niedriges y. Und ein Neuron, das “ist links oben” überprüft, logisch: (NOT X) AND Y, niedriges x und hohes y. Und das dritte Neuron kennen wir schon, das ist auf “oder” eingestellt:

Die Ergebnisse der neuen vorgelagerten Neuronenschicht, zwischen Eingang und Ausgangsneuron, werden an die Eingänge des Ausgangsneurons weitergeleitet. Damit gibt mir das Gesamtkonstrukt 0.99 aus, wenn genau einer der Eingangswerte hoch ist, sonst 0.01. Grenzwerte anpassbar.

Damit kann man dann auch so etwas bauen, wo Punkte im rechten oberen Quadranten akzeptiert werden:

Das obere Neuron überprüft, ob ein Punkt rechts ist (x groß, y egal). Das untere Neuron überprüft, ob ein Punkt unten ist (x egal, y groß). Und das rechte Neuron ist wieder ein schlichtes und-Neuron. Ergebnis: Die Punkte, die sowohl in der oberen als auch in der rechten Hälfte sind, werden erkannt.

Auch hier könnte man wieder schön Muster vorgeben und experimentieren lassen, wie sie sich erzeugen lassen. Oder als Textaufgaben stellen: Alle Punkte, die rechts oben oder links oben sind – was muss man da einstellen? Geht das mit drei Neuronen überhaupt? (Klar.)

Erweiterungen

Wenn etwas nicht geht, dann könnte man ja weitere Neuronen einführen, zusätzlich zu den beiden neuen. Oder gar eine weitere Schicht Neuronen davor einfügen. Aber dann sind wir schon beim neuronalen Netz und nicht mehr beim Perzeptron: Aus den kleinen Neuronen-Bausteinen kann ich mir wie aus Logikgattern ganze Schaltkreise zusammenbauen, mit denen ich beliebige Funktionen umsetzen kann. Wenn jedes Neuron ein UND- oder ODER- oder vergleichbarer Baustein ist, und ich genug Neuronen miteinander verbinde, kann ich mir beliebig komplexe Funktion daraus bauen: wenn Eingang 1, aber nicht Eingang 2, außer wenn Eingang 3… Die “Programmierung” dieses Neuronenhaufens besteht dann nur aus den Gewichtungen und Bias-Werten der Neuronen. Dann kann mir dieser Neuronenhaufen, wenn er groß genug ist, auch aus beliebigen 748 Eingangswerten berechnen, ob sie einer Ziffer entsprechen, und wenn ja, welcher:

Wo das Problem ist

Ich kann mir also einen Quasicomputer aus Neuronen zusammenbauen, der für mich rechnet… ich muss ihn nur programmieren, also die Neuronen mit den richtigen Werten versehen. Und das sind sehr viele. (Das muss so sein, weil es eine schwierige Aufgabe ist.) Wenn ich 10 Ausgangsneuronen und 784 Eingangswerte und, sagen wir, 100 Zwischenneuronen habe, dann sind das 796000 Gewichtungen (jeweils Eingänge und Bias) in 110 Neuronen. Wenn ich von vornherein wüsste, mit welchen Werten ich diese Gewichtungen versehen muss, dann wäre ich fein heraus.

Ich habe noch dazu wenig Ahnung, was eine Ziffer 7 eigentlich ausmacht. Ich meine, ich erkenne sie, aber in einem Algorithmus festzuhalten, woran ich sie erkenne… das ist schwierig. Irgendwo gibt es vielleicht am Ende ein Neuron, das entscheidet, ob ein halbwegs waagrechter Strich da ist, und ein weiteres, das einen halbwegs senkrechten erkennt (aber wie halbwegs genau?) und ein drittes, das ihr Verhältnis beurteilt… aber wie dahin kommen?

Die Lösung: Es gibt eine Möglichkeit, dass diese 796000 Gewichtungen (oder drei, wie meist in meinen Beispielen oben) sich quasi von selbst einstellen. Dazu muss ich das Netz oder das Perzeptron mit genug Beispielen füttern, an denen es dann lernt. Und darum wird es vermutlich im nächsten Teil gehen, falls ich mich dazu aufraffe: Was ein neuronales Netz ist, was man damit machen kann, und wie man es trainiert.

Fußnote: Was ich weggelassen habe

Mein Neuron oben gibt immer nur 0.99 oder 0.01 zurück, abhängig von der Summe von Bias und Gewichtung*Eingangswert. In einem neuronalen Netz ist das etwas eleganter, da können auch Werte dazwischen ausgegeben werden, obwohl die Ausgabe schon häufig zu sehr großen oder sehr niedrigen Werten neigt. Außerdem will ich nicht den Eindruck erwecken, dass Neuronen nur auf streng logische Funktionen begrenzt sind, in den Beispielen oben sind ja auch welche für “hm, ein bisschen was vom einen und nicht zuviel vom anderen”. Und drittens haben Neuronen meist mehr als zwei Eingänge. Und zuletzt gibt es mehrere Möglichkeiten, sie miteinander zu verknüpfen, aber dazu vielleicht später mehr.

Fußnote: Die drei XOR-Neuronen von oben in der Tabellenkalkulation

Ich kann mir die drei Neuronen von oben auch in eine Tabellenkalkulationsdatei schreiben. Dann sieht das so aus:

Man sieht, wenn man sich die Mühe des Vergleichs macht, dass Calc zu den gleichen Ergebnissen und Zwischenergebnissen kommt wie oben. Für jedes Neuron ein paar Zahlen, die Neuronen – der Einfachheit halber – nach einem starren Feed-Forward-System ohne Abkürzungen miteinander verknüpft, gar nicht so viel Aufwand, aber viele, viele Zeilen. Und ja, es gibt Anleitungen für neuronale Netze in Excel.

Links

(Gerne auf Fehler hinweisen. Ich bringe mir das nach und nach selber bei und versuche es gleichzeitig herunterzubrechen auf ein Niveau, wie ich es vielleicht mal im allgemeinbildenden Pflicht- oder Wahlpflichtfach Informatik verwenden kann.)

Fortsetzung hier.

5 Antworten auf „KI: Fast alles, was ich darüber weiß (Teil 2: Neuronen)“

  1. Gerne, ich hoffe, es war verständlich. Das wird sicher auch alles mal in die Schule kommen. (Und ist übrigens alles viele Jahrzehnte alt. Erst die Rechenleistungen in diesem Jahrtausend haben das praktikabel gemacht.)

Schreibe einen Kommentar

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