آموزش یادگیری ماشین با مثالهای کاربردی ــ بخش هفتم

در بخشهای پیشین از مجموعه مطالب «آموزش یادگیری ماشین با مثالهای کاربردی»، مبانی و مفاهیم هوش مصنوعی و یادگیری ماشین، شبکههای عصبی، یادگیری عمیق، شبکههای عصبی پیچشی، بینایی ماشین و تشخیص چهره، ترجمه ماشینی، تشخیص صوت و بازشناسی گفتار مورد بررسی قرار گرفت. در این بخش، الگوریتم DCGAN تشریح و کاربرد آن برای تولید تصاویر کامپیوتری با ارائه مثالهای کاربردی مورد بررسی قرار خواهد گرفت.
«مدلهای مولد» (Generative models)، به کامپیوترها امکان ساخت دادههایی مانند تصویر، ویدئو یا موسیقی را میدهند. «الک رادفورد» (Alec Radford)، پژوهشی (بر مبنای کارهای ایان گودفِلو) در این حوزه انجام داده که نتایج آن، مبانی فکری پژوهشگران، پیرامون ساخت مدلهای زایشی با استفاده از «یادگیری ماشین» (Machine Learning) را دستخوش تغییر کرده است. سیستم جدید ارائه شده توسط رادفورد، «Deep Convolutional Generative Adversarial Networks» (یا به اختصار DCGAN) نام دارد.
الگوریتم DCGAN، با بهرهگیری از ترکیب هوشمندانهای از دو شبکه عصبی عمیق که با یکدیگر به تخاصم (رقابت) میپردازند، قادر به ساخت تصاویر جدید بر مبنای تصاویر جهان واقعی است. همه تصاویر اتاق خوابهایی که در زیر قابل مشاهده هستند، توسط الگوریتم DCGAN ساخته شدهاند:
پژوهشگران حوزه هوش مصنوعی توجه زیادی به مدلهای زایشی مبذول میدارند، زیرا این مدلها سنگ بنای ساخت سیستمهای هوشمندی هستند که دادههای خام جهان را دریافت کرده و بر مبنای آنها بهطور خودکار ادراک میسازند.
در این مطلب، از مدلهای زایشی برای انجام کاری جالب، یعنی ساخت آثار هنری ۸-بیتی (گرافیکی) برای تولید مراحل یک بازی رایانهای استفاده خواهد شد.
هدف مدلهای زایشی
چرا پژوهشگران حوزه هوش مصنوعی چنین سیستمهای پیچیدهای را برای تولید تصاویر اتاق خواب میسازند؟ ایده اصلی ساخت تصویر بر پایه عکسهای جهان واقعی این است که اگر ماشین بتواند تصویر چیزی را بسازد، یعنی ادراکی از آن دارد.
در تصویر زیر سگی در ساحل در حال بازی با صدفها است.
انسانها میتوانند فورا درک کنند که این تصویر یک سگ (موجودی خزدار با دو دست، دو پا و یک دم) است. اما برای کامپیوتر، این تصویر صرفا شبکهای از اعداد است که رنگ هر پیکسل را نمایش میدهند. در واقع بر خلاف انسان، کامپیوتر هیچ درکی از مفهوم ارائه شده در این تصویر ندارد.
اکنون حالتی مفروض است که به یک کامپیوتر هزاران تصویر سگ داده میشود و پس از مشاهده این تصاویر، کامپیوتر میتواند تصاویر جدیدی از سگها در زوایا و نژادهای گوناگون را به صورت سرخود ایجاد کند. ممکن است حتی از این مدل، تولید نوع خاصی از تصاویر خواسته شود. مثلا، درخواست ایجاد تصویر «نمای جانبی از یک سگ نژاد بیگل» به مدل داده شود. اگر کامپیوتر قادر به انجام چنین کاری باشد و تصاویر تولید شده توسط آن، تعداد درستی پا، دم و گوش داشته باشند، ثابت میشود که قادر به تشخیص بخشهایی است که یک سگ را میسازند؛ حتی اگر به مدل صراحتا گفته نشده باشد که یک سگ از چه بخشهایی تشکیل شده.
به همین دلیل است که پژوهشگران به ساخت مدلهای زایشی علاقمند هستند. این مدلها، راهکاری برای آموزش دادن به کامپیوتر جهت کسب ادراک از مفاهیم، بدون آنکه معنای یک مفهوم صراحتا به آنها گفته شود، به حساب میآیند. این امر تحولی بزرگ در سیستمهای «یادگیری ماشین» (Machine Learning) کنونی است. این سیستمها در حال حاضر، صرفا با بهرهگیری از دادههای آموزشی کار میکنند که با دشواری توسط انسانها از پیش برچسبگذاری شدهاند. اما اگر سرانجامِ همه این پژوهشها تولید برنامههایی باشد که تصاویر سگها را تولید میکنند، چند سال طول میکشد تا یک تقویم سگ روز (به عنوان عوارض جانبی این مدلها!) که حاوی تصاویر متعدد سگها است تولید شود؟
اگر بتوان برنامهای ساخت که سگها را درک کند، چرا نباید برنامهای ساخت که درکی از دیگر چیزها داشته باشد؟ مثلا، برنامهای که مخزنی نامحدود از تصاویر دست دادن افراد با یکدیگر تولید کند. شاید عجیب به نظر برسد ولی، افراد و سازمانهایی وجود دارند که حاضرند برای تهیه چنین تصاویری پول بپردازند.
وجود برنامهای که تصاویر نامناسب تولید کند هیچ جذابیتی نخواهد داشت. این در حالیست که با توجه به نرخ پیشرفت مدلهای زایشی، کسی نمیداند که طی ۵ یا ۱۰ سال آینده میتوان در این حوزه به کجا رسید. پرسشی که در این حال مطرح میشود این است که اگر فردی سیستمی برای تولید فیلمها یا بازیهای کامپیوتری بسازد چه اتفاقی میافتد؟ با داشتن گوشه چشمی به تحولات ۲۰ تا ۳۰ سال آینده هوش مصنوعی و «یادگیری ماشین» (Machine Learning)، میتوان جهانی را تصور کرد که در آن کلیه تفریحات (از فیلم و بازیهای کامپیوتری گرفته تا دیگر موارد) ۱۰۰٪ توسط ماشین تولید شوند. «آندرژ کارپثی» (Andrej Karpathy) مدیر هوش مصنوعی تسلا (Tesla) در همین رابطه میگوید:
یک روز از تماشای فیلمهای قدیمی خوب ساخته شده «دستی» دست کشیده و به جای آن به تماشای فیلمهای (نامحدود) ساخته شده توسط کامپیوتر خواهیم پرداخت.
صنعت تولید بازیهای کامپیوتری اولین حوزهای از تفریحات است که در آن از هوش مصنوعی برای ساخت محتوای خام استفاده میشود. علاوه بر همپوشانی میان مهندسان یادگیری ماشین و بازیسازی در نمودار وِن، انگیزههای زیادی برای سرمایهگذاری در خودکارسازی ساخت بازیهای رایانهای وجود دارد. بشر هنوز در روزهای ابتدایی ساخت و توسعه مدلهای زایشی مبتنی بر یادگیری ماشین (Machine Learning) قرار دارد و از اینرو استفادههای کاربردی آنها در حال حاضر بسیار محدود هستند. با این وجود، بازی کردن با این مدلها برای کسب دستاوردهای گوناگون بسیار لذت بخش است.
روش کار الگوریتم DCGAN
برای ساخت الگوریتم DCGAN، دو شبکه عصبی ساخته میشود. سپس، این شبکهها به مبارزه با یکدیگر جهت شکست دادن هم، وا داشته میشوند. در این فرآیند هر دو آنها قویتر میشوند. در این مرحله فرض میشود که اولین شبکه عصبی یک افسر پلیس تازهکار است که آموزش دیده تا اسکناسهای تقلبی را شناسایی کند. از آنجا که هدف یافتن اشیائی در تصویر است، میتوان از شبکه عصبی پیچشی استاندارد استفاده کرد.
این شبکه وظیفه دارد که تصویر را دریافت کرده و پول واقعی را تشخیص دهد. مطالعه بخش سوم مجموعه مطالب «آموزش یادگیری ماشین با مثالهای کاربردی» به افرادی که با شبکههای عصبی پیچشی آشنایی ندارند توصیه میشود. اولین شبکه عصبی موجود در این مدل تخاصمی، «متمایزگر» (Discriminator)، نامیده میشود.
اکنون فرض میشود که دومین شبکه عصبی یک متقلب است که صرفا چگونگی تولید اسکناس تقلبی را میآموزد. برای دومین شبکه عصبی، لایهها در یک شبکه پیچشی نرمال معکوس میشوند و بنابراین همه چیز به عقب باز میگردد. بنابراین، به جای دریافت ورودی و ارائه یک مقدار بهعنوان خروجی، لیستی از مقادیر دریافت شده و یک تصویر در خروجی ارائه میشود. دومین شبکه عصبی در این مدل، «مولد» (Generator)، نامیده میشود.
در حال حاضر، یک افسر پلیس (متمایزگر) وجود دارد که در جستوجوی پولهای تقلبی و متقلب (مولد) است. اکنون نبردی میان این دو ترتیب داده میشود. در اولین دور، مولد یک سند جعلی تولید میکند که شباهت آن به پول بسیار ناچیز است زیرا هیچ شناختی از چیستی پول ندارد.
در این لحظه، عملکرد متمایزگر در تشخیص پول جعلی نیز به همان اندازه افتضاح است و بنابراین تفاوت پول واقعی و جعلی را تشخیص نمیدهد.
در این لحظه، کارشناس مداخله کرده و به متمایزگر میگوید که دلار جعلی است. سپس، به آن یک دلار واقعی نشان داده و خواسته میشود که تفاوت بین دلار واقعی و جعلی را تشخیص دهد. متمایزگر به دنبال جزئیات جدیدی میگردد که به او در تشخیص دلار واقعی و جعلی از یکدیگر کمک کند. برای مثال، متمایزگر ممکن است دریابد که روی پول واقعی تصویری از یک انسان وجود دارد که در پول جعلی نیست. با استفاده از این دانش، میآموزد که پول جعلی و واقعی را از یکدیگر تمییز دهد. اکنون عملکرد مدل اندکی بهبود پیدا میکند.
اکنون دور دوم آغاز میشود. به مولد گفته میشود که تصاویر پولهای ساخته شده توسط آن، به دلیل جعلی بودن بلافاصله برگشت میخورند. همچنین، به او گفته میشود که متمایزگر در حال حاضر به دنبال وجود چهره در اسکناس میگردد. بنابراین، بهترین راه گیج کردن متمایزگر، قرار دادن تصویر یک چهره روی پول است.
حالا، پولهای جعلی مجددا، معتبر شناسایی میشوند. لذا، متمایزگر باید دوباره به تصویر دلار نگاه کرده و راه جدیدی برای متمایز کردن آن از نسخههای جعلی پیدا کند. این بازی رفت و برگشت بین مولد و متمایزگر هزاران بار و تا زمانی که هر دو شبکه متخصص شوند ادامه مییابد. سرانجام، مولد پولهای جعلی نزدیک به کامل تولید میکند و متمایزگر به یک کارگاه حرفهای مبدل میشود که به دنبال کوچکترین خطاها در اسکناسها میگردد. در این هنگام که هر دو شبکه به خوبی آموزش دیدهاند، میتوانند تصاویر جعلی بر مبنای تصاویر جهان واقعی - مانند تصاویر اتاق خواب - تولید کنند که انسانها را تحت تاثیر قرار میدهد. افراد میتوانند از این تصاویر برای مقاصد گوناگون بهرهمند شوند.
اعمال روش مذکور در بازیهای رایانهای
اکنون که مشخص شد الگوریتم DCGAN چگونه کار میکند، از آن برای ساخت یک اثر هنری (گرافیکی) به سبک بازیهای ویدئویی دهه ۱۹۸۰ استفاده خواهد شد.
از اینرو، الگوریتم بهنوعی طراحی میشود که بر اساس اسکرینشاتهای بازیهای ویدئویی واقعی «سیستم سرگرمی نینتندو» (Nintendo Entertainment System | NES)، گرافیک مراحل یک بازی (تخیلی) را بسازد.
تصور این است که اگر بتوان تصاویر متقاعد کنندهای از اسکرینشاتهای تخیلی بازیهای ویدئویی ساخت، پس میتوان بیتها را از آن اسکرینشاتها کپی-پیست و از آن برای ساخت یک بازی ویدئویی سبک رترو (retro-style) استفاده کرد. از آنجا که بازیهای ویدئویی تولید شده هرگز وجود نداشتهاند، بازی جدید حکم دزدی ندارد (دستکم در حال حاضر).
امروزه هنر ساخت بازیهای ویدئویی با افزایش حجم حافظهها، نسبت به گذشته بسیار سادهتر شده. زیرا برای مثال حافظه NES بسیار ناچیز و حتی از میزان حافظه مصرفی این مقاله نیز کمتر بود. از همینرو، برنامهنویسها مجبور بودند از ترفندهای گوناگونی برای متناسبسازی بازی در حافظه بهره ببرند. در آن برهه، برای بیشینهسازی فضای محدود، بازیها از گرافیکهای کاشیمحور استفاده میکردند. در این نوع از گرافیکها، هر بازی از چندین کاشی (معمولا ۱۶x۱۶) تکرار شونده تشکیل میشد. برای مثال، بازی ویدئویی «افسانه زِلدا» (The Legend of Zelda)، تنها از هشت کاشی مجزا استفاده میکرد.
در تصویر زیر، کل کاشیهای نقشه بازی «افسانه زلدا» نشان داده شده است.
در اینجا، هدف ساخت صفحه کاشی مشابهی برای یک بازی (ساخته شده توسط ماشین) است. به همین منظور، نیازی نیست همه اسکرینشاتهای بازی تولید شده واقعی بهنظر برسند. در عوض، تنها اشکال و الگوهایی جستوجو میشود که بتوان از آنها به عنوان کاشیهای ۱۶x۱۶ (چیزهایی مانند سنگها، آب، پل و دیگر موارد) استفاده کرد. سپس از این کاشیها برای ساخت مراحل بازی ویدئویی ۸-بیتی استفاده میشود.
دریافت دادهها
برای آموزش دادن سیستم، نیاز به حجم بالایی از دادهها است. خوشبختانه، بیش از ۷۰۰ بازی برای NES وجود دارد که میتوان از آنها برای این کار استفاده کرد. در اینجا از نرمافزار wget برای دانلود همه اسکرینشاتهای بازیهای NES از وبسایت موزه بازیهای ویدئویی استفاده شده است.
پس از چند دقیقه دانلود، بیش از ۱۰٬۰۰۰ اسکرینشات از بازیهای NES حاصل میشود.
در حال حاضر، الگوریتم DCGAN، صرفا روی تصاویر بسیار کوچک کار میکند (۲۵۶ پیکسل مربع یا همین حدود). اما کل وضوح تصویر NES برابر با ۲۵۶ در ۲۲۴ پیکسل است، بنابراین مشکلی در این رابطه وجود ندارد. برای ساده کردن این کار، هر اسکرینشات NES به ۲۲۴ پیکسل مربع شکسته میشود.
راهاندازی DCGAN
پیادهسازیهای متنباز متعددی از DCGAN روی گیتهاب وجود دارد که میتوان از آنها استفاده کرد. در این مطلب از پیادهسازی بر پایه تنسورفلو (Tensorflow) که «تِهون کیم» (Taehoon Kim) آن را ساخته بهرهبرداری میشود. از آنجا که DCGAN نظارت نشده است، تنها کاری که باید انجام شود ریختن دادهها در یک پوشه، پیچش پارامترهای اصلی و آغاز آموزش دادن مدل برای دریافت نتایج است.
در تصویر زیر نمونههایی از دادههای آموزش قابل مشاهده هستند.
اکنون، فرآیند آموزش آغاز میشود. در ابتدا، خروجیِ مولد تنها نویز غنی است. اما به مرور که مولد یاد میگیرد بهتر کار کند، خروجی نیز کم کم شکل مییابد.
پس از چندین دوره بیشتر آموزش، تصاویر کابوسگونهای از نسخههای کلاسیک بازیهای نینتندو ساخته میشوند.
با ادامه یافتن آموزش، آجرها و بلوکهایی که انتظار آنها میرفت، کم کم در تصویر پدیدار میشوند. همچنین میتوان عناصر تصویر مانند «نوار جان» (life bar) و حتی کمی متن را مشاهده کرد.
در این مرحله، پیچیدگی مسائل افزایش مییابد. پرسشی که در اینجا مطرح میشود این است که از کجا میتوان فهمید مرحله ساخته شده توسط ماشین کپی از یک مرحله بازی واقعی نیست؟ در پاسخ به این پرسش باید گفت، چنانکه در تصویر بالا مشهود است، نوار منو از بازی برادران سوپر ماریو ۳ (Super Mario Bros. 3) و نوار سرتیتر و آجرها از بازی برادران سوپر ماریو (Super Mario Bros) اصلی آورده شدهاند (پس این خروجی، یک کپی از بازی مشخصی نیست).
اصلاح دادههای آموزش کاری است که وقوع آن امکانپذیر است. با استفاده از مجموعه دادههای آموزش بزرگ و آموزش ندادن به مدل طولانی، شانس آنکه نسخه تولید شده توسط ماشین عینا مشابه نسخه اصلی بازی باشد کاهش پیدا میکند. البته این مساله سرسامآوری است که پژوهشها حول محور آن همچنان ادامه دارد.
فرآیند آموزش تا جایی ادامه داده میشود که مرحلهای مشابه بازی واقعی ساخته شود. لازم به ذکر است که نمیتوان اثبات کرد یک مرحله اصلی نیست، مگر با جستوجوی مجموعه داده و اعتبارسنجی اینکه هیچ نسخه مشابهی در آن وجود ندارد.
با چندین ساعت آموزش، تصاویر تولید شده دارای کاشیهای ۱۶x۱۶ هستند. در ادامه، ایجاد بلوکهای سنگی، الگوهای آب، بوتهها و برخی از کاشیهای پسزمینه شبح مانند دنبال میشود. سپس، نیاز به پیشپردازش تصاویر تولید شده برای حصول اطمینان از آن است که تنها از ۶۴ رنگی که در NES وجود داشت، استفاده شده.
سپس، یک تصویر ۶۴ رنگی در ویرایشگر تصاویر کاشیکاری شده بهمنظور انجام برخی بررسیها باز میشود. از اینجا میتوان به سادگی کاشیهای ۱۶x۱۶ را دریافت که با طرح مورد نظر تطابق دارند.
سپس، درون ویرایشگر تصاویر کاشیکاری شده، این کاشیهای ۱۶x۱۶ را کنار هم چیده تا یک طرح ساده از مرحله بازی که یادآور بازی کسلوانیا است حاصل شود.
خوب به نظر میرسد. لازم به ذکر است که حتی یک پیکسل از تصویر هم با نرمافزار ویرایش تصویر دستکاری نشده. هر کاشی دقیقا خروجی مدل DCGAN است. در گام بعدی، باید کاراکتر اصلی و چند دشمن را از بازی کسلوانیا آورد تا مشخص شود مرحله ساخته شده توسط ماشین دقیقا به چه شکلی است.
برای دریافت اثر کامل، باید دید که بازی با افزودن عناصر منو چگونه به نظر میرسد.
به نظر میرسد مرحله ساخته شده توسط ماشین شبیه بازیهای NES است. قطعا این مرحله یکی از بهترین مراحل بازیهای NES نیست اما میتوان ادعا کرد بدترین آنها هم نیست.
فقط همین؟
مدلهای مولد مانند آنچه معرفی شد، واقعا جالب توجه هستند. این ایده که روزی کامپیوترها بتوانند آثار هنری نامحدودی خلق کنند که پیش از این توسط انسان ساخته میشده خارقالعاده است. اما بسیاری از افراد نیز با شنیدن این مطلب میگویند «فقط همین؟»
قطعا کاربردهای متعددی برای مدلهای مولد وجود دارد. شبکههای مولد تخاصمی (Generative adversarial network | GAN)، با وجود محدودیتها و دشواریهایی که برای آموزش و تولید حتی تصاویر بسیار کوچک دارند اما آینده هوش مصنوعی محسوب میشوند. در حقیقت، بهترین مدلها در حال حاضر تنها میتوانند تصاویر سایز تمبر پستی از سگهای جهش یافته بسازند!
اما تا همین چند سال پیش حتی نمیشد کاری نزدیک به این انجام داد. در حال حاضر پژوهشگران با تولید تصاویری مانند زیر واقعا هیجان زدهاند.
فناوری مدلهای زایشی، هر روز بهبود و ارتقا پیدا میکند. در مقاله دیگری با عنوان «شبکههای مولد تخاصمی شرطی برای افزایش سن چهره» به یکی دیگر از کاربردهای این روش پرداخته شده است.
اگر پیشرفتها به همین صورت ادامه پیدا کند، مدلهای زایشی به ابزار اصلی کمک به بشر جهت خلق و آفرینش مبدل خواهند شد.
مطالعه بخش بعدی این مطلب به شما توصیه میشود.
اگر نوشته بالا برای شما مفید بوده، آموزشهای زیر نیز به شما پیشنهاد میشود: