شبکه عصبی GAN
بهنام خدا، سلام… شبکه عصبی GAN چیست؟ یکی از شبکههای عصبی هیجانانگیز در دهه اخیر یادگیری ماشین و هوش مصنوعی، همین GAN است. در این جلسه از آموزش یادگیری عمیق رایگان میخواهم به تشریح شبکه عصبی GAN بپردازم. ابتدا در مورد تاریخچه این شبکه کمی صحبت میکنم، سپس با هوسم همراه باشید…
شبکه عصبی GAN چیست؟
شبکه عصبی GAN، یکی دیگر از شبکههای عصبی مشهور در یادگیری ماشین است که عمر آن به ده سال نمیرسد. شبکه عصبی GAN در سال 2014 توسط Ian Goodfellow و همکارانش پیشنهاد شد (لینک مقاله). شبکه های عصبی GAN مدلهای مولدی (Generative Models) هستند که دادههای جدید شبیه دادههای آموزشی تولید میکنند.
شبکه های عصبی GAN میتوانند تصاویری مانند چهره انسان تولید کنند که کاملا ساختگی هستند. چهرههایی که ممکن است در دنیای واقعی وجود نداشته باشند. به تصاویر زیر نگاه کنید، اینها تصاویری هستند که GAN تولید کرده و وجود خارجی ندارند. ممکن است بگویید اینها که خیلی واقعی هست، محال است تصویر ساختگی باشد. اتفاقا تصاویر ساختگی است. به چهره افراد نگاه کنید، ببینید میتوانید جزئیات غیرعادی در چهرهها پیدا کنید؟ باید بتوانید.
Yann Lecun یکی از بزرگان هوش مصنوعی، GAN را جالبترین ایده در 10 سال گذشته یادگیری ماشین توصیف کرده است. همین تعریف از این محقق برجسته نشان میدهد که شبکه عصبی GAN چه ایده نابی است. در 6 سال گذشته محققان به موفقیتهای بزرگی در شبکه GAN رسیدهاند. در تصویر بالا، تعدادی تصویر چهره باکیفیت به شما نشان دادم. اما از ابتدا تصاویر چهره این اندازه باکیفیت نبود. به تصاویر چهره زیر نگاه کنید. ببینید به مرور چقدر چهرهها باکیفیتتر و واقعیتر شده است. پیشرفت فوقالعادست!
البته، شبکه GAN تنها تصویر چهره تولید نمیکند، بلکه امروزه کاربردهای بیشماری پیدا کرده است. با جستجو در اینترنت میتوانید خروجیهای متنوعی از GAN مشاهده کنید. مانند تولید تصویر حیوانات، نقاشی به سبک نقاشان مشهور، کاریکاتور و غیره.
آشنایی با شبکه عصبی GAN
تا اینجای کار متوجه شدید که شبکه عصبی GAN، داده جدید تولید میکند. GAN مخفف Generative Adversarial Network هست. کلمه اول، یعنی Generative نشان میدهد که با شبکهای سروکار داریم که مولد است و داده تولید میکند. Network هم که همان شبکه عصبی است. اما Adversarial چیست؟ به فارسی میشود خصومت! پس در فارسی به شبکه GAN میتوانیم بگوییم شبکه متخاصم مولد… دو کلمه کلیدی بهنام متخاصم و مولد داریم. اتفاقا دو شبکه مولد و متخاصم هم در GAN داریم. دو شبکهای که در مبارزه باهم هستند!
شبکه عصبی GAN یا همان دزد و پلیس
به تصویر زیر نگاه کنید؛ این تصویر، مثال معروفی از شبکه GAN هست. یک دزد و پلیس که بهترتیب در نقش مولد و متخاصم ظاهر میشوند. البته، ذاتا پلیس متخاصم نیست و دزد متخاصم هست! اما، منظور از اینکه میگوییم پلیس متخاصم است، یعنی دشمن مولد (دزد) است.
اما دزد چه میکند؟ مطابق انیمیشن بالا، مثلا پول جعلی میسازد. وظیفه پلیس هم این است که پول جعلی و واقعی را از هم جدا کند. همین ابتدا تکلیف پلیس را مشخص کنم. پلیس یک دستهبند است که در خروجی میگوید که پول جعلی/واقعی است. یعنی یک دستهبند دوکلاسه داریم.
قبول دارید که دزد و پلیس بهصورت غیرمستقیم درحال تقویت همدیگر هستند؟ دزد پول جعلی تولید میکند و پلیس بهدرستی تشخیص میدهد. دزد که شکست خورده، تلاش میکند پول جعلی نزدیکتر به واقعی تولید کند. بازهم پلیس تشخیص میدهد، اما اینبار متوجه میشود که دزدها کمی پیشرفت کردهاند. چون، پولهای جعلی جدید نسبت به قبلیها تفاوتهایی دارند. پس توانایی تشخیص پول جعلی/واقعی پلیس افزایش مییابد. بازهم دزدِ شکست خورده تلاش میکند و پلیس… میبینید؟ این جنگ بین دزد و پلیس همینطور ادامه مییابد. بهگونهای که دزد درحال تولید پول بسیار باکیفیتی است که ما مردم عادی ممکن است گول بخوریم. اما پلیس آموزشدیده میتواند تشخیص دهد که جعلی است. پس دزد و پلیس در عین رقابت، درحال یادگیری و پیشرفت هم هستند.
شبکه GAN با نگاهی علمیتر
حالا میخواهم توضیحات بالا را به زبان علمی بیان کنم. دقت کنید، مطابق شکل زیر، دزد و پلیس در شبکه GAN دو شبکه عصبی هستند. شبکه عصبی MLP، شبکه عصبی کانولوشن یا هر شبکه مناسب دیگری… دیگر بهتر است بجای دزد و پلیس بهعنوان مولد و متخاصم، از دو کلمه Generator و Discriminator استفاده کنیم. Generator که آشناست (همان مولد)، اما Discriminator یعنی جداساز. یعنی جداکننده واقعی/جعلی ازهم. این Discriminator همان متخاصم یا بدخواهِ Generator است. بهصورت خلاصه این دو کلمه را با G و D نشان میدهم.
بیایید این دو شبکه G و D را بههم وصل کنیم. چگونه؟ قاعدتا اینگونه است که شبکه G داده تولید میکند و شبکه D بررسی میکند که این داده جعلی است یا واقعی… پس خروجی شبکه G بهعنوان ورودی به شبکه D داده میشود. یعنی شکل زیر:
خب تکلیف دادههای جعلی مشخص شد. اما مگر D نباید داده جعلی/واقعی را تشخیص دهد؟ ساختار بالا که همیشه داده جعلی به شبکه D میدهد! اصلا هیچ داده واقعی وارد این شبکه نمیشود. پس لازم است ساختار بالا اصلاح شود. برای شبکه D یک ورودی دیگر هم درنظر میگیریم. این ورودی شامل دادههای واقعی است. به شکل زیر نگاه کنید. برای دادههای واقعی هم که یک عالمه داده در دنیای واقعی وجود دارد. باید از این دادههای واقعی استفاده کنیم.
ساختار شبکه عصبی GAN
ساختار بالا یک نقص دیگر هم دارد. شبکه G هیچگونه ورودی ندارد! انتظار داریم یک ورودی به شبکه G بدهیم تا یک داده جعلی تولید کند. روی هوا که داده تولید نمیکند! 😅 در شکل زیر یک ورودی بهنام z برای شبکه G درنظر گرفته شده است. در شکل 7 ساختار کامل شبکه GAN را میبینید که داده جعلی تولید شده توسط G و داده واقعی بهعنوان ورودی به شبکه D داده میشود.
چه دادهای باید به شبکه G داده شود تا یک داده جعلی برای ما تولید کند؟ نویز! ساده بگویم داده رندوم!
حالا بیایید بازهم صحبت را علمیتر کنیم و به جزئیات روابط شبکه GAN بپردازیم.
معماری شبکه عصبی GAN
همانطور که تا اینجا توضیح داده شد، شبکه عصبی GAN از دو شبکه D و G تشکیل شده است. شبکه G نقش مولد را دارد و داده تولید میکند. شبکه D نقش جداسازی داده واقعی و داده تولیدی از هم را دارد. یکی پس از دیگری مجموعهای داده جعلی/واقعی به شبکه D داده میشود و این شبکه به جداسازی دادهها میپردازد. درمورد معماری شبکه GAN توضیح دادیم. اما این شبکه چگونه آموزش میبیند؟ بهتر بگویم دو شبکه G و D چگونه آموزش میبینند؟
نحوه آموزش شبکه GAN
به مثال دزد و پلیس برگردیم؛ پلیس همواره با جدیدترین روشهای جعل آشنا هست. حتی اگر درست هم تشخیص ندهد، بعدا متوجه میشود که اشتباه کرده… طبیعتا دزد هم همواره رفتار پلیس را زیر نظر دارد تا ببیند جدیدترین هنرش از فیلتر پلیس رد میشود یا نه! پس او هم از رفتار پلیس درس میگیرد. حالا میخواهم همین توضیحات را علمی بیان کنم. دو حالت وجود دارد:
- شبکه D به دنبال این است که هر داده با هر کیفیتی از G میآید، بهعنوان جعلی شناسایی کند. همچنین، هر داده از سمت واقعی را هم بهعنوان واقعی برچسب بزند. هدف D: هم شکست G و هم شناسایی داده واقعی.
- شبکه G بهدنبال این است که داده تولیدیاش از شبکه D به سلامت بگذرد و برچسب داده واقعی دریافت کند. هدف G: شکست D.
با توضیحات بالا، همه چیز در گرو تصمیم D است. بنابراین، خروجی شبکه D است که به توابع اتلاف متصل شده است. گفتم توابع اتلاف، نه تابع اتلاف! چون، دو تابع اتلاف Discriminator و Generator داریم که در شکل زیر نشان داده شده است.
دو تابع اتلاف Discriminator و Generator داریم که در ادامه توضیح میدهم.
تابع اتلاف Discriminator در شبکه عصبی GAN
تابع اتلاف Discriminator، طبق شکل پایین، این تابع اتلاف نتایج پیشبینی جعلی/واقعی شبکه D را بررسی میکند. مقدار اتلاف براساس میزان اشتباههای شبکه D محاسبه میشود. درنهایت، خطا پسانتشار و پارامترها آپدیت میشود. این تابع اتلاف دوجمله دارد. یک جمله برای ورودی واقعی (x) و دیگری برای ورودی جعلی ((G(z). جمله اول تابع اتلاف برای ورودی واقعی بهصورت زیر است:
در رابطه بالا، σ تابع تحریک سیگموید هست که مقدار خروجی آن بین 0 تا 1 خواهد شد. زمانیکه خروجی 1 باشد، یعنی داده از نظر D یک داده واقعی است. اگر عدد خروجی سیگموید به عدد 1 نزدیک باشد، مقدار لگاریتم برابر با 0 میشود. یعنی اتلافی نداریم! درست است، چون شبکه D بهدرستی تشخیص داده که ورودی x یک داده واقعی است.
برویم سراغ جمله دوم، یعنی ورودی جعلی ((G(z). میخواهیم که شبکه D بگوید اینها تماما جعلی هستند و خروجی 0 برای این نوع ورودیها تولید کند. پس کافی است بنویسیم:
خب حالا باید دو عبارت بالا را باهم جمع کنیم و تابع اتلاف Discriminator را بنویسیم:
باید LD را ماکزیمم کنیم. بله، ماکزیمم! چرا؟! عبارت داخل لگاریتمها عددی بین 0 و 1 است. لگاریتم هم برای ورودی کوچکتر از 1، خروجی منفی میدهد. پس، عبارت بالا همواره کوچکتر-مساوی صفر خواهد بود. حال، باید این رابطه را ماکزیمم کنیم که به صفر برسیم! 😉 یا اینکه مثل شبکه های عصبی دیگر، یک منفی (-) پشت رابطه بالا میگذاریم تا هدفمان رسیدن به حداقل اتلاف باشد. آنوقت باید تابع بالا با یک منفی را مینیموم کنیم.
تابع اتلاف Generator در شبکه عصبی GAN
تابع اتلاف Generator، طبق شکل بالا، این تابع اتلاف براساس تشخیص D درمورد جعلی/واقعی بودن داده G تعیین میشود. سادهاش اینطور میشود که شبکه D به تابع اتلاف Generator میگوید، این دادهها همه جعلی هستند. تابع اتلاف G بررسی میکند و مقدار اتلاف محاسبه میشود. اما اینجا یک نکته مهم وجود دارد. حداقل کردن این عبارت یعنی موفقیت G در تولید داده جعلی در حد واقعی و گول خوردن D در تشخیص دادههای جعلی. شبکه G میخواهد خروجی بهسمت عدد 1 برود. یعنی برچسب داده واقعی بخورد. پس تابع اتلاف Generator برابر است با:
رابطه LG را هم باید ماکزیمم کنیم. یا اینکه یک منفی پشت عبارت اتلاف قرار دهیم تا هدف عوض شود و LG را حداقل کنیم. این هم از تابع اتلاف Generator و تمام…
فرآیند آموزش شبکه گن
در این قسمت میخواهم بهصورت خلاصه مراحل آموزش شبکه GAN را توضیح دهم. مراحل آموزش شبکه GAN عبارتنداز:
- یک بچ داده واقعی X انتخاب میکنم.
- این بچ داده واقعی را به شبکه D میدهم. خروجی (D(X را از سیگموید میگذارنم.
- یک بچ داده رندوم Z تولید میکنم.
- این بچ داده رندوم را به شبکه G میدهم. خروجی شبکه G معادل با دادههای جعلی واقعینماست. G(Z)
- داده جعلی را به شبکه D میدهم. خروجی D(G(Z)) را از سیگموید میگذرانم.
- حالا مقدار اتلاف را طبق رابطه 1 محاسبه میکنم.
- مقدار اتلاف را پسانتشار میدهم تا وزنهای شبکه D آپدیت شود.
- حالا میخواهم وزنهای شبکه G را هم آپدیت کنم. براساس همان خروجی مرحله 5، مقدار اتلاف را با رابطه 2 حساب میکنم.
- مقدار اتلاف را پسانتشار میدهم تا وزنهای شبکه G آپدیت شود.
- 9 مرحله بالا آنقدر تکرار میشود تا به وزنهای بهینه برای شبکه D و G برسیم.
به پایان جلسه شبکه عصبی GAN رسیدیم. طبیعتا صحبت درباره شبکه عصبی GAN بسیار است. میتوانیم بسیار درباره ریاضیات شبکه عصبی GAN و کاربردهایش صحبت کنیم. اما فعلا درهمین حد کافی است. سعی کردم به اندازهای توضیح دادهام که بهصورت پایهای با شبکه GAN آشنا شوید. از اینکه شما هوسم را دنبال میکنید، بسیار خوشحالیم. با هوسم همراه باشید…
مطالب زیر را حتما مطالعه کنید
شبکه اتوانکدر
شبکه عصبی mlp
شبکه ترنسفورمر
مدل MobileLLM
یادگیری عمیق چیست
آموزش یادگیری عمیق رایگان
30 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام ،
دم تون گرم از هیچ سایتی اینقدر واضح مفهوم شبکه های GAN یاد نگرفته بودم .
سلام
خدا خیرتون بده
خیلی وقت بود دنبال این بودم که GAN رو به زبان یه بچه 5 ساله یاد بگیرم
بسیار مفید بود
ممنون
سلام
خیلی عالی بود متشکرم
سلام.
خیلی مفید و عالی
لطفا منابع خوب و بیشتری از GAN رو هم معرفی کنید
منابعی که پایه ای تر اما قابل فهم توضیحش داده باشن
ممنون
خیلی عالی
سپاس 🌹🙏
سلام. خیلی عالی توضیح دادین. خدا خیرتون بده. بسی ممنون
سلام
خیلی ممنون بابت کامنت و دعای خیر 😊🙏
سلام خیلی عالی و روان توضیح داده بودید خیلی ممنونم ازتون
سلام
سپاس 🌹🙏
عالی بود
سلام عالی است خسته نباشید
سلام
سپاس 🌹🙏
موفق باشید…
سلام.خیلی ممنون از توضیح ساده و روانتون
سلام
سپاس 🌹🙏
با سلام و خدا قوت
من دانشجوی ارشد هوش مصنوعی هستم و شما مطالب مربوط به این حوزه را بسیار خوب توضیح داده اید.
ان شاله که ادامه داشته باشد .
لطفا توضیحات سطح بالاتر رانیز مد نظر قرار دهید.باتشکر
سلام
سپاس 🌹🙏
به امید خدا پرانرژی ادامه میدیم…
سلام
از همه عزیزان گروه هوسم تشکر میکنم,خیلی مفید و آموزنده بود.امیدوارم پایدار باشید.
سلام.و وقت بخیر.
بسیار عالی و روان نوشته شده بود.خداقوت
سلام
سپاس 🌹🙏
اموزشاتو.ن خیلی عالیه لطفا همین طور بی نظیر ادامه بدین و مثال پیاده سازی رو هم بزنین لطفا
سلام
سپاس 🌹🙏
به امید خدا ادامه میدیم و تلاش میگنیم همواره کیفیت مطالب رو بهتر کنیم.
بعد از تشریح شبکه GRU پیادهسازیها رو شروع میکنیم.
سلام ممنون ولی هنوز منتظر GRU و LSTM هستیم
سلام
سپاس 🌹🙏
چشم، پستهای بعدی به ترتیب اینها هستند:
شبکه عصبی lstm
شبکه عصبی gru
شبکه ترنسفورمر
سلام و تشکر
بی صبرانه منتظریم…………
سلام
نگارش شبکه LSTM شروع شده… 🙏
سلام وقتتون بخیر
LSTM رو خوندم خوب بود ولی بعضی جاها کاش علائم رو بیشتر توضیح میدادید
بی صبرانه منتظر GRU و ترنسفورمر هستیم
سلام
انشالله بازبینی میکنیم.
ممنون 🌹🙏
مختصر و مفید..ممنون
سلام
سپاس 🌹