التعلم المعزز2016متوسط12 دقيقة قراءة
الأساليب غير المتزامنة للتعلُّم المعزَّز العميق
Asynchronous Methods for Deep Reinforcement Learning
Mnih, V. · Badia, A. P. · Mirza, M. · Graves, A. · Lillicrap, T. · Harley, T. · Silver, D. · Kavukcuoglu, K. — ICML
المشكلة
حتى عام 2015، كان التعلُّم المعزَّز العميق يعتمد على ذاكرة إعادة التشغيل التي قدّمتها DQN — مستودع ضخم يحفظ ملايين التجارب السابقة ويسحب منها عيّنات عشوائية لكسر الزمني بين البيانات المتتالية. الأسلوب نجح فعلاً، لكنه جاء بثلاثة أثمان باهظة: استهلاك هائل للذاكرة، وتقييد صارم بالخوارزميات خارج فقط — أي أن الأساليب داخل السياسة كالممثل-الناقد التي تتعلّم من تجاربها الحيّة لم تكن قابلة للاستخدام — فضلاً عن بطء : واحد يتعامل مع بيئة واحدة على معالج رسوميات واحد.
الإسهام
إطار عمل متوازٍ وخفيف: عدة وكلاء يُشغّلون نُسخاً مستقلة من البيئة على أنوية المعالج المركزي، ويدفعون التدرّجات بشكل غير متزامن إلى شبكة عالمية مشتركة. تنوّع التجارب المتوازية يكسر الارتباط في بيانات التدريب، فيُغني تماماً عن ذاكرة إعادة التشغيل. أفضل المتغيّرات — الممثل-الناقد غير المتزامن بالأفضلية (A3C) — يجمع بين العوائد متعدّدة الخطوات، وشبكة ممثل-ناقد بطبقات مشتركة، وتنظيم بالإنتروبيا. تفوّق A3C على DQN في ألعاب Atari بنصف وقت التدريب وعلى معالج مركزي واحد متعدّد الأنوية — دون الحاجة إلى معالج رسوميات.
الأثر
أثبت A3C أن التوازي — لا إعادة التشغيل — هو المكوّن الجوهري لاستقرار التعلُّم المعزَّز العميق. أفكاره أصبحت العمود الفقري لكل أنظمة التعلُّم المعزَّز القابلة للتوسّع التي جاءت بعده: IMPALA وسّعته إلى آلاف الممثلين، وPPO حسّن تحديثات السياسة، وICM أضاف فضولاً ذاتياً فوق الهيكل نفسه. النسخة المتزامنة A2C صارت خطاً مرجعياً معيارياً. الورقة فتحت باب التعلُّم المعزَّز العميق للجميع — فجأةً أصبح بإمكانك تدريب وكلاء بمستوى عالمي على حاسوب محمول.
قبل A3C، كان تدريب الوكيل في أشبه بطالب يذاكر وحده من كتاب واحد — يحتاج إلى دفتر تمارين سابقة () يراجعها بترتيب عشوائي كي لا يحفظ الإجابات بتسلسلها.
ما يفعله A3C هو استبدال الدفتر بـمجموعة دراسة: ستة عشر طالباً يعمل كلٌّ منهم على فصل مختلف في الوقت نفسه، وكل بضع دقائق يتوجّه أحدهم إلى سبّورة مشتركة ويكتب عليها ما تعلّمه. ولأنهم في فصول مختلفة، تحصل السبّورة على تحديثات متنوعة لا رابط بينها — فلا حاجة لدفتر. والسبّورة (أي ) تتحسّن بسرعة تفوق بكثير ما يستطيعه أي طالب بمفرده.
المشكلة: ذاكرة إعادة التشغيل تعمل، لكن بثمن
واجه مشكلة أساسية حلّتها DQN: حين تتعلّم الشبكة العصبية من إطارات اللعبة المتتالية، تكون البيانات شديدة الارتباط الزمني — الإطار 100 والإطار 101 يكادان يكونان نسخة من بعضهما. هذا الترابط يُزعزع عملية التعلّم ويجعل الشبكة تنسى ما اكتسبته سابقاً لأنها تُفرط في التكيّف مع آخر ما رأته.
الحلّ الذي قدّمته DQN كان : خزّن ملايين الانتقالات ثم اسحب منها دفعات عشوائية صغيرة لتدريب الشبكة. فكرة ذكية تكسر الارتباط الزمني، لكنها تأتي بثلاثة قيود:
- تكلفة الذاكرة. تخزين ملايين الانتقالات يلتهم غيغابايتات من الذاكرة.
- خارج السياسة حصراً. العيّنات المُسترجعة تنتمي لنسخة قديمة من السياسة، فيجب أن تكون من النوع . أما الأساليب — مثل الذي يتعلّم من أفعاله الطازجة — فلا يمكنها الاستفادة من بيانات قديمة.
- وكيل واحد. وكيل وحيد يتفاعل مع واحدة ويُنتج البيانات بالتتابع. للتوسّع لا بدّ من ذاكرة أكبر ومعالجات رسومية أقوى — لا مزيداً من .
الفكرة: التوازي يحلّ محلّ إعادة التشغيل
الفكرة المحورية بسيطة وأنيقة في آن: إذا كان الارتباط الزمني في البيانات هو المشكلة، فلا داعي لتخزينها وإعادة خلطها — يكفي أن تجمع البيانات من أماكن كثيرة في اللحظة نفسها.
أطلِق نسخة من البيئة، كلّ واحدة على نواة معالج مستقلة، وكلّ واحدة تحمل وكيلاً بنسخة محلية من الشبكة. كل وكيل يستكشف بمفرده: واحد قد يكون في المرحلة الأولى، وآخر في المرحلة الخامسة، وثالث يسقط من حافة. في أي لحظة، الوكلاء الـ يقفون في حالة مختلفة — فبياناتهم مفكوكة الارتباط بطبيعتها، تماماً كالعيّنات العشوائية من ذاكرة إعادة التشغيل، لكن بتكلفة ذاكرة صفرية.
كل وكيل يلعب بضع خطوات، يحسب محلياً، ثم يدفعها إلى شبكة عالمية مشتركة — بشكل غير متزامن، من غير أن ينتظر أحداً. بعد ذلك يسحب أحدث المعاملات من الشبكة العالمية ويواصل اللعب. والنتيجة أن الشبكة العالمية تتحسّن باستمرار من تيّارات تدرّج متنوعة وغير مترابطة.
البنية: الممثل والناقد يتشاركان دماغاً واحداً
يعتمد A3C على نمط — وهو ببساطة دوران مختلفان داخل شبكة عصبية واحدة:
- الممثل () يُخرج احتمالياً على الأفعال الممكنة: . فكأنه يسأل: «بناءً على ما أراه الآن، ما أفضل فعل أتّخذه؟»
- الناقد () يُخرج رقماً واحداً — تقدير الحالية: . فكأنه يسأل: «ما مدى جودة هذا الموقف بشكل عام، بصرف النظر عمّا سأفعله لاحقاً؟»
النقطة الجوهرية أن الممثل والناقد يتشاركان الطبقات السفلى من الشبكة — أي مستخرج السمات الالتفافي أو كامل الاتصال الذي يعالج البكسلات الخام أو متّجهات الحالة. التفرّع يحصل فقط عند الطبقة الأخيرة: رأس يُنتج احتمالات الأفعال، ورأس يُنتج تقدير القيمة. هذه المشاركة فعّالة لأن كلا الدورين يستفيد من المُتعلَّم نفسه.
الأفضلية: بكم تفوّق هذا الفعل؟
تدرُّج السياسة في صورته الخام يقول: «هذا الفعل حصد — عزّزه.» المشكلة أن وحدها إشارة مشوّشة. هل ارتفعت المكافأة لأن الفعل كان ذكياً فعلاً، أم لأن الوكيل كان أصلاً في وضع جيد؟
هنا يأتي دور دالة : نطرح خطّ الأساس الذي يوفّره الناقد لنعزل إسهام الفعل وحده. السؤال يصبح: «بكم تفوّق هذا الفعل على ما كنت أتوقّعه عادةً من هذه الحالة؟»
إذا كانت فالفعل أدّى أفضل من المتوسط — عزّزه. وإذا كانت فقد كان أسوأ — ثبّطه. هذا التمركز حول المتوسط يُخفّض تقدير التدرّج بشكل كبير، ممّا يجعل التعلّم أسرع وأكثر استقراراً.
تخيّل الأمر كـنظام تقييم مطاعم: الناقد يمثّل التقييم المتوسط للمطعم (مثلاً 3.5 نجوم)، والأفضلية تقيس مقدار انحراف هذه الوجبة بالذات عن ذلك المتوسط. وجبة ممتازة بخمس نجوم في مطعم متوسطه 3.5 تحصل على أفضلية — ستوصي بها بحماس. وجبة سيئة بنجمتين تحصل على — ستحذّر منها. بدون خط الأساس هذا، ستُعطي تقييمات خام تتأرجح بعنف حسب مستوى المطعم العام، والشبكة لن تعرف أيّ فعل هو الذي أحدث الفرق فعلاً.
ثلاث دوال خسارة، تحديث واحد
يُدرَّب A3C على ثلاثة أهداف في آنٍ واحد، وكلها تُجمع في تحديث واحد:
1. السياسة (الممثل) — تدفع السياسة باتّجاه الأفعال ذات الأفضلية الموجبة. الفكرة هي تدرُّج السياسة المعياري، لكنه مُرجَّح بالأفضلية لتخفيض التباين.
2. خسارة القيمة (الناقد) — تُدرّب رأس القيمة على التنبؤ الدقيق بالعوائد. ببساطة هي الخطأ التربيعي بين القيمة المتوقّعة والعائد المرصود متعدّد الخطوات.
3. — تمنع السياسة من الانهيار المبكّر نحو فعل واحد. بإضافة توزيع الأفعال إلى دالة الهدف، تُشجَّع الخوارزمية على : السياسة المنتظمة لها إنتروبيا عالية، والحتمية لها إنتروبيا صفرية.
الإنتروبيا: منظّم حرارة الاستكشاف
من غير مكافأة الإنتروبيا، تميل خوارزمية تدرُّج السياسة إلى الثقة المفرطة بسرعة: بمجرد أن تعثر على فعل يجلب بعض المكافأة، تُركّز كل الكتلة الاحتمالية عليه وتتوقف عن تجربة أي بديل. هذا ما نسمّيه المبكّر — الوكيل يستغلّ ما يعرفه قبل الأوان ولا يكتشف استراتيجيات ربّما تكون أفضل بكثير.
حدّ الإنتروبيا يبلغ ذروته حين تكون جميع الأفعال متساوية الاحتمال، ويهبط إلى الصفر حين يستحوذ فعل واحد على كل الاحتمال. إضافة إلى دالة الهدف تعمل كمنظّم حرارة: تُبقي السياسة «دافئة» بما يكفي لمواصلة الاستكشاف. المعامل هو مقبض التحكّم — قيمة مرتفعة تعني استكشافاً عشوائياً أوسع، وقيمة منخفضة تعني تركيزاً أكبر على .
العوائد متعدّدة الخطوات: الموازنة بين الانحياز والتباين
السؤال المحوري: إلى أي مدًى ينبغي أن ينظر الوكيل للأمام قبل أن يُحدّث أوزانه؟ هذه هي في صميم تعلّم :
- عائد الخطوة الواحدة (): سريع التحديث لكنه يعتمد بشدة على تقدير الناقد — وفي بداية التدريب قد يكون هذا التقدير بعيداً عن الصواب — تباين منخفض، انحياز مرتفع.
- عائد الكامل (): يستخدم المكافآت الحقيقية فقط بلا أي انحياز من الناقد، لكن مجموع مكافآت عشوائية كثيرة مُشوَّش جداً — انحياز منخفض، تباين مرتفع.
- : حلّ وسط ذكي. استخدم مكافأة حقيقية، ثم أكمل الباقي من تقدير الناقد (). في A3C عادةً نستخدم أو ، فنحصل على أفضل ما في الأسلوبين.
تجميع القطع معاً
لنجمع كل ما سبق في حلقة التدريب الكاملة لـA3C، كما ينفّذها كل خيط عامل:
- المزامنة — انسخ معاملات الشبكة العالمية إلى الشبكة المحلية.
- جمع التجارب — تفاعل مع البيئة المحلية لعدد أقصاه خطوة (أو حتى تنتهي الحلقة)، مع تسجيل الحالات والأفعال والمكافآت.
- حساب العوائد — احسب العائد متعدّد الخطوات لكل خطوة، بدءاً من الحالة الأخيرة ورجوعاً إلى الأولى.
- حساب الأفضليات — لكل خطوة: .
- حساب التدرّجات — اشتقّ الخسارة المُجمَّعة (سياسة + قيمة + إنتروبيا) بالنسبة للمعاملات المحلية.
- الدفع — طبِّق تلك التدرّجات على الشبكة العالمية (بشكل غير متزامن).
- كرّر من الخطوة 1.
ما يميّز هذا التصميم أن كل العمّال ينفّذون هذه الحلقة باستقلالية تامة، كلٌّ بإيقاعه الخاص، دون أي حاجز تزامن يُبطئهم. الشبكة العالمية تتلقّى تدفّقاً مستمراً وغير منقطع من تحديثات تدرّج متنوعة المصادر.
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def a3c_worker(global_net, env, t_max=5, gamma=0.99, beta=0.01):
"""خيط عامل A3C واحد. يعمل باستقلالية ويدفع التدرّجات إلى الشبكة العالمية."""
local_net = global_net.copy() # الخطوة 1: المزامنة
while not done_training:
local_net.load(global_net.params) # إعادة المزامنة كل تكرار
states, actions, rewards = [], [], []
s = env.current_state()
for step in range(t_max): # الخطوة 2: جمع التجارب
pi = local_net.policy(s) # احتمالات الأفعال
a = np.random.choice(len(pi), p=pi)
r, s_next, done = env.step(a)
states.append(s); actions.append(a); rewards.append(r)
s = s_next
if done: break
# الخطوة 3: حساب العوائد متعدّدة الخطوات (من الأخير إلى الأول)
R = 0 if done else local_net.value(s)
returns = []
for r in reversed(rewards):
R = r + gamma * R
returns.insert(0, R)
# الخطوتان 4-5: الأفضليات والتدرّجات
for s_t, a_t, R_t in zip(states, actions, returns):
V = local_net.value(s_t)
advantage = R_t - V # الخطوة 4
policy_loss = -np.log(local_net.policy(s_t)[a_t]) * advantage
value_loss = (R_t - V) ** 2
entropy = -sum(p * np.log(p) for p in local_net.policy(s_t))
loss = policy_loss + 0.5 * value_loss - beta * entropy
global_net.apply_gradients(loss) # الخطوة 6: الدفع غير المتزامنالنتائج: أسرع، وأرخص، وأفضل
اختُبر A3C على 57 لعبة Atari، ومهام تحكّم مستمر (TORCS وMuJoCo)، وملاحة ثلاثية الأبعاد (Labyrinth). وجاءت النتائج لافتة:
- نصف وقت تدريب DQN على ألعاب Atari — والأهم أن ذلك تمّ على معالج مركزي لا على .
- تسريع شبه خطي مع زيادة عدد الخيوط: 16 خيطاً حقّقت تسريعاً بنحو 14 ضِعفاً مقارنة بخيط واحد.
- التعلّم داخل السياسة ضاهى أو تفوّق على الأساليب القائمة على إعادة التشغيل خارج السياسة.
- متانة تجاه المعاملات الفائقة — نطاق واسع من قيم أعطى نتائج جيدة دون الحاجة لضبط دقيق.
- تعميم عبر مجالات مختلفة — ألعاب Atari المنفصلة، والتحكم الحركي المستمر، والملاحة ثلاثية الأبعاد، كلها بالخوارزمية نفسها دون تعديل جوهري.
لماذا غيّر كلّ شيء
إرث A3C يتجاوز الخوارزمية نفسها بكثير. فقد أثبت ثلاثة مبادئ رسمت ملامح التعلُّم المعزَّز العميق كلّه بعد ذلك:
- التوازي وحده يكفي لتحقيق الاستقرار. لا حاجة لـذاكرة إعادة التشغيل — يكفي أن تكون التجارب متنوعة ومتزامنة.
- الأساليب داخل السياسة قادرة على المنافسة. قبل A3C كان الإجماع أن الأساليب خارج السياسة مع ذاكرة إعادة التشغيل لا غنى عنها. لكنّ A3C أظهر أن الممثل-الناقد داخل السياسة، حين يُدعم بالتوازي، يستطيع مجاراتها بل التفوّق عليها.
- التعلُّم المعزَّز العميق لا يحتاج معالج رسوميات. بالاستفادة من أنوية المعالج المركزي، فتح A3C المجال أمام الجميع. فجأةً أصبح بإمكان باحث يحمل حاسوباً محمولاً إجراء تجارب كانت تستلزم عنقوداً حاسوبياً كاملاً.
2013
DQN
استخدمت شبكة Q العميقة ذاكرة إعادة التشغيل وشبكة هدف لتثبيت التعلُّم المعزَّز العميق. احتاجت ذاكرة ضخمة واقتصرت على الأساليب خارج السياسة مع أفعال منفصلة فقط.
2016
A3C
التوازي حلّ محلّ إعادة التشغيل. الممثل-الناقد داخل السياسة تدرّب على معالجات متعدّدة الأنوية وتفوّق على DQN بنصف الوقت.
2017
ICM (الاستكشاف بدافع الفضول)
أضاف وحدة فضول ذاتية فوق هيكل الممثل-الناقد في A3C، تمنح الوكيل مكافأة إضافية كلّما واجه حالات لا يستطيع التنبّؤ بها.
2018
IMPALA
وسّع نموذج A3C ليشمل آلاف الممثلين مع متعلّم مركزي وتصحيح V-trace خارج السياسة. أصبح الأداة الرئيسية لدى DeepMind في التعلُّم المعزَّز واسع النطاق.
2017
PPO
حسّنت أمثَلة السياسة القريبة (PPO) آلية تحديث السياسة في A3C بدالة هدف بديلة مقطوعة، وأصبحت الخوارزمية المعيارية لمحاذاة النماذج اللغوية الكبيرة عبر التعلُّم المعزَّز من التغذية الراجعة البشرية.
في كل مرة يُحاذى فيها حديث عبر ، تجد أن خوارزمية التي تعمل في الخلفية هي وريثة مباشرة لإطار الممثل-الناقد الذي بناه A3C. نموذج التدريب المتوازي الذي أطلقه A3C صار جزءاً من البنية التحتية لدرجة أنه لم يعد مرئياً — كشبكة المياه داخل المبنى: موجودة في كل مكان لكن لا أحد يتوقف ليفكّر فيها.
المرجعMnih, Badia, Mirza, Graves, Lillicrap, Harley, Silver, Kavukcuoglu. Asynchronous Methods for Deep Reinforcement Learning. ICML, 2016.
مصطلحات هذه الورقة
- بنية الفاعل والناقدActor-Critic
- الميزةAdvantage
- خوارزمية التعلم من السياسة الحاليةOn-Policy
- تدرج السياسة التشغيليةPolicy Gradient
- دالة تقييم العوائدValue Function
- مكافأة العشوائية الدلاليةEntropy Bonus
- العائد متعدّد الخطواتN-Step Return
- إعادة تشغيل التجاربExperience Replay
- التعلم العميق بالتعزيزDeep Reinforcement Learning
- المعالجة المتوازيةparallelism
- الاستكشاف (تجربة أفعال جديدة)Exploration
- الاستغلال (اعتماد الأفعال الناجحة)Exploitation