KI Perzeptron
Allgemeines
Ein Perzeptron ist der einfachste Typ eines künstlichen Neurons und gilt als das grundlegendste Bausteinmodell für neuronale Netze im Bereich der künstlichen Intelligenz. Es wurde im Jahr 1957 von Frank Rosenblatt entwickelt.
Es eigenet sich daher ideal um einen bleibenden Eindruck des Lernvorgangs eines Neurons zu demonstrieren.
Nebenbemerkung:
Perzeption bezeichnet die sinnliche Wahrnehmung von Reizen und Eindrücken durch die Sinnesorgane ohne bewusste Reflexion oder tiefes Verstehen.
Perzeptron
Das binaere Perzeptron als idealer Einstieg in das Verstaendnis Neuronaler Netze.
Lange habe ich in Buechern zur KI auf ein Beispiel gewartet, bis ich eine eigene Vorstellung davon entwickeln konnte, wie man vom biologischen Aufbau eines Neurons zum grundlegenden, technischen Aufbau und dem mathematischen Modell gelangt.
Dann kommt noch zu allem Ueberfluss z. B. im Buch "Neuronale Netz programmieren mit Python" Steinwendner/Schwaiger 3. Auflage S.35 hinzu, dass dort nach meinem Verstaendnis in Abb. 1.8/1.9 Synapsen und Dendriten in ihrer Bedeutung vertauscht wurden.
Die Synapsen sind für mich, um in der Analogie zu bleiben, die Ausgaenge (Mehrzahl! (Beim Perzeptron nur einer.)) eines Neurons und die Gewichtung steckt wohl eher im Synaptischen Spalt als in den Dendriten.
Trotz aller Ueberlegungen habe ich doch viele Gedanken wieder verworfen, da sie fuer mich einfach nicht hilfreich waren ein Verstaendnis des mathematischen Abbildes zu begreifen.
Selbst das simple "2-Mitarbeiter-Beispiel" in o. g. Buch ist mir zwar klar, aber brachte mich nicht weiter.
Faktencheck
Erst durch folgende Informationen und Annahmen konnte ich mich schrittweise einem tieferen Verstaendnis naehern.
Viele Informationen/Annahmen sind zwar trivial, aber bisher sind sie mir noch nicht in der Zusammenstellung so kompakt begegnet.
- Um eine bessere Vorstellung zu erhalten, reduziert man die Ueberlegungen zu einem Neuron (Perzeptron) auf genau einen Eingang und einen Ausgang.
- Ein Eingang x kann eine beliebige Groesze/Zahl sein. x ∈ ℝ (x ∈ ℂ ist hier beim Perzeptron ausgeschlossen, aber bei entsprechender Definition von Aktivierung, Ordnung und Klassifikationsentscheidung moeglich.)
- Eine Gewicht w kann eine beliebige Groesze/Zahl annehmen. w ∈ ℝ
- Der Ausgang y kann eine beliebig Groesze/Zahl sein. y ∈ ℝ Das ist zwar selten aber moeglich.
- Unterschieden wird am Ausgang
- y (ohne Dach): Der tatsaechliche, echte Wert (die „Ground Truth“ oder das reale Label).
- ŷ (mit Dach): Der von dem Modell vorhergesagte oder geschaetzte Wert.
- Ein Bias b kann eine beliebige Groesze/Zahl annehmen. b ∈ ℝ. Das deutsche Wort "Voreingenommenheit" ist hier wenig hilfreich. Ich kenne den Begriff hauptsaechlich als (DC-)Offset, also eine Spannung die den Pegel eines Eingangssignals nach "oben" oder nach "unten" verschiebt.
- Das "Lernen" eines Neurons reduziert sich auf die (automatische) Bestimmung von w und b.
- Ein Neuron ist "fertig" trainiert, also w und b so bestimmt, dass zu jedem x das gewuenschte y am Ausgang erscheint.
- Da x und y allgemein Elemente der reellen Zahlen sind, duerfen sie natuerlich im einfachsten Fall auch einfach nur binaer (0 oder 1) sein.
- Der Zwischenwert im Neuron ist z, oder auch net genannt.
- z oder net sind die Eingangsgroesze einer Aktivierungsfunktion (Klassifizierungsfunktion). Oft macht diese Funktion f(z) aus einem reellen Wert einen reellen Wert zwischen -1 und 1, 0 und 1 oder ganz simpel entweder 0 oder 1.
- Die Aktivierungsfunktion f(z) ist oft eine Funktion die z, z. B. auf den Wertebereich [-1;1], [0;1] oder [0;∞] abbildet. Dies geschieht z. B. durch Funktionen wie:
- Heaviside (Sprungfunktion von 0->1 bei 0)
- ReLU (Rectified Linear Unit) Gleichrichter und x > 0 Steigung 1
- Sigmoid
- Tangens hyperbolicus
Die Aktivierungsfunktion f(z) bildet den Netzeingabewert z auf den Ausgang des Neurons ab. Je nach Funktion kann ihr Wertebereich sehr unterschiedlich sein. Die Heaviside-Funktion liefert beispielsweise nur 0 oder 1, Sigmoid Werte zwischen 0 und 1, Tanh Werte zwischen −1 und 1 und ReLU Werte zwischen 0 und ∞.
Heaviside und ReLU sind wohl auch deshalb so oft anzutreffen, da sie vergleichsweise wenig Rechenzeit benoetigen. Sigmoid und Tanh sind da deutlich rechenintensiver. Unter welchen Umstaenden sie bessere Ergebnisse liefern, muss ich noch herausfinden.
Heaviside und ReLU sind rechnerisch besonders einfach auszuwerten. Sigmoid und Tanh benötigen dagegen aufwendigere mathematische Operationen.
Persoenliche Analogie: Die Einsatzfrage von H und ReLU gegen sig und tanh erinnert mich so ein wenig an die Daseinsberechtigung der Fuzzy Logic. Damals hat man auch versucht Regelprobleme dadruch besser zu loesen, indem man nicht eine harte 0/1 Schwelle z. B. als Stellgroesze benutzte, sondern auch Werte zwischen 0 und 1 zuliesz. Die Berechnung geschah damals u.a. ressourcenschonend mit Lookup-Tables.
Simpel-Beispiel
Funktionsweise des Neuron (Perzeptron) am Beispiel eines binaeren Eingangs und eines binaeren Ausgangs. Dies ist wohl das simpelste Beispiel, das man finden kann. Es hat aber enormes Anschauungspotenzial.
Aus einer 1 am Eingang (x) folgt am Ausgang (y) eine 1.
Dies ist die logische Aequivalenz. Der erste Gedanke koennte jetzt sein, wozu denn das. Man braucht doch nur den Eingang mit dem Ausgang zu verbinden und ist fertig. Das stimmt, aber dieses binaere Perzeptron bietet eine hervorragende Basis zur Verdeutlichung des Lernvorgangs.
In jeder Klassifizierungsgruppe des Neurons gibt es jeweils nur ein "Mitglied". Das Wertepaar (0,0) und das Paar (1,1).
Die beiden Paare sind in der folgenden Grafik durch die Kreise gekennzeichnet.
Und jetzt kommt was Entscheidendes. Das Neuron macht aus dem Eingangswert mutlipliziert mit dem Gewicht und der Addition des Bias das interne z.
z = w * x + b
Und das kennen viele als Lineare Gleichung. Im Koordinatensystem als Gerade eingezeichnet. In diesem Fall w = 0,5 und b = -0,3. Also eine der vielen Kombinationen aus w und b, die eine korrekte Funktion des Neurons liefert.
Die Heaviside-Funktion macht nun aus dem z eine 1 fuer z >= 0 und eine 0 fuer z < 0.
H(z) = 1 fuer z >= 0 H(z) = 0 fuer z < 0
Heaviside ist in diesem simplen Fall also eine Art Nullstellendetektor fuer die lineare Eingangfunktion.
Die Heaviside-Funktion verwendet die Nullstelle der Netzeingabefunktion als Entscheidungsschwelle. Entscheidend ist nicht der genaue Wert von z, sondern lediglich, ob z < 0 oder z >= 0 ist.
Das heiszt das Perzeptron "beherrscht" seine Aequivalenz solange w die Steigung und b der Ordinatenabschnitt so gewaehlt werden, dass die Funktion/Gerade eine Nullstelle zwischen ]0 und 1] hat.
Fuer die Äquivalenz muss die Netzeingabefunktion z(x)=wx+b bei x=0 negativ und bei x=1 null oder positiv sein. Die Gerade muss die Schwelle z=0 daher zwischen den beiden Eingangswerten schneiden. Folglich benötigt sie eine positive Steigung w>0.
Das bedeutet, dass es fuer w und b beliebig viele Kombination gibt, die diese Bedingung erfuellen. Der Lernalgorithmus muss nur eine davon finden.
Wichtig: Das Training sucht nicht nach einem vorher festgelegten „richtigen“ Gewicht und Bias. Es sucht lediglich eine Kombination aus w und b, welche die Trainingsdaten korrekt trennt. Deshalb können verschiedene Trainingslaeufe zu unterschiedlichen, aber gleichermaszen richtigen Parameterwerten fuehren.
Wenn man schon gerade bei der Aequivalenz ist, dann kann man man auch gleich die Negation hinterherschicken. Das erreicht man ganz einfach durch ein negatives w (und in diesem Fall positivem b) also einer (Entscheidungs-)Geraden mit fallender Steigung;-)
Bei der Negation kehren sich die Verhaeltnisse um. Für x=0 muss z>=0 und fuer x=1 muss z<0 gelten. Die Gerade benoetigt deshalb eine negative Steigung w<0 und muss die Entscheidungsschwelle z=0 zwischen x=0 und x=1 schneiden.
Demonstrator
Zur Verdeutlichung habe ich mal einen Demonstrator bei ChatGPT in Auftrag gegeben. Perception Demonstrator
Im Simulator kann noch die Lernrate eingestellt. Die Lernrate ($ \eta $) bestimmt beim Training eines Perzeptrons, wie stark Gewicht (w) und Bias (b) bei einem Fehler verändert werden.
Beim einfachen Perzeptron kann die Lernregel beispielsweise so geschrieben werden:
$ {\displaystyle w_{\text{neu}}=w_{\text{alt}}+\eta \,(y-{\hat {y}})\,x} $
und für den Bias: $ \displaystyle z=\sum _{i=1}^{n}w_{i}x_{i}+b $ $ b_{\text{neu}}=b_{\text{alt}}+\eta \,(y-{\hat {y}}) $
Dabei ist:
($ \eta $) = Lernrate (y) = gewünschter Ausgang ($ {\hat {y}} $) = tatsaechlich berechneter Ausgang (y-$ {\hat {y}} $) = Fehler (x) = Eingangswert Anschaulich bei deinem Perzeptron
Die Netzeingabefunktion ist
$ {\displaystyle z(x)=wx+b} $
Die Lernrate bestimmt also, wie weit diese Gerade bei einem Trainingsschritt verändert wird. (Delta-Regel)
Bei einem Fehler beeinflusst
$ {\displaystyle \Delta w=\eta (y-{\hat {y}})x} $
die Steigung der Geraden und
$ {\displaystyle \Delta b=\eta (y-{\hat {y}})} $
ihre Verschiebung nach oben oder unten.
Beispiel mit
$ {\displaystyle x=1,\quad y=1,\quad {\hat {y}}=0} $
ist der Fehler
$ {\displaystyle e=y-{\hat {y}}=1.} $
Bei (1):
$ {\displaystyle \Delta w=0{,}1\cdot 1\cdot 1=0{,}1} $
Bei (5):
$ {\displaystyle \Delta w=0{,}5} $
und bei ():
$ {\displaystyle \Delta w=1.} $
Je groeszer die Lernrate, desto groeszer sind also die einzelnen Korrekturschritte.
Für die grafische Darstellung kann man es besonders schoen so formulieren:
Die Lernrate ($ \eta $) bestimmt, wie stark die Netzeingabefunktion (z=wx+b) bei einem Trainingsfehler verschoben bzw. in ihrer Steigung verändert wird.
Ein wichtiger Sonderfall im Beispiel ist (x=0). Dann gilt
$ {\displaystyle \Delta w=\eta e\cdot 0=0.} $
Das Gewicht kann sich also ueberhaupt nicht aendern. Nur der Bias wird angepasst. Bei (x=1) koennen dagegen sowohl Gewicht als auch Bias veraendert werden.
Genau dieser Effekt ist bei dem Aequivalenz-/Negations-Beispiel didaktisch sehr interessant.
Skalierung der Ueberlegung
Ein Neuron laesst sich mit beliebig vielen Eingangen und Ausgaengen beschalten.
Ein einzelnes Perzeptron kann beliebig viele Eingangswerte x_1,...,x_n verarbeiten. Jedem Eingang ist ein eigenes Gewicht w_i zugeordnet. Ein klassisches Perzeptron liefert einen Ausgang. Mehrere Ausgaenge werden durch mehrere Neuronen realisiert. Das w_0 bildet das b.
Ein Perzeptron besitzt typischerweise
x_1,x_2,...,x_n
also mehrere Eingaenge, aber einen skalaren Ausgang.
Die Netzeingabe lautet dann:
z= Σ w_i * x_i + b. # Gelegentlich wird b auch als w_0 mit x_0=1 mit in der Summe aufgefuehrt.
Mehrere Ausgaenge entstehen normalerweise durch mehrere Neuronen.
Ob man mehrere Eingaenge einem Neuron zufuehrt, oder auf mehrere Neuronen aufteilt ist zwar nicht identisch, aber wohl gleichbedeutend.
Mehrere Eingaenge eines einzelnen Neurons duerfen allerdings nicht mit mehreren einzelnen Neuronen verwechselt werden. Ein Neuron verknuepft alle seine Eingaenge zu einer gemeinsamen gewichteten Summe. Mehrere Neuronen erzeugen dagegen mehrere voneinander unabhaengige Netzeingaben und Aktivierungen.
Die Ueberlegungen, mit Hilfe der Geraden, war fuer mein Verstaendnis der Durchbruch. Bei einer Eingangsgroesze ist die Entscheidungsschwelle der Nullpunkt der Geraden. Mit zwei Eingangsgroeszen erhaelt man eine Ebene mit einer Entscheidungsgeraden und mit mehr als 2 erhaelt man eine Hyperebene mit einer Entscheidungsflaeche, usw. Bei 4D versagt aber bei mir die Vorstellungskraft.
Die Betrachtung laesst sich unmittelbar verallgemeinern: Bei einem Eingang ist die Entscheidungsschwelle ein Punkt, bei zwei Eingaengen eine Gerade und bei drei Eingaengen eine Ebene. Allgemein bildet ein Perzeptron mit n Eingaengen eine (n-1)-dimensionale Hyperebene als Entscheidungsgrenze.