ژنراتور

بخش مولد یک GAN یاد می‌گیرد که داده‌های جعلی را با ترکیب کردن بازخورد از ممیز ایجاد کند. یاد می گیرد که متمایز کننده را وادار کند خروجی خود را به عنوان واقعی طبقه بندی کند.

آموزش ژنراتور مستلزم ادغام شدیدتر بین مولد و تمایز کننده نسبت به آموزش تفکیک کننده است. بخشی از GAN که ژنراتور را آموزش می دهد شامل:

  • ورودی تصادفی
  • شبکه مولد، که ورودی تصادفی را به یک نمونه داده تبدیل می کند
  • شبکه تفکیک کننده، که داده های تولید شده را طبقه بندی می کند
  • خروجی تفکیک کننده
  • از دست دادن ژنراتور، که ژنراتور را به دلیل ناتوانی در فریب دادن متمایز کننده جریمه می کند

نمودار یک شبکه متخاصم مولد. در مرکز نمودار کادری با برچسب "تمایزگر" وجود دارد. دو شاخه از سمت چپ وارد این جعبه می شود. شاخه بالایی در سمت چپ بالای نمودار با کادری با عنوان "تصاویر دنیای واقعی" شروع می شود. یک فلش از این استوانه به جعبه ای با برچسب "نمونه" منتهی می شود. یک فلش از کادر با عنوان «نمونه» به کادر «تمایزکننده» وارد می‌شود. شاخه پایینی وارد کادر «تمایزکننده» می شود که با کادری با عنوان «ورودی تصادفی» شروع می شود. یک فلش از کادر "ورودی تصادفی" به کادری با عنوان "Generator" منتهی می شود. یک فلش از کادر "Generator" به کادر "Sample" دوم منتهی می شود. یک فلش از کادر «نمونه» به کادر «مشخص کننده» منتهی می شود. در سمت راست کادر «مشخص کننده»، دو فلش به دو کادر در سمت راست نمودار منتهی می شود. یک فلش به کادری با عنوان "از دست دادن متمایزکننده" منتهی می شود. فلش دیگر به کادری با عنوان "از دست دادن ژنراتور" منتهی می شود. یک کادر زرد با یک فلش رو به چپ و کلمه "Backpropagation" در اطراف کادر "ورودی تصادفی"، کادر "مولد"، کادر پایین "نمونه"، کادر "مشخص کننده"، کادر با برچسب " کشیده شده است. واقعی و «جعلی» و کادر «از دست دادن ژنراتور» نشان می‌دهد که انتشار پس‌پشتی در قسمتی از سیستم محصور در کادر زرد عمل می‌کند.

شکل 1: پس انتشار در آموزش ژنراتور.

ورودی تصادفی

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

در ابتدایی ترین شکل خود، یک GAN نویز تصادفی را به عنوان ورودی خود می گیرد. سپس ژنراتور این نویز را به یک خروجی معنی دار تبدیل می کند. با معرفی نویز، می‌توانیم GAN را به تولید طیف وسیعی از داده‌ها، نمونه‌برداری از مکان‌های مختلف در توزیع هدف، برسانیم.

آزمایش‌ها نشان می‌دهند که توزیع نویز چندان اهمیتی ندارد، بنابراین می‌توانیم چیزی را انتخاب کنیم که نمونه‌برداری از آن آسان باشد، مانند توزیع یکنواخت. برای راحتی، فضایی که نویز از آن نمونه برداری می شود معمولاً ابعاد کوچکتری نسبت به ابعاد فضای خروجی دارد.

استفاده از Discriminator برای آموزش ژنراتور

برای آموزش یک شبکه عصبی، وزن شبکه را تغییر می دهیم تا خطا یا از دست دادن خروجی آن کاهش یابد. با این حال، در GAN ما، ژنراتور مستقیماً به ضرری که ما می‌خواهیم بر آن تأثیر بگذاریم متصل نیست. ژنراتور به شبکه تشخیص‌دهنده تغذیه می‌کند، و تشخیص‌دهنده خروجی‌ای را تولید می‌کند که ما می‌خواهیم بر آن تأثیر بگذاریم. از دست دادن ژنراتور، ژنراتور را برای تولید نمونه ای که شبکه تفکیک کننده به عنوان جعلی طبقه بندی می کند، جریمه می کند.

این تکه اضافی از شبکه باید در پس انتشار گنجانده شود. پس انتشار هر وزن را در جهت درست با محاسبه تأثیر وزن بر خروجی تنظیم می کند - اگر وزن را تغییر دهید خروجی چگونه تغییر می کند. اما تأثیر وزن ژنراتور به تأثیر وزنه های تفکیک کننده ای که به آن وارد می شود بستگی دارد. بنابراین انتشار پس از خروجی شروع می شود و از طریق تفکیک کننده به ژنراتور باز می گردد.

در عین حال، ما نمی خواهیم در طول آموزش ژنراتور، تمایز کننده تغییر کند. تلاش برای ضربه زدن به یک هدف متحرک، مشکل سخت تر را برای ژنراتور سخت تر می کند.

بنابراین ژنراتور را با روش زیر آموزش می دهیم:

  1. نمونه نویز تصادفی
  2. تولید خروجی ژنراتور از نویز تصادفی نمونه برداری شده.
  3. برای خروجی ژنراتور، طبقه‌بندی تشخیص‌دهنده "واقعی" یا "جعلی" را دریافت کنید.
  4. محاسبه زیان از طبقه بندی تفکیک کننده.
  5. برای به دست آوردن گرادیان، از طریق تفکیک کننده و مولد پس انتشار دهید.
  6. از گرادیان ها برای تغییر فقط وزن های ژنراتور استفاده کنید.

این یک تکرار از آموزش ژنراتور است. در بخش بعدی خواهیم دید که چگونه می توان آموزش مولد و تفکیک کننده را انجام داد.