Phase 09: Reinforcement Learning

بازیگر- منتقد A2C و A3C

"رينفورس" شور و صداي داره، يه منتقدي بيشتر از اونها رو بيار که ياد بگيرهV̂(s)A2C آن را همزمان اجرا می کند؛ A3C آن را در سراسر رشته ها اجرا می کند. هر دو مدل ذهنی برای هر روش مدرن عمیق RL هستند.

Type: Build

Languages: Python

Prerequisites: Phase 9 · 04 (TD Learning), Phase 9 · 06 (REINFORCE)

Time: ~75 minutes

مشکل

وانيلا رينفورس کار ميکنه ولي تفاوتش وحشتناکه مونت کارلو برگردهG_tمی تواند میان حوادث 10 برابر تغییر کند.∇ log πو متوسط سازی یک تخمین گرادینت تولید می کند که هزاران قسمت برای حرکت سیاست به همان فاصله ای که می توانید با به روز رسانی های DQN بسیار کمتر حرکت کنید.

تفاوت از استفاده از بازده خام ناشی می شود. اگر یک خط پایه را از دست بدهیدb(s_t) هر تابع ای از حالت، از جمله یک ارزش آموخته شده انتظارات بدون تغییر و تفاوت کاهش می یابد. بهترین خط پایه قابل کنترل است V̂(s_t)حالا مقدار ضرب شده∇ log πاین فائده است:

A(s, a) = G - V̂(s)

یک عمل خوب است اگر به دست آورد بالاتر از متوسط بازگشت؛ بد اگر پایین تر. REINFORCE با یک منتقد آموخته است بازیگر منتقد است. منتقد به بازیگر یک معلم با تنوع پایین می دهد. این هر روش سیاست عمیق پس از 2015 (A2C، A3C، PPO، SAC، IMPALA) است.

مفهوم

!Actor-critic: policy net plus value net, TD residual as advantage

Two networks, one shared loss:

  • Actor π_θ(a | s): سیاست. نمونه برداری برای عمل. آموزش داده شده با gradient سیاست.
  • Critic V_φ(s): تخمین های انتظار بازگشت از دولت آموزش داده شده برای حداقل(V_φ(s) - target)². .

The advantage.دو فرم استاندارد:

  • فائده ی MCA_t = G_t - V_φ(s_t). غیر جانبدار ، متغیرات بالاتر
  • فائده ی TDA_t = r_{t+1} + γ V_φ(s_{t+1}) - V_φ(s_t). تعصب (استفاده)V_φ), تفاوت بسیار پایین تر. همچنین به نام باقی مانده TDδ_t. .

n-step advantage.بین دوتا تعادل کنید:

A_t^{(n)} = r_{t+1} + γ r_{t+2} + … + γ^{n-1} r_{t+n} + γ^n V_φ(s_{t+n}) - V_φ(s_t)

n = 1خالص ترفند.n = ∞بیشتر اجرای ها استفاده می کنندn = 5برای آتاریn = 2048براي پي پي او در موجوکو

Generalized Advantage Estimation (GAE).Schulman et al. (2016) یک متوسط وزن شده نمایی بر روی تمام مزایا n- مرحله را پیشنهاد کرد:

A_t^{GAE} = Σ_{l=0}^{∞} (γλ)^l δ_{t+l}

باλ ∈ [0, 1].λ = 0TD (تغیرات پایین، تحریف بالا) است. λ = 1MC (تغیرات بالا، غیر جانبدار) است.λ = 0.95این است که 2026 ضبط پیش فرض تا زمانی که دایره تعصب / تغییر در جایی که شما می خواهید آن را است.

A2C: synchronous advantage actor-critic.جمع آوری کنیدTقدم ها رو به همNمحیط های موازی. مزایای هر مرحله را محاسبه کنید. بازیگر و منتقد را در دسته ترکیبی به روز کنید. تکرار کنید. برادر ساده تر و مقیاس پذیر تر A3C.

A3C: asynchronous advantage actor-critic.Mnih et al. (2016). اسپون Nهر کارگر gradients را در سطح محلی در انتشار خود محاسبه می کند، سپس آن را به صورت غیرمسلح به یک سرور پارامتر مشترک اعمال می کند. هیچ بازخوردی مورد نیاز نیست. کارگران با اجرای مسیرهای مختلف غیر مرتبط می شوند. A3C ثابت کرد که می توانید در مقیاس CPU ها تمرین کنید. در سال 2026، A2C مبتنی بر GPU (Batted Parallel Envs) غالب است زیرا GPU ها به دسته های بزرگ نیاز دارند.

The combined loss.

L(θ, φ) = -E[ A_t · log π_θ(a_t | s_t) ] + c_v · E[(V_φ(s_t) - G_t)²] - c_e · E[H(π_θ(·|s_t))]

سه اصطلاح: خسارت درجه بندی، بازپسین ارزش، پاداش انتروپی.c_v ~ 0.5،c_e ~ 0.01این ها نقطه شروع قنونی هستند.

آن را بسازید

مرحله اول: یک منتقد

نقد کننده خطیV_φ(s) = w · features(s)با MSE به روز شده:

pythondef critic_update(w, x, target, lr):
    v_hat = dot(w, x)
    err = target - v_hat
    for j in range(len(w)):
        w[j] += lr * err * x[j]
    return v_hat

در یک محیط تابلوگرانه منتقد در چند صد قسمت همگام می شود. در آتاری، منتقد خطی را با یک صندوق مشترک CNN + سر ارزش جایگزین کنید.

مرحله دوم: مزیت مرحله n

با توجه به طولشTو يک پايان آخري که با شروع به کار رفتهV(s_T):

pythondef compute_advantages(rewards, values, gamma=0.99, lam=0.95, last_value=0.0):
    advantages = [0.0] * len(rewards)
    gae = 0.0
    for t in reversed(range(len(rewards))):
        next_v = values[t + 1] if t + 1 < len(values) else last_value
        delta = rewards[t] + gamma * next_v - values[t]
        gae = delta + gamma * lam * gae
        advantages[t] = gae
    returns = [a + v for a, v in zip(advantages, values)]
    return advantages, returns

returnsهدف انتقادي هستadvantagesاین چیزیه که ضرب میشه∇ log π. .

مرحله 3: بروزرسانی ترکیبی

pythonfor step_i, (x, a, _r, probs) in enumerate(traj):
    adv = advantages[step_i]
    target_v = returns[step_i]

    # critic
    critic_update(w, x, target_v, lr_v)

    # actor
    for i in range(N_ACTIONS):
        grad_logpi = (1.0 if i == a else 0.0) - probs[i]
        for j in range(N_FEAT):
            theta[i][j] += lr_a * adv * grad_logpi * x[j]

در مورد سیاست، یک بار در هر تازه کاری، نرخ یادگیری جداگانه برای بازیگر و منتقد.

مرحله 4: موازی (A3C در مقابل A2C)

  • A3C:دور کنNهر کدام از این رشته ها، محیط و گذرنامه خود را اجرا می کنند. به طور دوره ای به روز رسانی های گرادینتی را به یک استاد مشترک فشار می دهند. هیچ قفل در استاد مسابقه ها خوب هستند، آنها فقط صدا اضافه می کنند.
  • A2C:فرار کنNدر یک فرآیند، مشاهده ها را به یک دسته بندی کنید.[N, obs_dim]دسته بندی، دسته بندی پیش، دسته بندی عقب، استفاده بالاتر از GPU، تعیین کننده، ساده تر برای استدلال. پیش فرض در سال 2026.

کد اسباب بازی ما برای شفافیت یک رشته است؛ نوشتن مجدد به A2C دسته بندی سه خط از numpy است.

دام ها

  • Critic bias before actor gradient.اگر منتقد تصادفی باشد، خط پایه اش غیر اطلاعاتی است و شما در حال آموزش در مورد صداهای خالص هستید. منتقد را برای چند صد قدم قبل از روشن کردن گرادینت سیاست گرم کنید، یا از نرخ یادگیری بازیگر آهسته استفاده کنید.
  • Advantage normalization.به طور معمول به صفر متوسط/وحده-std در هر دسته.
  • Shared trunk.استفاده از یک استخراج ویژگی های مشترک برای بازیگر و منتقد در ورودی تصویر. سر های جداگانه. ویژگی های مشترک در هر دو از دست دادن آزاد سواری.
  • On-policy contract.A2C اطلاعات را برای دقیقا یک بروزرسانی دوباره استفاده می کند. بیشتر و گرادینت شما منحصرا است (تصحیح نمونه گیری اهمیت چیزی است که PPO اضافه می کند).
  • Entropy collapse.بدونc_e > 0، سیاست در چند صد بار به تعدیل می رسد و کشف را متوقف می کند.
  • Reward scale.مقادیر مزایای بستگی به مقیاس پاداش دارد. پاداش ها را عادی سازی کنید (به عنوان مثال تقسیم std اجرا) برای مقادیر گرادینت ثابت در میان وظایف.

ازش استفاده کن

A2C/A3C به ندرت انتخاب نهایی در سال 2026 هستند اما آنها معماری هستند که همه چیز بعد تر را بهبود می بخشد:

MethodRelation to A2C
PPOA2C + clipped importance ratio for multi-epoch updates
IMPALAA3C + V-trace off-policy correction
SAC (Phase 9 · 07)Off-policy A2C with a soft-value critic (next lesson)
GRPO (Phase 9 · 12)A2C without the critic — group-relative advantage
DPOA2C collapsed into a preference-ranking loss, no sampling
AlphaStar / OpenAI FiveA2C with league training + imitation pre-training

اگر شما "فائده" را در مقاله ای در سال 2026 ببینید، به بازیگر- منتقد فکر کنید.

-باده

پس ازoutputs/skill-actor-critic-trainer.md:

markdown---
name: actor-critic-trainer
description: Produce an A2C / A3C / GAE configuration for a given environment, with advantage estimation and loss weights specified.
version: 1.0.0
phase: 9
lesson: 7
tags: [rl, actor-critic, gae]
---

Given an environment and compute budget, output:

1. Parallelism. A2C (GPU batched) vs A3C (CPU async) and the number of workers.
2. Rollout length T. Steps per env per update.
3. Advantage estimator. n-step or GAE(λ); specify λ.
4. Loss weights. `c_v` (value), `c_e` (entropy), gradient clip.
5. Learning rates. Actor and critic (separate if using).

Refuse single-worker A2C on environments with horizon > 1000 (too on-policy, too slow). Refuse to ship without advantage normalization. Flag any run with `c_e = 0` and observed entropy < 0.1 as entropy-collapsed.

تمرینات

  1. Easy.تمرینات بازیگر- منتقد با مزیت MC (G_t - V(s_t)در مورد 4×4 GridWorld، بهره وری نمونه را با خط پایه REINFORCE-with-running-mean از درس 06 مقایسه کنید.
  2. Medium.تغییر به سود باقی مانده TD (r + γ V(s') - V(s)) تفاوت دسته های مزایایی را اندازه گیری کنید.
  3. Hard.اجرا کنید GAE ((λ).λ ∈ {0, 0.5, 0.9, 0.95, 1.0}. بازگشت نهایی نقشه در مقابل بهره وری نمونه. نقطه ی خوش برای این کار کجاست؟

اصطلاحات کلیدی

TermWhat people sayWhat it actually means
Actor"The policy net"π_θ(a|s), updated by policy gradient.
Critic"The value net"V_φ(s), updated by MSE regression to returns / TD targets.
Advantage"How much better than average"A(s, a) = Q(s, a) - V(s) or its estimators. Multiplier for ∇ log π.
TD residual"δ"δ_t = r + γ V(s') - V(s); one-step advantage estimate.
GAE"The interpolation knob"Exponentially weighted sum of n-step advantages, parameterized by λ.
A2C"Synchronous actor-critic"Batched across envs; one gradient step per rollout.
A3C"Async actor-critic"Worker threads push gradients to a shared param server. Original paper; less common in 2026.
Bootstrap"Use V at the horizon"Truncate the rollout, add γ^n V(s_{t+n}) to close the sum.

خواندن بیشتر

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.