الدرس 2 — قابلية إعادة الإنتاج
سؤال بسيط يكشف صحّة أيّ فريق: هل تستطيع إعادة بناء النموذج الذي في الإنتاج اليوم، من الصفر، بالنتيجة نفسها؟
في فرق كثيرة، الجواب لا. وهذا يعني أنّ النموذج الذي يتّخذ قرارات حقيقية صندوق أسود لا يمكن تفسيره ولا إصلاحه ولا تدقيقه.
لماذا هذا صعب أكثر من البرمجيات
في البرمجيات، نسخة الكود تكفي: النتيجة نفسها من المصدر نفسه.
وفي تعلّم الآلة، النتيجة تعتمد على كلّ ما يلي في وقت واحد:
- الكود.
- البيانات بحالتها في لحظة التدريب.
- المعاملات الفائقة المستخدَمة.
- نسخ المكتبات.
- البذرة العشوائية.
- خطوات معالجة البيانات وترتيبها.
- العتاد أحياناً، في حالات دقّة الفواصل العائمة.
وأيّ عنصر مفقود من هذه يجعل إعادة الإنتاج مستحيلة.
نسخ البيانات: العنصر الأصعب
الكود يُنسَّخ بأدوات معروفة، والبيانات لا.
المشاكل العملية:
- الحجم: أدوات نسخ الكود لا تصلح لغيغابايتات.
- التغيّر المستمرّ: جدول قاعدة بيانات يتغيّر كلّ ساعة.
- الحذف: طلب حذف مشروع يزيل سجلّات كانت في التدريب.
والمقاربات المتّبعة:
بصمة البيانات. الحدّ الأدنى المقبول: تخزين بصمة رقمية لمجموعة التدريب مع النموذج، فتستطيع على الأقلّ التحقّق إن كانت البيانات نفسها.
لقطة زمنية. حفظ نسخة من البيانات في لحظة التدريب. مباشر، ومكلف في التخزين.
استعلام مع لحظة زمنية. تخزين الاستعلام الذي أنتج البيانات مع الوقت المرجعي، وإعادة تشغيله لاحقاً على أرشيف. المقاربة الأنظف إذا كانت بنيتك تدعمها.
تسجيل التجارب
في أثناء التطوير، يجرّب فريقك عشرات النماذج. وبلا تسجيل، السؤال «ما الذي أعطى أفضل نتيجة الأسبوع الماضي؟» يبقى بلا جواب.
ما يُسجَّل لكلّ تجربة:
- المعاملات الفائقة كلّها.
- المقاييس على مجموعات التدريب والتحقّق والاختبار.
- مرجع نسخة الكود.
- مرجع نسخة البيانات.
- نسخ المكتبات.
- مدّة التدريب والموارد المستخدَمة.
- الملفّ الناتج نفسه.
تسجيل التجارب يبدو عملاً إدارياً حتى تحتاجه. وأكثر ما يُستخدَم فيه فعلاً: حين يتدهور نموذج في الإنتاج، فتحتاج المقارنة بحالة كانت تعمل. وبلا سجلّ، أنت تخمّن. ومع سجلّ، تعرف بدقّة ما تغيّر.
سجلّ النماذج
مكان مركزي يحتوي كلّ نموذج مدرَّب، بمعلوماته:
- من دربّه، ومتى.
- على أيّ بيانات.
- ما مقاييسه.
- في أيّ حالة: تجريبي، مرشَّح، في الإنتاج، متقاعد.
- من وافق على نشره.
وهذا يجيب أسئلة تشغيلية أساسية: أيّ نموذج يعمل الآن؟ وإلى ماذا نتراجع إذا فشل؟ ومن المسؤول عنه؟ وبلا سجلّ، هذه الأسئلة تُجاب بالذاكرة الجماعية، وهي تفشل عند أوّل تغيّر في الفريق.
مخزن السمات
يحلّ مشكلتين رأيناهما في الدرس السابق:
انحراف التدريب عن الخدمة. السمة تُعرَّف مرّةً واحدة، ويستخدمها التدريب والاستنتاج معاً. ولا مجال لاختلاف في الحساب، لأنّ الحساب واحد.
تكرار العمل. «متوسّط مشتريات العميل في 30 يوماً» تُحسب مرّةً وتُستخدَم في كلّ النماذج، بدل أن يكتبها كلّ فريق من جديد بطريقة مختلفة قليلاً.
وهو استثمار يُبرَّر عند وجود عدّة نماذج تتشارك سمات، ومبالَغ فيه لنموذج واحد. لا تبنِ مخزن سمات لنموذجك الأول.
البذرة العشوائية
تفصيل صغير الأثر الظاهر وكبير الأثر العملي: تقسيم البيانات وتهيئة الأوزان وترتيب الدفعات كلّها عشوائية.
بلا تثبيت البذرة، تدريبان بالكود نفسه على البيانات نفسها يعطيان نموذجين مختلفين. والفرق قد يكون نقطتين في الدقّة، وهذا كافٍ لتضييع أسبوع في مطاردة تحسّن غير حقيقي.
القاعدة: ثبّت البذرة في كلّ مكان واسجّلها. وإذا كان الفرق بين تدريبين بالبذرة نفسها كبيراً، فهذه معلومة مهمّة بحدّ ذاتها: نموذجك غير مستقرّ.
الحدّ الأدنى العملي
إذا لم يكن لديك شيء، ابدأ بهذه الخمسة، وهي كافية لمعظم الفرق:
- الكود في نظام نسخ مع مرجع محدَّد لكلّ تدريب.
- بصمة أو مرجع للبيانات مخزَّن مع النموذج.
- تسجيل التجارب ولو بجدول بسيط في البداية.
- بذرة عشوائية مثبَّتة ومسجَّلة.
- ملفّ يحدّد نسخ المكتبات بدقّة.
والأدوات المتقدّمة تُضاف عند الحاجة، لا قبلها.
في ثلاث جمل
قابلية إعادة الإنتاج في تعلّم الآلة أصعب منها في البرمجيات لأنّ النتيجة تعتمد على الكود والبيانات والمعاملات ونسخ المكتبات والبذرة العشوائية في وقت واحد، وأصعب هذه العناصر هو نسخ البيانات لأنّها كبيرة ومتغي ّرة. وتسجيل التجارب وسجلّ النماذج يجيبان الأسئلة التشغيلية الحاسمة — أيّ نموذج يعمل، وإلى ماذا نتراجع، ومن المسؤول — وأكثر ما يُستخدَمان فيه هو المقارنة عند تدهور نموذج في الإنتاج. ومخزن السمات يمنع انحراف التدريب عن الخدمة بتعريف السمة مرّةً واحدة، وهو استثمار يُبرَّر عند تعدّد النماذج لا لنموذجك الأول.
التالي — الدرس 3: النشر ←