🎲
Lektion 6 · Praxis
Inferenz & Temperatur
Token für Token ziehen – so entstehen neue Namen (und Halluzinationen)
Tempo1 / 17
Vorbereitung Daten Forward Verlust Backward Update Sampling Ergebnis
📜Quelltext
Zeile 11➤temperature = 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- temperaturefloat0.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