Wenn man unterscheiden kann, ob eine Zahl positiv oder negativ ist, dann kann man mit der Funktion
\(f(x) = 2x\)
entscheiden, ob in einem Paar \((a,b)\) aus positiven Zahlen das \(b\) mehr als doppelt so groß wie das \(a\) ist. Dazu berechnet man \(p = b - f(a)\). Wenn \(p > 0\) ist, dann ist \(b\) mehr als doppelt so groß wie \(a\).
Angenommen ich möchte eine Funktion haben, die entscheidet ob in einem Paar \((a,b)\) aus positiven Zahlen das \(b\) mehr als drei mal so groß wie das \(a\) ist. Ich vermute, dass das mit einer Funktion
\(f(x) = mx\)
funktioniert, aber ich weiß nicht welchen Wert für \(m\) ich nehmen soll. Dann kann ich wie folgt vorgehen.
Ich nehme eine Menge \(M\) von Zahlenpaaren (\(a,b)\). Zum Beispiel
\(M = \{(1,5), (2,3), (3,10)\}\).
Zu jedem Zahlenpaar füge ich das gewünschte Ergebnis hinzu.
\(M_E = \{(1,5,\text{ja}), (2,3,\text{nein}), (3,10,\text{ja})\}\).
Dann wähle ich einen Startwert für \(m\), zum Beispiel \(m = 1\)
\(f_1(x) = 1\cdot x\).
Dann füttere ich die Zahlenpaare in die Funktion und vergleiche das gewünschte Ergebnis mit dem tatsächlichen Ergebnis
\(f_1(1) = 1\cdot 1 = 1\implies p = 5 - 1 = 4 > 0\)
Tatsächliches Ergebnis ist \(\text{ja}\)
Gewünschtes Ergebnis war \(\text{ja}\)
\(f_1(2) = 1\cdot 2 = 2\implies p = 3 - 2 = 1 > 0\)
Tatsächliches Ergebnis ist \(\text{ja}\)
Gewünschtes Ergebnis war \(\text{nein}\)
Weil das tatsächliche Ergebnis vom gewünschten Ergebnis abweicht, muss der Parameter \(m\) einen neuen Wert bekommen. Zum Beispiel \(m = 6\)
\(f_2(x) = 6\cdot x\)
\(f_2(3) = 6\cdot 3 = 18\implies p = 10 - 18 = -8 < 0\)
Tatsächliches Ergebnis ist \(\text{nein}\)
Gewünschtes Ergebnis war \(\text{ja}\)
Weil das tatsächliche Ergebnis vom gewünschten Ergebnis abweicht, muss der Parameter \(m\) einen neuen Wert bekommen. Zum Beispiel \(m = \frac{1+6}{2}=\frac{7}{2}\).
\(f_3(x) = \frac{7}{2}\cdot x\)
Und so weiter.
Der Mensch hat bereitgestellt:
Eine Schablone für das Computerprogramm:
\(f(x) = m\cdot x\)
Eine Menge von Trainingsdaten mit gewünschten Ergebnissen:
\(M_E\)
Eine Anfangskonfiguration:
\(m = 1\)
Eine Trainingsfunktion, also ein Verfahren, wie aus einer Abweichung von gewünschten und tatsächlichem Ergebnis eine neue Konfigration berechnet werden kann:
\(m_{n+1} = \frac{m_{n}+m_{n-1}}{2}\)
Die Maschine hat daraus die Funktion
\(f_3(x) = \frac{7}{2}\cdot x\)
"gelernt". Die ist sicherlich noch verbesserungsbedürftig (wir wissen doch beide, dass die korrekte Funktion \(g(x) = 3\cdot x\) lauten müsste). Ich bin aber zuversichtlich, dass das mit mehr Trainigsdaten verbessert werden kann.
Probleme sind:
- Wie muss die Schablone beschaffen sein? Für wirklich sinnvolle Anwendungen reicht ein Parameter nicht aus. GPT-3 hat 175 Milliarden Parameter, GPT-4 voraussichtlich 100 Billionen Parameter.
- Es besteht die Gefahr der Überanpassung. Das heißt, dass zwar die Trainingsdaten korrekt behandelt werden, aber andere Eingabedaten nicht.
- Konvergiert das Trainingsverfahren überhaupt? Oder geht durch die Aktualisierung der Parameter vielleicht bereits gelerntes wieder verloren?
Einen ersten Einblick in Antworten zu diesen Fragen bekommst du in einer Vorlesung über Neuronale Netze.