یادتان هست زمانی که تصاویر تولید شده توسط هوش مصنوعی شبیه به هنر انتزاعی بودند که کسی بعد از سه فنجان اسپرسو درست کرده بود؟ شما تایپ میکردید "فضانوردی که سوار اسب شده"، و چیزی شبیه به یک فضانورد مبهم، یک اسب مبهم، و بیشتر... چیزی شبیه به یک لکه دریافت میکردید. بله، آن روزها گذشته است.
به زمان حال برگردیم. ما در عصری از هنر هوش مصنوعی خیرهکننده زندگی میکنیم، از صحنههای فوقالعاده واقعگرایانه Midjourney تا خروجیهای خلاقانه Stable Diffusion. یک درخواست را تایپ کنید، و
اما آنها واقعاً چگونه کار میکنند؟ اگر شما هم مثل من هستید، دیدن کلمه "انتشار" ممکن است تصاویری از شیمی دبیرستان یا شاید پخش شدن عطر در یک اتاق را تداعی کند. معلوم میشود که ایده اصلی خیلی دور نیست.
با من همراه باشید. چه یک مهندس ML باشید که تعجب میکنید که آیا باید این مدلها را به جعبه ابزار خود اضافه کنید، چه یک علاقهمند کنجکاو به هوش مصنوعی، یا فقط کسی که سعی میکند فناوری پشت تصاویر جالب را درک کند، ما قصد داریم مدلهای انتشار را تجزیه و تحلیل کنیم، نه دقیقاً خط به خط کدنویسی "از صفر"، بلکه درک را از پایه بنا میکنیم.
آمادهسازی: چرا این همه هیاهو درباره هوش مصنوعی مولد و انتشار وجود دارد؟
اول از همه، اصلاً منظور ما از "مدلهای مولد" چیست؟ به زبان ساده، اینها سیستمهای هوش مصنوعی هستند که برای ایجاد دادههای جدید طراحی شدهاند که شبیه دادههایی هستند که روی آنها آموزش داده شدهاند. به تولید تصاویر، موسیقی، متن و حتی کد فکر کنید.
سالها ستارههای نمایش تولید تصویر، GANها (شبکههای مولد تخاصمی) و VAEها (خودرمزگذارهای تغییرپذیر) بودند. GANها مانند یک جاعل هنری هستند که سعی میکند یک کارآگاه را فریب دهد، آنها با رقابت یاد میگیرند. VAEها یاد میگیرند دادهها را به یک فرم فشرده تبدیل کنند و سپس آن را بازسازی کنند. هر دو کار میکنند، اما اغلب با پایداری آموزش (GANها) یا تولید تصاویر کمی تارتر (VAEها) مشکل دارند.
سپس، مدلهای انتشار وارد شدند و شروع به ارائه نتایج پیشرفته کردند، به ویژه در کیفیت و تنوع تصویر. مدلهایی مانند GPT-4o، Imagen، Flux و Stable Diffusion مردم را متحیر کردند، و همه آنها به شدت به اصول انتشار متکی هستند. به همین دلیل است که همه در مورد آنها صحبت میکنند.
مدلهای انتشار چگونه کار میکنند: از نویز تا هنر (و دوباره به عقب)
بسیار خب، مفهوم اصلی. تصور کنید یک عکس زیبا و واضح دارید. حالا، تصور کنید به آرامی ذرات ریز نویز تصادفی را اضافه میکنید، گام به گام، تا زمانی که تصویر اصلی به طور کامل غرق شود و فقط استاتیک باقی بماند، مانند یک صفحه تلویزیون قدیمی بدون سیگنال.
این فرآیند پیشرو (یا فرآیند انتشار) است. این فرآیند از نظر ریاضی تعریف شده، ساده و شامل اضافه کردن تدریجی نویز گاوسی در یک سری از مراحل زمانی است (بیایید بگوییم T مرحله). ما دقیقاً میدانیم که در هر مرحله چقدر نویز اضافه میکنیم. خیلی ساده.
حالا، اینجاست که جادو اتفاق میافتد: چه میشد اگر میتوانستیم این را معکوس کنیم؟
چه میشد اگر میتوانستیم یک مدل را آموزش دهیم تا به یک تصویر پر از نویز نگاه کند و فقط نویزی را که در یک مرحله خاص اضافه شده است پیشبینی کند؟ اگر مدل ما بتواند به طور دقیق نویز را پیشبینی کند، میتوانیم آن را کم کنیم، و یک گام کوچک به عقب به سمت تصویر اصلی و تمیزتر برداریم.
این فرآیند معکوس است. ما با نویز تصادفی خالص (مانند صفحه تلویزیون استاتیک) شروع میکنیم و آن را به مدل آموزشدیده خود وارد میکنیم. مدل، نویز موجود در ورودی را پیشبینی میکند. ما این نویز پیشبینیشده (یا نسخهای از آن) را کم میکنیم و این فرآیند را برای T مرحله تکرار میکنیم. هر مرحله تصویر را کمی نویززدایی میکند، و به تدریج یک تصویر منسجم را آشکار میکند که به نظر میرسد میتواند از دادههای آموزشی اصلی آمده باشد.
به مجسمهسازی فکر کنید.
- فرآیند پیشرو: تصور کنید یک مجسمه تمامشده به آرامی در حال حل شدن در یک بلوک از گرد و غبار مرمر است.
- فرآیند معکوس: شما با بلوک گرد و غبار مرمر (نویز) شروع میکنید و به دقت تکههایی (نویز پیشبینیشده) را گام به گام حذف میکنید، و مجسمه پنهان شده در داخل را آشکار میکنید.
"مدل" که این کار سنگین را در فرآیند معکوس انجام میدهد، معمولاً یک معماری شبکه عصبی پیچیده مانند U-Net است (که معمولاً در تقسیمبندی تصویر استفاده میشود، در اینجا برای پیشبینی نویز اقتباس شده است). این مدل تصویر پر از نویز و مرحله زمانی فعلی را به عنوان ورودی میگیرد و نویز پیشبینیشده را خروجی میدهد.
تفکر "از صفر": منظور ما چیست؟
وقتی اینجا میگوییم "از صفر"، ما بر درک مکانیسمها و مفاهیم از پایههای آنها تمرکز میکنیم. آیا قصد داریم یک مدل انتشار کامل را در این مقاله کدنویسی کنیم؟ خیر. این یک کار مهندسی پیچیده است که شامل معماریهای شبکه پیچیده (مانند U-Net با مکانیسمهای توجه)، زمانبندی دقیق نویز (چه مقدار نویز را در هر مرحله اضافه/حذف کنیم) و معمولاً منابع محاسباتی سنگین برای آموزش است.
اما تفکر "از صفر" به معنای درک این موارد است:
- دو فرآیند اصلی: پیشرو (اضافه کردن نویز) و معکوس (یادگیری نحوه حذف آن).
- هدف: آموزش یک مدل برای پیشبینی نویز اضافه شده در هر مرحله معین.
- ورودی/خروجی: با نویز شروع کنید، به طور تکراری با استفاده از پیشبینیهای مدل نویززدایی کنید.
درک این موضوع به صورت مفهومی، اولین گام مهم قبل از شیرجه زدن به کتابخانههایی مانند diffusers Hugging Face یا پیادهسازیهای PyTorch است. شما باید بدانید که کد در تلاش است چه چیزی را به دست آورد.
مدلهای انتشار در مقایسه با سایر مدلها چگونه هستند؟
بیایید به سرعت مقایسه کنیم:
- در مقابل GANها: مدلهای انتشار به طور کلی تصاویر با کیفیت بالاتر و متنوعتری تولید میکنند و آموزش آنها پایدارتر است (بدون تعادل خصمانه دشوار). با این حال، GANها معمولاً پس از آموزش، بسیار سریعتر در تولید تصاویر هستند. انتشار به مراحل تکراری متعددی نیاز دارد (اگرچه در اینجا پیشرفتهایی حاصل شده است!). GANها را به عنوان یک دوی سرعت پرمخاطره در نظر بگیرید (جاعل در مقابل کارآگاه)، در حالی که انتشار بیشتر شبیه یک ماراتن دقیق است (مجسمهسازی نویز).
- در مقابل VAEها: VAEها برای یادگیری نمایشهای فشرده معنادار (فضاهای پنهان) عالی هستند و معمولاً سریعتر از انتشار هستند. مدلهای انتشار اغلب کیفیت تولید خام بهتری را به دست میآورند، و از تاری جزئی که گاهی اوقات در خروجیهای VAE دیده میشود، جلوگیری میکنند.
- در مقابل مدلهای خودرگرسیون (به عنوان مثال، PixelCNN): این مدلها تصاویر را پیکسل به پیکسل تولید میکنند، که میتواند بسیار کند باشد. مدلهای انتشار کل تصویر را به صورت تکراری تولید میکنند و به طور کلی نتایج منسجمتری را در سطح جهانی تولید میکنند.
مدلهای انتشار یک مصالحه قانعکننده ارائه میدهند: کیفیت نمونه عالی و پایداری آموزش، به قیمت سرعت نمونهبرداری کندتر (اگرچه تکنیکهایی مانند DDIM و تقطیر مبتنی بر امتیاز این شکاف را پر میکنند).
چرا باید اهمیت دهید؟ تأثیر واقعی در دنیای واقعی
بسیار خب، فناوری جالب، اما چرا برای یک مهندس ML، توسعهدهنده یا سازنده مهم است؟
- تولید پیشرفته: برای وظایفی که نیاز به تولید تصویر یا حتی صوتی با کیفیت بالا دارند، مدلهای انتشار اغلب انتخاب برتر در حال حاضر هستند.
- فراتر از تصاویر: در حالی که مدلهای انتشار به دلیل تصاویر مشهور هستند، اصول انتشار در تولید صدا (مانند WaveGrad)، ویدئو و تولید شکل سه بعدی نیز به کار گرفته میشوند. حتی تحقیقات رو به رشدی در مورد استفاده از آنها برای تولید متن وجود دارد، اگرچه NLP هنوز تا حد زیادی تحت سلطه ترانسفورمرها است.
- قابلیت کنترل: تکنیکها به سرعت در حال تکامل هستند تا امکان کنترل دقیق بر خروجیهای انتشار با استفاده از درخواستهای متنی (مانند Stable Diffusion)، ورودیهای تصویر (img2img) یا سایر اطلاعات شرطی را فراهم کنند. این امر امکانات خلاقانه و عملی گستردهای را باز میکند.
- درک مرزها: دانستن نحوه کار این مدلها به شما کمک میکند تا قابلیتها و محدودیتهای هوش مصنوعی مولد مدرن را درک کنید، چه با آن بسازید، چه از آن استفاده کنید یا فقط تأثیر آن را ارزیابی کنید.
مشکل: چالشها و مشکلات رایج
همه چیز آفتاب و گربههای کاملاً تولید شده نیست.
- نمونهبرداری کند: فرآیند نویززدایی تکراری (اغلب صدها یا هزاران مرحله) تولید را کندتر از مدلهای تکگذر مانند GANها میکند. این یک حوزه اصلی تحقیق است.
- آموزش محاسباتی فشرده: آموزش این مدلها نیاز به منابع محاسباتی قابل توجه و مجموعههای داده بزرگ دارد.
- درک در مقابل پیادهسازی: درک مفهوم یک چیز است؛ پیادهسازی یک مدل انتشار کارآمد و مؤثر نیاز به مهندسی دقیق دارد (معماری شبکه، زمانبندی نویز، مکانیسمهای شرطی).
- تصور غلط "جادو": آنها جادو نیستند. آنها الگوهایی را از دادهها یاد میگیرند. سوگیریها در دادههای آموزشی منعکس (و گاهی اوقات تقویت) میشوند در خروجیهای تولید شده.
جمعبندی: نویز سیگنال است
بنابراین، چه چیزی یاد گرفتیم؟
- مدلهای انتشار دادهها را با معکوس کردن فرآیند اضافه کردن تدریجی نویز تولید میکنند.
- آنها با نویز خالص شروع میکنند و از یک مدل آموزشدیده برای به طور تکراری پیشبینی و حذف نویز، گام به گام، استفاده میکنند تا زمانی که یک نمونه تمیز ظاهر شود.
- ایده اصلی شامل یک فرآیند پیشرو ثابت (اضافه کردن نویز) و یک فرآیند معکوس یاد گرفته شده (حذف نویز) است.
- آنها کیفیت پیشرفته را برای وظایف تولید، به ویژه تصاویر، ارائه میدهند و از روشهای قدیمیتر مانند GANها و VAEها در بسیاری از معیارها پیشی میگیرند.
- مزایای کلیدی شامل کیفیت نمونه بالا و آموزش پایدار است.
- نقطه ضعف اصلی معمولاً سرعت نمونهبرداری کندتر در مقایسه با مدلهایی مانند GANها است، اگرچه این در حال بهبود است.
- درک "از صفر" شامل درک این مکانیسمهای اصلی است، نه لزوماً کدنویسی کل چیز بلافاصله.
مدلهای انتشار یک رویکرد قدرتمند و ظریف برای مدلسازی مولد را نشان میدهند. با یادگیری نحوه معکوس کردن کنترلشده فرآیند تخریب (اضافه کردن نویز)، آنها یاد میگیرند که ایجاد کنند. این یک مفهوم زیبا است، که استاتیک تصادفی را به خروجیهای منسجم و اغلب خیرهکننده تبدیل میکند.
غواصی عمیقتر: منابع بیشتر
آمادهاید فراتر از مفهوم بروید؟ در اینجا چند نقطه شروع عالی وجود دارد:
مقالات:
- مدلهای احتمالی انتشار نویززدایی (DDPM) توسط Ho و همکاران. (مقاله مدرن بنیادی): https://arxiv.org/abs/2006.11239
- مدلهای ضمنی انتشار نویززدایی (DDIM) توسط Song و همکاران. (نمونهبرداری سریعتر): https://arxiv.org/abs/2010.02502
- ترکیب تصویر با وضوح بالا با مدلهای انتشار پنهان (مقاله انتشار پایدار): https://arxiv.org/abs/2112.10752
پستهای وبلاگ/آموزشها:
- وبلاگ Lilian Weng: "مدلهای انتشار چیست؟" (بررسی فنی عالی): https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
- وبلاگ AssemblyAI: "مدلهای انتشار برای مبتدیان" (توضیحات بصری خوب): https://www.assemblyai.com/blog/diffusion-models-for-machine-learning-introduction/
کد:
- کتابخانه Hugging Face Diffusers (سادهترین راه برای امتحان کردن آنها!): https://github.com/huggingface/diffusers
- Phil Wang (lucidrains) پیادهسازیهای Pytorch (اغلب حداقل، عالی برای یادگیری): GitHub را برای
lucidrains diffusionجستجو کنید
امیدوارم، این به شما یک پایه محکم برای درک مدلهای انتشار میدهد. آنها یک حوزه تحقیق جذاب و یک ابزار قدرتمند در چشمانداز هوش مصنوعی مولد هستند. پیش بروید و نویززدایی کنید!