مدل های مولد ( Generative Models ) به کامپیوتر این توانایی را می دهند تا خودش داده را به وجود آورد؛ مانند عکس ها، فیلم ها و موسیقی.
چند سال قبل، الکس رادفورد ( Alex Radford ) با همکاری ایان گودفلو ( Goodfellow ) مقاله ای را منتشر کرد که طرز تفکر به همه در مورد ساخت مدل های مولد با یادگیری ماشین را تغییر داد. سیستم جدید، شبکه های عمیق مولد تخاصمی کانولوشنی ( Deep Convolutional Generative Adversarial Networks ) نام دارد یا به اختصار DCGAN .
مجموعه ی یادگیری ماشین جذاب است!
DCGAN ها این توانایی را دارند که با استفاده از یک ترکیب هوشمندانه ی دو شبکه عصبی عمیق که در حال رقابت با یکدیگرند، تصاویر واقعی را به صورت خیالی به وجود بیاورند. همه این تصاویر از اتاق های خواب توسط یک DCGAN مجسم شده است :

محققان هوش مصنوعی به مدل های مولد توجه ویژه ای دارند زیرا آن ها مانند سکوی پرتابی به سمت ساخت سیستم های هوش مصنوعی هستند که این سیستم ها می توانند از داده خام در جهان تغذیه کرده و به صورت خودکار آن ها را درک کنند.
ولی بیاید از مدل های مولد برای انجام کارهای احمقانه تر استفاده کنیم – ساخت جلوه های هنری برای بازی های ویدیویی ۸ بیتی!
هدف مدل های مولد
خب، دقیقا چرا محققان هوش مصنوعی در حال ساختن سیستم های پیچیده برای تولید تصاویر ضعیف از اتاق خواب ها هستند؟
ایده ی آن ها اینگونه است که اگر شما بتوانید تصاویری از بعضی چیزها تولید کنید، شما حتماً یک درک از آن داشته اید.
به این تصویر نگاه کنید:
شما فوراً متوجه می شوید که این تصویر یک سگ است، یک چیز خز مانند با چهار پا و یک دم. ولی برای یک کامپیوتر، تصویر فقط شبکه ای از اعداد است که رنگ هر پیکسل را نمایش می دهد. کامپیوتر هیچ درکی از اینکه تصویر یک مفهوم را نمایش می دهد، ندارد.
ولی حالا تصور کنید که ما هزاران عکس سگ را به یک کامپیوتر نشان داده ایم و بعد از دیدن آن عکس ها، کامپیوتر قادر بوده تا خودش عکس های جدیدی از سگ ها تولید کند – شامل نژاد های مختلف از سگ ها و عکس هایی که از زاویه های مختلف گرفته شده اند. شاید ما حتی بتوانیم از کامپیوتر انواع مشخصی از عکس ها را درخواست کنیم، مانند یک نمای نیم رخ از یک سگ بیگل.
اگر کامپیوتر قادر به انجام این کار بود و تصویری که تولید کرده دارای تعداد درستی از پا ها، دم ها و گوش ها باشد، می تواند ثابت کند که کامپیوتر می داند چه قسمت هایی برای ساخت تصویر یک سگ نیاز است، با وجود اینکه هیچ کس صراحتا این موارد را به کامپیوتر نگفته است. خب در این صورت، یک مدل مولد خوب، مدرکی برای درک پایه ای می باشد؛ حداقل در یک سطح ابتدایی.
به همین خاطر است که محققان در رابطه با ساخت مدل های مولد بسیار هیجان زده هستند. به نظر می رسد که راهی برای آموزش کامپیوترها جهت درک مفاهیم وجود داشته باشد؛ بدون این که صراحتا معنای این مفاهیم به کامپیوتر گفته شده باشد. این کار یک گام بزرگ و فراتر از سیستم های فعلی است که فقط می تواند از داده آموزشی ای یاد بگیرد که توسط بشر و با زحمت زیاد از پیش برچسب گذاری شده است.
ولی اگر همه نتایج این تحقیق ساخت برنامه هایی باشد که عکس هایی از سگ ها تولید می کنند، چند سال تا زمانی که ما اولین تقویم روزانه ی سگی را دریافت کنیم، باقی مانده است؟
و اگر شما بتوانید برنامه ای بسازید که سگ ها را متوجه شود، چرا نتوانید برنامه ای بسازید که چیزهای دیگر را تشخیص دهد؟ در مورد برنامه ای که بتواند بی نهایت تصویر از افرادی که با هم دست می دهند تولید کند، چطور؟ مطمئنم بعضی افراد می توانند این کار را انجام دهند.

بسیار خب، شاید یک برنامه که انباری از عکس های بدرد نخور را تولید می کند، آنقدر ها هم جذاب نباشد. ولی بر اساس سرعت پیشرفت مدل های مولد فقط در عرض یک سال گذشته، کسی چه می داند که ما طی ۵ تا ۱۰ سال آینده، کجا خواهیم بود. چه می شود اگر کسی بتواند سیستمی اختراع کند که فیلم هایی کامل را تولید کند؟ یا موسیقی؟ یا بازی های ویدیویی؟
اگر شما به ۲۰ تا ۳۰ سال آینده نگاه کنید، شما می توانید جهانی را متصور شوید که ۱۰۰ درصد سرگرمی ها توسط ماشین تولید شده اند:
یک روز ما در مورد فیلم های خوب قدیمی که “دست ساز” هستند، صحبت خواهیم کرد و در عوض، حالت معمولی آن زمان محتواهای بی نهایتی خواهند بود که توسط هوش مصنوعی با توجه به تقاضای مخاطب تولید شده اند. – آندره کارپاتی ( Andrei Karpathy )
صنعت بازی های ویدیویی اولین حوزه ی سرگرمی است که به صورت جدی به انجام آزمایش هایی با استفاده ازهوش مصنوعی برای تولید محتوای خام، شروع کرده است. جدای از هم پوشانی بین بازی های کامپیوتری و مهندسان یادگیری ماشین، یک انگیزه مالی زیادی برای سرمایه گذاری ۳۰۰ میلیون دلاری در زمینه توسعه ی اتوماسیون پیشرفته بازی های ویدیویی برای بازی های تریپل ای مدرن وجود دارد.
ما هنوز هم در روز های آغازی یادگیری ماشین بر پایه مدل های مولد هستیم و استفاده کاربردی از آن ها این روزها بسیار محدود است، ولی کار های بسیار جالبی می توان به وسیله ی آن ها انجام داد. بیایید ببینیم که چه کاری می توانیم با این شبکه ها انجام دهیم.
DCGAN ها چگونه کار می کنند؟
برای ساخت یک DCGAN ما دو شبکه عصبی عمیق به وجود می آوریم. بعد ما آن ها را وادار به جدل با یکدیگر می کنیم، تلاش بی وقفه برای برتری از یک دیگر. در این روند، هر دوی آن ها قوی تر می شوند.
بیایید فرض کنیم که شبکه عصبی عمیق اول یک پلیس کاملاً تازه کار است که برای پیدا کردن پول تقلبی آموزش دیده است. کار او این است که به تصویر نگاه کند و به ما بگوید که تصویر داده شده پول واقعی است یا نه.
از آنجایی که ما به دنبال یافتن اشیا در تصویر هستیم، می توانیم از یک شبکه عصبی کانولوشنی استاندارد برای انجام این کار استفاده کنیم. اگر شما با شبکه عصبی کانولوشنی آشنایی ندارید، می توانید پست قبلی ما را بخوانید. ولی نظریه کلی این است که شبکه عصبی یک تصویر را می گیرد، آن را توسط لایه های بسیاری که ویژگی های پیچیده فزاینده در عکس را تشخیص می دهند، پردازش می کند و بعد از آن یک ارزش را به عنوان خروجی می دهد؛ در این مورد، اینکه عکس تصویری از پول واقعی می باشد یا نه.
این اولین شبکه عصبی است که متمایز کننده نام دارد:
حالا بیایید فرض کنیم که شبکه عصبی دوم، یک جعل کننده ی تازه کار است که به تازگی یاد گرفته چگونه پول تقلبی بسازد. برای این شبکه عصبی دوم، ما لایه ها را در یک شبکه کانولوشنی نرمال برعکس خواهیم کرد، در نتیجه همه چیز به عقب برمی گردد. خب به جای وارد کردن تصویر و خروجی یک ارزش، این شبکه لیستی از ارزش ها را گرفته و یک تصویر را به عنوان خروجی برمی گرداند.
این شبکه عصبی دوم، مولد نامیده می شود:
خب، ما الان یک افسر پلیس ( متمایز کننده ) داریم که به دنبال پول تقلبی می گردد و یک جعل کننده پول ( مولد ) که پول تقلبی تولید می کند. بیایید آن ها را به مبارزه وادار کنیم!
در راند اول، مولد سند های جعلی موثری که به سختی شبیه پول هستند را می سازد زیرا این شبکه هیچ چیز در مورد اینکه پول قرار است شبیه چه باشد، نمی داند:
ولی در همین زمان متمایز کننده در مقایسه با مولد برای تشخیص پول در وضعیت بدی قرار دارد، خب پس متوجه تفاوت آن با پول واقعی نخواهد شد:
در این جا، ما قدم پیش می گذاریم و به متمایز کننده می گوییم که این دلار در واقع تقلبی است. سپس ما یک دلار واقعی به آن نشان می دهیم و از آن می خواهیم تا ببیند که دلار واقعی چه تفاوتی با دلار تقلبی دارد. متمایز کننده به جزئیات جدید نگاه می کند تا به تقکیک دلار واقعی از تقلبی کمک کند.
برای مثال، جدا کننده ممکن است به این توجه کند که پول واقعی در خود تصویر یک شخصیت را دارد در حالی که پول تقلبی آن را ندارد. با استفاده از این اطلاعات، متمایز کننده یاد می گیرد که چگونه پول تقلبی را از واقعی تفکیک کند. پس این شبکه اندکی در انجام این کار بهتر می شود:
حالا ما راند دوم را شروع می کنیم. ما به مولد می گوییم که تصاویر پول به خاطر تقلبی بودن رد شده اند، خب پس شبکه باید سطح بازی را بالا تر ببرد. ما همچنین به مولد می گوییم که متمایز کننده اکنون به دنبال چهره ها می باشد، خب پس بهترین راه برای گیج کردن یا به اشتباه انداختن متمایز کننده، قرار دادن یک تصویر چهره روی پول است:
و پول های تقلبی دوباره به عنوان پول اصل پذیرفته می شوند! خب پس الان متمایز کننده مجبور است تا دوباره به دلار اصل نگاه کند و راهی برای تشخیص آن از دلار تقلبی پیدا کند.
این بازی رفت و برگشتی بین مولد و جدا کننده، هزاران بار ادامه پیدا می کند تا زمانی که هر دو شبکه متخصص شوند.
نهایتاً مولد در حال تولید مواد تقلبی تقریباً کامل می باشد و متمایز کننده به یک کارآگاه ماهر تبدیل شده که به دنبال پیدا کردن کوچکترین اشتباهات می باشد.
زمانی که هر دوی این شبکه ها به حد کافی آموزش دیده اند که انسان ها تحت تاثیر تصاویر تقلبی قرار گیرند، ما می توانیم از تصاویر تقلبی برای هر هدفی که می خواهیم، استفاده کنیم.
استفاده از این کار در بازی های ویدیویی
خب حالا که ما می دانیم DCGAN ها چگونه کار می کنند، بیایید ببینیم که آیا می توانیم یکی از آن ها را برای تولید جلوه های هنری جدید در زمینه بازی های ویدئویی مدل ۱۹۸۰استفاده کنیم.
بیایید یک DCGAN بسازیم که تلاش می کند عکس های صفحه ی یک بازی های ویدیویی برای دستگاه بازی نینتندو NES را با استفاده از تصاویر بازی اصلی ایجاد کند.
ایده ی این کار این است که اگر ما بتوانیم تصاویر خیالی از صحنه ی یک بازی ویدیویی تولید کنیم که متقاعد کننده باشد، می توانیم بخش هایی از آن را کپی کرده و از آن در بازی ویدیویی خودمان استفاده کنیم. از آنجایی که بازی های ویدیویی تولید شده هیچ وقت وجود نداشته اند، این کار نمی تواند دزدی باشد (شاید….بعدا در این باره بیشتر می گوییم).
جلوه های هنری بازی های ویدیویی در آن روزها بسیار ساده بود. از آنجایی که NES از مقدار کمی حافظه برخوردار بود ( بازی ها به حافظه ی بسیار کمتری نسبت به این متن نیاز داشتند!)، برنامه نویس ها باید از تعداد زیادی از ترفندها استفاده می کردند تا این جلوه های هنری بازی را در حافظه بگنجانند. برای بزرگ کردن فضای محدود، بازی ها از گرافیک مبتنی بر تایل( Tile-Based ) استفاده می کردند که هر تصویر صفحه در بازی فقط از مقدار کمی (معمولا ۱۶ در ۱۶ پیکسل) تایل های گرافیکی تکراری ساخته شدند.
برای مثال، صفحه ی آغازی “افسانه زلدا” فقط از هشت تایل (کاشی) مجزا ساخته شده است:
اینجا همه تایل ها برای نقشه بازی افسانه زلدا را می بینید:

هدف ما این است که یک صفحه از تایل های مشابه برای بازی خود به وجود آوریم. به همین خاطر اگر تصاویر صفحات بازی که ما تولید می کنیم واقعی به نظر نرسد، مشکلی نیست. در عوض، ما فقط به دنبال شکل ها و الگوهایی هستیم که می توانیم به عنوان تایل های ۱۶ در ۱۶ در بازی خود استفاده کنیم؛ چیزهایی مانند سنگ ها، آب، پل ها و غیره. سپس ما می توانیم از آن تایل ها برای ساخت مراحل بازی ویدیویی ۸ بیتی خود، استفاده کنیم.
به دست آوردن داده ها
برای آموزش سیستم خود، ما به مقدار زیادی داده نیاز داریم. خوشبختانه بیش از ۷۰۰ بازی برای NES وجود دارد که ما می توانیم اطلاعات آن ها را استخراج کنیم.
من از wget برای دانلود تصاویر صفحه های بازی های NES از وبسایت موزه بازی های ویدیویی استفاده کردم. (ببخشید که در سایت شما کند و کاو کردم!) بعد از چند دقیقه دانلود، من بیشتر از ۱۰ هزار تصویر صفحه از صد ها بازی NES داشتم :
در حال حاضر، DCGAN ها فقط روی تصاویر کوچک کار می کنند؛ حدود ۲۵۶ پیکسل مربع. ولی کل وضوح تصویرNES فقط ۲۵۶ پیکسل در ۲۲۴ پیکسل بود، خب پس مشکلی نیست. برای ساده کردن کار، من هر تصویر صفحه ی NESرا به ۲۲۴ پیکسل مربع برش دادم.
راه اندازی DCGAN
تعداد زیادی پیاده سازی DCGAN به صورت منبع باز درگیت هاب وجود دارند که می توانید آن ها را امتحان کنید. ما از پیاده سازی تنسورفلو که متعلق به Teahoon kim است، استفاده کردم. از آنجایی که DCGAN ها نظارت نشده هستند، همه کاری که شما باید انجام دهید این است که داده ها را در یک پوشه قرار دهید، پارامترهای اصلی را تنظیم کنید، شروع کنید به آموزش دادن آن و صبر کنید تا نتیجه حاصل را ببینید.
اینجا می بینید که یک نمونه از داده آموزشی اصلی به چه صورت است:
حالا آموزش شروع می شود. در ابتدا، خروجی مولد، نویز خالص است. ولی به آهستگی شروع به شکل گرفتن می کند زیرا مولد یاد می گیرد که چگونه بهتر کار کند:
بعد از تعداد بیشتری دوره های آموزشی، تصاویر شروع می کند به شباهت پیدا کردن به نسخه ی کابوس مانندی از بازی های کلاسیک Nintendo :
هر چقدر که آموزش بیشتر ادامه می یابد، ما شروع می کنیم به دیدن آجرها و بلوک هایی که دنبال آن ها بودیم. شما همچنین می توانید عناصری از صفحه مانند نوارها ی سلامتی و حتی بعضی نوشته ها را هم ببینید:
اینجا جاییست که همه چیز پیچیده تر می شود. ما چگونه می توانیم بدانیم که کامپیوتر در حال ساختن یک جلوه ی هنری کاملاً جدید است و آن را مستقیما از تصاویر آموزشی کپی نمی کند؟ در دو تا از این عکس ها، شما می توانید به وضوح فهرست بازی Super Mario Bros 3 و نوار سربرگ و آجر های بازی Super Mario Bros اصلی را ببینید.
برگرداندن داده های آموزشی چیزی است که مطمئنا می تواند اتفاق بیفتد. با استفاده از یک مجموعه داده های آموزشی بزرگ و عدم آموزش آن برای مدت زمان طولانی، ما می توانیم تلاش کنیم که احتمال این اتفاق را کاهش دهیم. ولی این یک مسئله دشوار است و تحقیق درباره ی آن ادامه دارد.
از آنجایی که من فقط به زیبایی شناسی اهمیت می دهم، من مدل را جوری تنظیم کردم که جلوه های هنری ای را تولید کند که به نظر من اصلی و جدید باشد. ولی من نمی توانم این را تایید کنم که جلوه ی هنری جدید کاملاً اصل است مگر با جستجوی داده آموزشی برای یافتن جلوه ی هنری مشابه و تایید اینکه هیچ جلوه ی هنری مشابهی وجود ندارد.
بعد از چند ساعات آموزش، تصاویر تولید شده شامل تایل های ۱۶ در ۱۶ هستند که به نظر من خوب است. من به دنبال کمی تغییر روی بلوک سنگی ساده می گشتم، الگو های آجری، الگوهای آبی، بوته ها و مقداری تایل های فضا سازی پس زمینه که عجیب و غریب به نظر می رسند.
سپس نیاز است که روی تصاویر تولید شده، پیش پردازش انجام دهیم تا مطمئن شویم آن ها فقط از ۶۴ رنگی که در NES موجود است، استفاده باشند:

پس من تصاویر ۶۴ رنگی را در Tiled Map Editor باز می کنم. از آنجا، می توانم به آسانی تایل های ۱۶ در ۱۶ که با آن زیبایی که مورد نظر من است مطابقت دارند را دریافت کنم:
سپس از داخل Tiled Map Editor من آن تایل های ۱۶ در ۱۶ را در یک مرحله ی ساده که یاد آور بازی Castlevania از NES است، مرتب می کنم :
فکر می کنم بسیار خوب به نظر می رسد! به یاد داشته باشید که من حتی به یک پیکسل هم با ویرایشگر تصویر، دست نزده ام .هر تایل مستقیم از مدل DCGAN بیرون آمده است.
حالا بیایید شخصیت اصلی و تعدادی دشمن را از Castlevania اضافه کنیم، خب الان می توانیم ببینیم که این مرحله در عمل چگونه به نظر می رسد :
برای به دست آوردن حس کامل، بیایید ببینیم که این مرحله در داخل بازی با فهرست عناصر اضافه شده چگونه می شود:
فکر می کنم که شبیه بازی های NES ی که به یاد دارم، شده است! من ادعا نمی کنم که این بهترین جلوه ی هنری ممکن NES شده ، ولی مطمئنا بدترین هم نیست:

فقط همین؟
من با دیدن مدل های مولد مانند این، واقعا شگفت زده می شوم. نظریه تکثیر سریع آثار هنری بی پایان توسط کامپیوتر، برای من بسیار جذاب است. ولی زمانی که من در این مورد برای بقیه صحبت می کنم، بعضی اوقات پاسخ این است “فقط همین؟ این که خیلی پیش پا افتاده است.”
همین حالا هم مطمئناً سخنان فریب دهنده ی زیادی در مورد مدل های مولد وجود دارد. شبکه های مولد تخاصمی ( GAN ها ) هم اکنون نیزبا وجود این که به وضوح آموزش و محدودیت آن ها برای تولید تصاویر کوچک، دردسر ساز است، آینده ی هوش مصنوعی نامیده می شدند. در واقع این مدل های بسیار خوب، در حال حاضر تنها می توانند فقط تصاویری از سگ های جهش یافته در سایز تمبر پستی، تولید کنند:

ولی تا چند سال گذشته هیچ کاری نزدیک به این هم نمی توانستیم انجام دهیم. ما از دیدن تصویر تولید شده شبیه به این هم بسیار شگفت زده می شدیم:
و تکنولوژی روز به روز در حال پیشرفت است. این یک مقاله است که از GANها برای پیرتر کردن چهره های مردم استفاده می کند:

اگر همه چیز با همین سرعت پیشرفت کند، زمان زیادی طول نخواهد کشید تا مدل های مولد ، ابزار اصلی برای کمک به ما برای خلق کردن باشند. اکنون فرصت بسیار خوبی است تا شروع کنیم به انجام آزمایش و پژوهش!
یادگیری را ادامه دهید
اگر می خواهید بیشتر و عمیق تر در مورد مدل های مولد و DCGAN ها یاد بگیرید، اینجا برخی منابع پیشنهادی برای شما ارائه شده است:
- شبکه های عمیق مولد تخاصمی شرطی برای تولید چهره توسط Jon Guathier
- بررسی اجمالی مدل های مولد از OpenAI
- تکمیل تصاویر با یادگیری عمیق در تنسورفلو توسط Brandon Amos
- ببینید که Tom White چگونه از مدل های مولد برای خلق جلوه های هنری توسط پروژه عصبی خطوط صورت، استفاده می کند.
- مقاله ی اصلی Ian Goodfellow در مورد GAN ها و آموزش های اخیر وی در زمینه ی آن ها
این متن یکی از قسمت های مجموعه ی یادگیری ماشین جذاب است، می باشد. شما می توانید قسمت های قبلی را اینجا بررسی کنید: قسمت ۱ ، قسمت ۲ ، قسمت ۳ ، قسمت ۴ ، قسمت ۵ و قسمت ۶ .
بیشتر بخوانید :
- قوی ترین هوش مصنوعی دنیا
- برنامه ای که سن دقیق را نشان می دهد
- شباهت چهره گوگل
- تست مدل مو آنلاین
- نرم افزار تشخیص زیبایی چهره