Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Sampling, Temperatur und Top-k

Nach dieser Lektion: Ich kann das nächste Token mit Greedy-Decoding, Temperatur und Top-k wählen.

Lektion, 55 Min.1 BefehlJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

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

BegriffWas er bedeutetBeispiel
Greedy-Decodingimmer das wahrscheinlichste Token nehmen
Samplingein Token zufällig nach seiner Wahrscheinlichkeit ziehen
Temperatureine Zahl, durch die man die Scores vor Softmax teilt0,5
Top-knur die k wahrscheinlichsten Tokens behaltenk = 2
Startwerteine Anfangszahl, mit der sich Zufallsziehungen wiederholen
Promptder 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 WortScoree hoch ScoreWahrscheinlichkeit
spät320,090,644
voll27,390,237
hier12,720,087
blau01,000,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 WortTemperatur 0,5Temperatur 1Temperatur 2
spät0,8650,6440,455
voll0,1170,2370,276
hier0,0160,0870,167
blau0,0020,0320,102

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Tausend Ziehungen bei zwei Temperaturen

Befehl
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 WortWahrscheinlichkeitBehalten?Neu verteilt
spät0,644ja0,644 / 0,881 = 0,731
voll0,237ja0,237 / 0,881 = 0,269
hier0,087nein0
blau0,032nein0

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Mit Temperatur und Startwert ziehen

Code: python
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.

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.