جستجو
Generic filters
Filter by دسته‌ها
آموزش هوش مصنوعی و انواع آن
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
پایتون و ابزارهای یادگیری عمیق
کتابخانه‌ های یادگیری عمیق
یادگیری با نظارت
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
اخبار
رسانه‌ها
آموزش پردازش زبان طبیعی
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
رویدادها
کاربردهای هوش مصنوعی
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
 با استفاده از یادگیری تقویتی عمیق یک الگوریتم شطرنج طراحی کنید

با استفاده از یادگیری تقویتی عمیق یک الگوریتم شطرنج طراحی کنید

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

یادگیری تقویتی عمیق

یادگیری تقویتی عمیق به مجموعه‌ای از الگوریتم‌ها گفته می‌شود که در آن برای تکمیل q-tableها از یادگیری عمیق استفاده می‌شود؛ این الگوریتم‌ها در بازی‌هایی به کمک ما می‌آیند که q-table به اندازه‌ای پیچیده هستند که نمی‌توان آن‌ها را با الگوریتم‌های brute force پر کرد.

شبکه مورد استفاده در این متد، شبکه Q عمیق نامیده می‌شود و ورودی آن وضعیت بازی است و برای هر یک از حرکت‌ها، مقادیر q را خروجی می‌دهد.

برنامه با استفاده از این مقادیر q، جدول‌ها را تکمیل می‌کند و به کمک دیگر مؤلفه‌های یادگیری q همچون الگوریتم‌های حریصانه اپسیلون Epsilon-greedy و تنزیل پاداش (reward discounting) بازی می‌کند.

در گام بعدی، شبکه q با استفاده از نتایج بازی‌ها آموزش می‌بیند؛ این شبکه برای اینکه وزن‌های شبکه های عصبی تا حد ممکن به مقادیر حقیقی q نزدیک شوند، به آهستگی آن‌ها را تغییر می‌دهد.

کد

توجه داشته باشید که من این کد را در نوتبوک Google Colab نوشتم (من شبکه، تکنیک کدگذاری و حریفی که عامل باید مقابل آن بازی کند را بازنویسی کردم)؛ به بیان دیگر برای اینکه کد عمل کند باید بخشی از آن را به جای IDE در terminal بگذارید.

 

گام اول دانلود پیش نیازهای نرم‌افزاری

Python-chess کتابخانه‌ای است که از آن برای ایجاد محیط بازی استفاده می‌شود؛ محیط بازی، محیطی است که عامل با آن تعامل برقرار می‌کند.
در زمان آموزش عامل، برای ترسیم روند پیشرفت آن از livelossplot استفاده می‌کنیم.
کد زیر stockfish-5، که عامل باید در مقابل آن بازی کند، را  دانلود می‌کند. شما می‌توانید همان مرحله (رقیب) stockfish را هم بازی کنید اما به عقیده من stockfish-5  بهتر است.
این دو فرمان را به صورت جداگانه اجرا کنید، چرا که در این صورت می‌توانید به آسانی به الگوریتم stockfish دسترسی پیدا کنید.

 

گام دوم بیان مسئله

پیش از ایجاد عامل Deep RL، باید محیط را ایجاد کنیم.

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

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

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

توابع مقابل می‌توانند حالت مذکور را پیاده‌سازی کنند. البته ما تابعی را اجرا می‌کنیم که شاخص المانی را پیدا کند که حرکت  در ماتریس ۶۴ × ۶۴ نشان می‌دهد.

گام سوم ساخت شبکه عصبی

برای این برنامه از PyTorch استفاده خواهم کرد. چراکه ویژگی‌های آن فرایند پیاده‌سازی یادگیری تقویتی عمیق را تسهیل می‌کنند. این ویژگی‌ها شامل نمونه‌برداری رده‌ای Categorical sampling حرکت‌ها می‌شود که بعداً آن را اجرا خواهیم کرد.

برای اینکه مطمئن شویم پاداش‌ها به درستی محاسبه شده‌اند از این دو تابع استفاده می‌کنیم و در نتیجه  گرادیان شبکه policy سریع‌تر همگرا می‌شود.

فرمول گرادیان شبکه policy بدین شکل است:

یادگیری تقویتی عمیق

 

گام چهارم اجرای برنامه

این تابع تمامی مؤلفه‌هایی که در مرحله قبلی به آن‌ها اشاره کردیم را شامل می‌شود و به صورت همزمان آن‌ها را اجرا می‌کند. این تابع را یک بار فراخون می‌کنیم تا از عملکرد صحیح آن مطمئن شویم.

گام پنجم آموزش شبکه Policy

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

مقاله ما چطور بود؟

میانگین امتیاز / ۵. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها