تصميم ميزات المدخلات
الشبكات العصبية لا تستطيع معالجة سوى الأرقام. لجعلها تفهم الغو، نحتاج طريقة "لترجمة" الرقعة إلى أرقام.
عملية الترجمة هذه هي تصميم ميزات المدخلات.
استخدم AlphaGo 48 مستوى ميزات، بسّطها AlphaGo Zero إلى 17، وحسّنها KataGo إلى 22. ستحلل هذه المقالة بالتفصيل الاعتبارات وراء هذه الخيارات التصميمية.
ما هو مستوى الميزات؟
المفهوم الأساسي
مستوى الميزات هو مصفوفة 19×19، كل عنصر يمثل خاصية معينة للموقع المقابل على الرقعة.
مثلاً، مستوى ميزات "مواقع الأسود":
حالة الرقعة: مستوى الميزات (الأسود):
A B C D E A B C D E
1 . . . . . 1 0 0 0 0 0
2 . ● . . . 2 0 1 0 0 0
3 . . ○ . . → 3 0 0 0 0 0
4 . . . ● . 4 0 0 0 1 0
5 . . . . . 5 0 0 0 0 0
- موقع فيه حجر أسود = 1
- موقع بدون حجر أسود = 0
مستويات ميزات متعددة
الشبكة العصبية تحتاج أنواعاً متعددة من المعلومات، لذا نراكم عدة مستويات ميزات:
موتر المدخلات: 19 × 19 × N
| المستوى | الوصف |
|---|---|
| مستوى 1 | مواقع الأسود |
| مستوى 2 | مواقع الأبيض |
| مستوى 3 | النقاط الفارغة |
| ... | ... |
| مستوى N | ميزات أخرى |
كل مستوى بحجم 19×19
هذا مشابه للصورة الملونة التي لها قنوات R، G، B. "صورة" الغو لها N قناة.
48 مستوى ميزات في AlphaGo
القائمة الكاملة
استخدم AlphaGo 48 مستوى ميزات، مقسمة إلى عدة فئات:
1. مواقع الأحجار (3 مستويات)
| المستوى | الاسم | الوصف |
|---|---|---|
| 1 | الأسود | يوجد حجر أسود = 1، غير ذلك = 0 |
| 2 | الأبيض | يوجد حجر أبيض = 1، غير ذلك = 0 |
| 3 | فارغ | نقطة فارغة = 1، غير ذلك = 0 |
2. سجل التاريخ (16 مستوى)
| المستوى | الاسم | الوصف |
|---|---|---|
| 4-11 | تاريخ الأسود | مواقع الأسود في آخر 1-8 حركات |
| 12-19 | تاريخ الأبيض | مواقع الأبيض في آخر 1-8 حركات |
لماذا نحتاج التاريخ؟
- حكم الكو: تحتاج معرفة إذا كان يمكن الاسترجاع فوراً
- نية اللعب: الحركات الأخيرة تكشف خطط الطرفين
- معلومات زمنية: CNN بذاتها لا تعالج الوقت، مستويات التاريخ تعوض ذلك
3. ميزات الحريات (8 مستويات)
| المستوى | الاسم | الوصف |
|---|---|---|
| 20-23 | 1-4 حريات (جانبي) | سلسلتي لها 1/2/3/4 حريات = 1 |
| 24-27 | 1-4 حريات (الخصم) | سلسلة الخصم لها 1/2/3/4 حريات = 1 |
عدد الحريات هو أهم مفهوم تكتيكي في الغو:
- 1 حرية: في أتاري، على وشك الأسر
- 2 حريات: حالة خطرة
- 3 حريات: تحتاج انتباه
- 4+ حريات: آمنة مؤقتاً
4. ميزات الأتاري (8 مستويات)
| المستوى | الاسم | الوصف |
|---|---|---|
| 28-31 | مواقع الأتاري (جانبي) | اللعب هنا يضع الخصم في أتاري 1/2/3/4 أحجار |
| 32-35 | مواقع الأتاري (الخصم) | اللعب هنا يضعني في أتاري 1/2/3/4 أحجار |
الأتاري هو التكتيك الأكثر شيوعاً في الغو:
- أتاري أحجار أكثر = تهديد أكبر
- أحجام أتاري مختلفة تحتاج استجابات مختلفة
5. ميزات السلم (8 مستويات)
| المستوى | الاسم | الوصف |
|---|---|---|
| 36-39 | متعلق بالسلم (جانبي) | مواقع متعلقة بسلمي |
| 40-43 | متعلق بالسلم (الخصم) | مواقع متعلقة بسلم الخصم |
السلم (Ladder) هو تكتيك شهير في الغو:
- مطاردة أحجار الخصم على القطر
- يحتاج تحديد "السلم مفيد" أو "السلم غير مفيد"
- هذا يحتاج رؤية شاملة، وهو صعب على برامج الغو التقليدية
6. ميزات المشروعية (مستوى واحد)
| المستوى | الاسم | الوصف |
|---|---|---|
| 44 | مواقع مشروعة | يمكن اللعب هنا بشكل قانوني = 1 |
هذا يمنع الشبكة من إخراج حركات غير قانونية:
- لا يمكن اللعب في موقع فيه حجر
- لا يمكن اللعب في نقطة انتحار (انتحار بدون أسر)
- لا يمكن الاسترجاع الفوري في الكو
7. ميزات الحافة والزاوية (4 مستويات)
| المستوى | الاسم | الوصف |
|---|---|---|
| 45 | مسافة 1 من الحافة | على الخط الأول = 1 |
| 46 | مسافة 2 من الحافة | على الخط الثاني = 1 |
| 47 | مسافة 3 من الحافة | على الخط الثالث = 1 |
| 48 | مسافة 4+ من الحافة | على الخط الرابع أو أعمق = 1 |
الحافة والزاوية لها أهمية خاصة في الغو:
- الخط الأول: خط الموت، الأحجار تُحاصر بسهولة
- الخط الثاني: خط الحياة، لكن كفاءة منخفضة
- الخط الثالث: خط الأرض، مستقر
- الخط الرابع: خط النفوذ، يسعى للتأثير
لماذا نحتاج هذا العدد الكبير من الميزات؟
فلسفة تصميم DeepMind هي توفير أكبر قدر ممكن من المعلومات، ودع الشبكة تقرر ما هو مفيد:
الرقعة الأصلية → 48 مستوى ميزات → الشبكة العصبية → القرار
عمل مهندس الميزات: ترميز معرفة الغو في ميزات
عمل الشبكة العصبية: تعلم تجميع هذه الميزات
هذه استراتيجية "تمرير الكرة للشبكة العصبية" — البشر مسؤولون عن تصميم الميزات، الشبكة مسؤولة عن تعلم التجميع.
تبسيط AlphaGo Zero: 17 مستوى ميزات
التغيير الثوري
AlphaGo Zero بسّط ميزات المدخلات بشكل كبير:
| الإصدار | عدد مستويات الميزات | استخدام المعرفة البشرية |
|---|---|---|
| AlphaGo | 48 | كثير (الحريات، السلم، إلخ) |
| AlphaGo Zero | 17 | تقريباً لا شيء |
تكوين الـ 17 مستوى
1. تاريخ مواقع الأحجار (16 مستوى)
| المستوى | الاسم | الوصف |
|---|---|---|
| 1-8 | الأسود T-0 إلى T-7 | مواقع الأسود في الحاضر وآخر 7 خطوات |
| 9-16 | الأبيض T-0 إلى T-7 | مواقع الأبيض في الحاضر وآخر 7 خطوات |
2. اللون (مستوى واحد)
| المستوى | الاسم | الوصف |
|---|---|---|
| 17 | دور من | دور الأسود = كله 1، دور الأبيض = كله 0 |
لماذا يمكن هذا التبسيط؟
الرؤية الأساسية لـ AlphaGo Zero:
إذا توفرت موارد حسابية ووقت تدريب كافيين، الشبكة العصبية يمكنها تعلم هذه الميزات بنفسها
مفاهيم "الحريات"، "الأتاري"، "السلم" استغرق البشر آلاف السنين لتطويرها. لكن AlphaGo Zero أثبت أن الشبكة العصبية يمكنها تعلمها في أيام قليلة — وربما تعلم تمثيلات أفضل من البشر.
مقارنة النتائج
المدهش أن AlphaGo Zero مع ميزات أقل أقوى في الواقع:
| الإصدار | عدد الميزات | وقت التدريب | القوة النهائية |
|---|---|---|---|
| AlphaGo Master | 48 | عدة أشهر | حوالي 5185 Elo |
| AlphaGo Zero | 17 | 40 يوماً | حوالي 5185 Elo |
| AlphaGo Zero (3 أيام) | 17 | 3 أيام | يتفوق على البشر |
معرفة بشرية أقل، أداء أعلى.
لماذا المعرفة البشرية قد تكون عبئاً؟
1. المعرفة البشرية قد تكون خاطئة
القواعد التي لخصها البشر للغو تجريبية، قد لا تكون الأمثل. مثلاً:
- "الزوايا ذهب والحواف فضة والوسط عشب" — لكن في بعض الأوضاع الوسط أهم
- "لا تلعب السلم إذا كان غير مفيد" — لكن أحياناً يمكن التضحية بالأحجار عمداً
2. ترميز الميزات يحد التمثيل
عندما نرمّز "الحريات" كـ 4 مستويات لـ 1-4 حريات، نفترض ضمنياً أن "الحريات" هي طريقة تصنيف مهمة. لكن ربما هناك طريقة تصنيف أفضل، وهذا الترميز يمنع الشبكة من اكتشافها.
3. عنق زجاجة التمثيل
48 مستوى تستهلك موارد حسابية أكثر. إذا كانت بعض الميزات زائدة، هذه الموارد تُهدر.
تحسين KataGo: 22 مستوى ميزات
التوازن العملي
KataGo بنى على أساس AlphaGo Zero، وأضاف كمية صغيرة من المعرفة البشرية المختارة:
| البند | AlphaGo Zero | KataGo |
|---|---|---|
| مستويات التاريخ | 16 | 5 |
| مواقع الأحجار | نعم | نعم |
| دور من | نعم | نعم |
| حالة الكو | لا | نعم |
| متغيرات القواعد | لا | نعم (الكومي، قاعدة الانتحار، إلخ) |
| المجموع | 17 | 22 |
قائمة ميزات KataGo
الميزات الأساسية (5)
| المستوى | الاسم | الوصف |
|---|---|---|
| 1 | الأسود | مواقع الأسود الحالية |
| 2 | الأبيض | مواقع الأبيض الحالية |
| 3 | فارغ | النقاط الفارغة الحالية |
| 4 | دور من (1) | مستوى ثابت دائماً 1 |
| 5 | دور من (2) | دور الأسود = 1، دور الأبيض = 0 |
ميزات التاريخ (5)
| المستوى | الاسم | الوصف |
|---|---|---|
| 6 | موقع الحركة السابقة | موقع حركة الخصم السابقة |
| 7 | موقع الحركة قبل السابقة | موقع حركتي السابقة |
| 8 | موقع الحركة الثالثة | موقع حركة الخصم الثانية |
| 9 | موقع الحركة الرابعة | موقع حركتي الثانية |
| 10 | موقع الحركة الخامسة | موقع حركة الخصم الثالثة |
ميزات الكو (3)
| المستوى | الاسم | الوصف |
|---|---|---|
| 11 | نقطة الكو المحظورة | نقطة الكو المحظورة حالياً |
| 12 | كو محتمل (جانبي) | اللعب هنا ينتج كو |
| 13 | كو محتمل (الخصم) | لعب الخصم هنا ينتج كو |
ميزات القواعد (9)
| المستوى | الاسم | الوصف |
|---|---|---|
| 14-22 | ترميز القواعد | الكومي، قاعدة الانتحار، السوبر كو، إلخ |
لماذا إضافة هذه الميزات؟
يشرح lightvector مؤلف KataGo:
1. الكو مهم جداً
الكو هو من أعقد المفاهيم في الغو. تعلم قواعد الكو من حالة الرقعة الخام يحتاج عينات كثيرة. تحديد نقطة الكو المحظورة صراحة يسرّع التعلم.
2. تنوع القواعد
للغو قواعد متعددة:
- الكومي: القواعد الصينية 7.5 نقطة، القواعد اليابانية 6.5 نقطة
- قاعدة الانتحار: بعض القواعد تسمح بالانتحار
- السوبر كو: طرق مختلفة للتعامل مع الدورات الطويلة
ترميز القواعد صراحة في المدخلات يسمح لشبكة واحدة بالتعامل مع جميع المتغيرات.
3. كفاءة التدريب
إضافة كمية صغيرة من المعرفة البشرية يمكن أن تسرّع التدريب بشكل كبير. KataGo وصل بـ 50 GPU يوم إلى القوة التي وصل إليها AlphaGo Zero بـ 5000+ TPU يوم.
فلسفة تصميم الميزات
ثلاث طرق
| الطريقة | الممثل | عدد الميزات | المعرفة البشرية | متطلبات الحساب |
|---|---|---|---|---|
| معرفة بشرية كثيرة | AlphaGo | 48 | كثيرة | متوسطة |
| معرفة بشرية قليلة جداً | AlphaGo Zero | 17 | تقريباً لا شيء | عالية جداً |
| معرفة بشرية معتدلة | KataGo | 22 | كمية صغيرة مختارة | أقل |
اعتبارات المقايضة
عند محدودية الموارد
إذا كانت الموارد الحسابية محدودة (حالة معظم الباحثين)، إضافة بعض المعرفة البشرية قرار حكيم:
- تسريع تقارب التدريب
- تقليل بيانات التدريب المطلوبة
- تجنب إعادة اختراع العجلة
عند السعي للحدود
إذا كانت الموارد الحسابية وفيرة، تقليل المعرفة البشرية قد يصل إلى قوة أعلى:
- تجنب التحيز البشري
- اكتشاف استراتيجيات غير معروفة للبشر
- "البدء من الصفر" الحقيقي
الدروس المستفادة
تطور سلسلة AlphaGo يخبرنا:
- هندسة الميزات لا تزال مهمة — لكن الشكل تغير
- التعلم من الطرف إلى الطرف هو الاتجاه — دع الشبكة تتعلم الميزات بنفسها
- لا توجد إجابة صحيحة واحدة — يعتمد على الموارد والأهداف
أمثلة التنفيذ
استخراج الميزات (طريقة AlphaGo)
import numpy as np
def extract_features_alphago(board, history, current_player):
"""
استخراج 48 مستوى ميزات بطريقة AlphaGo
board: رقعة 19×19، 0=فارغ، 1=أسود، 2=أبيض
history: تاريخ آخر 8 حركات
current_player: 1=أسود، 2=أبيض
"""
features = np.zeros((48, 19, 19))
# 1-3: مواقع الأحجار
features[0] = (board == 1) # الأسود
features[1] = (board == 2) # الأبيض
features[2] = (board == 0) # فارغ
# 4-19: مواقع التاريخ
for i, hist_board in enumerate(history[:8]):
features[3 + i] = (hist_board == 1) # تاريخ الأسود
features[11 + i] = (hist_board == 2) # تاريخ الأبيض
# 20-27: ميزات الحريات
liberties = compute_liberties(board)
for i, lib_count in enumerate([1, 2, 3, 4]):
my_color = current_player
opp_color = 3 - current_player
features[19 + i] = (liberties == lib_count) & (board == my_color)
features[23 + i] = (liberties == lib_count) & (board == opp_color)
# 28-35: ميزات الأتاري
capture_counts = compute_captures(board)
for i, cap_count in enumerate([1, 2, 3, 4]):
features[27 + i] = (capture_counts[current_player] == cap_count)
features[31 + i] = (capture_counts[3-current_player] == cap_count)
# 36-43: ميزات السلم (مبسطة)
ladder_status = compute_ladder(board)
# ... حذف التنفيذ المفصل ...
# 44: المواقع المشروعة
features[43] = compute_legal_moves(board, current_player)
# 45-48: مسافة الحافة
for i in range(19):
for j in range(19):
dist = min(i, j, 18-i, 18-j)
if dist == 0:
features[44, i, j] = 1
elif dist == 1:
features[45, i, j] = 1
elif dist == 2:
features[46, i, j] = 1
else:
features[47, i, j] = 1
return features
استخراج الميزات (طريقة AlphaGo Zero)
def extract_features_zero(board_history, current_player):
"""
استخراج 17 مستوى ميزات بطريقة AlphaGo Zero
board_history: قائمة آخر 8 حالات للرقعة
current_player: 1=أسود، 2=أبيض
"""
features = np.zeros((17, 19, 19))
# 1-8: مواقع الأسود T-0 إلى T-7
for i, board in enumerate(board_history[:8]):
features[i] = (board == 1)
# 9-16: مواقع الأبيض T-0 إلى T-7
for i, board in enumerate(board_history[:8]):
features[8 + i] = (board == 2)
# 17: دور من
if current_player == 1: # الأسود
features[16] = np.ones((19, 19))
else:
features[16] = np.zeros((19, 19))
return features
مقارنة الأداء
import time
# محاكاة 1000 استخراج ميزات
board = np.random.randint(0, 3, (19, 19))
history = [np.random.randint(0, 3, (19, 19)) for _ in range(8)]
# طريقة AlphaGo (مع حسابات معقدة)
start = time.time()
for _ in range(1000):
features = extract_features_alphago(board, history, 1)
alphago_time = time.time() - start
# طريقة AlphaGo Zero (بسيطة)
start = time.time()
for _ in range(1000):
features = extract_features_zero(history, 1)
zero_time = time.time() - start
print(f"طريقة AlphaGo: {alphago_time:.2f}s")
print(f"طريقة AlphaGo Zero: {zero_time:.2f}s")
# نتيجة نموذجية: طريقة AlphaGo أبطأ 5-10 مرات
تصور مستويات الميزات
مثال لوضع فعلي
الرقعة الفعلية:
A B C D E F G H J K L M N O P Q R S T
19 . . . . . . . . . . . . . . . . . . .
18 . . . . . . . . . . . . . . . . . . .
17 . . . ● . . . . . . . . . . . ○ . . .
16 . . . . . . . . . . . . . . . . . . .
15 . . . . . . . . . . . . . . . . . . .
...
مستوى الميزات 1 (الأسود):
A B C D E F G H J K L M N O P Q R S T
19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...
مستوى الميزات 2 (الأبيض):
A B C D E F G H J K L M N O P Q R S T
19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...
رؤى من مستويات الميزات
ملاحظة مستويات ميزات مختلفة تساعد على فهم ما "تراه" الشبكة:
| الميزة | المعنى البديهي | ما قد تتعلمه الشبكة |
|---|---|---|
| مواقع الأسود/الأبيض | من أين | الأشكال، الاتصال |
| التاريخ | ما حدث مؤخراً | نية اللعب، اتجاه القتال |
| الحريات | من في خطر | أهداف الهجوم/الدفاع |
| الأتاري | فرص تكتيكية | تكتيكات محلية |
| مسافة الحافة | أهمية الموقع | اختيار الافتتاح، جوسيكي الزوايا |
الرسوم المتحركة المقابلة
المفاهيم الأساسية في هذه المقالة وأرقام الرسوم المتحركة المقابلة:
| الرقم | المفهوم | المقابل الفيزيائي/الرياضي |
|---|---|---|
| A8 | ترميز الميزات | تمثيل الموترات |
| A10 | تطبيع المدخلات | هندسة الميزات |
| D1 | مدخلات الالتفاف | صور متعددة القنوات |
| E3 | تبسيط Zero | التمثيل الأدنى |
قراءات إضافية
- المقالة السابقة: شرح مفصل لشبكة Value — كيفية تقييم قيمة الوضع
- المقالة التالية: دمج CNN مع الغو — كيف تعالج الشبكات العصبية الالتفافية الرقعة
- موضوع ذو صلة: تمثيل حالة الرقعة — هياكل البيانات الأدنى مستوى
النقاط الرئيسية
- مستويات الميزات هي التمثيل الرقمي للرقعة: كل مستوى مصفوفة 19×19
- AlphaGo استخدم 48 مستوى: تتضمن كثير من معرفة الغو البشرية
- AlphaGo Zero بسّطها إلى 17: أثبت أن الشبكة يمكنها تعلم الميزات بنفسها
- KataGo حسّنها إلى 22: توازن بين الكفاءة والأداء
- تصميم الميزات هو مقايضة: المعرفة البشرية مقابل الموارد الحسابية
تصميم ميزات المدخلات هو الجسر الذي يربط "الغو كما يفهمه البشر" مع "الأرقام التي يمكن للآلة معالجتها".
المراجع
- Silver, D., et al. (2016). "Mastering the game of Go with deep neural networks and tree search." Nature, 529, 484-489.
- Silver, D., et al. (2017). "Mastering the game of Go without human knowledge." Nature, 551, 354-359.
- Wu, D. (2019). "Accelerating Self-Play Learning in Go." arXiv:1902.10565.
- KataGo Documentation: https://github.com/lightvector/KataGo