یادگیری تقویتی عمیق
آموزش‌های پایه‌ای هوش مصنوعیپایتون و ابزارهای یادگیری عمیقیادگیری تقویتییادگیری عمیق

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

    0
    مدت زمان مطالعه: ۵ دقیقه

    الگوریتم 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 روند پیشرفت عامل را نشان می‌دهد.
    این تابع آموزش یادگیری تقویتی عمیق را آغاز می‌کند. شما می‌توانید تعداد اپیزودها در هر مرحله و هم‌چنین معماری شبکه را تعیین کنید تا نتایج آموزش را ارتقا دهید.
    این مطلب چه میزان برای شما مفید بوده است؟
    [کل: ۰ میانگین: ۰]

    موانع توسعه هوش مصنوعی: از این ۵ مورد غافل نشوید

    مقاله قبلی

    نگاهی به اهمیت نیروی کار یقه آبی در هوش مصنوعی و چارچوب اخلاقی مربوط به آن

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    نظرات

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *