[AI] DDPM: Denoising Diffusion Probabilistic Model

diffusion 공부를 시작하고 수식 파티에서 헤어나오지 못하고 있다가 정신차리고 유도과정을 차근차근 기록해보려고 한다. 너무너무 복잡하고 내용도 많아서 이거 유도하는데만 며칠을 쓴 것 같다. 아무튼 이번에는 ddpm loss 유도 관련된 수식 정리이고 이전까지 했던 논문리뷰와는 좀 다를 수도 있다. (논문 정리가 아니라 수식 정리에 가깝다) 나중에 내가 다시 보려고 올리는 거라 내맘대로일 수 있다. ㅎ

수식 파티를 넘기고 코드만 돌리는 게 아니라 이해하기 위해서 내가 읽었던 논문/포스트 링크들을 남겨 놓는다. 수식 파티1 loss 유도만 보려면 Understanding Diffusion Models: A Unified Perspective

q, p

ddpm은 vae랑 비슷하게 수식을 가져가는 경향이 있다. (likelihood 모델이니까) vae에서는 맞추지 못하는 p(intractable하다고 표현한다)를 q로 근사하고 ELBO를 이용해 q가 p에 가까워지게 optimize 했다면, ddpm은 q forward를 우리가 아는 가우시안으로 정의해놓은 후 p reverse를 q를 이용해 ELBO로 추론해가는(학습하는) 과정이다. 그리고 Marcov chain과 각 step의 확률이 Gaussian distribution을 따른다는 가정이 들어간다. (저 두 가정 때문에 모든 유도가 가능해진다.) ddim에서는 Marcov chain을 안쓴다는데 ddpm 정리 끝나면 읽어봐야겠다.

forward process

우리는 각 step에서의 q를 다음과 같이 정의한다. 각 step에서 gaussian을 따른다. 즉 내가 t-1 step을 알면 t step에서의 이미지를 추론할 수 있게 된다 (q를 알고 있으므로)

\[q(x_t|x_{t-1})=\mathbf{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I)\] \[q(x_{1:T}|x_0)=\prod_{t=1}^T q(x_t|x_{t-1})\]

backward process

비슷한 방법으로 추론해야하는 p또한 정의할 수 있다. p를 알기 위해 우리가 맞춰야 하는(학습해야 하는) 게 각 step의 평균, 분산이 되겠다. (가우시안이므로)

\[p_\theta(x_0:T):=p(x_T)\cdot \prod_{t=1}^Y p(x_{t-1}|x_t)\] \[p_\theta(x_{t-1}|x_t):=\mathbf{N}(\mu_\theta(x_t,t),\Sigma_\theta(x_t,t))\]

VAE ELBO 유도랑 비슷한 감이 있는데 내가 링크 여기서 VAE ELBO 유도를 했으므로 이걸로 퉁치겠다. DDPM도 여러 ELBO를 유도할 수 있는데, 그중에 가장 tractable한 ELBO, 즉 ddpm에서 사용하는 ELBO만 여기서 설명하겠다. (intractable한 ELBO는 내가 힘이 닿으면 추가하겠다)

minimize negative log likelihood (ELBO)

\[\mathbf{E}_{x_1:T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_0)}]\] \[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_0, x_1, ..., x_T) \over p_\theta(x_1, x_2, ..., x_T|x_0)}]\]

양변에 $q(x_{1:T}\mid x_0)\over q(x_{1:T}\mid x+0)$ 를 쑤셔넣자.

\[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_0, x_1, ..., x_T) \over p_\theta(x_1, x_2, ..., x_T|x_0)}*{q(x_{1:T}\mid x_0)\over q(x_{1:T}\mid x_0)}]\]

$p_\theta(x_0, x_1, …, x_T)$ 랑 $q(x_{1:T}\mid x_0)$ 랑 묶고 $p_\theta(x_1, x_2, …, x_T\mid x_0)$랑 $q(x_{1:T}\mid x_0)$ 랑 묶자. 그리고 로그니까 뺄셈으로 분리하면 두번째 항이 kl-divergence 폼이 된다.

\[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_0, x_1, ..., x_T) \over q(x_{1:T}\mid x_0)}- \log{q(x_{1:T}\mid x_0)\over p_\theta(x_1, x_2, ..., x_T|x_0)}]\]

kl-divergence는 대충 이렇게 생겼다. 인테그랄을 지금 보이는 평균 notation으로 바꾸면 된다(이정도는 미래의 나도 기억하겠지?)

\[D_{KL}(P||Q)=\int_{\infty} p(x)log{p(x) \over q(x)}dx\] \[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_0, x_1, ..., x_T) \over q(x_{1:T}\mid x_0)}]-D_{KL}(p\mid\mid q)\]

그런데 kl-divergence는 항상 0보다 크므로 앞에 항만 써서 부등식으로 나타낼 수 있게 된다.

\[<= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_0, x_1, ..., x_T) \over q(x_{1:T}\mid x_0)}]\] \[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_{1:T}) \over q(x_{1:T}\mid x_0)}]\]

마르코브 체인에 의해,

\[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T)\cdot \prod_{t=1}^T p_\theta(x_{t-1}\mid x_t) \over \prod_{t=1}^T q(x_t\mid x_{t-1}) }]\]

로그니까 또 뺄셈으로 빼내면,

\[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T) - \sum_{t=1}^T \log{p_\theta(x_{t-1}\mid x_t) \over q(x_t\mid x_{t-1})} }]\]

일단 여기까지 하면 loss 반의반정도 유도까지 왔다. 근데 저 \(q(x_t\mid x_{t-1})\) 를 위에 p처럼 뒤집어 주고 싶다. 우리가 \(q(x_t\mid x_{t-1})\) 얘를 알고 있기 때문에 \(q(x_{t-1}\mid x_{t})\)를 유도해낼 수만 있으면 무적이 된다. 유도해보자.


마르코브 체인 때문에 x_0라는 조건을 걸어 줘도 상관이 없다. (어차피 initialization 조건 이니까.)

\[q(x_t|x_{t-1})=q(x_t\mid x_{t-1}, x_0)\]

베이즈 룰 때문에 다음과 같은 식이 성립한다.

\[q(x_t\mid x_{t-1}, x_0)={q(x_t, x_{t-1}, x_0)\over q(x_{t-1}, x_0)}\]

얘를 저기다 끼워 넣고 \(q(x_t, x_0)\over q(x_t, x_0)\) 를 곱하자

\[q(x_t|x_{t-1})= {q(x_t, x_{t-1}, x_0)\over q(x_{t-1}, x_0)} \cdot {q(x_t, x_0)\over q(x_t, x_0)}\]

\(q(x_t, x_{t-1}, x_0)\) 랑 \(q(x_t, x_0)\)랑 묶고 남은 애들 둘이 또 묶어주면

\[q(x_t|x_{t-1})= {q(x_t, x_{t-1}, x_0)\over q(x_t, x_0)} \cdot {q(x_t, x_0)\over q(x_{t-1}, x_0)}\]

결국 둘 사이의 관계성을 이끌어낼 수 있다.

\[q(x_t|x_{t-1})= {q(x_{t-1}\mid x_t, x_0)} \cdot {q(x_t, x_0)\over q(x_{t-1}, x_0)}\]

다시 loss 유도 항을 살펴보자. 여기다가 방금 유도한 저 q를 끼워 넣으면,

\[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T) - \sum_{t=1}^T \log{p_\theta(x_{t-1}\mid x_t) \over q(x_t\mid x_{t-1})} }]\] \[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T) - \sum_{t=1}^T \log{p_\theta(x_{t-1}\mid x_t) \over {q(x_{t-1}\mid x_t, x_0)} \cdot {q(x_t, x_0)\over q(x_{t-1}, x_0)}} }]\]

열심히 분리한다.

\[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T) - \sum_{t=2}^T \log{p_\theta(x_{t-1}\mid x_t)\cdot q(x_{t-1}, x_0) \over {q(x_{t-1}\mid x_t, x_0)} \cdot {q(x_t, x_0)} } }]\] \[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T)} - \sum_{t=2}^T \log{p_\theta(x_{t-1}\mid x_t) \over {q(x_{t-1}\mid x_t, x_0)} } - \sum_{t=2}^T \log {q(x_{t-1}, x_0) \over {q(x_t, x_0)}} - \log {p_\theta (x_0\mid x_1) \over q(x_1\mid x_0)}]\]

보면 \(\sum_{t=2}^T \log {q(x_{t-1}, x_0) \over {q(x_t, x_0)}}\) 얘가 소거되는 형태의 항이다. 소거하고 보면 제일 첫번째 항(t=2)의 첫번째 항이랑 제일 마지막 항(t=T)의 두번쩨 항만 남는다. 결국

\[= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T)} - \sum_{t=2}^T \log{p_\theta(x_{t-1}\mid x_t) \over {q(x_{t-1}\mid x_t, x_0)} } - \log {q(x_0, x_1) \over q(x_T, x_0)} - \log {p_\theta (x_0\mid x_1) \over q(x_1\mid x_0)}]\]

다시 로그를 잘 분해해서 겹치는 항인 \(q(x_1\mid x_0)\)를 제거하면 합치면 최종 loss를 구할 수 있다!!!!!

\[L_{VLB}= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T) \over q(x_T\mid x_0)} - \sum_{t=2}^T \log{p_\theta(x_{t-1}\mid x_t) \over {q(x_{t-1}\mid x_t, x_0)} } - \log {p_\theta (x_0\mid x_1)}]\]

reparameterization

자 여기서 첫번째는 p랑 q를 가깝게 하는 term으로, 결국 두개의 KL-divergence를 최소화하는 term이다. 세번째 term은 초기조건 정도로, 결국 얘도 초기조건에서 kl-divergence를 최소화해주는 term이다. 우리가 신경써야 하는 건 두번째 term이다. 여기서 parameterization 테크닉이 들어간다.

우리가 아까 q forward의 평균과 분산을 미리 정의해 놨다.

\[q(x_t|x_{t-1})=\mathbf{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I)\]

근데 우리 loss식에는 q reverse(\({q(x_{t-1}\mid x_t, x_0)}\))의 평균과 분산(\(\tilde \mu(x_t,x_0)\) 와 \(\tilde \beta\))을 찾기를 요구하고 있다. 얘도 결국 가우시안이다. 그래서 아까 열심히 유도해 놓은 요 \(q(x_t\mid x_{t-1})\) 으로 얘의 평균과 분산을 찾아내야 한다.

\[q(x_{t-1}|x_{t})= \mathbf{N}(x_{t-1}; \tilde \mu(x_t,x_0), \tilde \beta I)\] \[q(x_t|x_{t-1})= {q(x_{t-1}\mid x_t, x_0)} \cdot {q(x_t, x_0)\over q(x_{t-1}, x_0)}\]

잠깐 \(\alpha=1-\beta\)이고 다 알파 표현 식으로 바꾸고 가자. (내가 너무 헷갈림)

\[q(x_t|x_{t-1})=\mathbf{N}(x_t; \sqrt{\alpha}x_{t-1}, (1-\alpha) I)\]

가우시안이고 marcov chain때문에 0번째에서 바로 t step으로 점프가 된다. 그냥 \(x_t=\sqrt{\alpha}\cdot x_{t-1}+\sqrt{1-\alpha}\epsilon\) 점화식 가지고 계속 유도하다보면 밑에처럼 바꿀 수 있다. (나중에 되면 자세하게 적겠으나 어느 정도 할 수 있을 거라고 믿는다)

\[q(x_t|x_{0})=\mathbf{N}(x_t; \sqrt{\bar\alpha_t}x_{0}, (1-\bar\alpha_t) I)\]

결국 \({q(x_{t-1}\mid x_t, x_0)} \cdot {q(x_t, x_0)\over q(x_{t-1}, x_0)}\) 이 세개를 다 가우시안으로 표현할 준비가 다 되었다. 바로 위의 두 식을 잘 끼워 넣으면 된다.

\[q(x_t|x_{t-1})= \mathbf{N}(x_t; \sqrt{\alpha}x_{t-1}, (1-\alpha) I) \cdot {\mathbf{N}(x_{t-1}; \sqrt{\bar\alpha_{t-1}}x_{0}, (1-\bar\alpha_{t-1}) I)\over \mathbf{N}(x_t; \sqrt{\bar\alpha_t}x_{0}, (1-\bar\alpha_t) I)}\] \[q(x_t|x_{t-1})= \mathbf{N}(x_t; \sqrt{\alpha}x_{t-1}, (\beta_t) I) \cdot {\mathbf{N}(x_{t-1}; \sqrt{\bar\alpha_{t-1}}x_{0}, (1-\bar\alpha_{t-1}) I)\over \mathbf{N}(x_t; \sqrt{\bar\alpha_t}x_{0}, (1-\bar\alpha_t) I)}\]

여기서 실제 가우시안 식을 잠깐 보고 가자. 얘를 이용해야 한다. 우리가 지금 평균과 분산이 보이는 형태로 식을 다 바꿔놨으므로 위에 식을 아래식을 이용해 실제 가우시안 식으로 표현 가능하다. \(p(x)={1\over \sigma \sqrt{2\pi}} \exp (-{(x-\mu)^2 \over 2\sigma^2})\)

앞에 상수 (\({1\over \sigma \sqrt{2\pi}}\))를 떼버리고 등호 대신 \(\propto\)로 표현해보자

\[q(x_t|x_{t-1}) \propto \exp (-{1\over 2}({(x_t-\sqrt{\alpha}x_{t-1})^2\over \beta_t} + {(x_{t-1}-\sqrt{\bar\alpha_{t-1}})^2\over (1-\bar\alpha_{t-1})} - {(x_t-\sqrt{\bar\alpha_t})^2\over (1-\bar\alpha_t)}))\]

얘를 다 풀어보자. (또 새로운 가우시안 폼으로 만들기 위해서다.) const라고 표현한 부분은 어차피 가우시안 폼 만들때 필요없는거라 유도하지 않은거다.

\[= \exp (-{1\over 2}({x_t^2-2\sqrt{\alpha_t}x_t x_{t-1}+\alpha_t x_{t-1}^2\over \beta_t}+{x_{t-1}^2-2\sqrt{\bar\alpha_{t-1}x_{t-1}x_0}+\bar\alpha_{t-1}x_0^2\over 1-\bar\alpha_{t-1}}-{x_t^2-2\sqrt{\bar\alpha_t}x_tx_0+\bar\alpha_t x_0^2\over 1-\bar\alpha_t}))\] \[= \exp (-{1\over 2}(({\alpha_t\over \beta_t}+{1\over 1-\bar\alpha_{t-1}})x_{t-1}^2+(-{2\sqrt{\alpha_{t-1}}\cdot x_0 \over 1- \bar\alpha_{t-1}}-{2\sqrt{\alpha_t}x_t\over \beta_t})x_{t-1}+const))\]

식이 너무 복잡하니까 \(({\alpha_t\over \beta_t}+{1\over 1-\bar\alpha_{t-1}})\) 얘를 \(A\)라고 치환하고 \((-{2\sqrt{\alpha_{t-1}}\cdot x_0 \over 1- \bar\alpha_{t-1}}-{2\sqrt{\alpha_t}x_t\over \beta_t})\) 얘를 \(B\)라고 치환하고 가우시안 폼으로 바꿔보자.

\[= \exp (-{1\over 2}(Ax_{t-1}^2-Bx_{t-1}+const))\] \[= \exp (-{1\over 2}(A(x_{t-1}^2-{B\over A}x_{t-1}+{B\over 2A}^2)+const'))\] \[= \exp (-{1\over 2}(A(x_{t-1}-{B\over 2A})^2+const'))\]

결국 이 가우시안의 평균은 \(B\over 2A\)이고 분산은 \(1\over A\) 인 것이다. 즉, \(q(x_t\mid x_{t-1})\)의 평균(뮤티)과 분산(틸테베타티)이 이것이 된다. A,B를 다시 넣어 보면

\[q(x_{t-1}|x_{t})= \mathbf{N}(x_{t-1}; \tilde \mu(x_t,x_0), \tilde \beta_t I)\] \[\tilde \mu(x_t,x_0)={B \over 2A}={\frac{\sqrt{\alpha_t}}{\beta_t} x_t + {1\over 1-\bar\alpha_{t-1}} x_0 \over {\frac{\sqrt{\alpha_t}}{\beta_t} \over \beta_t}+{1\over 1-\bar\alpha_{t-1}}}\]

여기서 분모가 깔끔하게 정리가 되는데, 통분하면

\[{\frac{\sqrt{\alpha_t}}{\beta_t} \over \beta_t}+{1\over 1-\bar\alpha_{t-1}}={\alpha_t - \alpha_t \bar\alpha_{t-1} + \beta_t\over \beta_t (1-\bar\alpha_{t-1})}={\alpha_t - \alpha_t \bar\alpha_{t-1} + 1-\alpha_t \over \beta_t (1-\bar\alpha_{t-1})}={1-\bar\alpha_t \over \beta_t (1-\bar\alpha_t)}\]

결국 뮤티는

\[\tilde \mu(x_t,x_0)=({\frac{\sqrt{\alpha_t}}{\beta_t} x_t + {\sqrt{\bar\alpha_{t-1}}\over 1-\bar\alpha_{t-1}} x_0})\cdot {(1-\bar\alpha_{t-1})\beta_t \over 1-\bar\alpha_t}\] \[\tilde \mu(x_t,x_0)={\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t} x_t + {\sqrt{\bar\alpha_{t-1}}\over 1-\bar\alpha_t} x_0}\]

가 된다. 뮤티를 한번만 더 정리하자. 아까 말했던 이 점화식 \(x_t=\sqrt{\alpha}\cdot x_{t-1}+\sqrt{1-\alpha}\epsilon\) 가지고 0번째에서 t step 점프하는 식을 유도했다. 가지고 오자.

\[x_t=\sqrt{\bar\alpha_t} x_0+\sqrt{1-\bar\alpha_t} \epsilon_t\]

얘를 x_0에 대해서 정리하면은 \(x_0={x_t-\sqrt{1-\bar\alpha_t}\epsilon_0}\sqrt{\bar\alpha_t}\)

얘를 q reverse의 평균인 뮤티식에 대입해서 정리해보면

\[\tilde \mu(x_t,x_0)={1\over\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{1-\bar\alpha_t}\epsilon_t)\]

q reverse의 분산인 틸테베타티는 (유도 생략 위에꺼 치느라 너무 힘들었다. 비슷하게 유도하면 된다)

\[\tilde \beta_t = {1-\bar\alpha_{t-1}\over 1-\bar\alpha_t}\cdot \beta_t\]

이로써 결국 여기까지 내용을 정리해보면, loss term을 ELBO를 통해서 유도했더니 세 개의 term이 나왔었고, + 우리가 미리 정의해놓아서 알고 있는 q forward의 평균, 분산 (\(\sqrt{\alpha_t}, (1-\alpha_t)\))을 통해서 q reverse의 평균, 분산(\(\tilde \mu(x_t,x_0), \tilde \beta_t\))를 유도해냈다.


simplification

자, 이제 진짜 위에서 말했던 loss에서 두번째 term을 진짜진짜 정리할 수 있게 되었다. 모든 식을 다 유도했다. 집어넣기만 하면 된다.

loss를 다시 복기해보자. ddpm은 시그마(\(\beta\))를 고정하기 때문에 첫번째 loss term은 상수가 된다. 세번째 term은 아주 작은 noise가 더해진 이미지에서 원본 이미지로 reconstruction되는 term이므로 무시해도 된다. 결국 두번째 term만 잘 만져주면 된다.

\[L_{VLB}= \mathbf{E}_{x_T \thicksim q(x_T|x_0)}[-\log {p_\theta(x_T) \over q(x_T\mid x_0)} - \sum_{t=2}^T \log{p_\theta(x_{t-1}\mid x_t) \over {q(x_{t-1}\mid x_t, x_0)} } - \log {p_\theta (x_0\mid x_1)}]\]

우리가 죽도록 모든 분포가 가우시안을 따른다고 가정해왔기 때문에, 저 kl-divergence를 minimize하는 두번째 loss term은 더 간단하게 표현이 된다. (위에 있는 논문에서 말하는 위키 링크이다. kl-divergence between two gaussian distribution)

\[D_{KL}(\mathbf{N}(x;\mu_x,\Sigma_x)\mid\mid \mathbf{N}(y;\mu_y,\Sigma_y))={1\over 2}[\log \frac{|\Sigma_y}{\Sigma_x}-d+tr(\Sigma_y^{-1}\Sigma_x)+(\mu_y-\mu_x)^T\Sigma_y^{-1}(\mu_y-\mu_x)]\]

또 ddpm은 저 시그마(variance)가 동일하다고 아까 가정을 했기 때문에, (시그마 고정!) 그렇기 때문에 더 쉬운 문제가 되어버리는데

\[D_{KL}(q(x_{t-1}|x_t, x_0)\mid\mid p_\theta(x_{t-1}x_t))={1\over 2}[\log \frac{|\Sigma_q(t)}{\Sigma_q(t)}-d+tr(\Sigma_q(t)^{-1}\Sigma_q(t))+(\mu_\theta-\mu_q)^T\Sigma_q(t)^{-1}(\mu_\theta-\mu_q)]\] \[={1\over 2}[\log 1-d+d+(\mu_\theta-\mu_q)^T\Sigma_q(t)^{-1}(\mu_\theta-\mu_q)]\] \[={1\over 2}[(\mu_\theta-\mu_q)^T(\sigma_q^2(t)I)^{-1}(\mu_\theta-\mu_q)]\] \[={1\over2\sigma_q^2(t)}[||\mu_\theta-\mu_q||^2_2]\]

결국 그냥 뮤세타랑 뮤티 mse하는 거랑 똑같애진다. 이게 무슨말이냐면 뮤세타가 뮤티에 가까워지도록 학습한다는 얘기다. 우리가 위에서 우리가 열심히 뮤티를 유도했었던 걸 기억해보자. 이 뮤티를 가져와보면,

\[\tilde \mu(x_t,x_0)={1\over\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{1-\bar\alpha_t}\epsilon_t)\]

그리고 우리는 어차피 뮤티랑 뮤세타가 가까워져야 하는거니까 뮤티랑 뮤세타를 입실론 제외하고 똑같은 형태로 놓고 푸는게 이득이다. 따라서 뮤세타는

\[\mu_\theta(x_t,x_0)={1\over\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{1-\bar\alpha_t}\epsilon_\theta(x_t, t))\]

결국 우리는 입실론을 optimize하겠다는 말이 된다. 결국, 이 모델은 reparameterization을 통해 노이즈(\(\epsilon_\theta(x_t, t\))를 추론하는 모델이 된다. (L_t가 두번째 loss term이다) 정리해보면

\[L_t={1\over2\sigma_q^2(t)}[||\mu_\theta-\mu_q||^2_2]\] \[L_t={1\over2\sigma_q^2(t)}[||{1\over \alpha_t}(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_t-{1\over \alpha_t}(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t, t))||^2_2]\] \[L_t={(1-\alpha_t)^2\over2\alpha_t(1-\bar\alpha_t)\sigma_q^2(t)}[||\epsilon_t-\epsilon_\theta(x_t, t||^2_2]\]

우리가 또 x_t를 x_0에 대해 유도해놓은 식이 있기 때문에 얘를 대입하면

\[x_t=\sqrt{\bar\alpha_t} x_0+\sqrt{1-\bar\alpha_t} \epsilon_t\] \[L_t={(1-\alpha_t)^2\over2\alpha_t(1-\bar\alpha_t)\sigma_q^2(t)}[||\epsilon_t-\epsilon_\theta(\sqrt{\bar\alpha_t} x_0+\sqrt{1-\bar\alpha_t} \epsilon_t, t||^2_2]\]

1번, 3번 텀을 무시하고 L_t만 사용해서 얘를 \(L_{simple}\) 이라고 부른다. 결국 얘가 loss다.

정리

결국 diffusion은 조금씩 가우시안 노이즈를 더하는, 우리가 생각하기 쉬운 t step을 q forward라 정의하고, p reverse를 추론하는 문제이다. 이때 q reverse를 q forward로 유도해 낼 수 있고, ELBO를 통한 loss 또한 p reverse와 q reverse를 가깝게 만드는(kl-divergence) 형태로 나오기 때문에 학습이 가능해진다. 이때, p reverse와 q reverse (사실 forward도 마찬가지지만)가 모두 가우시안을 따르기 때문에 p reverse와 q reverse 두 분포의 평균과 분산 두 variable을 맞춰주는 문제가 되어버린다. ddpm은 여기서 분산까지 고정해버리기 때문에 결국 평균을 맞춰주는 형태가 되어 버리고, 평균이 랜덤 노이즈로 표현되기 때문에 p와 q의 노이즈를 맞춰주는 문제로 simplification 되어버린다!

유도하느라 정말 너무 힘들었다. 가우시안 식 적을 때 즈음 부터 후회했지만 어찌저찌 해냈다. ㅋㅋ 평생 쓸 latex 다 쓴 것 같다. 기억안날 때마다 이거 보러 와야겠다.