مدل‌‌های انتشاری

بندانگشتی|تصویری تولید شده توسط DALL E 2 از یک میمون فضانورد در فضا
**مدل‌های انتشاری**  در یادگیری ماشینی، دسته‌ای از مدل‌های متغیر پنهان  هستند. این مدل‌ها نوعی زنجیره مارکوف هستند که با استفاده از استنباط بیزی تغییراتی آموزش داده می‌شوند.
هدف مدل‌های انتشاری، یادگیری ساختار پنهان یک مجموعه داده با مدل‌سازی روشی است که در آن نقاط داده در فضای پنهان  منتشر می‌شوند. در بینایی ماشین، این یعنی یک شبکه عصبی آموزش داده می‌شود تا با یادگیری معکوس فرایند انتشاری، با شروع از نویز گاوسی به تصاویر اصلی برسد.

## تاریخچه
مدل‌های انتشاری در سال ۲۰۱۵ با ایده‌گرفتن از ترمودینامیک غیرتعادلی معرفی شدند.

## ایده
مدل‌های انتشاری خانواده‌ای از مدل‌های مولد احتمالی هستند که به تدریج داده‌ها را با اضافه‌کردن نویز تخریب می‌کنند، سپس یادمی‌گیرند که این فرایند را برای تولید نمونه معکوس کنند. یک مدل انتشاری از دو زنجیره مارکوف استفاده می‌کند: یک زنجیره مستقیم که داده‌ها را به‌تدریج به نویز تبدیل می‌کند و یک زنجیره معکوس که نویز را به داده تبدیل می‌کند. اولی معمولاً با هدف تبدیل هر توزیع داده‌ای به یک توزیع پیشین ساده (مثلاً گاوسی استاندارد) به صورت دستی طراحی می‌شود، در حالی که زنجیره مارکوف دوم با یادگیری هسته‌های انتقال توسط شبکه‌های عصبی عمیق، اولی را معکوس می‌کند.

## جزئیات
### فرایند انتشار مستقیم
با داشتن یک نقطه داده نمونه‌برداری‌شده از یک توزیع داده واقعی \mathbf{x}_0 \sim q(\mathbf{x})، فرایند انتشار مستقیم  را این‌گونه تعریف می‌کنیم که در آن مقدار کمی نویز گاوسی را در T گام به نمونه ورودی اضافه می‌کنیم تا نمونه‌های نویزدار \mathbf{x}_1, \dots, \mathbf{x}_T تولید شود. اندازه گام‌ها توسط یک برنامه واریانس \{\beta_t \in (0, 1)\}_{t=1}^T کنترل می‌شود.

q(\mathbf{x}_t \vert \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \mathbf{x}_{t-1}, \beta_t\mathbf{I}) \quad
q(\mathbf{x}_{1:T} \vert \mathbf{x}_0) = \prod^T_{t=1} q(\mathbf{x}_t \vert \mathbf{x}_{t-1})

نمونه داده به تدریج ویژگی‌های قابل مشاهده خود را با بزرگتر شدن گام t از دست می‌دهد. درنهایت وقتی T \to \infty، \mathbf{x}_T معادل یک توزیع گاوسی همسان‌گرد خواهد شد.
 

یک ویژگی خوب فرایند فوق این است که می‌توانیم \mathbf{x}_t را در هر گام دلخواه t به صورت فرم بسته زیر با فرض \alpha_t = 1 - \beta_t و \bar{\alpha}_t = \prod_{i=1}^t \alpha_i محاسبه کنیم:

\begin{aligned}
\mathbf{x}_t
&= \sqrt{\alpha_t}\mathbf{x}_{t-1} + \sqrt{1 - \alpha_t}\boldsymbol{\epsilon}_{t-1} &  \boldsymbol{\epsilon}_{t-1}, \boldsymbol{\epsilon}_{t-2}, \dots \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) \\
&= \sqrt{\alpha_t \alpha_{t-1}} \mathbf{x}_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \bar{\boldsymbol{\epsilon}}_{t-2} & \bar{\boldsymbol{\epsilon}}_{t-2} \text{ merges two Gaussians} \\
&= \dots \\
&= \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon} \\
q(\mathbf{x}_t \vert \mathbf{x}_0) &= \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \mathbf{x}_0, (1 - \bar{\alpha}_t)\mathbf{I})
\end{aligned}

توجه کنید که وقتی دو توزیع نرمال با واریانس‌های مختلف، \mathcal{N}(\mathbf{0}, \sigma_1^2\mathbf{I}) و \mathcal{N}(\mathbf{0}, \sigma_2^2\mathbf{I}) ادغام می‌کنیم، توزیع جدید \mathcal{N}(\mathbf{0}, (\sigma_1^2 + \sigma_2^2)\mathbf{I}) خواهد بود. در رابطه بالا انحراف معیار برابر خواهد بود با: \sqrt{(1 - \alpha_t) + \alpha_t (1-\alpha_{t-1})} = \sqrt{1 - \alpha_t\alpha_{t-1}}

### فرایند انتشار معکوس
اگر بتوانیم فرایند بالا را معکوس کنیم و از q(\mathbf{x}_{t-1} \vert \mathbf{x}_t) نمونه‌برداری کنیم، می‌توانیم نمونه واقعی را از ورودی نویز گاوسی \mathbf{x}_T \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) دوباره ایجاد کنیم. توجه کنید که اگر \beta_t به اندازه کافی کوچک باشد، q(\mathbf{x}_{t-1} \vert \mathbf{x}_t) نیز گوسی خواهد بود. متأسفانه، ما نمی‌توانیم q(\mathbf{x}_{t-1} \vert \mathbf{x}_t) را به راحتی تخمین بزنیم زیرا برای این کار باید از کل مجموعه‌داده استفاده کنیم، بنابراین باید مدلِ p_\theta را برای تقریب این احتمالات شرطی به منظور اجرای فرایند انتشار معکوس یاد بگیریم.

p_\theta(\mathbf{x}_{0:T}) = p(\mathbf{x}_T) \prod^T_{t=1} p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t) \quad
p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \boldsymbol{\mu}_\theta(\mathbf{x}_t, t), \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t))

احتمال شرطی معکوس زمانی قابل حل است که روی \mathbf{x}_0 شرط شود:

q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \color{blue}{\tilde{\boldsymbol{\mu}}}(\mathbf{x}_t, \mathbf{x}_0), \color{red}{\tilde{\beta}_t} \mathbf{I})

با اعمال قاعده بیز داریم:

\begin{aligned}
q(\mathbf{x}_{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)
&= q(\mathbf{x}_t \vert \mathbf{x}_{t-1}, \mathbf{x}_0) \frac{ q(\mathbf{x}_{t-1} \vert \mathbf{x}_0) }{ q(\mathbf{x}_t \vert \mathbf{x}_0) } \\
&\propto \exp \Big(-\frac{1}{2} \big(\frac{(\mathbf{x}_t - \sqrt{\alpha_t} \mathbf{x}_{t-1})^2}{\beta_t} + \frac{(\mathbf{x}_{t-1} - \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0)^2}{1-\bar{\alpha}_{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0)^2}{1-\bar{\alpha}_t} \big) \Big) \\
&= \exp \Big(-\frac{1}{2} \big(\frac{\mathbf{x}_t^2 - 2\sqrt{\alpha_t} \mathbf{x}_t \color{blue}{\mathbf{x}_{t-1}} \color{black}{+ \alpha_t} \color{red}{\mathbf{x}_{t-1}^2} }{\beta_t} + \frac{ \color{red}{\mathbf{x}_{t-1}^2} \color{black}{- 2 \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0} \color{blue}{\mathbf{x}_{t-1}} \color{black}{+ \bar{\alpha}_{t-1} \mathbf{x}_0^2}  }{1-\bar{\alpha}_{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0)^2}{1-\bar{\alpha}_t} \big) \Big) \\
&= \exp\Big( -\frac{1}{2} \big( \color{red}{(\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}})} \mathbf{x}_{t-1}^2 - \color{blue}{(\frac{2\sqrt{\alpha_t}}{\beta_t} \mathbf{x}_t + \frac{2\sqrt{\bar{\alpha}_{t-1}}}{1 - \bar{\alpha}_{t-1}} \mathbf{x}_0)} \mathbf{x}_{t-1} \color{black}{ + C(\mathbf{x}_t, \mathbf{x}_0) \big) \Big)}
\end{aligned}

با توجه به تابع چگالی توزیع گاوسی، میانگین و واریانس را می‌توان به صورت زیر به‌دست‌آورد:

\begin{aligned}
\tilde{\beta}_t
&= 1/(\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}})
= 1/(\frac{\alpha_t - \bar{\alpha}_t + \beta_t}{\beta_t(1 - \bar{\alpha}_{t-1})})
= \color{green}{\frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \cdot \beta_t} \\
\tilde{\boldsymbol{\mu}}_t (\mathbf{x}_t, \mathbf{x}_0)
&= (\frac{\sqrt{\alpha_t}}{\beta_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1} }}{1 - \bar{\alpha}_{t-1}} \mathbf{x}_0)/(\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}}) \\
&= (\frac{\sqrt{\alpha_t}}{\beta_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1} }}{1 - \bar{\alpha}_{t-1}} \mathbf{x}_0) \color{green}{\frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \cdot \beta_t} \\
&= \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1 - \bar{\alpha}_t} \mathbf{x}_0\\
\end{aligned}

می‌دانیم که \mathbf{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(\mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}_t) و با جایگذاری در عبارات بالا خواهیم داشت:

\begin{aligned}
\tilde{\boldsymbol{\mu}}_t
&= \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1 - \bar{\alpha}_t} \frac{1}{\sqrt{\bar{\alpha}_t}}(\mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}_t) \\
&= \color{black}{\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \Big)}
\end{aligned}

### تابع هزینه برای آموزش فرایند انتشاری
برای تقریب توزیع احتمال شرطی در فرایند انتشار معکوس p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \boldsymbol{\mu}_\theta(\mathbf{x}_t, t), \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t)) نیاز به یادگیری یک شبکه عصبی داریم. درواقع می‌خواهیم \boldsymbol{\mu}_\theta را آموزش دهیم که \tilde{\boldsymbol{\mu}}_t = \frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \Big) را پیش‌بینی کند. از آن‌جایی که \mathbf{x}_t به‌عنوان ورودی مدل هنگام آموزش داده می‌شود، می‌توانیم با تغییر عبارت نویز گاوسی \boldsymbol{\epsilon}_t را از ورودی در گام t پیش‌بینی کنیم:

\begin{aligned}
\boldsymbol{\mu}_\theta(\mathbf{x}_t, t) &= \color{black}{\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \Big)} \\
\ \rightarrow \mathbf{x}_{t-1} &= \mathcal{N}(\mathbf{x}_{t-1}; \frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \Big), \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t))
\end{aligned}

پس تابع هزینه برای کمینه کردن اختلاف از \tilde{\boldsymbol{\mu}} به صورت زیر خواهد بود:

\begin{aligned}
L_t
&= \mathbb{E}_{\mathbf{x}_0, \boldsymbol{\epsilon}} \Big[\frac{1}{2 \| \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t) \|^2_2} \| \color{blue}{\tilde{\boldsymbol{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0)} - \color{green}{\boldsymbol{\mu}_\theta(\mathbf{x}_t, t)} \|^2 \Big] \\
&= \mathbb{E}_{\mathbf{x}_0, \boldsymbol{\epsilon}} \Big[\frac{1}{2  \|\boldsymbol{\Sigma}_\theta \|^2_2} \| \color{blue}{\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \Big)} - \color{green}{\frac{1}{\sqrt{\alpha_t}} \Big( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\boldsymbol{\epsilon}}_\theta(\mathbf{x}_t, t) \Big)} \|^2 \Big] \\
&= \mathbb{E}_{\mathbf{x}_0, \boldsymbol{\epsilon}} \Big[\frac{ (1 - \alpha_t)^2 }{2 \alpha_t (1 - \bar{\alpha}_t) \| \boldsymbol{\Sigma}_\theta \|^2_2} \|\boldsymbol{\epsilon}_t - \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t)\|^2 \Big] \\
&= \mathbb{E}_{\mathbf{x}_0, \boldsymbol{\epsilon}} \Big[\frac{ (1 - \alpha_t)^2 }{2 \alpha_t (1 - \bar{\alpha}_t) \| \boldsymbol{\Sigma}_\theta \|^2_2} \|\boldsymbol{\epsilon}_t - \boldsymbol{\epsilon}_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}_t, t)\|^2 \Big]
\end{aligned}

در مقاله نشان داده شده‌است که آموزش مدل انتشاری با تابع هزینه زیر بهتر انجام می‌شود:

\begin{aligned}
L_t^\text{simple}
&= \mathbb{E}_{t \sim [1, T], \mathbf{x}_0, \boldsymbol{\epsilon}_t} \Big[\|\boldsymbol{\epsilon}_t - \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t)\|^2 \Big] \\
&= \mathbb{E}_{t \sim [1, T], \mathbf{x}_0, \boldsymbol{\epsilon}_t} \Big[\|\boldsymbol{\epsilon}_t - \boldsymbol{\epsilon}_\theta(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon}_t, t)\|^2 \Big]
\end{aligned}

و تابع هزینه نهایی به صورت L_\text{simple} = L_t^\text{simple} + C خواهد بود (C یک مقدار ثابت مستقل از \theta است).

## محدودیت‌ها
فرایند نمونه‌گیری از DDPM با دنبال‌کردن زنجیره مارکوف فرایند انتشار معکوس بسیار کند است، زیرا تعداد گام‌ها T می‌تواند تا یک یا چند هزار مرحله باشد. در گفته شده «به عنوان مثال، نمونه‌گیری ۵۰ هزار عکس با اندازه ۳۲ × ۳۲ از یک DDPM حدود ۲۰ ساعت طول می‌کشد، اما انجام این کار با یک GAN روی یک پردازنده گرافیکی Nvidia 2080 Ti کمتر از یک دقیقه زمان می‌برد.»

## کاربرد
### [[بینایی رایانه‌ای|بینایی ماشین]]
مدل‌هایی انتشاری برای تولید، بخش‌بندی، فراتفکیک‌پذیری، تغییر و تعمیر  تصاویر به کار می‌روند. همچنین در تولید ویدئو، تشخیص ناهنجاری، تحلیل تصاویر پزشکی و بینایی سه‌بعدی کاربرد دارد.

### [[پردازش زبان‌های طبیعی]]
مدل‌های انتشاری همچنین برای تولید و ترجمه متن استفاده می‌شوند.

## جستارهای وابسته
* زنجیره مارکوف
* استنباط بیزی تغییراتی
* خودرمزگذار متغیر

## منابع

رده:مدل‌های مارکوف
رده:یادگیری ماشین
رده:الگوریتم‌های یادگیری ماشین