یکی از جذابترین و جدیدترین ایدهها در هوش مصنوعی GANها هستند، به طوری که آقای یان لیسون که یکی از برجستهترین دانشمندان حوزه هوش مصنوعی در دنیاست در موردشان گفته است «از دیدگاه من GAN و مشتقاتش جالبترین ایده در ده سال گذشته در یادگیری ماشین بودهاند.» در این مطلب میخواهیم با GAN یا Generative Adversarial Networks آشنا شویم. قبل از این در مقاله «گیتهایی منطقی که هنرمند هستند» از GAN به عنوان یکی از روشهایی که ابتکار را به کامپیوتر هدیه میدهد، نام بردیم. جالب است بدانید که تاکنون علاوه بر تولید تصاویر در شناسایی نرمافزارهای مخرب در امنیت، ترجمه ماشینی در پردازش زبان طبیعی، رنگ آمیزی تصاویر، ساخت مدل سه بعدی از یک تصویر نیز از GANها استفاده شده است.
ایده اصلی
ایده اصلی را در کلمه رقابتی یا Adversarial که در نام این شبکهها وجود دارد باید جستجو کرد. در این شبکههای عصبی دو عامل داریم که متضاد هم عمل میکنند و به مرور زمان در رقابت با یکدیگر قویتر میشوند. فرض کنید یک شخص تازهکار یک تابلو نقاشی که خودش کشیده را به یک استاد نقاشی نشان داده و بگوید این نقاشی یک نقاش حرفهای است. در مقابل استاد نقاشی عیبهایی که نقاشی داشته را به شخص مقابل نشان دهد و بگوید این نقاشی به این دلایل نقاشی یک نقاش حرفهای نیست. این شخص سعی کند تمامی آن خطاها را اصلاح کرده و دوباره نقاشی را پیش استاد نقاشی ببرد. استاد نقاشی که هم نقاشی های حرفهای هم نقاشیهای این شخص را دیده است باز اشکالاتی را از نقاشی پیدا میکند و دوباره این شخص سعی در برطرف کردن این اشکالات میکند. با هربار رفت و آمد این شخص، تفاوتهای نقاشیهایش با یک نقاش حرفهای کمتر و کمتر میشود به طوری که دیگر استاد نقاشی نتواند اشکالی چشمگیر از نقاشی پیدا کند. در اینجا شخص تازهکار شبکه Generator بود و استاد نقاشی شبکه Discriminator این دو با همدیگر شروع به کار میکنند در هر مرحله وظیفه Generator این است که خروجیای تولید کند که Discriminator تفاوت آنرا با داده واقعی تشخیص ندهد و از آن طرف Discriminator وظیفه دارد با دیدن دادههای واقعی و خروجیهای Generator تفاوتهایشان را مشخص کرده و بر اساس آن یک طبقهبند بین دو کلاس واقعی، غیرواقعی آموزش دهد.
جزئیات بیشتر
کامپوننتهای Generator و Discriminator هر یک یک شبکه عصبی هستند. ورودی شبکه Generator یک تعداد نویز میباشد و خروجی شبکه Generator همان جاییست که قرار است ابتکار GAN را ببینیم. ورودی شبکه Discriminator یک متن یا عکس یا فایل بنا به کاربرد شبکه، از داده واقعی یا از خروجیهای جعلی تولید شده توسط Generator است و خروجی آن یک 0 یا 1 است که نشان میدهد این تصویر از داده واقعی تولید شده یا خیر، ابتدا با وزنهای تصادفی پارامترهای این دو شبکه عصبی وزن دهی میشوند. بنا به کابرد ممکن است از شبکههای چند لایه، شبکه های کانولوشنی و یا شبکههای مکرر در Discriminator یا Generator استفاده شود.
سپس با ثابت نگهداشتن پارامترهای Generator در یک مرحله Discriminator توسط الگوریتم Backpropagation یاد میگیرد خروجی جعلی Generator را از داده واقعی تشخصی دهد. بعد از اینکه Discriminator این کار را یاد گرفت حالا نوبت Generator است که آموزش ببیند. با ثابت نگهداشتن پارمترهای Discriminator شبکه Generator با تابع هدفی مخالف تابع هدف Discriminator سعی میکند خروجیهایش را در فضای دادههای واقعی جا دهد تا تشخیص دادن آن برای Discriminator سخت شود. سپس دوباره از اول Discriminator سعی میکند تفاوت دادههای جعلی را از داده واقعی تشخیص دهد و قویتر شود بعد از آن Generator قویتر میشود و این فرایند یادگیری بازیگونه تا جایی ادامه پیدا میکند که یا ناظر از کیفیت خروجیهای Generator راضی باشد یا تغییرات در شبکههای Generator و Discriminator به حداقل برسد.
چرا مستقیم دادهها به شبکه Generator داده نشد؟
به این علت که ما نمیخواهیم دادههایی کاملا مشابه داده واقعی تولید کنیم. چون دادههای واقعی که وجود داشته و اینکار کاری بیهوده میشود. ما نیاز داریم که در اینجا به نوعی ابتکار برسیم. شبکه Discriminator با دیدن دادههای ورودی و کلیت بخشی به الگوهای موجود در آنها فرق داده خوب و بد را تشخیص میدهد و شبکه Generator سعی میکند در آن فضای تعمیم داده شده داده خوبی را تولید نماید که الزاما مشابه دادههای ورودی نبوده و دارای ابتکار میباشد.
تصاویر و برخی از متن از analyticsvidhya و deeplearning4j گرفته شدهاند. برای خوراک بیشتر به این صفحات سر بزنید.