تحسين السياسة القريب (PPO)
الهدف البديل المقصوص، وتقدير الأفضلية باستخدام GAE، وPPO مع stable-baselines3
تحسين السياسة القريب (PPO) درس مجاني في Learn AI with Python على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn AI with Python، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
لماذا PPO؟
يُعد PPO خوارزمية تعلم التعزيز الافتراضية اليوم: فهي مستقرة وفعالة من حيث العينات وسهلة الضبط. وتعالج مشكلة أساسية في تدرج السياسة، وهي التحديثات الكبيرة جداً التي تدمر السياسة، عبر تقييد مقدار تغير السياسة في كل تحديث.
خطر التحديثات الكبيرة
قد يؤدي تحديث واحد كبير للغاية للسياسة إلى انهيار الأداء، ويصعب التعافي من ذلك لأن تعلم التعزيز يعمل وفق نمط on-policy. ويحافظ PPO على كون كل تحديث قريباً من السياسة الحالية لتجنب المخاطر.
نسبة الاحتمال
يتتبع PPO نسبة احتمالات الفعل الجديدة إلى القديمة: ratio = pi_new(a|s) / pi_old(a|s). وتعني النسبة القريبة من 1 أن السياسة تغيرت قليلاً، بينما تعني النسبة البعيدة عن 1 حدوث تغير كبير.
ratio = torch.exp(new_log_prob - old_log_prob)دالة الهدف البديلة المقصوصة
تتمثل السمة المميزة لـPPO في دالة الهدف البديلة المقصوصة. فهي تضرب النسبة في الأفضلية، لكنها تقص النسبة إلى [1-eps, 1+eps]، مما يلغي الحافز إلى تغيير السياسة بدرجة مفرطة.
clipped = torch.clamp(ratio, 1 - eps, 1 + eps)
objective = torch.min(ratio * adv, clipped * adv)
loss = -objective.mean()حد القص epsilon
تمثل eps، وقيمتها المعتادة 0.2، حد القص. فهي تحدد مقدار ابتعاد النسبة عن 1، ولذلك يظل تحديث السياسة محدوداً ومستقراً حتى عندما تكون الأفضلية كبيرة.
eps = 0.2 # allow at most +/-20% change in probabilityلماذا ينجح min() والقص
يؤدي أخذ min بين دالة الهدف المقصوصة وغير المقصوصة إلى جعل الحد متشائماً: فلا تمنح التحسينات التي تتجاوز نطاق القص مكافأة إضافية، وبالتالي لا يكون لدى المحسّن سبب لتجاوز الحد.
تقدير الأفضلية المعمّم
يقدّر PPO الأفضلية باستخدام GAE، الذي يمزج العوائد متعددة الخطوات باستخدام المعلمتين gamma وlambda. ويحقق GAE موازنة بين الانحياز والتباين لتقديم تقديرات أفضلية سلسة وموثوقة.
def gae(rewards, values, gamma=0.99, lam=0.95):
adv, gae_acc = [], 0
for t in reversed(range(len(rewards))):
delta = rewards[t] + gamma * values[t+1] - values[t]
gae_acc = delta + gamma * lam * gae_acc
adv.insert(0, gae_acc)
return advعدة حقب لكل دفعة
على خلاف REINFORCE، يعيد PPO استخدام كل دفعة من البيانات المجموعة خلال عدة حقب تحسين. ويجعل القص ذلك آمناً، مما يحسن كفاءة العينات بدرجة كبيرة.
for _ in range(n_epochs):
# recompute ratio and clipped loss on the same batch
optimizer.zero_grad()
loss.backward()
optimizer.step()PPO باستخدام Stable-Baselines3
عملياً، نادراً ما تكتب PPO يدوياً. إذ توفر Stable-Baselines3 تطبيقاً مختبراً. أنشئه باستخدام نوع السياسة والبيئة ومستوى الإسهاب، ثم استدعِ learn.
from stable_baselines3 import PPO
model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=100_000)استخدام الوكيل المدرَّب
بعد التدريب، استخدم predict للحصول على أفعال للملاحظات الجديدة. اضبط deterministic=True عند التقييم لاختيار الفعل الأكثر احتمالاً بدلاً من أخذ عينة.
obs, _ = env.reset()
action, _ = model.predict(obs, deterministic=True)
model.save("ppo_agent")لماذا يهيمن PPO
يجمع PPO بين التحديثات المستقرة المقصوصة، والأفضليات المقدّرة باستخدام GAE، وإعادة استخدام البيانات، ليقدم خوارزمية متينة وعامة تعمل عبر مهام كثيرة مع قدر ضئيل من الضبط، ولذلك يُستخدم في كل شيء بدءاً من الروبوتات ووصولاً إلى RLHF.
اختبار سريع
اختبر فهمك لـPPO.
مراجعة: PPO
لقد تعلّمتَ دالة الهدف البديلة المقصوصة في PPO باستخدام نسبة الاحتمال وحد القص eps لتقييد التحديثات، وGAE لتقدير الأفضلية، وإعادة استخدام البيانات عبر عدة حقب. كما شغّلتها بسهولة باستخدام PPO("MlpPolicy", env, verbose=1) في Stable-Baselines3.
الأسئلة الشائعة
هل درس «تحسين السياسة القريب (PPO)» مجاني؟
نعم — نص درس «تحسين السياسة القريب (PPO)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn AI with Python، انتقل إلى CoddyKit PRO. تتضمن دورة Learn AI with Python 4 دروس في المجموع.
ماذا ستتعلم في «تحسين السياسة القريب (PPO)»؟
الهدف البديل المقصوص، وتقدير الأفضلية باستخدام GAE، وPPO مع stable-baselines3 تتمرن على Learn AI with Python مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn AI with Python؟
لا تُشترط خبرة سابقة. Learn AI with Python على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «تحسين السياسة القريب (PPO)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn AI with Python هذا؟
نعم. كل درس في Learn AI with Python يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساليب تدرّج السياسة: REINFORCE
- أساليب الفاعل والناقد (A2C)
- تحسين السياسة القريب (PPO)
- بيئات Gymnasium المخصصة