Generative Model은 데이터 분포를 근사하는 모델을 학습한다.

생성자와 판별자의 싸움으로 학습한다.


사람 얼굴, 오브젝트, 애니메이션, mnist 등 다양하게 학습되어 사용되고 있음


그 그림은 CycleGAN의 훈련 흐름을 한 화면에 모아 놓은 겁니다. 두 도메인 (A)↔(B) 사이를 오갈 두 개의 생성기와 두 개의 판별기, 그리고 사이클 일관성 손실이 어떻게 연결되는지 보여줍니다.
구성요소와 흐름
- A → B’ (첫 생성기 (G_{A\to B}))
- 얼룩말 사진 (A)를 말 도메인으로 변환해 가짜 (B')를 만듭니다.
- 판별기 (D_B) 는 (B')와 진짜 (B)를 구분하도록 학습됩니다(적대적 손실).
- 식: (\mathcal{L}\text{GAN}(G{A\to B},D_B;A,B)=\mathbb{E}{b}[\log D_B(b)] + \mathbb{E}{a}[\log(1-D_B(G_{A\to B}(a)))]).
- B’ → A’ (두 번째 생성기 (G_{B\to A}))
- 방금 생성한 (B')를 다시 (A) 도메인으로 되돌려 (A')를 만듭니다.
- 사이클 일관성(cycle consistency): (A')는 원본 (A)와 가깝게(대개 (L_1)) 만들어야 합니다.
- 식: (\mathcal{L}\text{cycle}(G{A\to B};a)=\mathbb{E}a\big[|G{B\to A}(G_{A\to B}(a))-a|_1\big]). 반대 방향도 동일.
- 대칭 경로 B → A′ → B′
- (G_{B\to A})가 (B)를 (A')로, 다시 (G_{A\to B})가 (A')를 (B')로.
- 이때도 (D_A)가 (A)와 (A')를 구분하는 적대적 손실을 갖습니다.
전체 손실과 최적화
- 총 손실(생성기·판별기 합산):
[
\mathcal{L}=\mathcal{L}\text{GAN}(G{A\to B},D_B)+\mathcal{L}\text{GAN}(G{B\to A},D_A)
+\lambda\big(\mathcal{L}\text{cycle}(G{A\to B})+\mathcal{L}\text{cycle}(G{B\to A})\big).
]
여기서 (\lambda)는 복원(콘텐츠 보존) 강도를 조절합니다. - 미니맥스 최적화: 생성기들은 위 (\mathcal{L})을 최소화, 판별기들은 최대화합니다.
왜 “사이클”이 필요한가?
페어가 없는(비지도) 번역에서, (A!\to!B)만 맞추면 임의의 많은 대응(색만 바꾸는 등)이 가능해 모호합니다. (A!\to!B!\to!A)가 원본으로 복원되도록 강제하면,
- 내용(구도·형상 등)을 보존하고
- 도메인 스타일만 바꾸는 의미 있는 대응을 학습하게 됩니다.
한 줄 정리
그림은 “두 생성기 + 두 판별기 + 사이클 복원”이라는 CycleGAN의 핵심을 보여줍니다:
적대적 손실로 각 도메인처럼 보이게 만들고, 사이클 일관성 손실로 원본 정보를 보존하며 비지도 도메인 변환을 학습합니다.
목소리도 동일하게 진행할 수 있다.
AutoEncoder는 입력을 출력으로 복구하며 중앙의 Latent Vector로 차원을 줄이고, 다시 늘리는 과정을 진행한다.

이제 VAE는 sampling을 통해 생성을 진행한다.

다음 관점으로 보면 깔끔합니다.
1) VAE에서 “샘플링”의 의미
- 인코더는 확률 분포 (q_\phi(z\mid x)=\mathcal N(\mu_\phi(x), \operatorname{diag}\sigma^2_\phi(x))) 를 출력합니다.
- 샘플링은 이 분포에서 (z)를 뽑는 것인데, 학습 시엔
[
z=\mu_\phi(x)+\sigma_\phi(x)\odot \varepsilon,\quad \varepsilon\sim\mathcal N(0,I)
]
로 미분 가능하게 만드는 reparameterization trick 을 씁니다. - 이렇게 뽑은 (z)를 디코더 (p_\theta(x\mid z))에 넣어 재구성 (\hat x)을 만듭니다.
2) 샘플링을 왜 하느냐 — 얻는 것
- 최대우도(ELBO) 추정:
(\displaystyle \mathcal L(x)=\mathbb E_{q_\phi(z\mid x)}[\log p_\theta(x\mid z)]-\mathrm{KL}(q_\phi(z\mid x)|p(z)))
의 첫 항(기댓값)을 무작위 샘플로 근사해야 미분·최적화가 됩니다. - 불확실성/다양성: 같은 (x)에서도 여러 (z) 샘플 → 다양한 재구성과 불확실성 추정.
- 생성 능력: 학습 후엔 사전 (p(z)=\mathcal N(0,I)) 에서 임의 (z)를 샘플 → 새로운 (x) 생성(오토인코더엔 없음).
- 연속·매끄러운 잠재공간: KL 항이 (q_\phi(z\mid x))를 공통 사전 (p(z))에 정렬시켜, 보간/조작이 잘 되는 (z)-공간을 만듭니다.
3) Autoencoder와의 차이
항목 Autoencoder(AE) Variational Autoencoder(VAE)| 잠재표현 | 점 (z=f(x)) (결정적) | 분포 (q(z\mid x)) (확률적) |
| 목적 | 재구성 오차 최소화 | ELBO 최대화(재구성 + KL 정규화) |
| 샘플링 | 없음(불가) | (z\sim p(z))로 신규 샘플 생성 가능 |
| 잠재공간 | 구조 보장 없음(뒤틀릴 수 있음) | (p(z))에 맞춰 연속·조작 친화 |
| 특성 | 재구성 선명할 수 있음 | 통상 부드러움/블러 경향(가우시안 우도 가정) |
4) 실전 메모
- Posterior collapse(특히 강한 디코더) ↔ KL annealing, β-VAE(β>1), free-bits 등으로 완화.
- 이미지 품질을 더 끌어올리려면 VQ-VAE(양자화), VAE-GAN(판별기 결합) 같은 변형을 고려.
정리: VAE의 샘플링은 학습 시 ELBO의 기댓값을 미분 가능하게 만들고, 추론 시 잠재 사전에서 새 데이터를 생성할 수 있게 하는 핵심 메커니즘입니다. 오토인코더는 재구성기일 뿐이고, VAE는 확률적 생성모델입니다.

다음 슬라이드는 **변분추론(Variational Inference, VI)**로 (p(z\mid x))를 근사·학습하는 핵심 아이디어를 요약한 것입니다.
1) 왜 VI가 필요한가
VAE에서 정확한 사후확률 (p(z\mid x))는 보통 적분이 불가능합니다. 그래서 근사 분포족 (q_\phi(z\mid x))를 정하고, 이것이 진짜 사후 (p(z\mid x))와 최대한 가깝게 되도록 학습합니다. 슬라이드는 이를
(\min_\phi \mathrm{KL}!\left[q_\phi(z\mid x),|,p(z\mid x)\right]) 로 적고 있습니다.
2) ELBO와의 등가성(핵심 전개)
KL을 전개하면
[
\mathrm{KL}(q|p)=\mathbb{E}{q}[\log q(z\mid x)-\log p(z\mid x)]
=\log p(x)-\underbrace{\Big(\mathbb{E}{q}![\log p(x,z)]-\mathbb{E}{q}![\log q(z\mid x)]\Big)}{\text{ELBO}}.
]
따라서 KL을 최소화 ≡ ELBO를 최대화 입니다. 또한
(\text{ELBO}=\mathbb{E}{q}[\log p\theta(x\mid z)]-\mathrm{KL}!\left(q_\phi(z\mid x),|,p(z)\right)) 로 쓰여, “재구성 항 − KL 정규화” 구조가 됩니다.
3) 어떻게 최적화하나
모수 (\theta,\phi)를 동시에 업데이트합니다. (q_\phi)에서 샘플링은
(z=\mu_\phi(x)+\sigma_\phi(x)\odot\varepsilon,\ \varepsilon!\sim!\mathcal N(0,I)) (reparameterization)로 만들어 ELBO의 기댓값을 미분 가능하게 Monte-Carlo 근사합니다. 이게 VAE 학습의 표준 루프입니다.
4) KL 방향의 의미(직관)
(\mathrm{KL}(q|p)) 최소화는 mode-seeking 성향이 있어, 다봉 사후에서 한 모드에 더 집중하고 분산을 과소추정할 수 있습니다. 반대로 (\mathrm{KL}(p|q))는 mass-covering이지만 계산이 어렵습니다. VAE가 (\mathrm{KL}(q|p))를 쓰는 이유는 계산 가능성과 안정성 때문입니다. (슬라이드는 KL 정의와 VI 맥락을 함께 보여줍니다.)
5) AE와 비교해 “추론”이 다른 점
- AE: (z=f(x)) 결정적 맵핑, 재구성 오차만 최소화.
- VAE/VI: (q_\phi(z\mid x)) 확률적 근사를 암오타이즈드 추론(encoder)으로 학습하며, ELBO 최대화로 생성 확률모형을 훈련. 결과적으로 (p(z))에서 샘플해 새 데이터 생성이 가능해집니다.
6) 실무 팁(앞을 내다본 선택지)
- 표현력↑: (q_\phi)를 더 유연하게—Normalizing Flow/IAF 등—로 확장하면 ELBO가 타이트해지고 추론 갭을 줄일 수 있습니다.
- 학습 안정화: β-VAE(κL 가중), KL-annealing, free-bits로 posterior collapse를 완화.
- 타이트한 경계: IWAE(K-샘플)로 ELBO를 강화(하지만 분산·연산량 증가).
요약: 이 슬라이드는 “(p(z\mid x))는 어렵다 → (q_\phi(z\mid x))로 근사 → (\mathrm{KL}(q|p)) 최소화 ⇔ ELBO 최대화”라는 VI의 정석 흐름을 보여줍니다. 이를 통해 VAE는 **추론(network)**과 **생성(model)**을 한 번에 학습합니다.

좋아요. 슬라이드의 전개를 한 줄씩 풀어보겠습니다.
1) KL에서 시작
[
\mathrm{KL}!\left(q(z!\mid!x),|,p(z!\mid!x)\right)
=\mathbb{E}{q(z|x)}!\Big[\log \tfrac{q(z|x)}{p(z|x)}\Big]
=\mathbb{E}{q}![\log q(z|x)]-\mathbb{E}{q}![\log p(z|x)].
]
여기서 (p(z|x)=\tfrac{p(x,z)}{p(x)}) 를 대입하면
[
\mathrm{KL}(q|p)=\mathbb{E}{q}![\log q(z|x)]
-\mathbb{E}_{q}![\log p(x,z)]+\log p(x). ,
]
슬라이드 첫 블록과 동일합니다.
2) (\log p(x)) 정리 ⇒ ELBO 등장
위 식을 (\log p(x))에 대해 풀면
[
\log p(x)=\mathrm{KL}(q|p)+\mathbb{E}{q}![\log p(x,z)]-\mathbb{E}{q}![\log q(z|x)].
]
KL ≥ 0 이므로
[
\log p(x)\ \ge\ \underbrace{\mathbb{E}{q}![\log p(x,z)]-\mathbb{E}{q}![\log q(z|x)]}_{\text{ELBO}}.
]
이게 Evidence Lower Bound(변분 하한)입니다.
3) 재구성항 − 정규화항 형태
공동분포를 쪼개면 (p(x,z)=p(x|z)p(z)):
[
\text{ELBO}=\mathbb{E}_{q(z|x)}[\log p(x|z)]-\mathrm{KL}!\left(q(z|x),|,p(z)\right).
]
- (\mathbb{E}_{q}[\log p(x|z)]): 재구성(우도) 항 – (z)로부터 (x)를 잘 복원하도록.
- (\mathrm{KL}(q(z|x)|p(z))): 정규화 항 – 인코더 후분포가 사전 (p(z))와 가깝게.
슬라이드 두 번째 블록의 마지막 줄이 바로 이 식입니다.
4) 직관 요약
- 목표: 진짜 사후 (p(z|x))는 계산이 어려우니, 근사 (q(z|x))를 학습.
- 전략: (\mathrm{KL}(q|p)) 최소화 ↔ ELBO 최대화. 즉, “복원은 높이고(첫 항), 잠재공간은 질서 있게(둘째 항)” 만드는 균형을 학습합니다.
5) 실전에서 어떻게 쓰나
- 인코더가 (\mu(x),\sigma(x))를 내고, reparameterization (z=\mu+\sigma\odot\varepsilon)로 ELBO의 기댓값을 미분 가능하게 MC 근사 → (\theta,\phi)를 동시에 업데이트. (앞선 VI 슬라이드와 같은 맥락)
정리: 이 슬라이드는
[
\boxed{\log p(x)=\mathrm{KL}(q|p)+\text{ELBO} ;\Rightarrow; \log p(x)\ge\text{ELBO}}
]
라는 항등식에서 출발해, VAE가 왜 “재구성 − KL” 형태의 목적함수로 학습되는지를 수식으로 보여줍니다. ELBO를 키우면 (p(x))의 하한을 밀어 올리면서, (q(z|x))가 의미있고 생성 가능한 잠재공간을 형성하게 됩니다.

핵심은 “콘텐츠(언어 내용)와 화자 스타일(목소리)을 분리”해서, 같은 (z)(내용)는 유지하고 조건만 바꿔 원하는 화자의 목소리로 디코딩하는 것입니다.
1) 학습(Training)
- 입력: 소스 화자 (S)의 음성 (x).
- 인코더 (q_\phi(z\mid x))가 내용 잠재변수 (z)의 분포(평균·분산)를 내고, (z\sim q_\phi(z\mid x))를 샘플.
- 디코더 (p_\theta(x\mid z, S))는 (z)와 화자 조건 (S) 를 받아 (x)를 재구성.
- 목적함수(ELBO):
[
\max_{\phi,\theta}\ \mathbb{E}{q\phi(z|x)}[\log p_\theta(x\mid z,S)];-;\mathrm{KL}!\left(q_\phi(z|x),|,p(z)\right)
]
첫 항은 재구성(콘텐츠 보존), 둘째 항은 (z)를 사전 (p(z))에 정렬시켜 조작 가능한 잠재공간을 만듭니다.
2) 변환(Inference / Conversion)
- 같은 인코더로 (z\sim q_\phi(z\mid x))를 추출(여전히 내용).
- 디코더에 타깃 화자 (T) 를 조건으로 넣어 합성: (\hat x \sim p_\theta(\hat x\mid z, T)).
- 출력 (\hat x): “말한 내용은 동일, 목소리는 (T)”.
3) 왜 VAE가 적합한가
- 병렬 텍스트/페어 녹음 없이(non-parallel)도 학습 가능: 화자 조건으로 재구성만 잘 하게 만들고, 추론 때 조건만 바꾸면 되기 때문입니다. 초기 VC-VAE/VAW-GAN/ACVAE 등의 계열이 이 아이디어를 검증했습니다.
4) 실무 팁(분리 강화)
- (z)가 화자 정보를 덜 담도록: auxiliary classifier(ACVAE), cycle consistency(CycleVAE), VQ-VAE 등으로 정규화/제약을 추가하면 변환 품질이 올라갑니다.
요약: 학습 때는 (p_\theta(x\mid z,S))로 “내용 (z)+화자 (S)”를 맞추고, 변환 때는 같은 (z)에 화자만 (T)로 바꿔 합성합니다. 이게 슬라이드의 두 블록(Training/Using VAE)이 말하는 핵심입니다.

VAE와 GAN을 합쳐서 사용하기도 한다.

간단히 말해 Flow-based 모델은 “가역(역함수 존재) 변환으로 정확한 확률을 모델링” 하고, 오토인코더(AE)는 “비가역 압축으로 재구성 오차를 줄이는 표현학습” 입니다.
핵심 차이 한눈에
구분 Flow-based (Normalizing Flow) Autoencoder (AE) / VAE| 매핑 | 가역 (z=f(x)), (x=f^{-1}(z)) | 비가역 (z=E(x)), (x’=D(z)) |
| 차원 | 보통 동일 차원(정보 보존) → 필요 시 멀티스케일로 일부 변수만 분리 | 보통 축소 차원(압축) |
| 학습 목적 | 정확한 우도 최대화: (\log p(x)=\log p(z)+\sum_i \log | \det J_{f_i} |
| 구조 제약 | 각 레이어가 가역이고 Jacobian의 log-det이 계산 가능(affine coupling, invertible 1×1 conv, ActNorm 등) | 제약 적음(표현력↑), 가역성 불필요 |
| 샘플링 | (z\sim p(z)) → 정확히 (x=f^{-1}(z)) | AE: 별도 사전 없으면 샘플링 애매 / VAE: (z\sim p(z))로 가능(근사적) |
| 사용 목적 | 밀도추정/이상탐지/역변환 필요(양방향 매핑) | 표현학습/압축/생성(근사) |
| 장단점 | 장: 우도 정확, 양방향 변환, (reversible net로 메모리 절약 가능) / 단: 가역 제약으로 설계 까다롭고 log-det 비용 | 장: 자유로운 구조·압축 용이 / 단: AE는 우도 불가, VAE는 샘플 부드러움 경향 |
직관 요약
- Flow: 데이터를 잠재분포(보통 (\mathcal N(0,I)))로 정보 손실 없이 비틀어 옮기는 연속 변환의 합성. 그래서 정확한 확률값을 계산하고, 동일 변환을 역으로 돌려 샘플을 만든다.
- AE/VAE: 정보를 압축해 요약 (z)를 만들고, 그걸로 복원. AE는 재구성기이고, VAE는 확률적 생성모델(ELBO)이라 샘플링 가능하지만 우도는 근사적이다.
언제 무엇을 쓰나 (실전 가이드)
- 정확한 likelihood/양방향 매핑이 필요: Flow (예: 이상치 탐지, lossless-like 변환, 가역 변환이 필요한 과제, WaveGlow 등).
- 특징 압축·표현학습이 목표: AE.
- 생성과 잠재공간 조작을 안정적으로: VAE(필요하면 VQ-VAE/Flow-VAE로 보강).
요약: 그림의 Flow는 인코더/디코더가 같은 가역 함수의 정·역방향이라는 점이 AE와 본질적으로 다릅니다. 따라서 목적(우도 vs 재구성), 차원, 샘플링, 제약이 모두 달라집니다.

핵심: 확률변수의 변화(change of variables) 정리를 설명하는 슬라이드예요.
Flow-based 모델에서 “밀도 값이 변환을 거치면 어떻게 바뀌는가”의 수학적 근거입니다.
무엇을 말하나
- (X)와 (Y)는 연속 확률변수, (Y=f(X)). (f)는 전단사(가역)·미분가능이고 역함수 (g=f^{-1}) 존재.
- 확률질량 보존: 임의 구간에서
(\displaystyle \int_{x_1}^{x_2} p_X(x),dx = \int_{f(x_1)}^{f(x_2)} p_Y(y),dy). - 이를 미분하면(1차원) 밀도 변환 공식:
[
\boxed{p_Y(y)=p_X(g(y)),\big|\tfrac{dx}{dy}\big|}
\quad(,g(y)=f^{-1}(y),\ g'(y)=\tfrac{dx}{dy},)
]
※ 슬라이드의 (g')가 그 항입니다. 부호 때문에 절댓값이 들어간다는 점이 중요(단조감소일 때도 양의 밀도 보장).
직관
작은 구간에서 확률은 같아야 하므로
(p_X(x),dx = p_Y(y),dy). 변환으로 구간 길이가 (dx = |g'(y)|,dy) 만큼 늘어나거나 줄어들기 때문에 밀도에 그 비율을 곱해 보정합니다.
예시(1D)
(Y=2X+1\Rightarrow g(y)=\tfrac{y-1}{2},\ g'(y)=\tfrac12).
따라서 (p_Y(y)=\tfrac12,p_X!\big(\tfrac{y-1}{2}\big)). (늘어난 축만큼 밀도는 희석)
다변수 일반화
(y=f(x)), (J_g(y)=\tfrac{\partial g}{\partial y})라면
[
\boxed{p_Y(y)=p_X(g(y)),\big|\det J_g(y)\big|}.
]
Flow에서는 여러 가역변환을 합성((f=f_K\circ\cdots\circ f_1))하므로
[
\log p_X(x)=\log p_Z(z)
+\sum_{k=1}^K \log!\left|\det \tfrac{\partial f_k}{\partial h_{k-1}}\right|,\quad
z=f(x).
]
이 식이 정확한 우도를 주어, Normalizing Flow가 MLE로 학습될 수 있게 합니다.
기억 포인트
- 가역·미분가능(혹은 구간별) 조건이 필요.
- 1D에선 (p_Y(y)=p_X(g(y))|g'(y)|); 다변수에선 야코비안 행렬식.
- 이것이 슬라이드의 적분식과 (dx/dy=g') 표기가 뜻하는 전부입니다.

요 슬라이드는 Normalizing Flow의 학습·샘플링 공식을 한 장에 요약한 것입니다.
1) 핵심 식이 말하는 것
- (z=f(x)) (가역, 미분가능).
- 변수변환 공식으로 데이터의 정확한 우도:
[
p(x)=\Big|\det \frac{dz}{dx}\Big|;p(z).
]
→ (x)를 (z)로 “비틀어” 보낼 때의 국소 부피(scale) 변화가 (|\det J|)이고, 그만큼 밀도를 보정해야 한다는 뜻입니다. (부호에 관계없이 밀도는 양수라 (|\cdot|) 사용) - 로그를 취하면 학습에 쓰이는 항이 분해됩니다:
[
\log p(x)=\log p(z)+\log\Big|\det \frac{dz}{dx}\Big|.
]
2) 레이어별 합으로 쪼개지는 이유
- Flow는 (f=f_K\circ\cdots\circ f_1) (중간표현 (h_0{=}x,;h_K{=}z))의 합성입니다.
- 야코비안의 사슬법칙 (\det(J_{f\circ g})=\det(J_f)\det(J_g)) 때문에
[
\log p(x)=\log p(z)+\sum_{i=1}^{K}\log\Big|\det \frac{dh_i}{dh_{i-1}}\Big|.
]
→ 기저분포 로그우도(보통 (z\sim \mathcal N(0,I)))와 각 레이어의 로그-결정자를 더해 정확한 로그우도를 계산/최대화합니다.
3) 학습과 생성(슬라이드 하단)
- 학습(우도 최대화): 전방 (z=f(x))로 보낸 뒤
(\log p(z))와 (\sum \log|\det J_i|)를 합해 (\log p(x))를 계산 → 합을 최대화. - 샘플링(생성): (z\sim p(z))에서 뽑고 역함수로 되돌림
[
x=f^{-1}(z).
]
4) 직관 한 줄
- (\log|\det J|)는 “그 레이어가 공간을 얼마나 늘리거나 줄였는지”를 기록하는 로그-부피 보정항입니다.
- 그래서 Flow는 가역성+야코비안 설계(affine coupling, invertible (1{\times}1) conv 등)로 (\log|\det J|)를 싸게 계산할 수 있도록 만듭니다.
5) 1D 감각 예시
(z=2x)면 (\frac{dz}{dx}=2),
[
p(x)=2,p(z{=}2x),\quad \log p(x)=\log p(2x)+\log 2.
]
축이 2배 늘면 밀도는 그만큼 희석되어(×2) 보정되는 그림입니다.
정리: 이 페이지는 “Flow는 (x!\to!z)의 정확한 로그우도를 (\log p(z)+\sum \log|\det J_i|)로 계산해 MLE로 학습하고, 생성은 (f^{-1})로 한다”는 사실을 공식화하고 있습니다.

다음 슬라이드는 Glow-류(normalizing flow)에서 한 블록을 구성하는 3가지 가역 변환과, 그때의 로그우도 계산을 요약합니다.
1) ActNorm (Activation Normalization)
- 채널별 선형(아핀) 정규화: (y_{ij}=s\odot x_{ij}+b). 역변환은 (x_{ij}=(y_{ij}-b)\oslash s). 여기서 ⊙/⊘는 원소별 곱/나눗셈입니다.
- 로그-야코비안(공간 (h\times w) 전체에 동일 스케일 적용): (h\cdot w\cdot\sum_k \log|s_k|). 학습 초기에 데이터 기반으로 (s,b)를 잡아 분포를 안정화시키는 역할을 합니다.
2) Invertible (1{\times}1) Convolution
- 채널 축 선형 혼합: (y_{ij}=W x_{ij}), (x_{ij}=W^{-1}y_{ij}) ( (\det W\neq0) ). Permutation 대신 학습 가능한 회전/스케일로 채널을 섞어 표현력을 증가시킵니다.
- 로그-야코비안: (h\cdot w\cdot \log|\det W|). Glow는 (W)를 LU 분해로 저장해 (\log|\det W|)와 역행렬을 효율적으로 계산합니다(슬라이드의 요점은 로그결정자를 싼 값으로 얻는 구조라는 점).
3) Affine Coupling (RealNVP/Glow의 핵심)
- 텐서를 두 부분으로 분리: ((x_a,x_b)=\mathrm{split}(x)).
- 한쪽((x_b))을 입력으로 작은 NN이 스케일 (s), **시프트 (t)**를 산출.
- 전방: (y_a=s\odot x_a+t,\ y_b=x_b,\ y=\mathrm{concat}(y_a,y_b)). 역방향도 한 줄: (x_a=(y_a-t)\oslash s) (역함수 계산이 즉시 가능).
- 야코비안이 삼각 행렬이라 (\log|\det J|=\sum \log|s|)만 필요—저렴하고 안정적입니다.
슬라이드 오른쪽 박스가 한 flow step(ActNorm → invertible (1{\times}1) conv → Affine coupling)의 스택을 보여줍니다. 이 스택을 (K)번 합성해 (f=f_K\circ\cdots\circ f_1)를 만듭니다.
4) 학습: 정확한 로그우도(ML)로
변수변환 공식을 레이어별로 분해하면
[
\log p(x)=\log p(z)+\sum_{i=1}^{K}\log\left|\det\frac{d h_i}{d h_{i-1}}\right|, \quad (h_0=x,\ h_K=z).
]
즉, 기저분포의 로그우도((z\sim\mathcal N(0,I)) 등) + 각 가역변환의 로그-결정자 합을 최대화합니다.
5) 생성(Inference)
학습 뒤엔 단순합니다.
- (z\sim p(z))에서 샘플링, 2) 역함수로 되돌리기: (x=f^{-1}(z)).
왜 이 3가지가 조합되는가
- ActNorm: 데이터 의존적 초기화 + 채널별 스케일/바이어스로 분포 안정화(큰 배치 없어도 OK).
- Invertible (1{\times}1) Conv: 고정 permutation(RealNVP)보다 강한 채널 혼합으로 coupling이 보지 못한 정보가 다음 스텝에서 노출되도록.
- Affine Coupling: 역변환/로그-det가 초저가로 계산되어 깊은 가역 네트워크 구성 가능.
요약하면, 이 페이지는 “Glow류 flow 한 블록의 구성과 각 블록의 log-det 기여”를 보여주고, 전체 로그우도 (\log p(x))를 기저분포 + 블록들의 log-det 합으로 계산해 정확한 MLE로 학습한다는 메시지를 전달합니다.

다음 슬라이드는 확산(디퓨전) 생성모델을 한 장에 압축해 놓은 것입니다. 핵심은 **“점점 노이즈를 섞어 망가뜨렸다가, 학습한 역과정으로 되돌리는 모델”**입니다.
직관 먼저
- 정방향(망가뜨리기): 깨끗한 데이터 (x_0)에 작은 가우시안 노이즈를 (T)번에 걸쳐 조금씩 더합니다.
→ (x_1, x_2, \dots, x_T)가 되고, 마지막엔 (x_T \approx \mathcal N(0,I)) (완전한 잡음). - 역방향(복원하기): 이제 잡음에서 시작해(샘플링) 한 스텝씩 노이즈를 제거하며 (x_T \to x_{T-1} \to \dots \to x_0) 로 되돌립니다. 이 “되돌리기”를 신경망이 학습합니다.
수식은 최소로
- 정방향(확산): 마르코프 체인
[
q(x_t!\mid!x_{t-1})=\mathcal N!\big(\sqrt{1-\beta_t},x_{t-1},,\beta_t I\big)
]
((\beta_t): 스텝 (t)에서 추가되는 노이즈의 세기; 보통 아주 작게 스케줄링) - 역방향(복원; 학습 대상):
[
p_\theta(x_{t-1}!\mid!x_t)=\mathcal N!\big(\mu_\theta(x_t,t),,\Sigma_\theta(x_t,t)\big)
]
신경망이 (\mu_\theta) (또는 노이즈 (\varepsilon_\theta))를 예측합니다.
학습은 이렇게(한 줄 루프)
- 데이터 (x_0)와 랜덤 스텝 (t)를 뽑고,
- 폐형식으로 바로 노이즈를 섞어 (x_t=\sqrt{\bar\alpha_t},x_0+\sqrt{1-\bar\alpha_t},\varepsilon) ((\varepsilon\sim\mathcal N(0,I)), (\bar\alpha_t=\prod_{s\le t}(1-\beta_s))),
- 네트워크가 (\varepsilon_\theta(x_t,t)) (또는 (x_0), (v) 등)을 예측,
- MSE 손실 (|\varepsilon-\varepsilon_\theta|_2^2) 로 학습.
→ 요컨대 “섞은 노이즈를 맞히게” 하면, 역방향 분포도 학습됩니다.
샘플링(생성)은 이렇게
- (x_T\sim \mathcal N(0,I))에서 시작,
- 각 스텝에
[
x_{t-1}=\frac{1}{\sqrt{1-\beta_t}}\Big(x_t-\beta_t,\hat\varepsilon_\theta(x_t,t)/\sqrt{1-\bar\alpha_t}\Big)+\sigma_t,\zeta
]
((\zeta\sim\mathcal N(0,I)), 마지막 스텝은 (\sigma_t=0))으로 한 단계씩 복원, - (x_0)이 최종 생성물.
슬라이드의 표기 (x_T\equiv z)는 완전 잡음 상태가 잠재변수처럼 쓰인다는 뜻입니다.
왜 잘 되나
- 작은 스텝의 가우시안 복원은 가우시안 조건부로 근사가 잘 맞고(안정),
- 복원 네트워크는 각 스텝에서 로컬한 노이즈만 제거하면 되므로 학습이 쉽습니다.
- 결과적으로 고품질·다양한 샘플을 얻을 수 있지만, 스텝 수가 많아 느린 단점이 있어 DDIM/샘플러 가속, 지침(클래스/텍스트)-프리 가이던스 등을 함께 씁니다.
한 줄 정리
확산모델은 데이터→잡음(정방향) 을 수식으로 정의하고, 잡음→데이터(역방향) 을 신경망이 배우게 해 잡음에서 샘플을 되살려내는 생성기입니다.

다 보여준 식은 확산모델의 로그가능도 (\log p_\theta(x_0)) 를 직접 최대화하기 어렵기 때문에,
앞방향 노이즈 과정 (q(x_{1:T}\mid x_0)) 를 변분후분포로 삼아 ELBO(하한)를 최대화하는 과정을 전개한 것입니다.
큰 흐름(수식 최소화)
- 목표
생성모델은
[
p_\theta(x_{0:T})=p(x_T)\prod_{t=1}^T p_\theta(x_{t-1}\mid x_t)
]
로 정의됩니다. 우리가 최대화하고 싶은 것은 (p_\theta(x_0)=\int p_\theta(x_{0:T}),dx_{1:T}) 입니다. (슬라이드 ‘Objective function’ 첫줄) - Jensen로 ELBO 만들기
직접 적분이 어려우니, 알고 있는 체인 (q(x_{1:T}\mid x_0)=\prod_t q(x_t\mid x_{t-1})) 를 끼워 넣고 Jensen’s inequality를 쓰면
[
\mathbb E_{q}!\left[\log \frac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)}\right]
]
이라는 하한(ELBO) 가 됩니다. (슬라이드 중간 전개) - 항목별로 정리
곱을 로그 합으로 풀면
[
\mathbb E_q!\big[\log p(x_T)\big]
+\sum_{t=1}^T \mathbb E_q!\big[\log p_\theta(x_{t-1}!\mid x_t)
-\log q(x_t!\mid x_{t-1})\big]
]
꼴이 됩니다. (슬라이드 식의 분해) - KL의 합으로 재표기
가우시안 체인의 성질을 이용해 위 식은 세 가지 의미 있는 항으로 바뀝니다.
[
\underbrace{-,\mathbb E_q!\big[\mathrm{KL}(q(x_T!\mid x_0),|,p(x_T))\big]}{\text{최종 노이즈가 } \mathcal N(0,I)\text{와 맞도록}}
\ \ +\
\underbrace{\mathbb E_q!\big[\log p\theta(x_0!\mid x_1)\big]}{\text{재구성(}t{=}1\text{) 항}}
\ \ -\
\underbrace{\sum{t=2}^T \mathbb E_q!\big[\mathrm{KL}\big(q(x_{t-1}!\mid x_t,x_0),|,p_\theta(x_{t-1}!\mid x_t)\big)\big]}_{\text{스텝별 ‘역전이’ 맞추기}}
]
(슬라이드 마지막 두 줄의 결론)
직관적으로 보면
- 앞방향 (q) 는 우리가 정확히 아는 노이즈 추가 과정(마르코프 가우시안 체인)입니다.
- 역방향 (p_\theta) 는 학습해야 하는 노이즈 제거 과정입니다.
- ELBO의 최종 형태는 “각 시간 (t) 에서, ‘진짜 역후분포’ (q(x_{t-1}!\mid x_t,x_0))와 모델 역분포 (p_\theta(x_{t-1}!\mid x_t)) 사이의 KL을 줄여라”로 해석됩니다. 그래서 스텝별로 옳은 역이동을 배우는 것이 곧 전체 가능도 최적화가 됩니다. (슬라이드 결론)
왜 결국 MSE(노이즈 예측)로 학습하나?
- DDPM(Ho et al., 2020) 방식에선 (p_\theta(x_{t-1}!\mid x_t))을 가우시안으로 두고 분산을 고정하면, 위 KL이
[
\lambda_t,\mathbb E\big[|\varepsilon-\varepsilon_\theta(x_t,t)|_2^2\big]
]
과 동치(상수 차이) 가 됩니다. 즉, “섞어 넣은 노이즈 (\varepsilon)를 맞히는 MSE”를 합한 것이 바로 저 복잡한 ELBO를 최적화하는 셈입니다. (슬라이드의 샘플링·파라미터화 문맥)
한 줄 요약
이 페이지는 변분 하한(ELBO) 로 (\log p_\theta(x_0))를 풀어 “스텝별 KL의 합을 최소화” 하는 형태를 얻는 과정입니다.
실무에선 이를 노이즈 예측 MSE로 구현하고, 그 합을 줄이는 것이 곧 최대우도 학습입니다.

다음 슬라이드는 정방향(노이즈 추가) 과정에서 (x_t)를 (x_0)만으로 바로 뽑는 폐형식을 보여줍니다. 핵심 직관과 결과만 잡아줍니다.
1) 한 스텝 정의(기본 재귀)
[
x_t=\sqrt{\alpha_t},x_{t-1}+\sqrt{1-\alpha_t},\varepsilon_{t-1},\qquad
\alpha_t=1-\beta_t,\ \ \varepsilon_{t-1}\sim\mathcal N(0,I).
]
- 매 스텝마다 이전 신호를 조금 약화( (\sqrt{\alpha_t}) )시키고 가우시안 노이즈를 소량 주입( (\sqrt{1-\alpha_t}) )합니다.
2) 여러 스텝을 한 번에 펼치면
위 식을 (t)회 대입하면 계수가 곱으로 누적됩니다.
[
x_t
= \Big(\prod_{s=1}^t\sqrt{\alpha_s}\Big) x_0
;+;\sum_{s=1}^t \Big(\sqrt{1-\alpha_s}\prod_{j=s+1}^{t}\sqrt{\alpha_j}\Big),\varepsilon_{s-1}.
]
3) “합성 노이즈는 결국 하나의 가우시안”
(\varepsilon)들이 서로 독립이고, (x_t)는 선형 결합이므로 합은 다시 가우시안입니다.
제품 기호를 (\bar\alpha_t\equiv\prod_{s=1}^t\alpha_s)로 두면
[
\boxed{;x_t=\sqrt{\bar\alpha_t},x_0+\sqrt{1-\bar\alpha_t},\varepsilon,\qquad
\varepsilon\sim\mathcal N(0,I);}
]
따라서
[
\boxed{;q(x_t\mid x_0)=\mathcal N!\big(\sqrt{\bar\alpha_t},x_0,\ (1-\bar\alpha_t)I\big);}
]
가 됩니다. (슬라이드 마지막 줄)
왜 분산이 (1-\bar\alpha_t) 인가?
가중치 제곱의 합이 (\sum c_s^2 = 1-\bar\alpha_t)가 되도록 설계된 스케줄이기 때문입니다. 시간이 갈수록 (\bar\alpha_t!\downarrow!0) → 평균 0, 분산 1의 순수 잡음에 수렴합니다.
4) 이 결과가 실무에서 중요한 이유
- 빠른 샘플링(학습 시): 재귀를 (t)번 돌지 않고도, 임의의 (t)에 대해 (x_t)를 한 줄로 직접 샘플할 수 있습니다.
- 학습 타깃 만들기: (x_t)를 만들 때 쓴 (\varepsilon)을 정답으로 삼아 노이즈 예측 MSE((|\varepsilon-\varepsilon_\theta(x_t,t)|^2))를 바로 계산합니다.
- 후분포 폐형식: 이 정규성 덕분에 (q(x_{t-1}!\mid x_t,x_0))도 가우시안(수식 생략)으로 떨어져, ELBO 전개와 DDPM의 KL 손실이 깔끔해집니다.
5) 감각 잡기(수치 예)
예를 들어 (\beta_t\approx10^{-3}) 수준의 작은 스케줄이면
- (t)가 작을 땐 (\bar\alpha_t\approx 1): (x_t)는 거의 (x_0).
- (t)가 커지면 (\bar\alpha_t\to0): (x_t\sim\mathcal N(0,I)), 순수 노이즈.
한 줄 요약
정방향 체인은 “신호 축소 + 노이즈 추가”의 반복이며, 이를 누적해 (x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon) 라는 폐형식으로 쓸 수 있습니다. 이 한 줄이 학습 데이터 생성·손실 정의·이론 전개를 모두 간단하게 만들어 줍니다.

다음 슬라이드는 정방향(노이즈 추가) 과정에서 (x_t)를 (x_0)만으로 바로 뽑는 폐형식을 보여줍니다. 핵심 직관과 결과만 잡아줍니다.
1) 한 스텝 정의(기본 재귀)
[
x_t=\sqrt{\alpha_t},x_{t-1}+\sqrt{1-\alpha_t},\varepsilon_{t-1},\qquad
\alpha_t=1-\beta_t,\ \ \varepsilon_{t-1}\sim\mathcal N(0,I).
]
- 매 스텝마다 이전 신호를 조금 약화( (\sqrt{\alpha_t}) )시키고 가우시안 노이즈를 소량 주입( (\sqrt{1-\alpha_t}) )합니다.
2) 여러 스텝을 한 번에 펼치면
위 식을 (t)회 대입하면 계수가 곱으로 누적됩니다.
[
x_t
= \Big(\prod_{s=1}^t\sqrt{\alpha_s}\Big) x_0
;+;\sum_{s=1}^t \Big(\sqrt{1-\alpha_s}\prod_{j=s+1}^{t}\sqrt{\alpha_j}\Big),\varepsilon_{s-1}.
]
3) “합성 노이즈는 결국 하나의 가우시안”
(\varepsilon)들이 서로 독립이고, (x_t)는 선형 결합이므로 합은 다시 가우시안입니다.
제품 기호를 (\bar\alpha_t\equiv\prod_{s=1}^t\alpha_s)로 두면
[
\boxed{;x_t=\sqrt{\bar\alpha_t},x_0+\sqrt{1-\bar\alpha_t},\varepsilon,\qquad
\varepsilon\sim\mathcal N(0,I);}
]
따라서
[
\boxed{;q(x_t\mid x_0)=\mathcal N!\big(\sqrt{\bar\alpha_t},x_0,\ (1-\bar\alpha_t)I\big);}
]
가 됩니다. (슬라이드 마지막 줄)
왜 분산이 (1-\bar\alpha_t) 인가?
가중치 제곱의 합이 (\sum c_s^2 = 1-\bar\alpha_t)가 되도록 설계된 스케줄이기 때문입니다. 시간이 갈수록 (\bar\alpha_t!\downarrow!0) → 평균 0, 분산 1의 순수 잡음에 수렴합니다.
4) 이 결과가 실무에서 중요한 이유
- 빠른 샘플링(학습 시): 재귀를 (t)번 돌지 않고도, 임의의 (t)에 대해 (x_t)를 한 줄로 직접 샘플할 수 있습니다.
- 학습 타깃 만들기: (x_t)를 만들 때 쓴 (\varepsilon)을 정답으로 삼아 노이즈 예측 MSE((|\varepsilon-\varepsilon_\theta(x_t,t)|^2))를 바로 계산합니다.
- 후분포 폐형식: 이 정규성 덕분에 (q(x_{t-1}!\mid x_t,x_0))도 가우시안(수식 생략)으로 떨어져, ELBO 전개와 DDPM의 KL 손실이 깔끔해집니다.
5) 감각 잡기(수치 예)
예를 들어 (\beta_t\approx10^{-3}) 수준의 작은 스케줄이면
- (t)가 작을 땐 (\bar\alpha_t\approx 1): (x_t)는 거의 (x_0).
- (t)가 커지면 (\bar\alpha_t\to0): (x_t\sim\mathcal N(0,I)), 순수 노이즈.
한 줄 요약
정방향 체인은 “신호 축소 + 노이즈 추가”의 반복이며, 이를 누적해 (x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon) 라는 폐형식으로 쓸 수 있습니다. 이 한 줄이 학습 데이터 생성·손실 정의·이론 전개를 모두 간단하게 만들어 줍니다.

핵심은 “DDPM 학습을 노이즈 예측 MSE 한 줄로 만든다”입니다. 슬라이드의 각 블록을 직관적으로 풀면:
1) 역과정의 모수화
- 목표 분포(정답):
(q(x_{t-1}!\mid x_t,x_0)=\mathcal N(\tilde\mu_t,\tilde\beta_t I)). - 모델 분포(우리가 학습):
(p_\theta(x_{t-1}!\mid x_t)=\mathcal N(\mu_\theta(x_t,t),\sigma_t^2 I)). - 정방향의 폐형식 (x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t},\varepsilon) 을 쓰면
[
\tilde\mu_t=\frac{1}{\sqrt{\alpha_t}}!\left(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}},\varepsilon\right).
]
⇒ 평균은 “현재 (x_t)에서 섞여 있던 노이즈 (\varepsilon)만 빼고 신호 복원”입니다. - 아이디어: (\varepsilon)을 직접 맞히는 네트워크를 쓰자.
(\varepsilon_\theta(x_t,t)\approx \varepsilon \Rightarrow
\mu_\theta(x_t,t)=\frac{1}{\sqrt{\alpha_t}}!\left(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}},\varepsilon_\theta(x_t,t)\right)).
분산은 보통 (\sigma_t^2=\tilde\beta_t)(고정)으로 둡니다.
2) “Simplified objective”가 되는 이유
ELBO의 (\sum_t \mathrm{KL}\big(q(\cdot),|,p_\theta(\cdot)\big))을 위 파라미터화와 고정 분산을 넣어 정리하면 상수항을 빼고 다음과 동치가 됩니다:
[
\mathbb E_{x_0,t,\varepsilon};\big|\varepsilon-\varepsilon_\theta\big(\sqrt{\bar\alpha_t},x_0+\sqrt{1-\bar\alpha_t},\varepsilon,;t\big)\big|_2^2.
]
즉, ‘섞어 넣은 노이즈를 맞혀라’ MSE 한 줄이 곧 최대우도 학습.
3) 학습 루프(알고리즘 1)
- 데이터에서 (x_0) 샘플.
- 타임스텝 (t\sim \mathrm{Uniform}{1,\dots,T}).
- (\varepsilon\sim\mathcal N(0,I)) 뽑고 (x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t},\varepsilon) 생성.
- 손실 ( |\varepsilon-\varepsilon_\theta(x_t,t)|^2 ) 로 (\theta) 경사하강.
→ 네트워크는 “시점 (t)의 잡음 섞인 (x_t)”를 보고 그 안의 노이즈 성분을 추정하도록 학습됩니다.
4) 샘플링(생성) 때 쓰는 업데이트
학습이 끝나면 (x_T!\sim!\mathcal N(0,I))에서 시작해
[
x_{t-1}=\frac{1}{\sqrt{\alpha_t}}!\left(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}},\varepsilon_\theta(x_t,t)\right)
;+;\sigma_t,\zeta,\quad \zeta\sim\mathcal N(0,I)
]
를 (t=T!\to!1)로 반복합니다(마지막 스텝은 (\sigma_t{=}0)).
5) 기억할 포인트
- 왜 노이즈를 예측? 평균 (\tilde\mu_t)가 (\varepsilon)로 깔끔히 표현되기 때문(안정·단순).
- 타임스텝 인코딩(sinusoidal 등)을 넣어 (t) 정보를 주는 것이 필수.
- 변형: (x_0) 예측형, (v)-파라미터화, 학습 분산 등도 존재하지만 기본 뼈대는 동일합니다.
요약: 이 페이지는 “역과정 평균을 노이즈 예측으로 재매개 → MSE 한 줄 손실 → 간단한 학습/샘플링 절차”를 보여줍니다.

다음 슬라이드는 확산 샘플링(역과정) 을 코드 수준으로 정리한 장면입니다.
1) 한 스텝 업데이트 식
[
x_{t-1}=\frac{1}{\sqrt{\alpha_t}}
\Big(x_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}t}};\varepsilon\theta(x_t,t)\Big)
+\sigma_t,\varepsilon,\qquad \varepsilon\sim\mathcal N(0,I)
]
- (\alpha_t=1-\beta_t), (\bar\alpha_t=\prod_{s=1}^t\alpha_s).
- (\varepsilon_\theta(x_t,t)): 네트워크가 현재 샘플 (x_t) 속 노이즈를 추정한 값.
- 첫 괄호: 예측 노이즈만 제거해 “덜 흐린” (x_{t-1})로 복원.
- (+\ \sigma_t\varepsilon): 분산 보정을 위해 적당한 양의 무작위 노이즈를 다시 섞음(정규성 유지).
- DDPM 기본: (\sigma_t=\sqrt{\tilde\beta_t}).
- DDIM(결정론): (\sigma_t=0) → 샘플링 가속/재현성↑.
2) 생성 알고리즘(오른쪽 의사코드)
- 초기화: (x_T\sim\mathcal N(0,I)) (완전 잡음).
- 반복: (t=T\rightarrow1)
- (z\sim\mathcal N(0,I)) (단, (t{=}1)이면 (z{=}0): 마지막엔 더 이상 노이즈 추가 안 함)
- 위 업데이트 식으로 (x_{t-1}) 계산:
[
x_{t-1}=\frac{1}{\sqrt{\alpha_t}}
\Big(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_\theta(x_t,t)\Big)+\sigma_t z
]
- 반환: (x_0) (최종 생성 결과).
3) 직관 포인트
- 매 스텝은 “예측한 잡음 제거 → 분산 만큼 보정 노이즈 추가” 의 두 동작.
- (t)가 줄수록 (\bar\alpha_t\uparrow) → 신호 비율↑, 노이즈 비율↓.
- (t{=}1)에서 (z{=}0)인 이유: 마지막 한 번은 완전 복원을 위해 더 이상 무작위성을 넣지 않음.
4) 실무 팁
- 학습 시 사용한 (\beta_t) 스케줄과 동일한 스케줄로 샘플링해야 분포가 일치합니다.
- 가속이 필요하면 DDIM((\sigma_t{=}0))이나 ODE 샘플러(Euler/Heun 등)로 스텝 수를 줄입니다.
- 조건부 생성(텍스트/클래스)일 때는 (\varepsilon_\theta)에 조건을 넣고, classifier-free guidance로 스케일을 조절합니다.
요약: 식 한 줄과 알고리즘 블록은 “잡음에서 시작해, 단계별로 예측 노이즈를 빼며 (x_0)로 되돌아가는 절차”를 정확히 보여줍니다.

다음 슬라이드는 연속시간 확산(SDE) 관점에서 디퓨전 모델을 설명합니다. 핵심은
“데이터 → (작은 시간 동안) 노이즈를 넣는 정방향 SDE를 정의하고,
그 SDE를 시간을 거꾸로 풀기 위해 **score(∇ log pₜ(x))**를 학습한다.”
1) 정방향 SDE: data → noise
- 확률과정 (x(t))를 ([0,T])에서 정의하고,
[
\mathrm{d}x = f(x,t),\mathrm{d}t + g(t),\mathrm{d}w
]
로 드리프트 (f)(천천히 흐르게)와 확산 (g)(가우시안 잡음 세기)를 준다. (w)는 브라운 운동. - 시간 (t)가 커질수록 분포 (p_t(x))는 점점 잡음화되어 (x(T)\sim p_T\approx\mathcal N(0,I)).
(예)
- VP-SDE: (f(x,t)=-\tfrac12\beta(t)x,\ g(t)=\sqrt{\beta(t)}) — DDPM과 동일한 노이즈 스케줄.
- VE-SDE: (f=0,\ g(t))만 증가 — 고분산에서 시작해 폭발적으로 노이즈를 넣음.
2) 역시간 SDE: noise → data
정방향을 뒤집으면
[
\mathrm{d}x=\big(f(x,t)-g(t)^2,\underbrace{\nabla_x\log p_t(x)}_{\text{score}}\big),\mathrm{d}t+g(t),\mathrm{d}\bar w.
]
- score (s_t(x)=\nabla_x\log p_t(x))는 “그 시점 분포의 능선 쪽으로 끄는 벡터장”.
- 이 항 (-g^2 s_t(x)) 덕분에 밀도가 높은 영역(데이터 매니폴드) 으로 이동하며 노이즈가 지워진다.
- (\bar w)는 역시간 브라운 운동.
⇒ 실제로는 score 네트워크 (s_\theta(x,t)\approx\nabla\log p_t(x)) 를 학습하고, 이를 넣어 역 SDE를 수치적으로 적분하면 잡음에서 샘플이 복원된다(그림의 아래 행).
3) 학습: Denoising Score Matching(DSM)
- (x_0!\sim!p_0), 무작위 (t), 가우시안 (\epsilon)으로 (x_t)를 만들고
[
\mathcal{L};\propto;\mathbb{E}\big[;|s_\theta(x_t,t)+\epsilon/\sigma_t|_2^2;\big]
]
를 최소화(스케줄에 따라 (\sigma_t) 결정). - DDPM의 “노이즈 예측 MSE”는 위 DSM과 동치인 특수한 파라미터화입니다.
4) 샘플러: 두 가지 길
- Reverse SDE(확률적): Euler–Maruyama + (원하면) Predictor–Corrector(Langevin 보정)로 적분. 다양성↑, 스텝多.
- Probability Flow ODE(결정론):
[
\mathrm{d}x=\big(f(x,t)-\tfrac12 g(t)^2 s_\theta(x,t)\big),\mathrm{d}t
]
— 같은 주변분포를 주는 ODE. ODE 솔버로 더 빠르게 생성 가능, 그리고 변수변환(ODE-flow) 로 정확한 로그우도도 적분해 낼 수 있다.
5) 왜 유용한가 (직관)
- SDE는 연속시간 한 줄 공식으로 다양한 디퓨전 변형(DDPM/Score-SDE/VE-VP/서로 다른 스케줄)을 통일한다.
- score만 잘 배우면, “작은 시간만큼 노이즈 제거 → 다시 노이즈 섞기”를 연속적으로 반복하여 잡음→데이터로 되돌릴 수 있다.
- ODE 경로를 쓰면 플로우 모델과도 연결되어 샘플링 가속·우도추정까지 가능.
기억 포인트
- (f,g)가 정방향의 노이즈 주입 방식을 결정.
- (\nabla\log p_t(x))가 역방향의 방향을 결정(학습의 본질).
- 구현은 “시간 임베딩이 들어간 U-Net 계열 네트워크 + 스케줄 + SDE/ODE 샘플러”로 끝난다.

다음 슬라이드는 연속시간 확산(SDE) 관점에서 디퓨전 모델을 설명합니다. 핵심은
“데이터 → (작은 시간 동안) 노이즈를 넣는 정방향 SDE를 정의하고,
그 SDE를 시간을 거꾸로 풀기 위해 **score(∇ log pₜ(x))**를 학습한다.”
1) 정방향 SDE: data → noise
- 확률과정 (x(t))를 ([0,T])에서 정의하고,
[
\mathrm{d}x = f(x,t),\mathrm{d}t + g(t),\mathrm{d}w
]
로 드리프트 (f)(천천히 흐르게)와 확산 (g)(가우시안 잡음 세기)를 준다. (w)는 브라운 운동. - 시간 (t)가 커질수록 분포 (p_t(x))는 점점 잡음화되어 (x(T)\sim p_T\approx\mathcal N(0,I)).
(예)
- VP-SDE: (f(x,t)=-\tfrac12\beta(t)x,\ g(t)=\sqrt{\beta(t)}) — DDPM과 동일한 노이즈 스케줄.
- VE-SDE: (f=0,\ g(t))만 증가 — 고분산에서 시작해 폭발적으로 노이즈를 넣음.
2) 역시간 SDE: noise → data
정방향을 뒤집으면
[
\mathrm{d}x=\big(f(x,t)-g(t)^2,\underbrace{\nabla_x\log p_t(x)}_{\text{score}}\big),\mathrm{d}t+g(t),\mathrm{d}\bar w.
]
- score (s_t(x)=\nabla_x\log p_t(x))는 “그 시점 분포의 능선 쪽으로 끄는 벡터장”.
- 이 항 (-g^2 s_t(x)) 덕분에 밀도가 높은 영역(데이터 매니폴드) 으로 이동하며 노이즈가 지워진다.
- (\bar w)는 역시간 브라운 운동.
⇒ 실제로는 score 네트워크 (s_\theta(x,t)\approx\nabla\log p_t(x)) 를 학습하고, 이를 넣어 역 SDE를 수치적으로 적분하면 잡음에서 샘플이 복원된다(그림의 아래 행).
3) 학습: Denoising Score Matching(DSM)
- (x_0!\sim!p_0), 무작위 (t), 가우시안 (\epsilon)으로 (x_t)를 만들고
[
\mathcal{L};\propto;\mathbb{E}\big[;|s_\theta(x_t,t)+\epsilon/\sigma_t|_2^2;\big]
]
를 최소화(스케줄에 따라 (\sigma_t) 결정). - DDPM의 “노이즈 예측 MSE”는 위 DSM과 동치인 특수한 파라미터화입니다.
4) 샘플러: 두 가지 길
- Reverse SDE(확률적): Euler–Maruyama + (원하면) Predictor–Corrector(Langevin 보정)로 적분. 다양성↑, 스텝多.
- Probability Flow ODE(결정론):
[
\mathrm{d}x=\big(f(x,t)-\tfrac12 g(t)^2 s_\theta(x,t)\big),\mathrm{d}t
]
— 같은 주변분포를 주는 ODE. ODE 솔버로 더 빠르게 생성 가능, 그리고 변수변환(ODE-flow) 로 정확한 로그우도도 적분해 낼 수 있다.
5) 왜 유용한가 (직관)
- SDE는 연속시간 한 줄 공식으로 다양한 디퓨전 변형(DDPM/Score-SDE/VE-VP/서로 다른 스케줄)을 통일한다.
- score만 잘 배우면, “작은 시간만큼 노이즈 제거 → 다시 노이즈 섞기”를 연속적으로 반복하여 잡음→데이터로 되돌릴 수 있다.
- ODE 경로를 쓰면 플로우 모델과도 연결되어 샘플링 가속·우도추정까지 가능.
기억 포인트
- (f,g)가 정방향의 노이즈 주입 방식을 결정.
- (\nabla\log p_t(x))가 역방향의 방향을 결정(학습의 본질).
- 구현은 “시간 임베딩이 들어간 U-Net 계열 네트워크 + 스케줄 + SDE/ODE 샘플러”로 끝난다.

그림은 SDE(연속시간 확산) 기반 음성 변환 파이프라인을 한 장에 합친 것입니다. 오른쪽은 ‘정방향 SDE(학습 타깃 생성)’, 가운데 초록 상자는 ‘역방향 SDE(디코더 = 생성기)’, 좌측은 ‘재구성 손실’입니다.
요소별 해석
- Source Voice (X_0) → 오른쪽 파란 박스로 들어가 정방향 SDE를 적분해 (X_t)를 만듭니다.
- 식 상단의 (-\nabla\log p_{t|0}(X_t|X_0)) 는 정방향 SDE가 유도하는 정답 스코어(분포의 기울기)입니다. 이 값은 가우시안 섭동의 폐형식으로 계산 가능합니다.
- Average Voice Encoder (\varphi(X_0)): 화자 고유색을 지우고 콘텐츠(발음/프로소디) 중심의 표상을 만듭니다. 정방향/역방향 SDE의 드리프트에 참조로 들어가 화자 분리를 돕는 조건 역할을 합니다.
- Decoder = ML SDE Solver(초록 박스): 잡음에서 시작해 역시간 SDE를 적분하며 변환 음성 (\hat X_0)을 생성합니다.
- 각 스텝에서 U-Net이 스코어 네트워크 (s_\theta(\tilde X_t,\ \hat X,\ g_t(Y),\ t))를 추정합니다.
- (\tilde X_t): 현재 스텝의 노이즈가 섞인 스펙트로그램
- (\hat X): 참조 스펙트로그램(빨간 X=stop-grad, 학습 신호가 역으로 흐르지 않도록)
- (g_t(Y)): 타깃 화자 (Y) 의 임베딩(시간 의존적으로 주입)
- (t): 시점 임베딩
- 상단 식(초록 박스 내부)은 전형적인 역 SDE 한 스텝:
[
dX_t=\big(\underbrace{\tfrac12(,X_t-\hat X_0,)}{\text{드리프트/가이던스}}
-\underbrace{s\theta(\cdot)}_{\text{학습된 스코어}}\big)\beta(t),dt
+\sqrt{\beta(t)},d\bar W_t
]
즉, 스코어로 노이즈를 제거하면서, 필요하면 (\hat X_0) 혹은 (\varphi(X_0)) 방향으로 가이딩합니다.
- 각 스텝에서 U-Net이 스코어 네트워크 (s_\theta(\tilde X_t,\ \hat X,\ g_t(Y),\ t))를 추정합니다.
- Loss들
- Score MSE(오른쪽):
(|,s_\theta(X_t,t,\cdot) - \underbrace{\nabla\log p_{t|0}(X_t|X_0)}_{\text{정답 스코어}},|_2^2)
→ Denoising Score Matching으로 스코어를 학습합니다(DDPM의 노이즈-MSE와 동치). - Waveform/Spectrogram MSE(왼쪽):
생성 결과 (\hat X_0)와 GT (\bar X)(타깃 화자 병렬 레퍼런스가 있는 경우) 사이의 재구성 손실. 병렬이 없으면 사이클/ASR-content/STFT 손실 등으로 대체 가능.
- stop-grad 표시는 참조 신호를 조건으로만 사용하고, 그 자체로 네트워크를 “복사” 방향으로 끌고 가지 않게 하려는 설계입니다.
- Score MSE(오른쪽):
학습·추론 요약
- 학습: (X_0 \rightarrow) 정방향 SDE로 (X_t)와 정답 스코어 생성 → U-Net의 (s_\theta)를 MSE로 맞춤 → 역 SDE로 (\hat X_0) 생성 → (있다면) (\hat X_0) vs GT (\bar X) 재구성 손실 추가.
- 추론: 소스 (X_0), 타깃 화자 (Y)만 주고 초록 박스의 역 SDE 솔버만 실행 → (\hat X_0) 출력(변환 음성).
왜 이런 구조인가?
- 정방향 SDE가 슈퍼비전(정답 스코어) 을 제공해 안정적으로 학습되고,
- (\varphi(X_0))와 (g_t(Y))가 콘텐츠/화자 분리를 강화,
- 역 SDE 솔버가 노이즈→데이터로 되돌리며 타깃 화자 스타일을 주입합니다.
요약: 이 Figure는 “정방향 SDE로 목표 스코어 생성 → U-Net이 스코어 학습 → 역 SDE로 타깃 화자 조건 하에 합성”이라는 조건부 SDE 음성 변환의 전 과정을 보여줍니다.

아래 그림은 CycleDiffusion—즉, 사이클 일관성(cycle-consistency)을 갖춘 확산 변환—의 개념도입니다. 색만 다를 뿐 두 도메인(A=빨강, B=파랑; 예: 두 화자)의 양방향 변환과 사이클 손실을 한 번에 보여줍니다.
도식 읽는 법
- 왼쪽 사운드 → 중앙: 입력 (x^A) 또는 (x^B)를 정방향 확산(노이즈 주입)으로 (x_T)까지 보냅니다.
- 중앙 → 오른쪽: 목표 도메인 조건(스타일/화자)으로 역방향 확산을 돌려 변환 결과 (\hat x^B) 혹은 (\hat x^A)를 생성합니다.
- 점선 루프(위·아래 빨강/파랑 경로): 생성된 결과를 다시 정방향 → 역방향으로 원 도메인으로 되돌려 (\tilde x^A, \tilde x^B)를 만든 뒤, 사이클 일관성 손실 ( \mathcal L_{\text{cyc}} = d(\tilde x^A, x^A)+d(\tilde x^B, x^B))을 걸어 “내용 보존 + 가역성”을 강제합니다.
- 중앙의 이중 점선: 두 방향이 같은 시간/노이즈 시드(동일 (t), 동일 (\epsilon))를 공유해, 라틴트 (x_T) 수준에서 정렬되도록 한다는 의미입니다.
A→B (위쪽 패널)
- (x^A \xrightarrow[]{\text{diffuse}} x_T^{x})
- (x_T^{x} \xrightarrow[\text{cond}=B]{\text{reverse}} \hat x^{B})
- (\hat x^{B} \xrightarrow[]{\text{diffuse}} x_T^{\hat x}\xrightarrow[\text{cond}=A]{\text{reverse}} \tilde x^{A})
- 사이클 손실: (d(\tilde x^{A}, x^{A})) (L1/STFT/Content loss 등)
B→A (아래 패널)
- 동일 절차를 반대 방향으로 수행해 (d(\tilde x^{B}, x^{B}))를 추가.
왜 필요한가
- 비병렬 데이터에서도 훈련 가능: 타깃 레퍼런스가 없어도 사이클 제약만으로 내용은 보존, 스타일만 교체.
- 콘텐츠 보존/왜곡 억제: 변환 후 다시 되돌아가 원본과 일치하도록 학습 → 의미·발음 유지.
- 모드 붕괴/과도한 평활화 방지: 양방향 제약이 역과정의 안정성을 높임.
- 라틴트 공유: 같은 (x_T)를 중심으로 두 도메인의 경로를 정렬해 변환 일관성을 강화.
실무 포인트
- 손실 구성: (\mathcal L = \mathcal L_{\text{score/MSE}} + \lambda_{\text{cyc}}\mathcal L_{\text{cyc}} + \lambda_{\text{id}}\mathcal L_{\text{id}}) (동일 도메인 조건 시 (\hat x \approx x)).
- 샘플러: 훈련 중 사이클 경로만 사용하며, 추론은 A→B 한 번의 역과정만 수행.
- 시드 공유: 사이클의 두 번 확산에서 동일 시드/스케줄을 사용하는 것이 효과적.
요약: 그림은 정방향(노이즈 추가) → 역방향(노이즈 제거, 조건부 스타일 주입) 변환을 두 방향으로 수행하고, 다시 원 도메인으로 복귀시켜 차이를 최소화하는 CycleDiffusion 구조를 직관적으로 보여줍니다.

Deep Generative Models — 핵심 요약(강의 정리)
1) 생성모델 개요
- 목표: 데이터 분포 (p_{\text{data}})를 근사하는 (p_{\text{model}})을 학습. 방법은 명시적 확률(우도 최대화) 또는 암시적 분포(샘플만 생성) 로 구분.
2) GAN (Generative Adversarial Networks)
- 게임 관점: 생성기 (G) vs 판별기 (D)의 미니맥스
(\min_G \max_D \mathbb{E}{x\sim p{\text{real}}}!\log D(x)+\mathbb{E}_{z}!\log(1-D(G(z)))). - 최적 (D^*): (D^*(x)=\frac{p(x)}{p(x)+q(x)}). 이때 (G)는 (p)와 (q)의 JS-divergence를 최소화.
- 학습 루프: (D)를 (k)번 갱신 후 (G) 갱신(미니배치/경사상승·하강).
- 응용/변형: 조건부·비지도 이미지/음성 변환, CycleGAN(순환일치 손실) 등.
- 핵심 손실(CycleGAN): 양방향 GAN 손실 + cycle consistency (|G_{B!\to!A}(G_{A!\to!B}(a))-a|_1) (반대 방향도 동일).
- 장/단점
- 장: 고품질, 명시적 정렬 불필요, 조건부 생성 용이.
- 단: 불안정/모드붕괴 가능 → 손실·아키텍처 안정화가 필수.
3) VAE (Variational Autoencoders)
- 확률적 오토인코더: 인코더 (q_\phi(z|x)), 디코더 (p_\theta(x|z)), 사전 (p(z)).
- 학습(ELBO):
[
\mathbb{E}{q\phi}![\log p_\theta(x|z)]-\mathrm{KL}!\left(q_\phi(z|x),|,p(z)\right)
]
= 복원항 − 잠재공간 정규화. - 응용/변형: 음성 변환 VAE, VQ-VAE, VAE-GAN/ACVAE, CycleVAE 등(분리표현·다대다 변환).
- 장/단점
- 장: 우도 기반으로 안정적, 잠재공간 추론 가능.
- 단: 샘플이 상대적으로 부드럽거나 과평활.
4) Flow-based Models (Normalizing Flows)
- 가역 변환 (f) 로 (x \leftrightarrow z)를 연결하고 정확한 우도를 계산:
(\log p(x)=\log p(z)+\sum_{i=1}^K\log\left|\det\frac{\partial h_i}{\partial h_{i-1}}\right|). - 구성 블록: ActNorm, Invertible 1×1 Conv, Affine Coupling(Jacobian이 삼각형 → 로그결정자 빠름).
- 특징: 정확한 likelihood, 양방향 변환/해석 용이 vs 가역성 제약으로 표현력·메모리 부담.
5) Diffusion Probabilistic Models
- 정방향(확산): 마르코프 잡음 주입
(q(x_t|x_{t-1})=\mathcal{N}(\sqrt{1-\beta_t},x_{t-1},\beta_t I)),
(x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t},\varepsilon). - 역방향(복원): (p_\theta(x_{t-1}|x_t)=\mathcal{N}(\mu_\theta(x_t,t),\sigma_t^2 I))를 근사 학습. 단순화 목적:
(\mathbb{E}|\varepsilon-\varepsilon_\theta(x_t,t)|2^2). 샘플링은
(x{t-1}=\frac{1}{\alpha_t}x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_\theta+\sigma_t \zeta). - SDE/Score-based 연결: 연속시간 SDE와 (\nabla_x\log p_t(x)) 추정으로 동일 계열화.
- 응용: 음성 변환, Cycle-consistent Diffusion 등.
- 특징: 고품질·안정적, 샘플링 느림(스텝 다수) → 가속 기법 필요.
6) 무엇을 언제 쓰나 (실전 선택 가이드)
- 고품질 시각/음성 변환 & 조건부 생성: CycleGAN/Cond-GAN (라벨/도메인 지도 명확, 실시간성 필요)
- 잠재공간 조작·표현학습: VAE / VQ-VAE (도메인 전이·분리표현, 안정 학습)
- 정확한 우도/양방향 매핑: Flow(Glow/RealNVP) (압축·비정상 탐지 등 확률적 점수 필요)
- 최고 화질/다양성(시간 여유): Diffusion / Score-SDE (고품질 합성, 최근 표준)
7) 구현 체크리스트
- 데이터/조건: 도메인 라벨(클래스/스피커/스타일), 페어링 여부(슈퍼/언슈퍼) 명시.
- 목적함수:
- GAN류: 적대·사이클·정규화(LS/WGAN-GP 등).
- VAE류: ELBO(복원+KL), 필요시 VQ/AC/GAN 결합.
- Flow: 우도 최대화(로그결정자 합).
- Diffusion: (\varepsilon)-예측 MSE, 베타 스케줄/스텝수 설정.
- 평가: 샘플 품질(FID), 우도(NLL/이론치: Flow), ASR/VC면 MOS·WER 등 태스크 지표.
- 생성/서빙: Diffusion은 스텝 단축/가속 고려, GAN은 안정화·모드커버리지 모니터링.
8) 한 줄 정리
- GAN: 게임으로 현실성을 밀어 올리고,
- VAE: 우도 기반 안정 학습과 잠재공간,
- Flow: 정확한 확률과 가역 변환,
- Diffusion/Score-SDE: 잡음 제거 역과정으로 최고 화질.
과제의 **제약(데이터 정렬/조건, 우도 필요성, 지연/품질 목표)**에 맞춰 조합·선택하면 됩니다.
Medical References
- None
DOI: file_00000000629c61faa403152c12b5cbf9
'인공지능 > 공부' 카테고리의 다른 글
| 딥러닝 응용 8- 정리1 (0) | 2025.10.12 |
|---|---|
| 딥러닝 응용 7 - Large Language Models (0) | 2025.10.11 |
| 딥러닝 응용 5 - Sequence to Sequence Model (0) | 2025.10.10 |
| 딥러닝 응용 4 - Architecture of DNNs (0) | 2025.10.10 |
| 딥러닝 응용 3 - Fundamentals 2 (1) | 2025.10.03 |