بهینه سازی هایپرپارامترها با آمازون SageMaker Automatic Model Tuning PlatoBlockchain Intelligence. جستجوی عمودی Ai.

ابرپارامترها را با تنظیم خودکار مدل Amazon SageMaker بهینه کنید

مدل‌های یادگیری ماشینی (ML) دنیا را در طوفان فرو می‌برد. عملکرد آنها متکی به استفاده از داده های آموزشی مناسب و انتخاب مدل و الگوریتم مناسب است. اما به اینجا ختم نمی شود. به طور معمول، الگوریتم ها برخی از تصمیمات طراحی را به متخصص ML موکول می کنند تا برای داده ها و وظایف خاص خود اتخاذ کنند. این تصمیمات طراحی معوق خود را به صورت هایپرپارامترها.

معنی آن نام چیست؟ نتیجه آموزش ML، مدل، تا حد زیادی می تواند به عنوان مجموعه ای از پارامترهایی دیده شود که در طول آموزش آموخته می شوند. بنابراین، پارامترهایی که برای پیکربندی فرآیند آموزش ML استفاده می‌شوند، هیپرپارامتر نامیده می‌شوند - پارامترهایی که ایجاد پارامترها را توصیف می‌کنند. در هر صورت، آنها بسیار کاربردی هستند، مانند تعداد دوره های آموزش، نرخ یادگیری، حداکثر عمق درخت تصمیم و غیره. و ما به آنها توجه زیادی داریم زیرا آنها تأثیر زیادی بر عملکرد نهایی مدل شما دارند.

درست مانند چرخاندن یک دکمه روی گیرنده رادیویی برای یافتن فرکانس مناسب، هر هایپرپارامتر باید به دقت تنظیم شود تا عملکرد بهینه شود. جستجو در فضای فراپارامتر برای مقادیر بهینه به عنوان نامیده می شود تنظیم هایپرپارامتر or بهینه سازی هایپرپارامتر (HPO)، و باید به مدلی منجر شود که پیش بینی های دقیقی را ارائه دهد.

در این پست، ما اولین کار HPO خود را با استفاده از آن راه اندازی و اجرا می کنیم تنظیم خودکار مدل Amazon SageMaker (AMT). ما در مورد روش‌های موجود برای کشف نتایج یاد می‌گیریم، و برخی تجسم‌های روشنگر از آزمایش‌های HPO و اکتشاف فضای فراپارامتر ایجاد می‌کنیم!

تنظیم خودکار مدل Amazon SageMaker

به عنوان یک پزشک ML با استفاده از SageMaker AMT، می توانید روی موارد زیر تمرکز کنید:

  • ارائه شغل آموزشی
  • تعیین متریک هدف مناسب مطابق با وظیفه شما
  • محدوده فضای جستجوی فراپارامتر

SageMaker AMT بقیه موارد را بر عهده دارد و نیازی نیست به زیرساخت ها، سازماندهی مشاغل آموزشی و بهبود انتخاب هایپرپارامتر فکر کنید.

بیایید با استفاده از SageMaker AMT برای اولین کار ساده HPO خود، برای آموزش و تنظیم الگوریتم XGBoost، شروع کنیم. ما می خواهیم سفر AMT شما عملی و کاربردی باشد، بنابراین مثال را در ادامه به اشتراک گذاشته ایم مخزن GitHub. این پست را پوشش می دهد 1_tuning_of_builtin_xgboost.ipynb نوت بوک.

در یک پست آینده، مفهوم یافتن بهترین هایپرپارامترها را گسترش خواهیم داد و شامل یادگیری در مورد فضای جستجو و اینکه یک مدل به چه محدوده های فراپارامتری حساس است، می پردازیم. ما همچنین نشان خواهیم داد که چگونه یک فعالیت تنظیم یکباره را به یک مکالمه چند مرحله ای با پزشک ML تبدیل کنیم تا با هم یاد بگیریم. با ما همراه باشید (جناسی در نظر گرفته شده)!

پیش نیازها

این پست برای کسانی است که علاقه مند به یادگیری در مورد HPO هستند و نیازی به دانش قبلی در مورد موضوع ندارد. آشنایی اولیه با مفاهیم ML و برنامه نویسی پایتون مفید است. برای بهترین تجربه یادگیری، ما به شدت توصیه می‌کنیم که با آن همراه باشید اجرای هر مرحله در نوت بوک به موازات خواندن این پست و در پایان نوت بوک، شما همچنین می توانید یک تجسم تعاملی را امتحان کنید که نتایج تنظیم را زنده می کند.

بررسی اجمالی راه حل

ما قصد داریم یک راه‌اندازی سرتاسر برای اجرای اولین کار HPO خود با استفاده از SageMaker AMT ایجاد کنیم. هنگامی که کار تنظیم ما کامل شد، به برخی از روش های موجود برای کشف نتایج، هر دو از طریق، نگاه می کنیم کنسول مدیریت AWS و به صورت برنامه نویسی از طریق AWS SDK ها و API ها.

ابتدا با اجرای یک کار آموزشی مستقل، بدون هیچ گونه تنظیمی، خود را با محیط و آموزش SageMaker آشنا می کنیم. ما از الگوریتم XGBoost استفاده می کنیم، یکی از الگوریتم های متعدد ارائه شده به عنوان a الگوریتم داخلی SageMaker (بدون نیاز به اسکریپت آموزشی!).

ما می بینیم که چگونه SageMaker Training به روش های زیر عمل می کند:

  • یک نمونه را شروع و متوقف می کند
  • ظرف لازم را تهیه می کند
  • داده های آموزشی و اعتبار سنجی را روی نمونه کپی می کند
  • آموزش را اجرا می کند
  • متریک ها و گزارش ها را جمع آوری می کند
  • مدل آموزش دیده را جمع آوری و ذخیره می کند

سپس به AMT می رویم و یک کار HPO را اجرا می کنیم:

  • ما کار تنظیم خود را با AMT راه اندازی و راه اندازی کردیم
  • ما به روش های موجود برای استخراج معیارهای عملکرد دقیق و فراداده برای هر کار آموزشی می پردازیم، که به ما امکان می دهد در مورد مقادیر بهینه در فضای فراپارامتر خود اطلاعات بیشتری کسب کنیم.
  • ما به شما نشان می دهیم که چگونه نتایج آزمایشات را مشاهده کنید
  • ما ابزارهایی برای تجسم داده ها در یک سری نمودار در اختیار شما قرار می دهیم که بینش های ارزشمندی را در مورد فضای فراپارامتر ما نشان می دهد.

الگوریتم XGBoost داخلی SageMaker را آموزش دهید

همه چیز با آموزش یک مدل شروع می شود. با انجام این کار، متوجه می شویم که چگونه SageMaker Training کار می کند.

ما می خواهیم از سرعت و سهولت استفاده ارائه شده توسط SageMaker استفاده کنیم الگوریتم های داخلی. تنها چیزی که برای شروع آموزش نیاز داریم چند مرحله است:

  1. داده ها را آماده و بارگذاری کنید - مجموعه داده خود را به عنوان ورودی XGBoost دانلود و آماده می کنیم و آن را در ما آپلود می کنیم سرویس ذخیره سازی ساده آمازون سطل (Amazon S3).
  2. URI تصویر الگوریتم داخلی ما را انتخاب کنید - SageMaker از این URI برای واکشی محفظه آموزشی ما استفاده می کند، که در مورد ما حاوی یک اسکریپت آموزشی آماده برای XGBoost است. چندین نسخه الگوریتم پشتیبانی می شود.
  3. هایپرپارامترها را تعریف کنید - SageMaker یک رابط برای تعریف فراهم می کند هایپرپارامترها برای الگوریتم داخلی ما اینها همان فراپارامترهایی هستند که توسط نسخه منبع باز استفاده می شود.
  4. برآوردگر را بسازید – ما پارامترهای آموزشی مانند نوع نمونه و تعداد نمونه ها را تعریف می کنیم.
  5. تابع fit() را فراخوانی کنید - ما کار آموزشی خود را شروع می کنیم.

نمودار زیر نشان می دهد که چگونه این مراحل با هم کار می کنند.

داده ها را ارائه دهید

برای اجرای آموزش ML، نیاز به ارائه داده داریم. ما داده های آموزشی و اعتبار سنجی خود را از طریق آمازون S3 در اختیار SageMaker قرار می دهیم.

در مثال ما، برای سادگی، از سطل پیش فرض SageMaker برای ذخیره داده های خود استفاده می کنیم. اما در صورت تمایل مقادیر زیر را به دلخواه خود سفارشی کنید:

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

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

در نوت بوک، از یک مجموعه داده عمومی استفاده می کنیم و داده ها را به صورت محلی در آن ذخیره می کنیم data فهرست راهنما. سپس داده های آموزشی و اعتبار سنجی خود را در آمازون S3 آپلود می کنیم. بعداً ما نیز برای این مکان ها اشاره گرهایی را تعریف می کنیم تا آنها را به آموزش SageMaker منتقل کنیم.

# 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 یک الگوریتم عالی برای داده های ساختاریافته است و حتی می تواند در مجموعه داده های Digits اعمال شود. مقادیر تصاویر 8×8 هستند، مانند مثال زیر که a را نشان می دهد
0 a
5 و یک
4.

بهینه سازی هایپرپارامترها با آمازون SageMaker Automatic Model Tuning PlatoBlockchain Intelligence. جستجوی عمودی Ai.

URI تصویر XGBoost را انتخاب کنید

پس از انتخاب الگوریتم داخلی (XGBoost)، باید URI تصویر را بازیابی کنیم و آن را به SageMaker ارسال کنیم تا در نمونه آموزشی ما بارگذاری شود. برای این مرحله، ما را بررسی می کنیم نسخه های موجود. در اینجا تصمیم گرفتیم از نسخه 1.5.1 استفاده کنیم که آخرین نسخه الگوریتم را ارائه می دهد. بسته به وظیفه، پزشکان ML ممکن است اسکریپت آموزشی خود را بنویسند که برای مثال شامل مراحل آماده‌سازی داده است. اما این در مورد ما ضروری نیست.

اگر می خواهید اسکریپت آموزشی خود را بنویسید، در ادامه با ما همراه باشید، ما در پست بعدی به شما خواهیم پرداخت! ما به شما نشان خواهیم داد که چگونه کارهای آموزشی SageMaker را با اسکریپت های آموزشی سفارشی خود اجرا کنید.

در حال حاضر، با مشخص کردن الگوریتم، منطقه AWS و شماره نسخه، به URI تصویر صحیح نیاز داریم:

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

خودشه. اکنون اشاره ای به الگوریتم XGBoost داریم.

هایپرپارامترها را تعریف کنید

اکنون ما فراپارامترهای خود را تعریف می کنیم. این مقادیر نحوه آموزش مدل ما را پیکربندی می‌کنند و در نهایت بر نحوه عملکرد مدل در برابر معیار هدفی که با آن اندازه‌گیری می‌کنیم، مانند دقت در مورد ما، تأثیر می‌گذارند. توجه داشته باشید که هیچ چیز در مورد بلوک کد زیر مختص SageMaker نیست. ما در واقع از نسخه متن باز XGBoost، که به تازگی توسط SageMaker ارائه شده و برای آن بهینه شده است.

اگرچه هر یک از این فراپارامترها قابل تنظیم و تنظیم هستند، متریک هدف multi:softmax توسط مجموعه داده ما و نوع مشکلی که ما برای آن حل می کنیم تعیین می شود. در مورد ما، مجموعه داده اعداد حاوی چندین برچسب است (مشاهده یک رقم دست نویس می تواند 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 است.

در مرحله بعد، تعداد نمونه‌هایی که باید روی آن‌ها آموزش داده شوند، نوع نمونه (مبتنی بر CPU یا GPU) و اندازه فضای ذخیره‌سازی متصل را تعریف می‌کنیم:

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 Training بقیه موارد را بر عهده خواهد داشت.

تابع fit() را فراخوانی کنید

داده هایی را که قبلا در آمازون 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 Training را به داده‌های آموزشی و اعتبار سنجی خود هدایت کنیم:

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

توجه داشته باشید که برای اجرای HPO بعداً، در واقع نیازی به تماس نداریم fit() اینجا. ما فقط بعداً برای HPO به شی تخمین‌گر نیاز داریم و می‌توانیم کار HPO خود را ایجاد کنیم. اما چون می‌خواهیم در مورد SageMaker Training بیاموزیم و ببینیم که چگونه یک کار آموزشی را اجرا کنیم، آن را در اینجا فراخوانی کرده و خروجی را بررسی می‌کنیم.

پس از شروع آموزش، همانطور که در تصویر زیر نشان داده شده است، شروع به دیدن خروجی زیر سلول ها می کنیم. خروجی در دسترس است CloudWatch آمازون و همچنین در این دفترچه

متن سیاه خروجی گزارش از خود SageMaker است که مراحل مربوط به ارکستراسیون آموزشی را نشان می دهد، مانند شروع نمونه و بارگذاری تصویر آموزشی. متن آبی مستقیماً از خود نمونه آموزشی خروجی می شود. ما می‌توانیم فرآیند بارگیری و تجزیه داده‌های آموزشی را مشاهده کنیم و به صورت بصری پیشرفت آموزش و بهبود متریک هدف را مستقیماً از اسکریپت آموزشی در حال اجرا بر روی نمونه مشاهده کنیم.

خروجی از تابع fit() در نوت بوک Jupyter

همچنین توجه داشته باشید که در پایان کار خروجی، مدت زمان آموزش بر حسب ثانیه و ثانیه های قابل پرداخت نمایش داده می شود.

در نهایت می بینیم که SageMaker مدل آموزشی ما را در مسیر خروجی S3 تعریف شده در شی تخمینگر آپلود می کند. مدل آماده استقرار برای استنتاج است.

در پست بعدی، ظرف آموزشی خود را ایجاد خواهیم کرد و معیارهای آموزشی خود را برای انتشار تعریف خواهیم کرد. خواهید دید که چگونه SageMaker نسبت به محفظه‌ای که آن را برای آموزش پاس می‌دهید بی‌اعتنا است. این برای زمانی که می خواهید به سرعت با یک الگوریتم داخلی شروع کنید بسیار مفید است، اما بعداً تصمیم می گیرید اسکریپت آموزشی سفارشی خود را پاس کنید!

مشاغل آموزشی فعلی و قبلی را بررسی کنید

تا کنون، ما از دفترچه یادداشت خود با کد خود کار کرده ایم و مشاغل آموزشی را به SageMaker ارسال کرده ایم. بیایید دیدگاه‌ها را عوض کنیم و نوت‌بوک را برای لحظه‌ای رها کنیم تا ببینیم این در کنسول SageMaker چگونه است.

نمای کنسول مشاغل آموزشی SageMaker

SageMaker یک رکورد تاریخی از کارهای آموزشی که انجام داده، پیکربندی‌های آنها مانند فراپارامترها، الگوریتم‌ها، ورودی داده، زمان قابل پرداخت و نتایج را نگه می‌دارد. در لیست موجود در اسکرین شات قبلی، جدیدترین مشاغل آموزشی فیلتر شده برای XGBoost را مشاهده می کنید. شغل آموزشی برجسته کاری است که ما به تازگی در نوت بوک آموزش دادیم که خروجی آن را قبلاً دیدید. بیایید برای کسب اطلاعات بیشتر وارد این شغل آموزشی فردی شویم.

تصویر زیر نمای کنسول کار آموزشی ما را نشان می دهد.

نمای کنسول یک کار آموزشی SageMaker

ما می‌توانیم اطلاعاتی را که به عنوان خروجی سلول دریافت کرده‌ایم در خود مرور کنیم fit() عملکرد در کار آموزشی فردی در کنسول SageMaker، همراه با پارامترها و ابرداده هایی که در برآوردگر خود تعریف کرده ایم.

خروجی گزارش را از نمونه آموزشی که قبلا دیدیم را به یاد بیاورید. می‌توانیم با پیمایش به گزارش‌های کار آموزشی خود در اینجا نیز دسترسی داشته باشیم مانیتور بخش و انتخاب دیدن گزارش وقایع.

نمای کنسول تب مانیتورینگ در کار آموزشی

این گزارش‌های نمونه درون CloudWatch را به ما نشان می‌دهد.

نمای کنسول از گزارش‌های نمونه آموزشی در CloudWatch

همچنین هایپرپارامترهایی را که در دفترچه یادداشت خود برای کار آموزشی مشخص کرده ایم به خاطر بسپارید. ما آنها را در اینجا در همان UI شغل آموزشی نیز می بینیم.

نمای کنسول هایپرپارامترهای کار آموزش SageMaker

در واقع، جزئیات و ابرداده‌هایی که قبلاً برای شغل آموزشی و تخمین‌گر خود مشخص کردیم، در این صفحه در کنسول SageMaker یافت می‌شوند. ما یک رکورد مفید از تنظیمات استفاده شده برای آموزش داریم، مانند اینکه چه ظرف آموزشی استفاده شده است و مکان مجموعه داده های آموزشی و اعتبارسنجی.

ممکن است در این مرحله بپرسید که چرا این دقیقاً برای بهینه سازی هایپرپارامتر مرتبط است؟ به این دلیل است که می‌توانید در آن آزمایش‌های HPO که به آن‌ها علاقه‌مندیم، جستجو، بازرسی و عمیق‌تر غواصی کنید. شاید آن‌هایی که بهترین نتایج را دارند یا آن‌هایی که رفتار جالبی از خود نشان می‌دهند. آنچه را که شما به عنوان "جالب" تعریف می کنید، به شما واگذار می کنیم. این یک رابط مشترک برای بازرسی مشاغل آموزشی به ما می دهد و می توانید از آن با SageMaker Search استفاده کنید.

اگرچه SageMaker AMT کارهای HPO را هماهنگ می‌کند، آزمایش‌های HPO همه به‌عنوان مشاغل جداگانه SageMaker Training راه‌اندازی می‌شوند و می‌توان به آن‌ها دسترسی داشت.

با آموزش پوشش داده شده، بیایید تنظیم کنیم!

الگوریتم 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)
}

محدوده برای یک هایپرپارامتر فردی بر اساس نوع آنها مشخص می شود، مانند ContinuousParameter. برای اطلاعات بیشتر و نکاتی در مورد انتخاب این محدوده پارامترها، به یک مدل XGBoost را تنظیم کنید.

ما هنوز هیچ آزمایشی را انجام نداده‌ایم، بنابراین محدوده مقادیر خوب برای فراپارامترهای خود را نمی‌دانیم. بنابراین، با استفاده از دانش خود در مورد الگوریتم‌ها و مستندات ما از فراپارامترهای الگوریتم‌های داخلی، با یک حدس آموزشی شروع می‌کنیم. این یک نقطه شروع برای تعریف فضای جستجو تعریف می کند.

سپس یک نمونه کار تنظیم را از فراپارامترها در محدوده های تعریف شده اجرا می کنیم. در نتیجه، ما می توانیم ببینیم که کدام محدوده هایپرپارامتر نتایج خوبی را به همراه دارد. با این دانش، می‌توانیم مرزهای فضای جستجو را با محدود کردن یا گسترش دامنه‌های فراپارامتر برای استفاده اصلاح کنیم. نحوه یادگیری از آزمایشات را در بخش بعدی و آخر نشان می دهیم، جایی که نتایج را بررسی و تجسم می کنیم.

در پست بعدی ما به سفر خود ادامه می دهیم و عمیق تر می شویم. علاوه بر این، خواهیم آموخت که چندین استراتژی وجود دارد که می توانیم برای کشف فضای جستجوی خود از آنها استفاده کنیم. ما کارهای بعدی HPO را اجرا خواهیم کرد تا مقادیر عملکردی بیشتری را برای فراپارامترهای خود پیدا کنیم، در حالی که این استراتژی‌های مختلف را با هم مقایسه می‌کنیم. همچنین خواهیم دید که چگونه می توان با SageMaker AMT یک شروع گرم را اجرا کرد تا از دانش به دست آمده از فضاهای جستجوی قبلی کاوش شده در کاوش خود فراتر از آن مرزهای اولیه استفاده کنیم.

برای این پست، ما بر چگونگی تجزیه و تحلیل و تجسم نتایج یک کار HPO با استفاده از استراتژی جستجوی بیزی تمرکز می کنیم که احتمالاً نقطه شروع خوبی است.

اگر در نوت بوک پیوند داده شده را دنبال می کنید، توجه داشته باشید که ما از همان برآوردگر استفاده می کنیم که برای کار آموزشی 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 پیدا کنیم آموزش در قسمت ناوبری و سپس کارهای تنظیم فراپارامتر. همانطور که در تصویر زیر نشان داده شده است، لیستی از مشاغل AMT به ما می دهد. در اینجا ما مکان خود را پیدا می کنیم bayesian-221102-2053 کار را تنظیم کنید و متوجه شوید که اکنون کامل شده است.

نمای کنسول صفحه کارهای تنظیم Hyperparameter. تصویر نمای فهرستی از کارهای تنظیم را نشان می دهد که شامل 1 ورودی تنظیم ما است

بیایید نگاهی دقیق تر به نتایج این کار HPO داشته باشیم.

ما استخراج نتایج را به صورت برنامه‌ریزی در قسمت بررسی کرده‌ایم دفتر یادداشت. ابتدا از طریق SageMaker Python SDK، که یک کتابخانه منبع باز سطح بالاتر Python است و یک API اختصاصی برای SageMaker ارائه می دهد. سپس از طریق Boto3، که APIهای سطح پایین تری را برای SageMaker و سایر خدمات AWS در اختیار ما قرار می دهد.

با استفاده از SageMaker Python SDK، می توانیم نتایج کار HPO خود را به دست آوریم:

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

این به ما اجازه داد تا نتایج هر یک از آزمایش‌های خود را در Pandas DataFrame تجزیه و تحلیل کنیم، همانطور که در تصویر زیر مشاهده می‌شود.

جدول پانداها در 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 داده‌هایی را برای کاوش در اختیار ما قرار می‌دهد و نوت‌بوک‌ها به شما نگاهی به آن می‌دهند. اما راه های زیادی برای استفاده و تجسم آن وجود دارد. در این پست نمونه ای را با استفاده از Altair کار کتابخانه تجسم آماری، که ما از آن برای ایجاد یک نمای کلی بصری بیشتر از آزمایشات خود استفاده می کنیم. اینها در یافت می شوند amtviz بسته ای که ما به عنوان بخشی از نمونه ارائه می کنیم:

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

قدرت این تجسم‌ها هنگام ترسیم صحت اعتبارسنجی آزمایش‌های ما (محور y) در طول زمان (محور x) بلافاصله آشکار می‌شود. نمودار زیر در سمت چپ دقت اعتبارسنجی را در طول زمان نشان می دهد. ما به وضوح می‌توانیم عملکرد مدل را بهبود ببخشیم زیرا آزمایش‌های بیشتری را در طول زمان انجام می‌دهیم. این یک نتیجه مستقیم و مورد انتظار اجرای HPO با استراتژی بیزی است. در پست بعدی ما، می بینیم که این چگونه با استراتژی های دیگر مقایسه می شود و مشاهده می کنیم که لازم نیست این مورد برای همه استراتژی ها باشد.

دو نمودار که مسیرهای HPO را نشان می دهد. نمودار سمت چپ دقت اعتبارسنجی را در طول زمان نشان می دهد. نمودار سمت راست نمودار چگالی را برای مقادیر دقت اعتبار سنجی نشان می دهد

پس از بررسی پیشرفت کلی در طول زمان، اکنون به فضای فراپارامتر خود نگاه می کنیم.

نمودارهای زیر دقت اعتبارسنجی را در محور y نشان می‌دهند که هر نمودار نشان می‌دهد max_depth, alpha, etaو min_child_weight به ترتیب در محور x. ما کل کار HPO خود را در هر نمودار ترسیم کرده ایم. هر نقطه یک آزمایش واحد است و هر نمودار شامل تمام 50 آزمایش است، اما برای هر هایپرپارامتر از هم جدا شده است. این بدان معنی است که بهترین آزمایش ما، شماره 48، دقیقاً با یک نقطه آبی در هر یک از این نمودارها نشان داده شده است (که در شکل زیر برای شما برجسته کرده ایم). ما می‌توانیم عملکرد آن را در چارچوب تمام ۴۹ آزمایش دیگر به صورت بصری مقایسه کنیم. بنابراین، بیایید از نزدیک نگاه کنیم.

شگفت انگیز! ما بلافاصله می بینیم که کدام مناطق از محدوده های تعریف شده ما در فضای فراپارامتر ما بیشترین عملکرد را دارند! فکر کردن به ما eta اکنون واضح است که مقادیر نمونه برداری نزدیک به 0 عملکرد بدتری را به همراه دارد، در حالی که نزدیک شدن به مرز ما، 0.5، نتایج بهتری را به همراه دارد. به نظر می رسد که عکس این مورد برای آن صادق باشد alphaو max_depth به نظر می رسد مجموعه محدودتری از مقادیر ترجیحی دارد. نگاه كردن max_depth، همچنین می توانید ببینید که چگونه استفاده از یک استراتژی بیزی به SageMaker AMT دستور می دهد تا مقادیر بیشتری را که در گذشته یاد گرفته بود نمونه برداری کند.

چهار نمودار دقت اعتبارسنجی را در محور y نشان می‌دهد، که هر نمودار به ترتیب حداکثر عمق، آلفا، eta، min_child_weight را در محور x نشان می‌دهد. هر نقطه داده نشان دهنده یک آزمایش HPO واحد است

به ما نگاه می کند eta مقدار، ممکن است تعجب کنیم که آیا ارزش کاوش بیشتر در سمت راست، شاید فراتر از 0.45 را دارد؟ آیا با دقت کمتری ادامه می‌یابد یا اینکه در اینجا به داده‌های بیشتری نیاز داریم؟ این تعجب بخشی از هدف اجرای اولین کار HPO ما است. به ما بینشی می دهد که در چه زمینه هایی از فضای فراپارامتر باید بیشتر کاوش کنیم.

اگر مایل به دانستن بیشتر هستید و به اندازه ما از این مقدمه برای موضوع هیجان زده هستید، منتظر پست بعدی ما باشید، جایی که در مورد استراتژی های مختلف HPO بیشتر صحبت خواهیم کرد، آنها را با یکدیگر مقایسه خواهیم کرد و تمرین با اسکریپت پایتون خودمان.

پاک کردن

برای جلوگیری از متحمل شدن هزینه های ناخواسته پس از اتمام آزمایش 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] Dua, D. and Graff, C. (2019). مخزن یادگیری ماشین UCI [http://archive.ics.uci.edu/ml]. ایروین، کالیفرنیا: دانشگاه کالیفرنیا، دانشکده اطلاعات و علوم کامپیوتر.


درباره نویسندگان

بهینه سازی هایپرپارامترها با آمازون SageMaker Automatic Model Tuning PlatoBlockchain Intelligence. جستجوی عمودی Ai.اندرو ایلول یک معمار راه حل با خدمات وب آمازون است. او با مشاغل کوچک و متوسط ​​در آلمان کار می کند. اندرو خارج از محل کار از گشت و گذار در طبیعت با پای پیاده یا دوچرخه لذت می برد.

بهینه سازی هایپرپارامترها با آمازون SageMaker Automatic Model Tuning PlatoBlockchain Intelligence. جستجوی عمودی Ai.الینا لسیک یک معمار Solutions واقع در مونیخ است. تمرکز او بر مشتریان سازمانی از صنعت خدمات مالی است. الینا در اوقات فراغت خود دوست دارد تئوری گیتار را به زبان اسپانیایی بیاموزد تا به صورت متقابل بیاموزد و برای دویدن برود.

بهینه سازی هایپرپارامترها با آمازون SageMaker Automatic Model Tuning PlatoBlockchain Intelligence. جستجوی عمودی Ai.ماریانو کمپ یک معمار راه حل اصلی با خدمات وب آمازون است. او با مشتریان خدمات مالی در آلمان در زمینه یادگیری ماشینی کار می کند. ماریانو در اوقات فراغت خود از پیاده روی با همسرش لذت می برد.

تمبر زمان:

بیشتر از آموزش ماشین AWS