Policy Gradient und PPO: die Strategie direkt lernen
Eine stochastische Strategie als Netz, REINFORCE und das Policy-Gradient-Theorem, Baseline und Vorteil, Actor-Critic, PPO mit Clipping von Grund auf geschrieben am Pendel auf dem Wagen, was ohne Clipping passiert, und wie PPO Sprachmodelle feinabgestimmt hat.
Serie KI-Grundlagen Teil 49 von 52
- Landkarte der künstlichen Intelligenz: was was ist und wie alles zusammenpasst
- Eine kurze Geschichte der künstlichen Intelligenz: von Turing bis zu Sprachmodellen
- Daten, Modell, Training, Inferenz: die Grundbegriffe an einem einzigen Beispiel
- Mathematische Notation lesen: Symbole, Indizes, Summen und Quantoren
- Mengen und Relationen: der Baukasten, aus dem Definitionen in der KI bestehen
- Funktionen und Abbildungen: warum jedes KI-Modell eine Funktion ist
- Logik und Beweise: die Regeln, nach denen KI schließt
- Graphen und Bäume: die Struktur, auf der Suche und neuronale Netze stehen
- Lineare Algebra für maschinelles Lernen: Vektoren, Matrizen und warum KI vor allem multipliziert
- Ableitungen, Gradient und Kettenregel: wie ein Modell herausfindet, in welche Richtung es lernen soll
- Gradientenabstieg: wie ein Modell lernt
- Was ist Wahrscheinlichkeit: vom Würfelwurf zu den Kolmogorow-Axiomen
- Bedingte Wahrscheinlichkeit und der Satz von Bayes: wie du deine Einschätzung änderst, wenn du etwas Neues erfährst
- Zufallsvariable und Verteilungsfunktion: eine Funktion, die alles über eine Verteilung verrät
- Dichtefunktion und Wahrscheinlichkeitsfunktion: warum eine stetige Zufallsvariable in einem Punkt die Wahrscheinlichkeit null hat
- Erwartungswert, Varianz und Kovarianz: wo eine Verteilung liegt, wie breit sie ist und was womit zusammenhängt
- Überblick über Wahrscheinlichkeitsverteilungen: Bernoulli-, Binomial-, Poisson-, Gleich-, Normal- und Exponentialverteilung
- Gesetz der großen Zahlen und zentraler Grenzwertsatz: Warum sich Durchschnitte so vorhersagbar verhalten
- Statistik und Parameterschätzung: Maximum Likelihood, MAP und Konfidenzintervalle
- Informationstheorie: Entropie, Kreuzentropie und KL-Divergenz — woher Verlustfunktionen kommen
- Zustandsraumsuche: BFS, DFS, UCS und A* mit Animationen
- Spiele und Gegner: Minimax, Alpha-Beta-Suche und Monte Carlo Tree Search
- Constraint Satisfaction: Backtracking, Constraint-Propagierung und AC-3 an Sudoku und einer Karte tschechischer Regionen
- Logik und wissensbasierte Systeme: Vorwärts- und Rückwärtsverkettung, Resolution und Expertensysteme
- Planung: STRIPS, die Blockwelt, Heuristiken aus Relaxierung und Planung in KI-Agenten
- Lokale Suche und simulierte Abkühlung: ein Handlungsreisender durch die tschechischen Regionalhauptstädte
- Genetische Algorithmen: Population, Kreuzung, Mutation und Selektion am Rucksack für die Wanderung
- Evolutionsstrategien und genetische Programmierung: von der 1/5-Erfolgsregel zum Keplerschen Gesetz
- Ameisenkolonieoptimierung: wie eine Pheromonspur einen kurzen Weg findet
- Partikelschwarmoptimierung: Trägheit, eigene Erfahrung und die Erfahrung des Schwarms
- Neuroevolution: Evolution der Gewichte und der Gestalt neuronaler Netze und der Algorithmus NEAT
- Fuzzy-Mengen und Zugehörigkeitsfunktionen: wie man „etwas warm“ aufschreibt
- Fuzzy-Logik und Wahrscheinlichkeit: warum „etwas warm“ nicht „wahrscheinlich warm“ bedeutet
- Fuzzy-Logik: t-Normen, Implikationen und WENN–DANN-Regeln
- Fuzzy-Regelung: Mamdani und Sugeno vom Ventilator bis zum Pendel auf dem Wagen
- Fuzzy-Clustering: der Algorithmus fuzzy c-means und Punkte zwischen den Clustern
- Neuro-Fuzzy-Systeme (ANFIS): Fuzzy-Regeln, die aus Daten lernen
- Markow-Ketten: Übergangsmatrix, stationäre Verteilung und PageRank
- Hidden-Markov-Modelle: der Viterbi-Algorithmus und das unehrliche Kasino
- Bayessche Netze: warum das Gras nass ist und was das für den Rasensprenger bedeutet
- Der Kalman-Filter: wie man aus ungenauen Messungen schätzt, wo ein Auto ist und wie schnell es fährt
- Arten des maschinellen Lernens: überwacht, unüberwacht, halbüberwacht und mehr
- Prompts, Kontext und RAG: wie man einem Modell die richtigen Informationen gibt
- Variational Autoencoder (VAE): neue Bilder aus einem stetigen latenten Raum
- Generative Adversarial Networks (GAN): der Fälscher gegen den Detektiv
- Diffusionsmodelle: wie aus reinem Rauschen ein Bild wird
- Markow-Entscheidungsprozesse: Zustände, Aktionen, Belohnungen und Bellman-Gleichungen
- Q-Learning und DQN: den Wert von Aktionen lernen, von der Tabelle bis zum neuronalen Netz
- Policy Gradient und PPO: die Strategie direkt lernen
- Wie ein KI-Agent funktioniert: ein Sprachmodell in einer Schleife mit Werkzeugen
- Programmieren mit KI-Agenten: Auftrag, Tests und Kontrolle
- Bewertung und Sicherheit von KI-Systemen: wie man misst und wie man überwacht
Der ganze Lehrplan der Serie 52 von 83 Themen fertig
- Wie eine Strategie direkt aus Ergebnissen gelernt wird, ohne Wertetabelle.
- Warum es hilft, eine Baseline abzuziehen, und was der Vorteil ist.
- Warum das Clipping in PPO so wichtig ist und wie es mit RLHF zusammenhängt.
Vorher gut zu wissen: Q-Learning und DQN: den Wert von Aktionen lernen, von der Tabelle bis zum neuronalen Netz, Markow-Entscheidungsprozesse: Zustände, Aktionen, Belohnungen und Bellman-Gleichungen
DQN aus dem letzten Teil lernt, wie gut jede Aktion ist, und die Strategie ergibt sich daraus erst indirekt: Wähle die Aktion mit dem größten Wert. Die zweite große Familie von Methoden geht den direkten Weg: Das Netz bekommt den Zustand und gibt Wahrscheinlichkeiten der Aktionen zurück, und wir verschieben diese Wahrscheinlichkeiten so, dass gute Aktionen häufiger werden. Aus dieser Familie stammt PPO — der Algorithmus, der Robotern das Laufen beibrachte, Profis im Spiel Dota 2 schlug und hinter dem Feintuning von ChatGPT stand. In diesem Teil schreiben wir ihn von Grund auf und vergleichen ihn mit einfacheren Vorgängern.
Er baut auf den Teilen Q-Learning und DQN, Markow-Entscheidungsprozesse und Softmax auf.
1. Direkt die Strategie lernen
Definition — parametrisierte Strategie
Sei (S, A, P, R, γ) ein MDP (Bezeichnungen aus dem Teil Markow-Entscheidungsprozesse) mit einer endlichen Menge von Aktionen A und einer Anfangsverteilung p(s0) auf S, und seien θ ∈ ℝm Parameter. Eine parametrisierte (stochastische) Strategie ist eine Familie von Strategien (πθ)θ ∈ ℝm, wobei für jedes θ und jedes s ∈ S πθ(· | s) eine Wahrscheinlichkeitsverteilung auf A und πθ(a | s) eine differenzierbare Funktion von θ ist. Für endliches A nimmt man ein Netz fθ : S → ℝ|A| und Softmax seiner Ausgaben:
πθ(a | s) = efθ(s)a/∑b ∈ A efθ(s)b;
bei kontinuierlichen Aktionen gibt das Netz etwa Mittelwert und Varianz einer Normalverteilung zurück. Das Ziel ist der erwartete Ertrag als Funktion der Parameter
J : ℝm → ℝ, J(θ) = Eπθ[G0],
und gesucht ist θ mit möglichst großem J(θ) per Gradientenaufstieg θ ← θ + α ∇J(θ) mit Lernrate α > 0 (∇ bezeichnet den Gradienten nach θ).
DQN führt eine Tabelle „wie viele Punkte für welchen Zug“ und spielt den Zug mit den meisten Punkten. Eine Strategie sagt stattdessen direkt: „In dieser Lage schieb mit 70 % nach rechts, mit 30 % nach links.“ Die Vorteile: Es funktioniert auch mit kontinuierlichen Aktionen (mit welcher Kraft, in welchem Winkel), der Zufall ist eingebaut, sodass der Agent von selbst ausprobiert, und eine kleine Änderung der Parameter bedeutet eine kleine Änderung des Verhaltens.
Beispiel — der Ertrag eines Versuchs am Pendel auf dem Wagen
Die Belohnung ist +1 für jeden Schritt und der Diskontfaktor γ = 0,99. Bleiben bis zum Ende der Episode T − t Schritte, ist der Ertrag eine geometrische Reihe:
Gt = 1 + γ + γ² + … + γT−t−1 = 1 − γT−t/1 − γ.
Am Anfang einer Episode, die ganze 500 Schritte durchhält: G0 = 1 − 0,99500/0,01 = 99,34. Zwanzig Schritte vor dem Sturz: G = 1 − 0,9920/0,01 = 18,21. Der Schritt direkt vor dem Sturz: G = 1. Der Ertrag ist also immer positiv und übersteigt nie 1/1 − γ = 100 — das wird im Abschnitt über die Baseline nützlich.
2. REINFORCE: verstärke, was geklappt hat
Definition — Policy-Gradient-Theorem und REINFORCE
Policy-Gradient-Theorem. Sei (S, A, P, R, γ) ein MDP mit endlichen S und A und γ ∈ [0, 1], in dem jede Episode s0, a0, r1, s1, …, sT spätestens nach Tmax Schritten endet (T ≤ Tmax), und sei πθ eine parametrisierte Strategie mit πθ(a | s) > 0 für alle s, a, θ. Dann gilt
∇J(θ) = Eπθ[ ∑t=0T−1 γt ∇ log πθ(at | st) · Gt ], Gt = ∑k=tT−1 γk−t rk+1.
Für γ = 1 verschwindet der Faktor γt, und wir erhalten die Form in der Zerlegung unten. Praktische Implementierungen (auch unsere) lassen ihn auch für γ < 1 weg; dann ist das Ergebnis keine erwartungstreue Schätzung von ∇J(θ) mehr (im Allgemeinen nicht einmal der Gradient irgendeiner Funktion; Chris Nota und Philip Thomas, 2020), weil spätere Schritte der Episode ein größeres Gewicht bekommen, als ihnen laut Satz zusteht — in der Praxis funktioniert es trotzdem gut.
REINFORCE (Ronald Williams, 1992) ist der Algorithmus:
- wähle ein anfängliches θ ∈ ℝm (zufällige Gewichte des Netzes) und eine Lernrate α > 0;
- spiele mit der Strategie πθ Episoden (bei uns zusammen mindestens 2 000 Schritte);
- berechne in jeder Episode von hinten GT = 0 und Gt = rt+1 + γ Gt+1 für t = T − 1, …, 0;
- berechne die Gradientenschätzung ĝ = Mittel der Werte ∇ log πθ(at | st) · Gt über alle gespielten Schritte;
- θ ← θ + α ĝ, verwirf die Daten und fahre mit Schritt 2 fort, bis das Budget an Schritten in der Umgebung aufgebraucht ist.
Für Softmax π = softmax(z) mit den Ausgaben des Netzes z ∈ ℝ|A| ist der Gradient nach z gleich ∇z log πa = 1a − π, wobei 1a der Vektor mit einer Eins an der Stelle der Aktion a und sonst Nullen ist.
Spiel, schau, wie es ausgegangen ist, und mach jeden Zug, den du gemacht hast, ein Stück wahrscheinlicher — umso mehr, je besser es danach ausging. Züge aus gelungenen Partien werden stärker verstärkt als Züge aus misslungenen. Niemand muss sagen, welcher Zug richtig war; das Ergebnis genügt.
∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ]
- ∇J(θ)
- die Richtung, in die man die Parameter drehen muss, damit der mittlere Ertrag am schnellsten wächst; direkt berechnen lässt sie sich nicht, weil der Ertrag von θ nur über das zufällige Spielen und die unbekannte Physik der Umgebung abhängt
- Eπθ[ ∑t … ]
- Mittel über Episoden, die mit der aktuellen Strategie gespielt wurden — deshalb lässt es sich durch ein Mittel über tatsächlich gespielte Partien ersetzen; und deshalb reichen Daten einer anderen Strategie (einer älteren, einer fremden) ohne Korrektur nicht
- ∇ log πθ(at | st)
- die Richtung im Parameterraum, die die gespielte Aktion wahrscheinlicher macht; ∇ log π = ∇π/π teilt durch die Wahrscheinlichkeit, sodass eine häufige Aktion, die in den Daten oft vorkommt, nicht zusätzlich stärker verstärkt wird, nur weil sie häufig ist
- Gt
- das Gewicht: wie gut es nach der Aktion ausging; nur Belohnungen ab Schritt t, weil eine Aktion Belohnungen, die schon gefallen sind, nicht beeinflussen kann
Satz — woher die Formel kommt (der Log-Trick)
Es gelten die Voraussetzungen des Policy-Gradient-Theorems. Eine Episode (Trajektorie) τ = (s0, a0, s1, a1, …, sT) hat unter der Strategie πθ die Wahrscheinlichkeit
Pθ(τ) = p(s0) ∏t=0T−1 πθ(at | st) P(st+1 | st, at)
und sei G(τ) = G0 ihr Ertrag; es gibt endlich viele Trajektorien, also ist J(θ) = ∑τ Pθ(τ) G(τ). Dann gilt
∇J(θ) = ∇ ∑τ Pθ(τ) G(τ) = ∑τ Pθ(τ) · ∇ log Pθ(τ) · G(τ) = Eτ ∼ πθ[ ∇ log Pθ(τ) · G(τ) ],
weil ∇P = P · ∇ log P. Beweis (Skizze): Der Logarithmus macht aus dem Produkt eine Summe, log Pθ(τ) = log p(s0) + ∑t log πθ(at | st) + ∑t log P(st+1 | st, at). Von θ hängt nur die mittlere Summe ab, die Physik der Umgebung P müssen wir also nicht kennen: ∇ log Pθ(τ) = ∑t ∇ log πθ(at | st). Zum Schluss lassen wir bei jedem at die Belohnungen vor Schritt t weg: Sie hängen nicht von at ab, und ihr Beitrag hat deshalb den Erwartungswert null (siehe den Satz im nächsten Abschnitt). Von der Summe ∑k γk rk+1 bleibt so beim Schritt t ∑k ≥ t γk rk+1 = γt Gt übrig, was die Aussage des Policy-Gradient-Theorems ist. ∎
Beispiel — ein Schritt REINFORCE mit Softmax
Zwei Aktionen, Ausgaben des Netzes z = (0; 0), also π = softmax(z) = (0,50; 0,50). Der Agent hat Aktion 1 („nach rechts“) gespielt, und der Ertrag ab diesem Schritt war G = 10. Für Softmax ist ∇z log π(a) = 1a − π, also
∇z log π(1) · G = ((0; 1) − (0,50; 0,50)) · 10 = (−5; 5)
(Farben wie in der Zerlegung der Formel oben; das Ergebnis ist eine Schätzung von ∇J aus einem einzigen Schritt).
Ein Aufstiegsschritt mit α = 0,1: z ← (0; 0) + 0,1 · (−5; 5) = (−0,5; 0,5). Die neue Strategie π = (e−0,5; e0,5)/e−0,5 + e0,5 = (0,269; 0,731). Die Aktion, die geklappt hat, ist jetzt wahrscheinlicher. (In einem echten Netz ändern sich die Gewichte θ, und zu z gelangt der Gradient per Backpropagation; die Richtung ist dieselbe.)
θ = zufällige Gewichte des Strategienetzes
wiederhole:
spiele ganze Episoden mit der Strategie π_θ, bis es mindestens 2 000 Schritte sind
für jede Episode von hinten: # G = 0 nach dem Ende der Episode
G_t = r_(t+1) + γ · G_(t+1)
g = Mittel über alle Schritte ∇ log π_θ(a_t | s_t) · G_t
θ = θ + α · g # Aufstieg; bei uns per Adam-Schritt
verwirf die Daten — beim nächsten Mal stammen sie von einer anderen Strategie
3. Varianz und Baseline
Definition — Baseline und Vorteil
Sei (S, A, P, R, γ) ein MDP und πθ eine parametrisierte Strategie.
- Eine Baseline ist eine beliebige Funktion b : S → ℝ, die nur vom Zustand abhängt, nicht von der Aktion. Die Gradientenschätzung mit Baseline ist ĝ = ∑t ∇ log πθ(at | st) · (Gt − b(st)); nach dem Satz unten hat sie denselben Erwartungswert wie die Schätzung ohne b, nur kann ihre Varianz dadurch deutlich kleiner werden.
- Der Vorteil (advantage) der Strategie π ist die Funktion Aπ : S × A → ℝ, Aπ(s, a) = Qπ(s, a) − Vπ(s), wobei Qπ und Vπ die Wertfunktionen aus dem Teil über MDP sind (der Buchstabe A mit Argumenten bezeichnet hier den Vorteil, nicht die Menge der Aktionen). Die beste übliche Wahl der Baseline ist b = Vπθ, in der Praxis von einem zweiten Netz geschätzt; dann ist Gt − b(st) eine Schätzung des Vorteils.
- Actor-Critic ist eine Methode, die gleichzeitig eine parametrisierte Strategie πθ („Actor“) und eine Schätzung der Wertfunktion V ≈ Vπθ („Critic“) lernt und die Schätzung des Critics in der Schätzung des Policy Gradient verwendet.
Beim Pendel auf dem Wagen bekommt der Agent +1 für jeden Schritt, also ist jeder Ertrag positiv — REINFORCE verstärkt damit jeden Zug, nur manche stärker. Das Signal „das war besser als sonst“ geht im Rauschen unter. Zieht man das erwartete Niveau ab, wird daraus „dieser Zug ging 20 Punkte besser aus, als in dieser Lage zu erwarten war“ — und schlechtere Züge bekommen ein negatives Vorzeichen.
∇J(θ) = E[ ∑t ∇ log πθ(at | st) · (Gt − b(st)) ], A(s, a) = Q(s, a) − V(s)
- ∇ log πθ(at | st)
- die Richtung „die gespielte Aktion öfter“, genau wie bei REINFORCE
- Gt, Q(s, a)
- was nach der Aktion tatsächlich kam (Gt) bzw. wie viel es danach im Mittel bringt (Q ist der Erwartungswert von Gt); für sich genommen fast immer positiv, sodass es eine gute Aktion nicht von einer durchschnittlichen unterscheidet
- b(st), V(s)
- die Messlatte: wie viel man in dieser Lage unabhängig von der Aktion erwartet; nach dem Abziehen bekommen unterdurchschnittliche Aktionen ein negatives Vorzeichen. Sie darf nur vom Zustand abhängen, nicht von der Aktion — sonst würde der Gradient verzerrt (Satz unten)
- A(s, a)
- der Vorteil: um wie viel die Aktion a besser ist als die durchschnittliche Aktion der Strategie in s; genau die Information, die wir verstärken wollen
Satz — die Baseline verzerrt den Gradienten nicht
Sei A eine endliche Menge von Aktionen, πθ eine parametrisierte Strategie mit πθ(a | s) > 0, s ∈ S ein Zustand und b : S → ℝ eine Funktion. Dann gilt
- Ea ∼ πθ(· | s)[∇ log πθ(a | s)] = ∑a ∈ A πθ(a | s) ∇ log πθ(a | s) = 0;
- Ea ∼ πθ(· | s)[∇ log πθ(a | s) · b(s)] = 0.
Das Abziehen von b(st) von Gt ändert also den Erwartungswert der Gradientenschätzung nicht (es genügt, auf den Zustand st zu bedingen).
Beweis: ∑a πθ(a | s) ∇ log πθ(a | s) = ∑a ∇πθ(a | s) = ∇ ∑a πθ(a | s) = ∇1 = 0. Der Term b(s) ist für festes s eine Konstante und lässt sich vor die Summe ziehen. ∎
Beispiel — gleicher Mittelwert, andere Varianz
Ein Zustand, zwei Aktionen mit π = (0,5; 0,5). Aktion 1 bringt den Ertrag 12, Aktion 0 den Ertrag 10 — beides positiv wie beim Wagen. Die Komponente der Gradientenschätzung nach der Ausgabe z1 ist aus einer einzigen Stichprobe (1a=1 − 0,5) · (G − b) (Farben wie in der Formel oben).
Ohne Baseline (b = 0): Fällt Aktion 1, ist die Schätzung 0,5 · 12 = 6; fällt Aktion 0, ist sie −0,5 · 10 = −5. Mittelwert 6 − 5/2 = 0,5, Varianz (6 − 0,5)² + (−5 − 0,5)²/2 = 30,25.
Mit Baseline b = 11 (mittlerer Ertrag): 0,5 · (12 − 11) = 0,5 und −0,5 · (10 − 11) = 0,5. Der Mittelwert ist immer noch 0,5, die Varianz 0.
Der wahre Gradient ist π1(1 − π1) · (12 − 10) = 0,25 · 2 = 0,5. Beide Schätzungen zeigen im Mittel richtig, aber ohne Messlatte liegt eine einzelne Stichprobe um ±5,5 daneben, mit Messlatte gar nicht. In Wirklichkeit fällt die Varianz nicht auf null (die Erträge sind zufällig und es gibt viele Zustände), aber das Prinzip ist dasselbe.
Wir haben es zu Beginn des Lernens gemessen: 40 unabhängige Stapel zu je 1 000 Schritten derselben zufälligen Strategie, aus jedem ein REINFORCE-Gradient. Schon das Abziehen des mittleren Ertrags (eine konstante Baseline) verkleinert die Summe der Varianzen der Gradientenkomponenten von 0,177 auf 0,131, also um 26 %. Ein gelernter Wert V(s), der gute und schlechte Lagen unterscheidet, hilft noch mehr.
Definition — Summe der Varianzen der Gradientenkomponenten
Sei K ≥ 1 (bei uns K = 40) und seien ĝ(1), …, ĝ(K) ∈ ℝm Gradientenschätzungen aus K unabhängigen Stapeln (Vektoren über alle m Gewichte des Netzes). Für j = 1, …, m bezeichne ḡj = 1/K ∑k=1K ĝj(k) das Mittel der j-ten Komponente. Die Summe der Varianzen der Komponenten ist die Zahl
∑j=1m 1/K ∑k=1K (ĝj(k) − ḡj)².
Das ist die Spur der (empirischen) Kovarianzmatrix der Schätzung — eine einzige Zahl dafür, wie stark die Schätzung zittert. Rückgang: 1 − 0,131/0,177 = 0,26, also 26 %.
Ein gelerntes V braucht auch PPO weiter unten. Den Vorteil schätzt es dabei nicht über die Differenz Gt − V(st), sondern über einen Kompromiss zwischen ihr und der Einschrittschätzung aus dem Teil über Q-Learning:
Ât = ∑l≥0 (γλ)l δt+l, δt = rt+1 + γ V(st+1) − V(st)
- Ât
- die Schätzung des Vorteils von Schritt t (GAE, John Schulman u. a., 2015) — das, womit ∇ log π multipliziert wird
- δt
- TD-Fehler: um wie viel ein einzelner Schritt besser ausging, als V erwartet hatte; eine Einschrittschätzung des Vorteils mit kleiner Varianz, aber verzerrt, wenn V sich irrt
- rt+1
- die Belohnung, die tatsächlich kam — das einzige Stück Wirklichkeit in δ
- V(s)
- die gelernte Messlatte; in st+1 ersetzt sie den Rest des Ertrags durch eine Schätzung, in st wird sie als Baseline abgezogen (nach einem Sturz ist V(st+1) = 0)
- (γλ)l
- wie schnell entferntere Schritte vergessen werden. λ = 0 ergibt nur δt; λ = 1 ergibt nach dem Summieren (die V-Terme heben sich gegenseitig auf) genau Gt − V(st) — unverzerrt, aber mit großer Varianz. Wir haben λ = 0,95
4. PPO: kleine, sichere Schritte
REINFORCE hat noch eine Schwäche: Jede gespielte Erfahrung nutzt es nur für einen einzigen Gradientenschritt und wirft sie dann weg. Würden wir auf denselben Daten mehr Schritte machen, könnte sich die Strategie von derjenigen entfernen, die die Daten gesammelt hat, und die Gradientenschätzung würde nicht mehr gelten — das Lernen bricht zusammen. PPO passt darauf auf.
Definition — Proximal Policy Optimization (PPO)
Sei πθ eine parametrisierte Strategie, V : S → ℝ eine gelernte Schätzung der Wertfunktion (Critic), ε > 0 (typischerweise ε = 0,2), γ ∈ [0, 1] und λ ∈ [0, 1]. Für x ∈ ℝ bezeichne clip(x, 1 − ε, 1 + ε) = min(max(x, 1 − ε), 1 + ε) die Zahl x, eingeklemmt in das Intervall [1 − ε, 1 + ε]. PPO (Proximal Policy Optimization; John Schulman u. a., OpenAI, 2017) wiederholt diese Schritte:
- Setze θold = θ, πold = πθold und sammle mit dieser Strategie einen Stapel von Schritten (st, at, rt+1, st+1).
- Berechne für jeden Schritt den TD-Fehler δt = rt+1 + γ V(st+1) − V(st) (nach einem Sturz V(st+1) = 0) und die Schätzung des Vorteils mit der Methode GAE (generalized advantage estimation) Ât = ∑l≥0 (γλ)l δt+l, wobei die Summe mit dem Ende der Episode endet.
- Maximiere einige Epochen lang (bei uns 10) mit Gradientenschritten bezüglich θ das geclippte Ziel L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ], rt(θ) = πθ(at | st)/πold(at | st), wobei Et das Mittel über die Schritte des Stapels (Minibatches) ist und rt(θ) das Wahrscheinlichkeitsverhältnis (nicht mit der Belohnung rt+1 verwechseln); lerne zugleich den Critic V durch Verkleinern des Mittels von (V(st) − yt)², wobei yt = Ât + Vold(st) das in Schritt 2 aus den Werten des Critics vor dem Lernen berechnete Ziel ist.
- Verwirf den Stapel und fahre mit Schritt 1 fort, bis das Budget an Schritten in der Umgebung aufgebraucht ist.
Sobald sich die Wahrscheinlichkeit einer Aktion um mehr als den Faktor 1 ± ε in die Richtung ändert, die das Ziel verbessert, verschwindet der Gradient aus dieser Stichprobe.
Der Trainer sagt nach dem Spiel: „Mach das öfter.“ Der Spieler wiederholt es im Training — aber nur so lange, bis er es um ein Fünftel öfter macht als vorher. Weiter lernt er nicht, bis er das nächste Spiel gespielt und herausgefunden hat, ob es immer noch funktioniert. Schritte groß genug, um schnell besser zu werden, klein genug, um nicht durchzudrehen.
L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ]
- L(θ)
- das Ersatzziel, das einige Epochen lang auf dem alten Stapel maximiert wird; sein Gradient in θ = θold ist genau der Policy Gradient aus REINFORCE mit Vorteil
- rt(θ) = πθ/πold
- das Verhältnis der neuen und der alten Wahrscheinlichkeit der gespielten Aktion. Die Daten hat die alte Strategie gesammelt; durch Multiplizieren mit dem Verhältnis lässt sich aus ihnen schätzen, wie sich die neue schlagen würde (Importance Sampling). Am Anfang ist r = 1
- Ât
- der Vorteil aus GAE: Das Vorzeichen sagt, ob die Aktion verstärkt (+) oder unterdrückt (−) werden soll
- clip(r, 1 − ε, 1 + ε)
- das Verhältnis, in einen Bereich eingeklemmt (im Diagramm grün); außerhalb des Bereichs ist es konstant, sodass von dort kein Gradient kommt — mit dieser Stichprobe lässt sich die Strategie nicht weiter schieben
- min
- von zwei Schätzungen die schlechtere (pessimistische): Das Clipping gilt nur dort, wo eine Verbesserung verdächtig gut aussähe. Hat sich die Aktion dagegen verschlechtert, lässt min den ungeclippten Term stehen und korrigiert den Fehler
Beispiel — drei Stichproben und Clipping mit ε = 0,2
Die alte Strategie gab der gespielten Aktion die Wahrscheinlichkeit 0,5. Nach einigen Lernschritten ist es 0,65, also r = 0,65/0,5 = 1,3 und clip(1,3; 0,8; 1,2) = 1,2 (Farben wie in der Zerlegung des geclippten Ziels oben).
Vorteil +2: min(1,3 · 2; 1,2 · 2) = min(2,6; 2,4) = 2,4. Gewonnen hat der geclippte Term, der nicht von θ abhängt — der Gradient aus dieser Stichprobe ist null. Die Aktion ist schon um 30 % häufiger, mehr nicht.
Vorteil −2 (dasselbe Verhältnis): min(1,3 · (−2); 1,2 · (−2)) = min(−2,6; −2,4) = −2,6. Gewonnen hat der ungeclippte Term: Die Strategie hat versehentlich eine schlechte Aktion wahrscheinlicher gemacht, und der Gradient zieht sie deshalb weiter zurück.
Vorteil +2, aber die Wahrscheinlichkeit ist auf 0,35 gefallen: r = 0,35/0,5 = 0,7, min(0,7 · 2 = 1,4; 0,8 · 2 = 1,6) = 1,4. Wieder der ungeclippte Term — eine gute Aktion, die die Strategie unterdrückt hat, kommt zurück. Das Clipping bremst nur Schritte, die das Ziel „zu sehr“ verbessern würden.
wiederhole:
π_old = π_θ; sammle 2 000 Schritte mit der Strategie π_old, speichere π_old(a_t | s_t)
für jede Episode von hinten: # V(s_(t+1)) = 0 nach einem Sturz
δ_t = r_(t+1) + γ · V(s_(t+1)) − V(s_t)
Â_t = δ_t + γλ · Â_(t+1) # GAE, γ = 0,99, λ = 0,95
ziel_t = Â_t + V(s_t); normalisiere  auf Mittelwert 0 und Varianz 1
10-mal (Epoche):
mische die Schritte und teile sie in Minibatches zu 100
für jeden Minibatch:
r_t = π_θ(a_t | s_t) / π_old(a_t | s_t)
θ: Schritt aufwärts auf dem Mittel von min(r_t · Â_t, clip(r_t, 0,8, 1,2) · Â_t)
V: Schritt abwärts auf dem Mittel von (V(s_t) − ziel_t)²
5. Experiment: Pendel auf dem Wagen
Dasselbe Pendel auf dem Wagen wie bei DQN, Belohnung +1 für jeden Schritt, die Episode endet mit einem Sturz oder nach 500 Schritten. Die Strategie ist ein Netz 4 → 32 → 32 → 2 mit Softmax, der Zustandswert ein zweites Netz derselben Form. Alle vier Methoden bekommen 100 000 Schritte in der Umgebung, in Stapeln zu 2 000. REINFORCE macht auf einem Stapel einen Gradientenschritt, PPO zehn Epochen mit Minibatches zu 100. Die Variante „ohne Clipping“ ist PPO, bei dem wir das Clipping abgeschaltet haben.
| Methode | wann zuerst Mittel ≥ 475 (Lauf 1 · 2 · 3) | am Ende (Lauf 1 · 2 · 3) |
|---|---|---|
| REINFORCE | — · — · — | 463 · 333 · 348 |
| REINFORCE mit Baseline | 90 000 · 80 000 · — | 488 · 500 · 404 |
| PPO | 30 000 · 20 000 · 20 000 | 500 · 500 · 500 |
| PPO ohne Clipping | 100 000 · 30 000 · 50 000 | 494 · 44 · 500 |
PPO hält den Stab in allen drei Läufen ganze 500 Schritte schon nach 30 000, 20 000, 20 000 Schritten und lässt nicht mehr los. REINFORCE verbessert sich langsam und schafft es bis zum Ende nicht; mit Baseline ist es etwas schneller und erreicht das Ziel in zwei von drei Läufen. Achtung, der Vergleich ist bei der Zahl der Berechnungen nicht ganz fair: PPO macht auf jedem Stapel zehnmal mehr Gradientenschritte. Fair ist er aber bei dem, was beim bestärkenden Lernen am meisten zählt — der Zahl der Erfahrungen, die der Agent in der Welt sammeln muss.
Und was passiert, wenn wir dasselbe wiederholte Lernen auf einem Stapel ohne Clipping laufen lassen? Die Episodenlängen springen auf und ab, Lauf 2 endete bei 44 Schritten. Warum, zeigt, wie weit sich die Strategie bei einer einzigen Aktualisierung von derjenigen entfernt, die die Daten gesammelt hat:
Bei PPO ist der mittlere Abstand 0,014 Nat und übersteigt nie 0,06. Ohne Clipping sind es im Mittel 5,5 und gelegentlich bis zu 25 Nat — die Strategie macht nach einer einzigen Aktualisierung etwas völlig anderes als die, aus der sie gelernt hat. Die Daten sagen dann nichts über sie aus, und eine Verbesserung ist Glückssache. Das Clipping ist eine kleine Änderung in der Formel, macht aber aus einem instabilen Algorithmus einen zuverlässigen.
Definition — KL-Schätzung zwischen alter und neuer Strategie
Seien πold und πθ Strategien auf einer endlichen Menge von Aktionen A mit πθ(a | s) > 0, und seien (si, ai), i = 1, …, N, die Schritte eines mit der Strategie πold gesammelten Stapels. Die KL-Divergenz aus dem Teil über Informationstheorie, hier mit dem natürlichen Logarithmus (Einheit Nat; 1 Nat = 1/ln 2 ≈ 1,44 Bit), gemittelt über die Zustände, die die alte Strategie besucht, ist
DKL(πold ‖ πθ) = Es[ ∑a ∈ A πold(a | s) log πold(a | s)/πθ(a | s) ] = Es, a ∼ πold[ log πold(a | s) − log πθ(a | s) ]
und ihre Schätzung aus dem Stapel ist
D̂ = 1/N ∑i=1N [ log πold(ai | si) − log πθ(ai | si) ].
Die Aktionen ai hat die alte Strategie gespielt, also ist das Mittel über den Stapel eine erwartungstreue Schätzung. Es ist der mittlere Logarithmus des Verhältnisses, und damit ist e−D̂ das geometrische Mittel des Verhältnisses πθ/πold über die gesammelten Aktionen.
Was das in Zahlen heißt: bei PPO höchstens 0,06 Nat, e−0,06 = 0,94 — Aktionen aus dem alten Stapel sind typischerweise um ein paar Prozent weniger wahrscheinlich, die Daten sagen über die neue Strategie immer noch etwas aus. Ohne Clipping bis zu 24,9 Nat: e−24,9 ≈ 1,5 · 10−11, die neue Strategie würde die Aktionen, aus denen sie gerade gelernt hat, fast nie spielen.
6. PPO und Sprachmodelle
Im Teil über RLHF haben wir erwähnt, dass InstructGPT und das erste ChatGPT mit bestärkendem Lernen feinabgestimmt wurden. Es war genau PPO: Die Strategie ist das Sprachmodell, der Zustand der bisherige Text, die Aktion das nächste Token, und die Belohnung am Ende der Antwort gibt ein Belohnungsmodell, das aus menschlichen Präferenzen gelernt wurde. Die Strafe für das Entfernen vom Ausgangsmodell (KL) spielt dieselbe Rolle wie das Clipping — sie lässt die Strategie nicht dorthin entwischen, wo man der Belohnung nicht trauen kann.
Definition — Belohnung beim Feintuning eines Sprachmodells mit PPO
Sei x eine Anfrage und y = (y1, …, yn) eine Antwort (Folgen von Tokens), erzeugt vom feinabgestimmten Sprachmodell πθ, wobei πθ(y | x) = ∏k=1n πθ(yk | x, y1, …, yk−1). Sei rφ(x, y) ∈ ℝ die Ausgabe des Belohnungsmodells, πref das eingefrorene Modell nach dem Feintuning an Beispielen (SFT) und β > 0 die Stärke der Strafe. PPO bekommt dann die Belohnung
R(x, y) = rφ(x, y) − β · log πθ(y | x)/πref(y | x)
(so schreibt es InstructGPT, Long Ouyang u. a., 2022). Der Erwartungswert des zweiten Terms über die Antworten ist genau β · DKL(πθ ‖ πref). Eine Episode ist eine Antwort, Aktionen sind Tokens, die Belohnung rφ kommt erst nach dem letzten Token; der Rest ist PPO, wie es oben beschrieben ist.
Bei großen Modellen ist PPO aber teuer: Es braucht neben dem Modell auch ein gleich großes Wertnetz. Deshalb entstanden Vereinfachungen. DPO aus dem Teil über RLHF umgeht das bestärkende Lernen ganz. GRPO (DeepSeek, 2024) lässt das Wertnetz weg und nimmt als Baseline die mittlere Belohnung mehrerer Antworten auf dieselbe Frage — genau die konstante Baseline, die wir oben gemessen haben. So lernen Modelle, die über Mathematik und Code „nachdenken“, wo sich die Richtigkeit einer Antwort überprüfen lässt.
Âi = ri − Mittel(r1, …, rG)/sd(r1, …, rG)
- Âi
- der Vorteil der i-ten Antwort; ihn bekommen alle ihre Tokens, und er geht weiter in das geclippte Ziel von PPO
- ri
- die Belohnung der i-ten von G Antworten auf dieselbe Frage, etwa 1 = Ergebnis stimmt, 0 = stimmt nicht
- Mittel(…)
- die Baseline anstelle des Wertnetzes: wie gut das Modell diese Frage gewöhnlich beantwortet — eine leichte Frage hat eine hohe Messlatte, eine schwere eine niedrige
- sd(…)
- die Standardabweichung der Gruppe, sd(r1, …, rG) = √∑i=1G (ri − r̄)²/G, wobei r̄ der Mittelwert ist; sie gleicht den Maßstab an, damit Fragen mit großer und kleiner Streuung der Belohnungen gleich stark ziehen (wie die Normalisierung der Vorteile in unserem PPO)
Beispiel — GRPO-Vorteile für vier Antworten
Das Modell beantwortet eine Aufgabe viermal, richtig nur beim ersten Mal: Belohnungen (1; 0; 0; 0). Mittelwert 0,25, Standardabweichung √0,75² + 3 · 0,25²/4 = √0,1875 = 0,433.
Vorteile (Farben wie in der Formel oben): 1 − 0,25/0,433 = 1,732 für die richtige Antwort und 0 − 0,25/0,433 = −0,577 für jede der drei falschen. Die Summe ist null: Die richtige wird verstärkt, die falschen unterdrückt. Wären alle vier Antworten richtig (oder alle falsch), wären alle Vorteile null und die Frage brächte nichts bei — gelernt wird nur aus Fragen, bei denen das Modell manchmal trifft und manchmal nicht. (Wir teilen durch G; manche Implementierungen teilen durch G − 1, die Zahlen weichen dann leicht ab.)
7. Zusammenfassung
- Policy Gradient lernt direkt die Wahrscheinlichkeiten der Aktionen; es funktioniert auch für kontinuierliche Aktionen und probiert von selbst aus.
- REINFORCE verstärkt Aktionen proportional zum Ertrag, der nach ihnen kam; es ist einfach, aber die Gradientenschätzung hat eine große Varianz.
- Das Abziehen einer Baseline verkleinert die Varianz, ohne den Erwartungswert zu ändern (bei uns schon mit einer Konstante um 26 %); mit einem gelernten V(s) entsteht Actor-Critic.
- PPO nutzt jeden Stapel mehrmals und hält die Strategie durch Clipping des Wahrscheinlichkeitsverhältnisses nahe an der, die die Daten gesammelt hat.
- Beim Pendel auf dem Wagen: PPO schafft 500 Schritte nach 20–30 Tausend Schritten in allen Läufen; ohne Clipping entfernt sich die Strategie um bis zu 25 Nat und das Lernen schwankt.
- PPO hat das erste ChatGPT feinabgestimmt; seine Vereinfachung (GRPO) trainiert heute „nachdenkende“ Modelle.
Willst du es selbst ausprobieren? Lass einen KI-Agenten PPO aus der Bibliothek Stable-Baselines3 auf der Umgebung LunarLander laufen und ε beim Clipping ändern (0,05; 0,2; 0,5) — und zeichnen, wie sich Geschwindigkeit und Stabilität des Lernens ändern.
Siehst du das anders? Schreib an support@coden-app.com.