🎲
Lektion 6 · Praxis

Inferenz & Temperatur

Token für Token ziehen – so entstehen neue Namen (und Halluzinationen)

Tempo
1 / 17
Vorbereitung Daten Forward Verlust Backward Update Sampling Ergebnis

📜Quelltext

Zeile 1
1temperature = 0.5 # in (0, 1]: "Kreativitaet" von niedrig bis hoch
2for sample_idx in range(20):
3 keys, values = [[] for _ in range(n_layer)], [[] for _ in range(n_layer)]
4 token_id = BOS
5 sample = []
6 for pos_id in range(block_size):
7 logits = gpt(token_id, pos_id, keys, values)
8 probs = softmax([l / temperature for l in logits])
9 token_id = random.choices(range(vocab_size), weights=[p.data for p in probs])[0]
10 if token_id == BOS:
11 break
12 sample.append(uchars[token_id])
13 print(f"sample {sample_idx+1:2d}: {''.join(sample)}")

🖥️Konsole (stdout)

— noch keine Ausgabe —

🔎Variablen (locals)

🟡 = geändert
  • temperaturefloat
    0.5
🧰 VorbereitungZeile 1

Inferenz: neue Namen „halluzinieren“

Nach dem Training werden die Parameter eingefroren. Jetzt läuft nur noch der Forward-Pass in einer Schleife: Das Modell sagt eine Verteilung voraus, wir ziehen ein Token daraus, hängen es an und füttern es als nächste Eingabe zurück. Genau so antwortet auch ChatGPT – Token für Token.

🎬Visualisierung

🎲

Vorhersagen – ziehen – zurückfüttern

  • 1Start mit BOS: „beginne einen neuen Namen“
  • 227 Logits → durch Temperatur teilen → Softmax
  • 3Zufällig gemäß Wahrscheinlichkeit ziehen
  • 4Ende, sobald das Modell BOS zieht