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

Ein winziges Sprachmodell trainieren

Nach dieser Lektion: Ich kann ein winziges Modell trainieren, das das nächste Zeichen vorhersagt, und seinen Verlust lesen.

Lektion, 70 Min.2 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Lernen, den nächsten Buchstaben zu raten

Ein Sprachmodell lernt durch die Vorhersage des nächsten Tokens. Es rät das nächste Token, sieht das richtige und schubst seine Zahlen, damit es besser rät. Diese eine Schleife, über riesige Textmengen wiederholt, ist das ganze Training.

Hier trainieren Sie ein winziges Modell in wenigen Sekunden auf einer kurzen Zeile und sehen, wie seine Vermutungen besser werden.

Am Ende dieser Lektion

Notiz

Ich kann ein winziges Modell trainieren, das das nächste Zeichen vorhersagt, und seinen Verlust lesen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Vorhersage des nächsten Tokensraten, welches Token als Nächstes kommt
Zieldas Token, das wirklich als Nächstes kommte nach s
Wahrscheinlichkeitder Anteil, den ein Modell einem Token gibt, von 0 bis 1
Verlustwie überrascht das Modell vom Ziel war
Trainingsschrittein kleiner Schubs für jeden Score
Lernratewie groß jeder Schubs ist2,0

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

Jede Stelle eines Textes ist eine Frage

Nehmen Sie die Zeile „see seerose rose see“ aus Lektion 1. An jeder Stelle lautet die Frage: Was kommt als Nächstes? Die Antwort, das Ziel, ist das nächste Zeichen im Text.

So ergeben 20 Zeichen 19 Fragen, ganz ohne Beschriften von Hand. Darum kann ein Modell aus jedem beliebigen Text lernen.

Durchgerechnetes Beispiel: die ersten sechs Fragen

StelleDieses TokenZiel
0se
1ee
2eLeerzeichen
3Leerzeichens
4se
5ee

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

Unser Modell schaut ein Token zurück

Unser winziges Modell ist eine Tabelle von Scores, mit einer Zeile für jedes Token und einer Spalte für jedes mögliche nächste Token. Softmax macht aus einer Zeile Wahrscheinlichkeiten. Fünf Zeichen ergeben eine Tabelle mit 25 Scores.

Dieses Modell sieht nur das Token direkt davor. Ein Transformer sieht durch maskierte Attention jedes frühere Token. Trainiert wird er auf dieselbe Weise.

Der Verlust misst die Überraschung

Der Verlust für eine Frage ist minus der Logarithmus der Wahrscheinlichkeit, die das Modell dem Ziel gab. Eine sichere, richtige Vermutung kostet fast nichts. Eine kleine Wahrscheinlichkeit auf dem Ziel kostet viel.

Am Anfang ist jeder Score 0, also bekommt jedes der 5 Zeichen 0,2. Der Verlust ist dann bei jeder Frage 1,61.

Durchgerechnetes Beispiel: Wahrscheinlichkeit auf dem Ziel und Verlust

Wahrscheinlichkeit auf dem ZielVerlust
1,00
0,90,11
0,50,69
0,21,61
0,12,30

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

Ein Trainingsschritt schubst die Scores

Schauen Sie bei jeder Frage auf die Zeile dieses Tokens. Jeder Score darin sinkt um seine Wahrscheinlichkeit. Der Score des Ziels steigt zusätzlich um 1.

Addieren Sie diese Schubse über alle 19 Fragen und teilen Sie durch 19. Multiplizieren Sie mit der Lernrate und wenden Sie sie an. Das ist ein Trainingsschritt. Wiederholen Sie ihn, und der Verlust fällt.

Das winzige Modell 50 Schritte trainieren

Code: python
import math
text = "see seerose rose see"
zeichen = [" ", "e", "o", "r", "s"]   # das Vokabular, 5 Zeichen
tabelle = []                         # jeder Score beginnt bei 0
for i in range(5):
    tabelle.append([0.0] * 5)
rate = 2.0
for schritt in range(51):
    schubs = []
    for i in range(5):
        schubs.append([0.0] * 5)
    verlust = 0
    for k in range(19):              # 19 Paare: dieses Token und das nächste
        a = zeichen.index(text[k])
        b = zeichen.index(text[k + 1])
        summe = 0
        for s in tabelle[a]:
            summe = summe + math.exp(s)
        for j in range(5):
            p = math.exp(tabelle[a][j]) / summe
            schubs[a][j] = schubs[a][j] + p
            if j == b:
                schubs[a][j] = schubs[a][j] - 1
                verlust = verlust - math.log(p)
    if schritt % 10 == 0:
        print("Schritt", schritt, "Verlust", round(verlust / 19, 3))
    for a in range(5):
        for j in range(5):
            tabelle[a][j] = tabelle[a][j] - rate * schubs[a][j] / 19
# Ändern Sie rate in 0.5 und starten Sie erneut. Fällt der Verlust schneller oder langsamer?

Durchgerechnetes Beispiel: der Verlust im Lauf des Trainings

Schritt01020304050
Verlust1,6090,7500,6130,5640,5390,525

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

Ein häufiger Fehler

Warnung

Viele denken, ein Modell speichere die gelesenen Sätze und schlage sie nach. Unseres speichert 25 Scores und keinen Text. Es hat gelernt, dass auf s hier immer e folgt. Ein Modell hält Muster in Zahlen fest, und darum kann es sich auch sicher irren.

Das Trainingsskript ins Lab schreiben

Befehl
docker exec jupyter sh -c "printf '%s\n' 'import numpy as np' 'text = \"see seerose rose see\"' 'zeichen = sorted(set(text))' 'ids = np.array([zeichen.index(z) for z in text])' 'x, y = ids[:-1], ids[1:]' 'W = np.random.default_rng(0).normal(0, 0.1, (5, 5))' 'for schritt in range(101):' '    p = np.exp(W[x]) / np.exp(W[x]).sum(axis=1, keepdims=True)' '    if schritt % 25 == 0:' '        print(\"Schritt\", schritt, \"Verlust\", round(-np.log(p[np.arange(19), y]).mean(), 3))' '    p[np.arange(19), y] -= 1' '    np.add.at(W, x, -2.0 * p / 19)' 'p = np.exp(W[1]) / np.exp(W[1]).sum()' 'print(\"nach e:\", dict(zip(zeichen, p.round(2).tolist())))' > steps/tiny.py"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Mit Zufallsscores und Startwert trainieren

Befehl
docker exec jupyter python3 steps/tiny.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ü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.