بازی اسنیک؛ آیا هوش مصنوعی ها می توانند بازی کردن را بیاموزند؟

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

بازی اسنیک؛ آیا هوش مصنوعی ها می توانند بازی کردن را بیاموزند؟

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

بازی اسنیک

اسنیک قوانین ساده ای دارد:

  1. شکل جهانْ شطرنجی و مربعی است.
  2. اسنیک تنها در زوایای قائم می تواند حرکت کند.
  3. این جهانْ مرزی دارد که اسنیک به محض برخورد با آن می میرد.
  4. اسنیک هرگز نمی تواند بایستد یا متوقف گردد.
  5. اگر اسنیک به بخشی از بدن خودش برخورد کند، می میرد.
  6. هر وقت که اسنیک چیزی بخورد، بلندتر می گردد.
  7. هدف این است که تا جای ممکن بلند شد و رشد کرد.

زمان انجام بازی، هر وقت که اسنیک قدمی رو به جلو می گذارد باید بین چند گزینه دست به تصمیم بگیرد: مستقیم برود، سمت چپ بپیچد یا سمت راست.

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

انتخاب یک روش

روش ها، الگوریتم ها و فنون زیادی وجود دارند تا اسنیک را حل کرد. برخی از آنها زیر چتر هوش مصنوعی هستند. من فقط روی یک روش تمرکز خواهم کرد: جهش تصادفی ژنتیکی یک شبکه نورونی/genetic random mutation of a neural network

به این دلایل که:

1. دیگرانی که اسنیک را بازی نموده و رکوردهای بالا ثبت نموده اند، من به مجموع داده های آنها دسترسی ندارم، پس نمی توانم به شبکه نورونیْ داده ای بدهم تا از روی آنها الگوبرداری کند.

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

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

شبکه نورونی چیست؟

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

شبکه های نورونی در اشکال، ابعاد و انواع مختلفی وجود دارند: پیچشی/convolutional، بازگشتی/recurrent، حافظه کوتاه-مدت-بلند-مدت/long-short-term-memory و غیره. طراحی شبکه نورونی مناسب برای مسئله می تواند سخت باشد، گیج نماینده، و یک جور فوت کوزه گری بطلبد. اینجاست که ژنتیک وارد قضیه می گردد.

الگوریتم ژنتیکی چیست؟

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

تمام تغییراتی که بر شبکه های نورونی اعمال می گردد تصادفی خواهند بود - و نه به وسیله فیدبک مستقیم و هدایت قدم به قدم هوش مصنوعی. به مرور، تغییرات تصادفی کوچک در این شبکه نورونی باعث ایجاد یک هوش مصنوعی کاملا کاربردی می گردد چون تنها بازیکنان برتر در هر نسل زنده می مانند و توانایی شان را به نسل بعدی منتقل می نمایند.

فرآیند تکاملی ما چنین عمل خواهد نمود:

1. به طور تصادفی با دکمه و سیم های شبکه نورونی ور می رویم [یعنی پارامترهایی که وارد سیستم می کنیم اعداد تصادفی هستند] تا هر بازی اسنیک خاص خودش باشد.

2. هر یک از این شبکه های نورونی را برای انجام بازی اسنیک آزاد می گذاریم.

3. بعد از اینکه هر شبکه نورونی بازی را تمام کرد، معین می کنیم کدام یک از آنها عملکرد بهتری داشتند.

4. با اعمال تغییرات تصادفی بر شبکه های نورونی که عملکرد بهتری از خود نشان دادند، دوباره نسل جدیدی از شبکه های نورونی با قابلیت های خاص خودشان می سازیم.

5. بازگشت به مرحله دوم و تکرار مراحل بعدی.

پس حالا می توانیم آرام لم بدهیم و بگذاریم تا هوش مصنوعی به طور طبیعی تکامل پیدا کند، نه؟ اشتباه است.

هوش مصنوعی هنوز هم به یک طراح احتیاجمند است

الگوریتم ژنتیکی باعث می گردد از اینکه به مجموع داده های مختلف دسترسی داشته و آن را برای آموزش به سیستم بدهیم معاف شویم، اما هنوز هم به عهده ماست (طراح) تا کلیات سیستم را طراحی نموده و این قابلیت را فعال کنیم. مخصوصا، باید داده ورودی و خروجی را انتخاب کنیم و تصمیم بگیریم عملکرد خوب در اسنیک دقیقا به چه معناست [یعنی خود سیستم نمی تواند بفهمد کدام نسل توانسته اسنیک را بهتر بازی کند و باید خود اپراتور انسانی آن را معین کند]. برای اینکه به استعاره ای که قبلا درباره سنیتایزر زدیم هم ربط داشته باشد: ما هنوز هم باید خودمان کیبورد و بلندگو بسازیم و معین کنیم چه صدایی را می خواهیم بشنویم.

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

طراحی از دیدگاه هوش مصنوعی

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

برای انجام چنین نسخه ای از اسنیک، تنها ضروری است دو چیز را بدانید:

1. مسیر رسیدن به غذا کجاست؟

2. برای اینکه نمیرم باید در چه جهت هایی حرکت کنم؟

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

دنبال هیاهو نروید، مشکل را حل کنید

متعصبین ممکن است بگویند با صرف نظر از طراحی بخش های سخت تر یک جورهایی تقلب کردیم - به شدت مخالفم. وقتی هدف تان کار روی یک نوع هوش مصنوعی با کارنمودهای کلی است (یعنی هوش مصنوعی ای که بتواند کارهای دیگری غیر از اسنیک بازی کردن انجام دهد) حرف آنها درست است اما ما روی یک فناوری خیلی جزئی کار می کنیم و بهتر است همینگونه با آن رفتار گردد. معین اینکه از هر جز کجا و چگونه استفاده کرد به راه چاره قابل فهم تر و سریع تری ما را می رساند.

آیا می شد اسنیک را با روش های قانون محور حل کرد؟ البته. ما صرفا می خواهیم ببینیم آیا تحت شرایط لازم، آن قوانین می توانند به طور تصادفی شکل بگیرند یا نه.

این چه سر و شکلی به طراحی ما می دهد؟ به چیزی شبیه تصویر زیر تبدیل می گردد:

هر اطلاعاتی که به شبکه نورونی ارسال و سپس نتیجه اش دریافت می گردد باید بین صفر و یک باشد. برای این هدف، ما تمام داده های ورودی را به سوالاتی که جواب شان یا آری است یا نه (درباره جهت های مسیریابی) خلاصه کردیم. مهم است به یاد داشته باشیم شبکه نورونی هیچ نمی داند این اعداد چه معنایی دارند یا حتی دو مجموعه سه تایی هستند. هوش مصنوعی تنها برآیند آنها که عدد 6 است را می بیند.

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

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

تعریف عملکرد خوب

این ما را به آخرین مسئله در طراحی می رساند: وقتی می گوییم برترین عملکرد در اسنیک، یعنی چه؟ در حوزه یادگیری تقویتی/reinforcement learning به آن کارکرد پاداش/reward function می گویند.

قدم اول درست این است که مکانیسم امتیازدهی بازی را بازفراوری کرد. بنابراین هرقدر اسنیک بلندتر گردد، امتیاز هم بالاتر می رود. این به خودی خود خوب کار می نماید، اما خیلی وقت گیر است چون برای شبکه نورونی واضح نیست که اگر به سمت غذا قدم بردارد برایش خوب است. حالا سعی می کنیم این مشکل را ساده کنیم - پس به ازای هر قدمی که اسنیک به سمت غذا برمی دارد 1 امتیاز به دست می آورد و هر گاه به غذا رسید 10 امتیاز دیگر می گیرد.

به همین سادگی حل شد؟ اشتباه.

همانطور که در چپ تصویر دیده می گردد، تعریف ما از عملکرد خوب به یک راه گریز/loophole برای سیستم تبدیل شد. با دور خود چرخیدن، هوش مصنوعی می تواند امتیاز بیشتری بگیرد بدون اینکه با خطر برخورد با دیوار یا دم رو-به-رشدش روبه رو گردد. کارنمودهای پاداشْ درست پیاده سازی شان سخت ولی خراب کردنشان شدیدا راحت است. برای همین است که در برخی از سناریوها به اپراتور انسانی است تا ماشین را هدایت و معین کند نتیجه درست چیست، عوض اینکه برای مسئله ای ذهنی بخواهد کارکرد پاداش عینی ای تحمیل کند.

خوشبختانه این راه گزیر به سادگی حل می گردد. می توانیم کارکرد پاداش را اینطوری پیاده کنیم که اگر اسنیک قدمی برخلاف مسیر غذا بردارد از امتیازش کسر می گردد. پس هر قدم به سوی غذا 1 امتیاز دارد و هر قدم برای دوری از آن 1.5 امتیاز منفی. بنابراین اگر اسنیک بخواهد دایره وار دور خود بچرخد امتیاز منفی بیشتری می گیرد و مجبور است از حاشیه امن خارج گردد.

تکاملی که می گردد شاهدش بود

خاتمه، باید تصمیم بگیریم سایز هر نسل چقدر است و چگونه هر شبکه نورونی برای فراوری نسل بعدی باید دست به انتخاب بزند. از آنجایی که می خواهم هوش مصنوعی برای همه دسترس پذیر باشد و مشاهده کردنش هم آسان، می خواهم برنامه ام را طوری بسازم که خیلی راحت روی مرورگرها هم اجرا گردد. بنابراین سایز جمعیت اسنیک ها را نسبتا کوچک انتخاب می کنیم. از آنجا که یک صفحه شطرنجی 5 در 11 خیلی خوب روی صفحه مرورگر من جا می گیرد، من 55 اسنیک را انتخاب می کنم - و 6 اسنیک برتر (تقریبا 10 درصد اسنیک ها) برای فراوری نسل بعدی اسنیک ها انتخاب می شوند.

هر نسل تا زمانی باقی است که هر 55 اسنیک نمرده باشند یا آنها که به جای مانده اند امتیاز منفی نداشته باشند. این باعث می گردد نسل های اولیه عمر کوتاهی داشته باشند، تا بالاخره آنقدر جهش بیایبند که متوجه شوند اگر چیزی جلویم قرار داد [دم یا دیوار] مرا به سمت دیگری حرکت ده و آن را به نسل های بعدی منتقل نمایند.

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

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

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

هوش مصنوعی برای خیلی از مسائل ابزار قدرتمندی می تواند باشد - اما هنوز هم احتیاجمند یک طراح انسانی است. طراحان خوب نیز با جدیت به مسائل پیچیده فکر نموده و خودشان را طولانی مدت جای کاربری که قرار است از آن استفاده کند می گذارند. طراحی هوش مصنوعی ها هم ازاین نظر فرقی ندارد.

نویسنده: Peter Binggeser

منبع: Becoming Human: Artificial Intelligence Magazine

منبع: دیجیکالا مگ
انتشار: 11 تیر 1402 بروزرسانی: 11 تیر 1402 گردآورنده: nicepatogh.ir شناسه مطلب: 2232

به "بازی اسنیک؛ آیا هوش مصنوعی ها می توانند بازی کردن را بیاموزند؟" امتیاز دهید

امتیاز دهید:

دیدگاه های مرتبط با "بازی اسنیک؛ آیا هوش مصنوعی ها می توانند بازی کردن را بیاموزند؟"

* نظرتان را در مورد این مقاله با ما درمیان بگذارید