Yakınlık Politikası Optimize (PPO)
Type: Build
Languages: Python
Prerequisites: Phase 9 · 06 (REINFORCE), Phase 9 · 07 (Actor-Critic)
Time: ~75 minutes
Sorun
A2C (Desin 07) politikada: gradient E_{π_θ}[A · ∇ log π_θ]kurrent'den örnek alınan verileri gerektirir.π_θBir güncellemesi yapın veπ_θBu değişiklikler, kullandığınız veriler artık politika dışı.
Atari'de 8 envs × 128 adım boyunca bir rolü = 1024 geçiş ve bir düzine saniye çevre zamanı.
Güven Bölgesi Politikası Optimize edilmesi (TRPO, Schulman 2015) ilk çözümdür: her güncellemeyi kısıtlayın, böylece eski ve yeni politikalar arasındaki KL farklılığı aşağıda kalır δTeorik olarak temiz ama her güncelleme için bir konjugat-gradyen çözümü gerektirir.
PPO (Schulman et al. 2017) sert güven bölgesinin kısıtlamasını basit bir kesilmiş hedef ile değiştirir. Bir ekstra kod satırı. Her dağıtım için on dönem. Konjugat gradient yoktur. Yeterince iyi teorik garantiler.
Anlaşım
!PPO clipped surrogate objective: ratio clipping at 1 ± ε
The importance ratio.
r_t(θ) = π_θ(a_t | s_t) / π_{θ_old}(a_t | s_t)
Bu yeni politika ile verileri toplayan politika arasındaki olasılık oranıdır. r_t = 1Değişiklik yok demektir.r_t = 2Yeni politika iki kat daha fazla süre alacak.a_tEski gibi.
The clipped surrogate.
L^{CLIP}(θ) = E_t [ min( r_t(θ) A_t, clip(r_t(θ), 1-ε, 1+ε) A_t ) ]
İki dönem:
- Eğer avantajı
A_t > 0ve oranın ötesine çıkmaya çalışması1 + ε, klipi eğilimi düzeltir iyi bir eylem daha fazla itmemek+εEski olasılıkların üstünde. - Eğer avantajı
A_t < 0ve oranın ötesine çıkmaya çalışması1 - ε(yani kötü bir eylemin kesilmiş azaltılmasına kıyasla daha olası hale getirileceğini gösterir) Klip, gradiyenti kapatır kötü bir eylemin aşağıya itirilmesini engellemez-ε- Evet .
- Evet .
minDiğer yönü ele alır: oran yararlı yönde hareket ettiyse, hala eğilimi alırsınız (bölgeye bir kesim yapmamak sizi incitebilir).
Tipik ε = 0.2. Hedefi bir fonksiyon olarak çiz .r_t: "iyi tarafta" düz bir çatı ve "kötü tarafta" düz bir zemin ile parça-düzsel bir işlev.
The full PPO loss.
L(θ, φ) = L^{CLIP}(θ) - c_v · (V_φ(s_t) - V_t^{target})² + c_e · H(π_θ(·|s_t))
Aynı aktör-kritik yapı A2C ile.c_v = 0.5- Evet .c_e = 0.01- Evet .ε = 0.2- Evet .
The training loop.
- Toplayın .
N × TNparalel ortamlar içinTHer adım. - Gelirleri hesaplayın (GAE), onları sabit olarak dondurun.
- Dondurma
π_{θ_old}π_θ- Evet . - - Evet .
K(s, a, A, V_target, log π_old(a|s))- ...
- Hesaplamar_t(θ) = exp(log π_θ(a|s) - log π_old(a|s))- Evet .
- UygulaL^{CLIP}+ değer kaybı + entropi.
- - İlerleyici adım.
- Çıkarmayı atın ve adım 1'e dönün.
K = 10PPO güçlüdür: tam sayı nadiren ±50%'lik bir değer içerir.
KL-penalty variant.Orijinal makalede adapte KL cezası kullanan bir alternatif önerildi: L = L^{PG} - β · KL(π_θ || π_old)- Evet .βKL'ye göre ayarlanmıştır. Klipleme sürümü baskın hale geldi; KL variansı RLHF'de hayatta kalıyor (RLHF'de KL'ye göre referans politikası her zaman istediğiniz ayrı bir kısıtlama olduğu).
Yapın
Adım 1: Yakalama log π_old(a | s)Çıkarma zamanı
pythonfor step in range(T):
probs = softmax(logits(theta, state_features(s)))
a = sample(probs, rng)
s_next, r, done = env.step(s, a)
buffer.append({
"s": s, "a": a, "r": r, "done": done,
"v_old": value(w, state_features(s)),
"log_pi_old": log(probs[a] + 1e-12),
})
s = s_nextFotoğraf bir kez çekilir, yayımlama sırasında.
Adım 2: GAE avantajlarını hesaplayın (Deneyim 07)
A2C'nin aynı şeyi.
Adım 3: Çıkarılmış yedek güncelleme
pythonfor _ in range(K_EPOCHS):
for mb in minibatches(buffer, size=64):
for rec in mb:
x = state_features(rec["s"])
probs = softmax(logits(theta, x))
logp = log(probs[rec["a"]] + 1e-12)
ratio = exp(logp - rec["log_pi_old"])
adv = rec["advantage"]
surrogate = min(
ratio * adv,
clamp(ratio, 1 - EPS, 1 + EPS) * adv,
)
# backprop -surrogate, add value loss, subtract entropy
grad_logpi = onehot(rec["a"]) - probs
if (adv > 0 and ratio >= 1 + EPS) or (adv < 0 and ratio <= 1 - EPS):
pg_grad = 0.0 # clipped
else:
pg_grad = ratio * adv
for i in range(N_ACTIONS):
for j in range(N_FEAT):
theta[i][j] += LR * pg_grad * grad_logpi[i] * x[j]"Klip → sıfır gradient" modeli PPO'nun kalbidir. Yeni politika zaten yararlı yönde çok fazla ilerlediyse, güncelleme durur.
Adım 4: Değer ve entropi
Kritik hedefe standart MSE ve A2C ile aynı şekilde aktörde entropi bonusu ekleyin.
Adım 5: teşhis
Her güncellemeyi izlemek için üç şey:
- Mean KL
E[log π_old - log π_θ]İçeride kalmalıydım .[0, 0.02]- Eğer geçmişte uçarsa .0.1, azaltmakK_EPOCHSveyaLR- Evet . - Clip fraction oranı dışta bulunan örneklerin bölümü
[1-ε, 1+ε]Olmalı .~0.1-0.3- Eğer ...~0, klipi aslaLRveyaK_EPOCHS- Eğer ...~0.5+- Bu yüzden, onları aşağı düşürmek için çok fazla ayarlıyorsun. - Explained variance
1 - Var(V_target - V_pred) / Var(V_target)Eleştirmen öğrendiği gibi 1'e doğru tırmanmalı.
Tuzaklar
- Clip coefficient mistuned.
ε = 0.2Bu gerçek standart.0.1güncellemeleri çok çekingen kılar .0.3+- Durum dengesizliği. - Too many epochs.
K > 20politikası uzaklaşır.π_oldÖzellikle büyük ağlar için sınırlama dönemleri. - No reward normalization.Büyük ödül ölçekleri, video aralığında yer alır.
- Forgetting advantage normalization.Satır başına sıfır ortalama/birlik std normallaştırma standarttır.
- Learning rate not decayed.PPO, doğrusal LR'nin sıfıra düşmesinden yararlanır.
- Importance ratio math errors.Her zaman .
exp(log_new - log_old)sayısal istikrar için değilnew / old- Evet . - Wrong gradient sign.Yeraltı anneni en üst seviyeye çıkar = minimize
-L^{CLIP}- Dönüştürülmüş bir işaret en yaygın PPO virüsüdür.
Kullan
PPO, 2026'ın şaşırtıcı sayıda alan üzerinde varsayılan RL algoritmasıdır:
| Use case | PPO variant |
|---|---|
| MuJoCo / robotics control | PPO with Gaussian policy, GAE(0.95) |
| Atari / discrete games | PPO with categorical policy, rolling 128-step rollouts |
| RLHF for LLMs | PPO with KL penalty to reference model, reward from RM at end of response |
| Large-scale game agents | IMPALA + PPO (AlphaStar, OpenAI Five) |
| Reasoning LLMs | GRPO (Lesson 12) — PPO variant without critic |
| Preference-only data | DPO — closed-form collapsing of PPO+KL, no online sampling |
PPO kayb şekli kesilmiş alternatif + değer + entropi DPO, GRPO ve neredeyse her RLHF boru hattı için asfalt.
Gönder
- Kaydet .
outputs/skill-ppo-trainer.md- ...
markdown---
name: ppo-trainer
description: Produce a PPO training config and a diagnostic plan for a given environment.
version: 1.0.0
phase: 9
lesson: 8
tags: [rl, ppo, policy-gradient]
---
Given an environment and training budget, output:
1. Rollout size. `N` envs × `T` steps.
2. Update schedule. `K` epochs, minibatch size, LR schedule.
3. Surrogate params. `ε` (clip), `c_v`, `c_e`, advantage normalization on.
4. Advantage. GAE(`λ`) with explicit `γ` and `λ`.
5. Diagnostics plan. KL, clip fraction, explained variance thresholds with alerts.
Refuse `K > 30` or `ε > 0.3` (unsafe trust region). Refuse any PPO run without advantage normalization or KL/clip monitoring. Flag clip fraction sustained above 0.4 as drift.Egzersizler
- Easy.4×4 GridWorld ' da PPO çalıştır
ε=0.2, K=4. Örnek verimliliğini A2C ile (her bir atılım için bir dönem) eşleşen çevre adımlarında karşılaştırın. - Medium.Tarama
K ∈ {1, 4, 10, 30}- Plan geri dönüşü vs. çevre adımları ve takip ortalaması KL güncelleme başına.KKL bu görevde patlayacak mı? - Hard.Kısaltılan yer değiştiricisini uyarlayıcı bir KL cezası ile değiştirin (
βiki katına çıkarılır.KL > 2·target, yarıya düştüKL < target/2) Son dönüşü, istikrarı ve çubuksuzluğu karşılaştırın.
Anahtar Terimler
| Term | What people say | What it actually means |
|---|---|---|
| Importance ratio | "r_t(θ)" | π_θ(a|s) / π_old(a|s); deviation from the policy that collected the data. |
| Clipped surrogate | "PPO's main trick" | min(r·A, clip(r, 1-ε, 1+ε)·A); flat gradient past the clip on beneficial side. |
| Trust region | "TRPO / PPO intent" | Limit each update's KL to guarantee monotone improvement. |
| KL penalty | "Soft trust region" | Alternative PPO: L - β · KL(π_θ || π_old). Adaptive β. |
| Clip fraction | "How often clipping triggers" | Diagnostic — should be 0.1-0.3; outside means mistuned. |
| Multi-epoch training | "Data reuse" | K epochs on each rollout; variance cost traded for sample efficiency. |
| On-policy-ish | "Mostly on-policy" | PPO is nominally on-policy but K>1 epochs uses slightly-off-policy data safely. |
| PPO-KL | "The other PPO" | KL-penalty variant; used in RLHF where KL-to-reference is already a constraint. |
Daha Fazla Okumak
- Schulman et al. (2017). Proximal Policy Optimization Algorithms- Gazete.
- Schulman et al. (2015). Trust Region Policy OptimizationTRPO, PPO'nun öncüsü.
- Andrychowicz et al. (2021). What Matters In On-Policy RL? A Large-Scale Empirical Study her PPO hiperparametre silinmiş.
- Ouyang et al. (2022). Training language models to follow instructions with human feedback InstructGPT; PPO-in-RLHF tarifi.
- OpenAI Spinning Up — PPOPyTorch ile temiz modern bir sergileme.
- CleanRL PPO implementation Referans bir dosya PPO birçok makalede kullanılır.
- Hugging Face TRL — PPOTrainer dil modellerinde PPO için üretim tarifi; Ders 09 (RLHF) ile birlikte okuyun.
- Engstrom et al. (2020). Implementation Matters in Deep Policy Gradients "37 kod seviyesinde optimizasyon" makalesi; hangi PPO numaraları yük taşıyor ve hangiları folklor.
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.