قم بتحسين المعلمات الفائقة باستخدام Amazon SageMaker Automatic Model Tuning PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.

قم بتحسين المعلمات الفائقة باستخدام الضبط التلقائي للنموذج Amazon SageMaker

نماذج التعلم الآلي (ML) تغزو العالم. يعتمد أداؤهم على استخدام بيانات التدريب الصحيحة واختيار النموذج المناسب والخوارزمية. لكنها لا تنتهي هنا. عادة ، تؤجل الخوارزميات بعض قرارات التصميم لممارس ML لاعتمادها لبياناتهم ومهمتهم المحددة. تظهر قرارات التصميم المؤجلة هذه على أنها معلمات مفرطة.

ماذا يعني هذا الاسم؟ يمكن اعتبار نتيجة تدريب ML ، النموذج ، إلى حد كبير على أنها مجموعة من المعلمات التي يتم تعلمها أثناء التدريب. لذلك ، فإن المعلمات المستخدمة لتكوين عملية تدريب ML تسمى بعد ذلك المعلمات الفائقة - المعلمات التي تصف إنشاء المعلمات. على أي حال ، فهي ذات فائدة عملية للغاية ، مثل عدد فترات التدريب ، ومعدل التعلم ، وأقصى عمق لشجرة القرار ، وما إلى ذلك. ونحن نوليها اهتمامًا كبيرًا لأن لها تأثيرًا كبيرًا على الأداء النهائي لنموذجك.

تمامًا مثل تشغيل مقبض على جهاز استقبال لاسلكي للعثور على التردد الصحيح ، يجب ضبط كل معلمة فائقة بعناية لتحسين الأداء. يُشار إلى البحث في مساحة المعلمة التشعبية عن القيم المثلى باسم ضبط فرط المعلمة or التحسين الفائق (HPO) ، ويجب أن ينتج عنه نموذج يعطي تنبؤات دقيقة.

في هذا المنشور ، قمنا بإعداد وتشغيل أول وظيفة HPO باستخدام الضبط التلقائي لنموذج Amazon SageMaker (AMT). نتعرف على الطرق المتاحة لاستكشاف النتائج ، وإنشاء بعض التصورات الثاقبة لتجارب HPO الخاصة بنا واستكشاف مساحة المعلمة الفائقة!

الضبط التلقائي لنموذج Amazon SageMaker

كممارس لتعلم الآلة باستخدام سيج ميكر ايه ام تي، يمكنك التركيز على ما يلي:

  • توفير وظيفة تدريبية
  • تحديد مقياس الهدف المناسب المناسب لمهمتك
  • تحديد نطاق مساحة البحث الخاصة بالمعلمات الفائقة

تعتني SageMaker AMT بالباقي ، ولا تحتاج إلى التفكير في البنية التحتية ، وتنظيم وظائف التدريب ، وتحسين اختيار المعامل الفائق.

لنبدأ باستخدام SageMaker AMT لأول مهمة HPO بسيطة ، لتدريب وضبط خوارزمية XGBoost. نريد أن تكون رحلة AMT الخاصة بك عملية وعملية ، لذلك شاركنا المثال في ما يلي مستودع جيثب. يغطي هذا المنشور 1_tuning_of_builtin_xgboost.ipynb دفتر.

في منشور قادم ، سنقوم بتوسيع فكرة العثور على أفضل المعلمات التشعبية فقط وتضمين التعرف على مساحة البحث ونطاقات المعلمات الفائقة التي يكون النموذج حساسًا. سنوضح أيضًا كيفية تحويل نشاط ضبط من طلقة واحدة إلى محادثة متعددة الخطوات مع ممارس ML ، للتعلم معًا. ابق على اتصال (يقصد التورية)!

المتطلبات الأساسية المسبقة

هذا المنشور مخصص لأي شخص مهتم بالتعرف على HPO ولا يتطلب معرفة مسبقة بالموضوع. على الرغم من ذلك ، فإن الإلمام الأساسي بمفاهيم ML وبرمجة Python مفيد. للحصول على أفضل تجربة تعليمية ، نوصي بشدة بمتابعتها تشغيل كل خطوة في دفتر الملاحظات بالتوازي مع قراءة هذا المنشور. وفي نهاية دفتر الملاحظات ، يمكنك أيضًا تجربة تصور تفاعلي يجعل نتائج الضبط تنبض بالحياة.

حل نظرة عامة

سنقوم ببناء إعداد شامل لتشغيل أول وظيفة HPO لدينا باستخدام SageMaker AMT. عندما تكتمل مهمة الضبط لدينا ، فإننا ننظر إلى بعض الطرق المتاحة لاستكشاف النتائج ، سواء عبر وحدة تحكم إدارة AWS وبرمجيًا عبر AWS SDKs و APIs.

أولاً ، نتعرف على البيئة وتدريب SageMaker من خلال تشغيل وظيفة تدريب قائمة بذاتها ، دون أي ضبط في الوقت الحالي. نحن نستخدم خوارزمية XGBoost ، وهي واحدة من العديد من الخوارزميات المتوفرة كملف خوارزمية SageMaker المضمنة (لا يوجد نص تدريب مطلوب!).

نرى كيف يعمل تدريب SageMaker بالطرق التالية:

  • يبدأ مثيل ويوقفه
  • يوفر الحاوية اللازمة
  • نسخ بيانات التدريب والتحقق من الصحة على المثيل
  • يدير التدريب
  • يجمع المقاييس والسجلات
  • يجمع ويخزن النموذج المدرب

ثم ننتقل إلى AMT وندير وظيفة HPO:

  • قمنا بإعداد وإطلاق وظيفة التوليف الخاصة بنا مع AMT
  • نتعمق في الأساليب المتاحة لاستخراج مقاييس الأداء التفصيلية والبيانات الوصفية لكل وظيفة تدريبية ، والتي تمكننا من معرفة المزيد عن القيم المثلى في مساحة المعلمة الفائقة لدينا
  • نوضح لك كيفية عرض نتائج التجارب
  • نوفر لك الأدوات اللازمة لتصور البيانات في سلسلة من المخططات التي تكشف عن رؤى قيمة في مساحة المعلمة الفائقة لدينا

قم بتدريب خوارزمية XGBoost المضمنة في SageMaker

كل شيء يبدأ بتدريب نموذج. من خلال القيام بذلك ، نتعرف على كيفية عمل تدريب SageMaker.

نريد الاستفادة من السرعة وسهولة الاستخدام التي يوفرها SageMaker خوارزميات مدمجة. كل ما نحتاجه هو بضع خطوات لبدء التدريب:

  1. تحضير البيانات وتحميلها - نقوم بتنزيل مجموعة البيانات الخاصة بنا وإعدادها كمدخلات لـ XGBoost وتحميلها إلى ملف خدمة تخزين أمازون البسيطة دلو (أمازون S3).
  2. حدد عنوان URI لصورة الخوارزمية المضمنة لدينا - يستخدم SageMaker URI هذا لجلب حاوية التدريب الخاصة بنا ، والتي تحتوي في حالتنا على برنامج نصي للتدريب XGBoost جاهز للاستخدام. يتم دعم العديد من إصدارات الخوارزمية.
  3. حدد المعلمات الفوقية - يوفر SageMaker واجهة لتعريف ملف معلمات مفرطة للخوارزمية المدمجة لدينا. هذه هي نفس المعلمات التشعبية المستخدمة في الإصدار المفتوح المصدر.
  4. بناء المقدّر - نحدد معلمات التدريب مثل نوع المثيل وعدد الحالات.
  5. قم باستدعاء دالة fit () - نبدأ عملنا التدريبي.

يوضح الرسم التخطيطي التالي كيف تعمل هذه الخطوات معًا.

قم بتوفير البيانات

لتشغيل تدريب تعلم الآلة ، نحتاج إلى توفير البيانات. نقدم بيانات التدريب والتحقق الخاصة بنا إلى SageMaker عبر Amazon S3.

في مثالنا ، من أجل التبسيط ، نستخدم دلو SageMaker الافتراضي لتخزين بياناتنا. لكن لا تتردد في تخصيص القيم التالية حسب ما تفضله:

sm_sess = sagemaker.session.Session([..])

BUCKET = sm_sess.default_bucket()
PREFIX = 'amt-visualize-demo'
output_path = f's3://{BUCKET}/{PREFIX}/output'

في دفتر الملاحظات ، نستخدم مجموعة بيانات عامة ونخزن البيانات محليًا في ملف data الدليل. ثم نقوم بتحميل بيانات التدريب والتحقق الخاصة بنا إلى Amazon S3. لاحقًا ، نحدد أيضًا مؤشرات لهذه المواقع لتمريرها إلى SageMaker Training.

# acquire and prepare the data (not shown here)
# store the data locally
[..]
train_data.to_csv('data/train.csv', index=False, header=False)
valid_data.to_csv('data/valid.csv', index=False, header=False)
[..]
# upload the local files to S3
boto_sess.resource('s3').Bucket(BUCKET).Object(os.path.join(PREFIX, 'data/train/train.csv')).upload_file('data/train.csv')
boto_sess.resource('s3').Bucket(BUCKET).Object(os.path.join(PREFIX, 'data/valid/valid.csv')).upload_file('data/valid.csv')

في هذا المنشور ، نركز على تقديم HPO. للتوضيح ، نستخدم مجموعة بيانات ومهمة محددة ، حتى نتمكن من الحصول على قياسات للمقاييس الموضوعية التي نستخدمها بعد ذلك لتحسين اختيار المعلمات الفائقة. ومع ذلك ، بالنسبة للمنشور العام ، لا يهم البيانات ولا المهمة. لتقديم صورة كاملة لك ، دعنا نصف بإيجاز ما نقوم به: نقوم بتدريب نموذج XGBoost الذي يجب أن يصنف الأرقام المكتوبة بخط اليد من
التعرف البصري على مجموعة بيانات الأرقام المكتوبة بخط اليد [1] عبر Scikit-Learn. XGBoost هي خوارزمية ممتازة للبيانات المهيكلة ويمكن حتى تطبيقها على مجموعة بيانات الأرقام. القيم هي 8 × 8 صور ، كما في المثال التالي يظهر a
0 a
5 و
4.

قم بتحسين المعلمات الفائقة باستخدام Amazon SageMaker Automatic Model Tuning PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.

حدد عنوان URI لصورة XGBoost

بعد اختيار الخوارزمية المدمجة (XGBoost) ، يجب علينا استرداد URI للصورة وتمريرها إلى SageMaker لتحميلها على مثيل التدريب الخاص بنا. بالنسبة لهذه الخطوة ، نقوم بمراجعة ملف الإصدارات المتاحة. هنا قررنا استخدام الإصدار 1.5.1 ، والذي يقدم أحدث إصدار من الخوارزمية. اعتمادًا على المهمة ، قد يكتب ممارسو ML البرنامج النصي التدريبي الخاص بهم والذي يتضمن ، على سبيل المثال ، خطوات إعداد البيانات. لكن هذا ليس ضروريًا في حالتنا.

إذا كنت ترغب في كتابة نص التدريب الخاص بك ، فابق على اتصال ، فقد قمنا بتغطيتك في منشورنا التالي! سنوضح لك كيفية تشغيل وظائف SageMaker Training مع البرامج النصية المخصصة للتدريب.

في الوقت الحالي ، نحتاج إلى عنوان URI الصحيح للصورة عن طريق تحديد الخوارزمية ومنطقة AWS ورقم الإصدار:

xgboost_container = sagemaker.image_uris.retrieve('xgboost', region, '1.5-1')

هذا هو. الآن لدينا مرجع إلى خوارزمية XGBoost.

حدد المعلمات الفوقية

الآن نحدد معلماتنا الفائقة. تعمل هذه القيم على تكوين كيفية تدريب نموذجنا ، وفي النهاية تؤثر على كيفية أداء النموذج مقابل المقياس الموضوعي الذي نقيسه ، مثل الدقة في حالتنا. لاحظ أنه لا يوجد شيء يتعلق بمجموعة التعليمات البرمجية التالية خاص بـ SageMaker. نحن في الواقع نستخدم ملف نسخة مفتوحة المصدر من XGBoost ، تم توفيره للتو بواسطة SageMaker وتحسينه.

على الرغم من أن كل من هذه المعلمات الفائقة قابلة للتكوين والتعديل ، إلا أن المقياس الموضوعي multi:softmax يتم تحديده من خلال مجموعة البيانات الخاصة بنا ونوع المشكلة التي نحلها. في حالتنا ، تحتوي مجموعة بيانات Digits على عدة تسميات (ملاحظة رقم مكتوب بخط اليد يمكن أن تكون 0 or 1,2,3,4,5,6,7,8,9) ، مما يعني أنها مشكلة تصنيف متعدد الفئات.

hyperparameters = {
    'num_class': 10,
    'max_depth': 5,
    'eta':0.2,
    'alpha': 0.2,
    'objective':'multi:softmax',
    'eval_metric':'accuracy',
    'num_round':200,
    'early_stopping_rounds': 5
}

لمزيد من المعلومات حول المعلمات التشعبية الأخرى ، يرجى الرجوع إلى معلمات XGBoost الفائقة.

بناء المقدّر

نقوم بتكوين التدريب على كائن مقدر ، وهو واجهة عالية المستوى لتدريب SageMaker.

بعد ذلك ، نحدد عدد المثيلات التي سيتم التدرب عليها ، ونوع المثيل (المعتمد على وحدة المعالجة المركزية أو المعتمد على وحدة معالجة الرسومات) ، وحجم التخزين المرفق:

estimator = sagemaker.estimator.Estimator(
    image_uri=xgboost_container, 
    hyperparameters=hyperparameters,
    role=role,
    instance_count=1, 
    instance_type='ml.m5.large', 
    volume_size=5, # 5 GB 
    output_path=output_path
)

لدينا الآن تكوين البنية التحتية التي نحتاجها للبدء. سيهتم تدريب SageMaker بالباقي.

قم باستدعاء دالة fit ()

هل تتذكر البيانات التي قمنا بتحميلها إلى Amazon S3 مسبقًا؟ الآن نقوم بإنشاء مراجع لها:

s3_input_train = TrainingInput(s3_data=f's3://{BUCKET}/{PREFIX}/data/train', content_type='csv')
s3_input_valid = TrainingInput(s3_data=f's3://{BUCKET}/{PREFIX}/data/valid', content_type='csv')

دعوة ل fit() تطلق تدريبنا. نقوم بتمرير المراجع إلى بيانات التدريب التي أنشأناها للتو لتوجيه تدريب SageMaker إلى بيانات التدريب والتحقق من الصحة الخاصة بنا:

estimator.fit({'train': s3_input_train, 'validation': s3_input_valid})

لاحظ أنه لتشغيل HPO لاحقًا ، لا نحتاج بالفعل إلى الاتصال fit() هنا. نحتاج فقط إلى كائن المقدر لاحقًا لـ HPO ، ويمكننا القفز لإنشاء وظيفة HPO الخاصة بنا. ولكن نظرًا لأننا نريد التعرف على تدريب SageMaker ومعرفة كيفية تشغيل وظيفة تدريبية واحدة ، فإننا نسميها هنا ونراجع المخرجات.

بعد بدء التدريب ، نبدأ في رؤية الإخراج أسفل الخلايا ، كما هو موضح في لقطة الشاشة التالية. الإخراج متاح في الأمازون CloudWatch وكذلك في هذا دفتر الملاحظات.

النص الأسود هو إخراج السجل من SageMaker نفسه ، ويظهر الخطوات المتضمنة في تنسيق التدريب ، مثل بدء المثيل وتحميل صورة التدريب. يتم إخراج النص الأزرق مباشرة من نسخة التدريب نفسها. يمكننا مراقبة عملية تحميل بيانات التدريب وتحليلها ، ونرى بصريًا تقدم التدريب والتحسن في مقياس الهدف مباشرةً من البرنامج النصي للتدريب الذي يعمل على المثيل.

الإخراج من وظيفة fit () في دفتر Jupyter

لاحظ أيضًا أنه في نهاية مهمة الإخراج ، يتم عرض مدة التدريب بالثواني والثواني القابلة للفوترة.

أخيرًا ، نرى أن SageMaker يقوم بتحميل نموذج التدريب الخاص بنا إلى مسار إخراج S3 المحدد في كائن المقدر. النموذج جاهز للنشر للاستدلال.

في منشور مستقبلي ، سننشئ حاوية تدريب خاصة بنا ونحدد مقاييس التدريب الخاصة بنا لإصدارها. سترى كيف أن SageMaker لا يعرف الحاوية التي تمررها للتدريب. يعد هذا مفيدًا جدًا عندما تريد البدء بسرعة باستخدام خوارزمية مدمجة ، ولكن بعد ذلك قررت فيما بعد تمرير البرنامج النصي المخصص للتدريب!

فحص وظائف التدريب الحالية والسابقة

حتى الآن ، عملنا من دفتر ملاحظاتنا باستخدام الكود الخاص بنا وقدمنا ​​وظائف التدريب إلى SageMaker. دعنا نبدل وجهات النظر ونترك دفتر الملاحظات للحظة للتحقق من شكل هذا على وحدة تحكم SageMaker.

عرض وحدة التحكم لوظائف تدريب SageMaker

يحتفظ SageMaker بسجل تاريخي لوظائف التدريب التي يديرها ، وتكويناتها مثل المعلمات الفائقة ، والخوارزميات ، وإدخال البيانات ، والوقت القابل للفوترة ، والنتائج. في القائمة الموجودة في لقطة الشاشة السابقة ، ترى وظائف التدريب الأخيرة التي تمت تصفيتها لـ XGBoost. وظيفة التدريب المميزة هي الوظيفة التي قمنا بتدريبها للتو في دفتر الملاحظات ، والتي رأيت مخرجاتها سابقًا. دعنا نتعمق في هذه الوظيفة التدريبية الفردية للحصول على مزيد من المعلومات.

تُظهر لقطة الشاشة التالية عرض وحدة التحكم لوظيفة التدريب لدينا.

عرض وحدة التحكم لوظيفة تدريب SageMaker واحدة

يمكننا مراجعة المعلومات التي تلقيناها كإخراج خلية لنا fit() تعمل في وظيفة التدريب الفردي داخل وحدة تحكم SageMaker ، جنبًا إلى جنب مع المعلمات والبيانات الوصفية التي حددناها في مُقدِّرنا.

استرجع إخراج السجل من مثيل التدريب الذي رأيناه سابقًا. يمكننا الوصول إلى سجلات وظيفتنا التدريبية هنا أيضًا ، من خلال التمرير إلى مراقبة القسم والاختيار عرض السجلات.

عرض وحدة التحكم لعلامة تبويب المراقبة في وظيفة التدريب

هذا يوضح لنا سجلات المثيل داخل CloudWatch.

عرض وحدة التحكم لسجلات مثيل التدريب في CloudWatch

تذكر أيضًا المعلمات الفائقة التي حددناها في دفتر ملاحظاتنا لوظيفة التدريب. نراهم هنا في نفس واجهة المستخدم لوظيفة التدريب أيضًا.

عرض وحدة التحكم للمعلمات الفائقة لوظيفة تدريب SageMaker

في الواقع ، يمكن العثور على التفاصيل والبيانات الوصفية التي حددناها مسبقًا لوظيفة التدريب والمقدر في هذه الصفحة في وحدة تحكم SageMaker. لدينا سجل مفيد للإعدادات المستخدمة للتدريب ، مثل حاوية التدريب التي تم استخدامها ومواقع مجموعات بيانات التدريب والتحقق من الصحة.

قد تسأل في هذه المرحلة ، لماذا بالضبط هذا مناسب لتحسين المعلمة الفائقة؟ هذا لأنه يمكنك البحث والتفتيش والتعمق أكثر في تجارب HPO التي نهتم بها. ربما تلك التي تحقق أفضل النتائج ، أو تلك التي تظهر سلوكًا مثيرًا للاهتمام. سنترك لك ما تحدده على أنه "مثير للاهتمام". يمنحنا واجهة مشتركة لفحص وظائف التدريب لدينا ، ويمكنك استخدامها مع SageMaker Search.

على الرغم من أن SageMaker AMT تنظم وظائف HPO ، إلا أن تجارب HPO تم إطلاقها جميعًا كوظائف تدريب فردية من SageMaker ويمكن الوصول إليها على هذا النحو.

مع تغطية التدريب ، دعنا نضبط!

تدريب وضبط خوارزمية XGBoost المضمنة في SageMaker

لضبط نموذج XGBoost الخاص بنا ، سنقوم بإعادة استخدام معلماتنا التشعبية الحالية وتحديد نطاقات القيم التي نريد استكشافها لها. فكر في هذا على أنه توسيع حدود الاستكشاف داخل مساحة البحث الخاصة بالمعامل الفائق. ستقوم وظيفة التوليف الخاصة بنا بأخذ عينات من مساحة البحث وتشغيل وظائف تدريبية لمجموعات جديدة من القيم. يوضح الكود التالي كيفية تحديد نطاقات المعلمات التشعبية التي يجب على SageMaker AMT أخذ عينات منها:

from sagemaker.tuner import IntegerParameter, ContinuousParameter, HyperparameterTuner

hpt_ranges = {
    'alpha': ContinuousParameter(0.01, .5),
    'eta': ContinuousParameter(0.1, .5),
    'min_child_weight': ContinuousParameter(0., 2.),
    'max_depth': IntegerParameter(1, 10)
}

يتم تحديد نطاقات المعامل التشعبي الفردي حسب نوعها ، مثل مستمر المعلمة. لمزيد من المعلومات والنصائح حول اختيار نطاقات المعلمات هذه ، يرجى الرجوع إلى قم بضبط نموذج XGBoost.

لم نقم بإجراء أي تجارب حتى الآن ، لذلك لا نعرف نطاقات القيم الجيدة لمعلمات التشعب الخاصة بنا. لذلك ، نبدأ بتخمين متعلم ، باستخدام معرفتنا بالخوارزميات وتوثيقنا للمعلمات الفائقة للخوارزميات المضمنة. هذا يحدد نقطة البداية لتحديد مساحة البحث.

ثم نقوم بعمل توليف لأخذ عينات من المعلمات الفائقة في النطاقات المحددة. نتيجة لذلك ، يمكننا أن نرى أي نطاقات من المعلمات الفائقة تعطي نتائج جيدة. من خلال هذه المعرفة ، يمكننا تحسين حدود مساحة البحث عن طريق تضييق أو توسيع نطاقات المعلمات الفائقة التي يجب استخدامها. نوضح كيفية التعلم من التجارب في القسم التالي والأخير ، حيث نقوم بالتحقيق في النتائج وتصورها.

في مقالنا التالي ، سنواصل رحلتنا ونغوص بشكل أعمق. بالإضافة إلى ذلك ، سوف نتعلم أن هناك العديد من الاستراتيجيات التي يمكننا استخدامها لاستكشاف مساحة البحث الخاصة بنا. سنقوم بتشغيل وظائف HPO اللاحقة للعثور على قيم أداء أكثر لمعلماتنا الفائقة ، أثناء مقارنة هذه الاستراتيجيات المختلفة. سنرى أيضًا كيفية تشغيل بداية دافئة مع SageMaker AMT لاستخدام المعرفة المكتسبة من مساحات البحث التي تم استكشافها مسبقًا في استكشافنا خارج تلك الحدود الأولية.

بالنسبة لهذا المنشور ، نركز على كيفية تحليل وتصور نتائج وظيفة HPO واحدة باستخدام استراتيجية بحث Bayesian ، والتي من المحتمل أن تكون نقطة انطلاق جيدة.

إذا تابعت في دفتر الملاحظات المرتبط ، فلاحظ أننا نجتاز نفس المقدّر الذي استخدمناه لوظيفة تدريب XGBoost الفردية المضمنة. يعمل كائن المقدّر هذا كقالب لوظائف التدريب الجديدة التي تنشئها AMT. سيغير AMT بعد ذلك المعلمات التشعبية داخل النطاقات التي حددناها.

من خلال تحديد أننا نريد تعظيم مقياس الهدف لدينا ، validation:accuracy، نخبر SageMaker AMT بالبحث عن هذه المقاييس في سجلات مثيلات التدريب واختيار قيم المعلمات الفائقة التي تعتقد أنها ستزيد من قياس الدقة في بيانات التحقق الخاصة بنا. اخترنا المناسب مقياس موضوعي لـ XGBoost من وثائقنا.

بالإضافة إلى ذلك ، يمكننا الاستفادة من التوازي مع max_parallel_jobs. يمكن أن تكون هذه أداة قوية ، خاصة للاستراتيجيات التي يتم اختيار تجاربها بشكل مستقل ، دون مراعاة (التعلم من) نتائج التجارب السابقة. سنستكشف هذه الاستراتيجيات والمعايير الأخرى بشكل أكبر في مقالتنا التالية. في هذا المنشور ، نستخدم Bayesian ، وهي استراتيجية افتراضية ممتازة.

نحدد أيضا max_jobs لتحديد عدد المحاكمات المطلوب إجراؤها إجمالاً. لا تتردد في الخروج عن مثالنا واستخدام رقم أصغر لتوفير المال.

n_jobs = 50
n_parallel_jobs = 3

tuner_parameters = {
    'estimator': estimator, # The same estimator object we defined above
    'base_tuning_job_name': 'bayesian',
    'objective_metric_name': 'validation:accuracy',
    'objective_type': 'Maximize',
    'hyperparameter_ranges': hpt_ranges,
    'strategy': 'Bayesian',
    'max_jobs': n_jobs,
    'max_parallel_jobs': n_parallel_jobs
}

ندعو مرة أخرى fit()، بالطريقة نفسها عندما أطلقنا وظيفة تدريب واحدة في وقت سابق في هذا المنصب. لكن هذه المرة على كائن الموالف ، وليس كائن المقدر. هذا يبدأ وظيفة الضبط ، وبدوره يبدأ AMT في وظائف التدريب.

tuner = HyperparameterTuner(**tuner_parameters)
tuner.fit({'train': s3_input_train, 'validation': s3_input_valid}, wait=False)
tuner_name = tuner.describe()['HyperParameterTuningJobName']
print(f'tuning job submitted: {tuner_name}.')

يتوسع الرسم البياني التالي في بنيتنا السابقة من خلال تضمين HPO مع SageMaker AMT.

نظرة عامة على تدريب SageMaker وتحسين المعلمات الفائقة باستخدام SageMaker AMT

نرى أنه تم تقديم وظيفة HPO لدينا. اعتمادًا على عدد المحاولات المحددة بواسطة n_jobs ومستوى الموازاة ، قد يستغرق ذلك بعض الوقت. على سبيل المثال ، قد يستغرق الأمر ما يصل إلى 30 دقيقة لـ 50 تجربة بمستوى موازاة 3 فقط.

tuning job submitted: bayesian-221102-2053.

عند انتهاء مهمة الضبط هذه ، دعنا نستكشف المعلومات المتاحة لنا على وحدة تحكم SageMaker.

تحقق من وظائف AMT على وحدة التحكم

دعنا نجد وظيفة الضبط الخاصة بنا على وحدة تحكم SageMaker عن طريق الاختيار قادة الإيمان في جزء التنقل ثم وظائف ضبط Hyperparameter. هذا يعطينا قائمة بوظائف AMT ، كما هو موضح في لقطة الشاشة التالية. هنا نحدد موقع bayesian-221102-2053 توليف المهمة وتجد أنها اكتملت الآن.

عرض وحدة التحكم لصفحة وظائف ضبط Hyperparameter. تُظهر الصورة عرض قائمة وظائف الضبط ، والتي تحتوي على إدخال ضبط واحد

دعونا نلقي نظرة فاحصة على نتائج وظيفة HPO هذه.

لقد اكتشفنا استخراج النتائج برمجيًا في مفكرة. أولاً عبر SageMaker بيثون SDK، وهي مكتبة Python مفتوحة المصدر ذات مستوى أعلى ، وتوفر واجهة برمجة تطبيقات مخصصة لـ SageMaker. ثم من خلال بوتو 3، والذي يزودنا بواجهات برمجة تطبيقات ذات مستوى منخفض لـ SageMaker وخدمات AWS الأخرى.

باستخدام SageMaker Python SDK ، يمكننا الحصول على نتائج مهمة HPO الخاصة بنا:

sagemaker.HyperparameterTuningJobAnalytics(tuner_name).dataframe()[:10]

سمح لنا ذلك بتحليل نتائج كل تجربة من تجاربنا في Pandas DataFrame ، كما هو موضح في لقطة الشاشة التالية.

جدول Pandas في Jupyter Notebook يعرض النتائج والبيانات الوصفية من المسارات التي تم تشغيلها لوظيفة HPO الخاصة بنا

الآن دعنا نغير وجهات النظر مرة أخرى ونرى كيف تبدو النتائج على وحدة تحكم SageMaker. ثم سنلقي نظرة على تصوراتنا المخصصة.

على نفس الصفحة ، واختيار bayesian-221102-2053 تزودنا وظيفة التوليف بقائمة من التجارب التي تم إجراؤها لوظيفة التوليف الخاصة بنا. كل تجربة من HPO هنا هي وظيفة تدريب SageMaker. تذكر سابقًا عندما قمنا بتدريب نموذج XGBoost الفردي الخاص بنا وقمنا بالتحقيق في وظيفة التدريب في وحدة تحكم SageMaker. يمكننا أن نفعل الشيء نفسه لمحاكماتنا هنا.

بينما نحقق في محاكماتنا ، نرى ذلك bayesian-221102-2053-048-b59ec7b4 أفضل نموذج أداء ، مع دقة تحقق تقارب 89.815٪. دعنا نستكشف ما هي المعلمات الفائقة التي أدت إلى هذا الأداء عن طريق اختيار أفضل وظيفة تدريبية علامة التبويب.

عرض وحدة التحكم لوظيفة ضبط واحدة ، مع إظهار قائمة بوظائف التدريب التي تم تشغيلها

يمكننا أن نرى عرضًا تفصيليًا لأفضل معلمات التشعب التي تم تقييمها.

عرض وحدة التحكم لوظيفة ضبط واحدة ، مع إظهار تفاصيل أفضل وظيفة تدريب

يمكننا أن نرى على الفور ما هي قيم المعلمات الفائقة التي أدت إلى هذا الأداء المتفوق. ومع ذلك ، نريد معرفة المزيد. هل يمكنك تخمين ماذا؟ نحن نرى ذلك alpha يأخذ قيمة تقريبية قدرها 0.052456 ، وبالمثل ، eta تم ضبطه على 0.433495. يخبرنا هذا أن هذه القيم تعمل بشكل جيد ، لكنه لا يخبرنا كثيرًا عن مساحة المعامل الفائق نفسه. على سبيل المثال ، قد نتساءل عما إذا كان 0.433495 من أجل eta كانت أعلى قيمة تم اختبارها ، أو ما إذا كان هناك مجال للنمو وتحسين النموذج من خلال اختيار قيم أعلى.

لذلك ، نحتاج إلى التصغير ، وإلقاء نظرة أوسع بكثير لنرى كيفية أداء القيم الأخرى للمعلمات التشعبية الخاصة بنا. تتمثل إحدى طرق إلقاء نظرة على الكثير من البيانات في وقت واحد في رسم قيم المعلمة الفائقة من تجارب HPO على الرسم البياني. بهذه الطريقة نرى كيف كان أداء هذه القيم نسبيًا. في القسم التالي ، نقوم بسحب هذه البيانات من SageMaker وتصورها.

تصور تجاربنا

تزودنا SageMaker SDK بالبيانات الخاصة باستكشافنا ، وتمنحك أجهزة الكمبيوتر المحمولة نظرة خاطفة على ذلك. ولكن هناك العديد من الطرق لاستخدامها وتصورها. في هذا المنشور ، نشارك عينة باستخدام امتداد نسر مكتبة التصور الإحصائي ، والتي نستخدمها لإنتاج نظرة عامة أكثر بصرية لتجاربنا. تم العثور على هذه في amtviz الحزمة ، التي نقدمها كجزء من العينة:

from amtviz import visualize_tuning_job
visualize_tuning_job(tuner, trials_only=True)

تظهر قوة هذه التصورات على الفور عند التخطيط لدقة التحقق من صحة تجاربنا (المحور الصادي) بمرور الوقت (المحور السيني). يوضح الرسم البياني التالي على اليسار دقة التحقق من الصحة بمرور الوقت. يمكننا أن نرى بوضوح أداء النموذج يتحسن مع إجراء المزيد من التجارب بمرور الوقت. هذه نتيجة مباشرة ومتوقعة لتشغيل HPO باستراتيجية بايزي. في مقالتنا التالية ، نرى كيف يقارن هذا بالاستراتيجيات الأخرى ونلاحظ أن هذا لا يجب أن يكون هو الحال بالنسبة لجميع الاستراتيجيات.

مخططان يوضحان مسارات HPO. يوضح الرسم البياني الأيسر دقة التحقق من الصحة بمرور الوقت. يعرض المخطط الأيمن مخطط الكثافة لقيم دقة التحقق

بعد مراجعة التقدم الإجمالي بمرور الوقت ، دعونا الآن نلقي نظرة على مساحة المعامل التشعبي لدينا.

توضح المخططات التالية دقة التحقق من الصحة على المحور ص ، مع عرض كل مخطط max_depth, alpha, etaو min_child_weight على المحور السيني ، على التوالي. لقد رسمنا وظيفة HPO بالكامل في كل مخطط. كل نقطة عبارة عن تجربة واحدة ، ويحتوي كل مخطط على جميع التجارب الخمسين ، ولكن مفصولة لكل معلمة تشعبية. هذا يعني أن تجربتنا الأفضل أداءً ، رقم 50 ، يتم تمثيلها بنقطة زرقاء واحدة بالضبط في كل من هذه المخططات (التي أبرزناها لك في الشكل التالي). يمكننا مقارنة أدائها بصريًا في سياق جميع التجارب الـ 48 الأخرى. لذلك ، دعونا ننظر عن كثب.

مبهر! نرى على الفور أي مناطق من نطاقاتنا المحددة في مساحة المعلمة الفائقة لدينا هي الأكثر أداءً! التفكير في العودة إلى eta القيمة ، من الواضح الآن أن قيم أخذ العينات الأقرب إلى 0 أسفرت عن أداء أسوأ ، في حين أن الاقتراب من حدودنا ، 0.5 ، يؤدي إلى نتائج أفضل. يبدو أن العكس هو الصحيح alphaو max_depth يبدو أن لديها مجموعة محدودة من القيم المفضلة. انظر الى max_depth، يمكنك أيضًا معرفة كيف أن استخدام إستراتيجية بايز يوجه SageMaker AMT لأخذ عينات من القيم التي تعلمتها بشكل متكرر والتي عملت بشكل جيد في الماضي.

أربعة مخططات توضح دقة التحقق من الصحة على المحور ص ، مع كل رسم بياني يعرض أقصى عمق ، ألفا ، إيتا ، وزن الطفل الأدنى على المحور س على التوالي. تمثل كل نقطة بيانات تجربة HPO واحدة

النظر في موقعنا eta القيمة ، قد نتساءل عما إذا كان الأمر يستحق استكشاف المزيد إلى اليمين ، ربما يتجاوز 0.45؟ هل تستمر في تتبع مسارها إلى دقة أقل ، أم أننا بحاجة إلى مزيد من البيانات هنا؟ هذا التساؤل هو جزء من الغرض من تشغيل أول وظيفة HPO لدينا. يوفر لنا نظرة ثاقبة حول مناطق مساحة المعلمة الفائقة التي يجب أن نستكشفها بشكل أكبر.

إذا كنت حريصًا على معرفة المزيد ، وكنت متحمسًا مثلنا بهذه المقدمة للموضوع ، فابق على اتصال بمشاركتنا التالية ، حيث سنتحدث أكثر عن استراتيجيات HPO المختلفة ، ونقارنها ببعضها البعض ، و تدرب على التدريب باستخدام نص Python الخاص بنا.

تنظيف

لتجنب تكبد تكاليف غير مرغوب فيها عند الانتهاء من تجربة HPO ، يجب عليك إزالة جميع الملفات الموجودة في حاوية S3 بالبادئة amt-visualize-demo و أيضا إيقاف تشغيل موارد الاستوديو.

قم بتشغيل الكود التالي في دفتر ملاحظاتك لإزالة جميع ملفات S3 من هذا المنشور.

!aws s3 rm s3://{BUCKET}/amt-visualize-demo --recursive

إذا كنت ترغب في الاحتفاظ بمجموعات البيانات أو عناصر النموذج ، فيمكنك تعديل البادئة في الكود إلى amt-visualize-demo/data لحذف البيانات فقط أو amt-visualize-demo/output لحذف عيوب النموذج فقط.

وفي الختام

في هذا المنشور ، قمنا بتدريب وضبط نموذج باستخدام إصدار SageMaker المدمج من خوارزمية XGBoost. باستخدام HPO مع SageMaker AMT ، تعلمنا عن المعلمات الفائقة التي تعمل جيدًا لهذه الخوارزمية ومجموعة البيانات الخاصة.

لقد رأينا عدة طرق لمراجعة نتائج وظيفة ضبط المعلمة الفائقة. بدءًا من استخراج المعلمات الفائقة لأفضل تجربة ، تعلمنا أيضًا كيفية اكتساب فهم أعمق لكيفية تقدم تجاربنا بمرور الوقت وما هي قيم المعلمات الفائقة المؤثرة.

باستخدام وحدة تحكم SageMaker ، رأينا أيضًا كيفية الغوص بشكل أعمق في دورات التدريب الفردية ومراجعة سجلاتهم.

بعد ذلك ، قمنا بتصغير الصورة لعرض جميع تجاربنا معًا ، ومراجعة أدائها فيما يتعلق بالتجارب الأخرى والمعلمات الفائقة.

لقد تعلمنا أنه بناءً على الملاحظات من كل تجربة ، تمكنا من التنقل في مساحة المعلمة الفائقة لنرى أن التغييرات الصغيرة في قيم المعلمة الفائقة لدينا يمكن أن يكون لها تأثير كبير على أداء نموذجنا. باستخدام SageMaker AMT ، يمكننا تشغيل تحسين المعلمة الفائقة للعثور على قيم معلمة فائقة جيدة بكفاءة وزيادة أداء النموذج إلى أقصى حد.

في المستقبل ، سننظر في استراتيجيات HPO المختلفة التي تقدمها SageMaker AMT وكيفية استخدام كود التدريب المخصص الخاص بنا. أخبرنا في التعليقات إذا كان لديك سؤال أو تريد اقتراح منطقة يجب أن نغطيها في المنشورات القادمة.

حتى ذلك الحين ، نتمنى لكم ولعارضاتكم السعادة في التعلم والضبط!

مراجع حسابات

اقتباسات:

[1] دوا ، د. وجراف ، سي (2019). مستودع تعلم الآلة UCI [http://archive.ics.uci.edu/ml]. ايرفين ، كاليفورنيا: جامعة كاليفورنيا ، كلية المعلومات وعلوم الكمبيوتر.


عن المؤلفين

قم بتحسين المعلمات الفائقة باستخدام Amazon SageMaker Automatic Model Tuning PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.أندرو إلول مهندس حلول مع Amazon Web Services. يعمل مع الشركات الصغيرة والمتوسطة في ألمانيا. خارج العمل ، يستمتع Andrew باستكشاف الطبيعة سيرًا على الأقدام أو بالدراجة.

قم بتحسين المعلمات الفائقة باستخدام Amazon SageMaker Automatic Model Tuning PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.إلينا ليسيك هو مهندس حلول يقع في ميونيخ. ينصب تركيزها على عملاء المؤسسات من صناعة الخدمات المالية. في أوقات فراغها ، تحب إلينا تعلم نظرية الجيتار باللغة الإسبانية للتعلم المتبادل والركض.

قم بتحسين المعلمات الفائقة باستخدام Amazon SageMaker Automatic Model Tuning PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.ماريانو كامب هو مهندس حلول رئيسي مع Amazon Web Services. يعمل مع عملاء الخدمات المالية في ألمانيا في مجال التعلم الآلي. في أوقات فراغه ، يستمتع ماريانو بالتنزه مع زوجته.

الطابع الزمني:

اكثر من التعلم الآلي من AWS