Warum dieselbe Frage eine andere Antwort bekommt
Sampling ist die Art, wie ein Sprachmodell sein nächstes Token aus seinen Wahrscheinlichkeiten zieht. Temperatur und Top-k sind die Einstellungen, die diese Wahl formen. Sie sind der Grund, warum derselbe Prompt jedes Mal anderen Text liefern kann.
Die Zahlen des Modells ändern sich zwischen zwei Antworten nicht. Nur die Wahl ändert sich.
Am Ende dieser Lektion
Notiz
Ich kann das nächste Token mit Greedy-Decoding, Temperatur und Top-k wählen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Greedy-Decoding | immer das wahrscheinlichste Token nehmen | |
| Sampling | ein Token zufällig nach seiner Wahrscheinlichkeit ziehen | |
| Temperatur | eine Zahl, durch die man die Scores vor Softmax teilt | 0,5 |
| Top-k | nur die k wahrscheinlichsten Tokens behalten | k = 2 |
| Startwert | eine Anfangszahl, mit der sich Zufallsziehungen wiederholen | |
| Prompt | der Text, den das Modell fortsetzt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Greedy-Decoding nimmt immer das oberste Token
Nach „Der Zug ist“ gibt unser erfundenes Modell Scores für vier nächste Wörter. Softmax macht daraus Wahrscheinlichkeiten.
Greedy-Decoding nimmt immer das wahrscheinlichste Token, hier spät. Es liefert jedes Mal denselben Text. Bei langen Texten wiederholt es sich oft, weil der wahrscheinlichste nächste Schritt an dieselbe Stelle zurückführen kann.
Durchgerechnetes Beispiel: von Scores zu Wahrscheinlichkeiten
| Nächstes Wort | Score | e hoch Score | Wahrscheinlichkeit |
|---|---|---|---|
| spät | 3 | 20,09 | 0,644 |
| voll | 2 | 7,39 | 0,237 |
| hier | 1 | 2,72 | 0,087 |
| blau | 0 | 1,00 | 0,032 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Temperatur schärft oder glättet die Wahl
Sampling zieht ein Token zufällig, jedes mit seiner Wahrscheinlichkeit. So kommt spät etwa 64-mal in 100 Ziehungen heraus und blau etwa 3-mal.
Die Temperatur ändert diese Chancen vorher. Teilen Sie jeden Score durch sie und wenden Sie dann Softmax an. Unter 1 wird das oberste Token noch wahrscheinlicher. Über 1 gleichen sich die Chancen an, und seltenere Wörter erscheinen öfter.
Durchgerechnetes Beispiel: drei Temperaturen
| Nächstes Wort | Temperatur 0,5 | Temperatur 1 | Temperatur 2 |
|---|---|---|---|
| spät | 0,865 | 0,644 | 0,455 |
| voll | 0,117 | 0,237 | 0,276 |
| hier | 0,016 | 0,087 | 0,167 |
| blau | 0,002 | 0,032 | 0,102 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Tausend Ziehungen bei zwei Temperaturen
docker exec jupyter python3 -c "import numpy as np; s = np.array([3, 2, 1, 0]); print([np.bincount(np.random.default_rng(7).choice(4, size=1000, p=np.exp(s / t) / np.exp(s / t).sum()), minlength=4).tolist() for t in (1.0, 0.5)])"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Top-k und der Startwert
Top-k behält nur die k wahrscheinlichsten Tokens und verteilt ihre Chancen neu, sodass sie wieder 1 ergeben. Mit k = 2 können hier und blau nie erscheinen.
Eine Zufallsziehung beginnt mit einem Startwert. Derselbe Startwert liefert dieselben Ziehungen, ein neuer liefert neue. Darum kann ein Prompt verschiedenen Text liefern, und darum wiederholt sich ein Test mit festem Startwert.
Durchgerechnetes Beispiel: Top 2 bei Temperatur 1
| Nächstes Wort | Wahrscheinlichkeit | Behalten? | Neu verteilt |
|---|---|---|---|
| spät | 0,644 | ja | 0,644 / 0,881 = 0,731 |
| voll | 0,237 | ja | 0,237 / 0,881 = 0,269 |
| hier | 0,087 | nein | 0 |
| blau | 0,032 | nein | 0 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Mit Temperatur und Startwert ziehen
import math
import random
woerter = ["spät", "voll", "hier", "blau"]
scores = [3, 2, 1, 0] # die Scores des Modells nach "Der Zug ist"
temperatur = 1.0
startwert = 1
potenzen = []
for s in scores:
potenzen.append(math.exp(s / temperatur))
summe = sum(potenzen)
wahrsch = []
gerundet = []
for p in potenzen:
wahrsch.append(p / summe)
gerundet.append(round(p / summe, 3))
print("Wahrscheinlichkeiten:", gerundet)
random.seed(startwert)
ziehungen = random.choices(woerter, weights=wahrsch, k=8)
print("acht Ziehungen:", ziehungen)
# Ändern Sie startwert in 2 und starten Sie erneut: andere Ziehungen, gleiche Wahrscheinlichkeiten.
# Setzen Sie dann temperatur auf 0.3. Was passiert mit den Ziehungen?
Ein häufiger Fehler
Warnung
Viele denken, ein Modell gebe eine neue Antwort, weil es seine Meinung geändert oder von ihnen gelernt hat. Seine Zahlen sind dieselben. Der Unterschied kommt aus der Zufallsziehung, also liefern ein fester Startwert und dieselben Einstellungen denselben Text.