Phase 09: Reinforcement Learning

تحسين السياسة القريبة (PPO)

يرمي A2C كل عملية تنفيذ بعد تحديث واحد. يلف PPO تراجع السياسة في نسبة أهمية خفضة حتى تتمكن من القيام بأكثر من 10 حقائق على نفس البيانات دون انفجار السياسة. Schulman et al. (2017). لا يزال الخوارزمية الافتراضية للسياسة-الترقي في عام 2026.

Type: Build

Languages: Python

Prerequisites: Phase 9 · 06 (REINFORCE), Phase 9 · 07 (Actor-Critic)

Time: ~75 minutes

المشكلة

A2C (دروس 07) على السياسة: التراجع E_{π_θ}[A · ∇ log π_θ]يتطلب البيانات التي تم أخذها من التيار π_θخذ تحديث واحد، وπ_θتغيرات، البيانات التي استخدمتها غير قانونية الآن إعادة استخدامها و تغير التحديد

التشغيل مكلف. على Atari، التشغيل واحد عبر 8 envs × 128 خطوات = 1024 انتقالات وعشرة ثوان من الوقت البيئي. إلقاء ذلك بعيدا بعد خطوة تراجع واحدة هو مضيعة.

كان تحسين سياسة منطقة الثقة (TRPO ، Schulman 2015) هو التحدي الأول: تقييد كل تحديث بحيث يبقى اختلاف KL بين السياسة القديمة والجديدة أقل δنظرياً نظيفة، لكن تتطلب حلًا متضامنًا لكل تحديث. لا أحد يعمل على TRPO في عام 2026.

تمت إعادة تشكيل المعلومات في الموقع، حيث تمت إعادة تشكيل المعلومات في الموقع، حيث تمت إعادة تشكيل المعلومات في الموقع، حيث تمت إعادة تشكيل المعلومات في الموقع.

المفهوم

!PPO clipped surrogate objective: ratio clipping at 1 ± ε

The importance ratio.

r_t(θ) = π_θ(a_t | s_t) / π_{θ_old}(a_t | s_t)

هذا هو نسبة احتمالية السياسة الجديدة مقابل السياسة التي جمعت البيانات. r_t = 1لا يعني أي تغييرr_t = 2يعني أن السياسة الجديدة أكثر عرضة للانتقالa_tمثل القديمة

The clipped surrogate.

L^{CLIP}(θ) = E_t [ min( r_t(θ) A_t, clip(r_t(θ), 1-ε, 1+ε) A_t ) ]

شروطين:

  • إذا كانت الميزةA_t > 0و يحاول النسبة أن تنمو1 + ε، المقطوعة تسطح التراجع لا تدفع عمل جيد أبعد من +εفوق الاحتمالات القديمة
  • إذا كانت الميزةA_t < 0و يحاول النسبة أن تنمو1 - ε(ما يعني أننا سنجعل خطوة سيئة أكثر احتمالا مقارنة مع تقليصها المقطوعة) ، كليب كابس التراجع لا يدفع خطوة سيئة أسفل -ε. . .
  • نعمminيتعامل الاتجاه الآخر: إذا تحرك النسبة في الاتجاه المفيد ، فإنك لا تزال تحصل على التراجع (لا وجود قطع على الجانب الذي سيؤذيك).

نموذجيε = 0.2. رسم الهدف كعمل منr_t: وظيفة خطية على شكل قطعة مع سقف مسطح على الجانب "الجيد" والطابق مسطح على الجانب "سيئ".

The full PPO loss.

L(θ, φ) = L^{CLIP}(θ) - c_v · (V_φ(s_t) - V_t^{target})² + c_e · H(π_θ(·|s_t))

نفس الهيكل الممثل-النقدي مثل A2C. ثلاثة معايير، عادة c_v = 0.5،c_e = 0.01،ε = 0.2. . .

The training loop.

  1. جمعN × Tالانتقالات عبر Nبيئات متوازيةTكل خطوة
  2. احسب المزايا (GAE) ، وتجمدها كمتواصلات.
  3. تجميدπ_{θ_old}كقطة من التيارπ_θ. . .
  4. لأجلKفترة، لكل مجموعة صغيرة من(s, a, A, V_target, log π_old(a|s)):

- الحسابr_t(θ) = exp(log π_θ(a|s) - log π_old(a|s)). . .

- التطبيقL^{CLIP}+ فقدان القيمة + إنتروبي

- خطوة تدريجية

  1. إرمي التنفيذ، عودي إلى الخطوة الأولى

K = 10وبالطائفة الصغيرة من 64 هو مجموعة متطابقة من المعايير.

KL-penalty variant.اقترحت الورقة الأصلية بديلاً باستخدام عقوبة KL قابلة للتكيف: L = L^{PG} - β · KL(π_θ || π_old)معβتم تعديلها بناءً على KL الملاحظ. أصبح نسخة القصص المهيمنة؛ والفرع KL يبقى في RLHF (حيث يكون KL إلى سياسة المرجعية قيودا منفصلة تريد دائما على أي حال).

بناءها

الخطوة الأولى: التقاطlog π_old(a | s)في وقت الإطلاق

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_next

يتم التقاط اللقطة مرة واحدة، في وقت الإطلاق. لا تتغير خلال فترات التحديث.

الخطوة الثانية: حساب ميزات GAE (المدرسة 07)

نفس A2C، تطبيع على جميع أنحاء اللحظة.

الخطوة الثالثة: تحديثات بديلة مقطوعة

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]

نمط "التراجع إلى الصفر" هو قلب PPO. إذا تمت التحويل السياسة الجديدة بالفعل إلى اتجاه مفيد، فإن التحديث يتوقف.

الخطوة الرابعة: القيمة والإنتروبي

إضافة MSE القياسية إلى الهدف النقدي ومكافأة الإنتروبي على الفاعل، نفس A2C.

الخطوة 5: التشخيص

ثلاثة أشياء يجب مشاهدتها في كل تحديث:

  • Mean KL E[log π_old - log π_θ]يجب أن تبقى في[0, 0.02]إذا تمرّ0.1، تقليلK_EPOCHSأوLR. . .
  • Clip fraction الجزء من العينات التي يقع نسبةها خارجها [1-ε, 1+ε]يجب أن يكون~0.1-0.3إذا~0، المقطع لا يطلق أبدا → رفع LRأوK_EPOCHSإذا~0.5+، أنت تتجاوز حدة التنفيذ → خفضهم.
  • Explained variance 1 - Var(V_target - V_pred) / Var(V_target). متريكه النقدي الجوده يجب أن يرتفع نحو 1 كما يتعلم النقدي

الفخاخ

  • Clip coefficient mistuned. ε = 0.2هو المعيار الفعلي.0.1يجعل التحديثات خجولة جداً0.3+يدعو لعدم الاستقرار
  • Too many epochs. K > 20يزعج بشكل روتيني لأن السياسة تتحرك بعيداً عنπ_old. فترات الحد الأقصى، خاصة للشبكات الكبيرة
  • No reward normalization.مقياس مكافأة كبيرة تستهلك نطاق المقاطع. عادي مكافآت (تشغيل std) قبل ميزات الحوسبة.
  • Forgetting advantage normalization.تعاديل المعدل الصفر لكل مجموعة وحدة ستد هو معيار. تخطي ذلك يدمّر PPO على معظم المعايير.
  • Learning rate not decayed.يُستفيد PPO من تدهور LR الخطي إلى الصفر. غالباً ما يكون LR الثابت أسوأ.
  • Importance ratio math errors.دائماًexp(log_new - log_old)للاستقرار الرقمي، لا new / old. . .
  • Wrong gradient sign.أقصى قدر من الاختيارات-L^{CLIP}علامة مُعكسة هي أخطاء (بي.بي.او) الأكثر شيوعاً

استخدمها

إن PPO هو خوارزمية RL الافتراضية لعام 2026 عبر عدد مفاجئ من المجالات:

Use casePPO variant
MuJoCo / robotics controlPPO with Gaussian policy, GAE(0.95)
Atari / discrete gamesPPO with categorical policy, rolling 128-step rollouts
RLHF for LLMsPPO with KL penalty to reference model, reward from RM at end of response
Large-scale game agentsIMPALA + PPO (AlphaStar, OpenAI Five)
Reasoning LLMsGRPO (Lesson 12) — PPO variant without critic
Preference-only dataDPO — closed-form collapsing of PPO+KL, no online sampling

تشكل PPO الخسارة المقطع بديل + القيمة + الإنتروبي هو الرفوف ل DPO ، GRPO ، وكل خط أنابيب RLHF تقريبًا.

أرسله

إبقوا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.

التمارين

  1. Easy.إشغال PPO على 4 × 4 GridWorld مع ε=0.2, K=4- مقارنة كفاءة العينة مع A2C (حلقة واحدة لكل عملية التنفيذ) في مراحل البيئة المقابلة.
  2. Medium.تفتيشK ∈ {1, 4, 10, 30}. عودة المسار مقابل خطوات البيئة وتتبع متوسط KL لكل تحديث.Kهل ستنفجر (كيل) في هذه المهمة؟
  3. Hard.استبدل الاختراق المستبدل مع عقوبة KL تكييفية (βمضاعفة إذاKL > 2·target، نصف إذا KL < target/2) مقارنة العائد النهائي، الاستقرار، وبدون كليب.

الشروط الرئيسية

TermWhat people sayWhat 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.

المزيد من القراءة

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.