인공지능/공부

딥러닝 응용 6 - Deep Generative Models

이게될까 2025. 10. 11. 02:41
728x90
728x90

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

GAN

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

Gan Learning Algorithm

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

Cycle GAN

더보기

그 그림은 CycleGAN의 훈련 흐름을 한 화면에 모아 놓은 겁니다. 두 도메인 (A)↔(B) 사이를 오갈 두 개의 생성기두 개의 판별기, 그리고 사이클 일관성 손실이 어떻게 연결되는지 보여줍니다.

구성요소와 흐름

  1. 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)))]).
  2. 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]). 반대 방향도 동일.
  3. 대칭 경로 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)**을 한 번에 학습합니다.

evidence Lower Bound

더보기

좋아요. 슬라이드의 전개를 한 줄씩 풀어보겠습니다.

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

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

 

Flow-based Generative Models

더보기

간단히 말해 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)

학습 뒤엔 단순합니다.

  1. (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로 학습한다는 메시지를 전달합니다.

 

더보기

다음 슬라이드는 확산(디퓨전) 생성모델을 한 장에 압축해 놓은 것입니다. 핵심은 **“점점 노이즈를 섞어 망가뜨렸다가, 학습한 역과정으로 되돌리는 모델”**입니다.

직관 먼저

  1. 정방향(망가뜨리기): 깨끗한 데이터 (x_0)에 작은 가우시안 노이즈를 (T)번에 걸쳐 조금씩 더합니다.
    → (x_1, x_2, \dots, x_T)가 되고, 마지막엔 (x_T \approx \mathcal N(0,I)) (완전한 잡음).
  2. 역방향(복원하기): 이제 잡음에서 시작해(샘플링) 한 스텝씩 노이즈를 제거하며 (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))를 예측합니다.

학습은 이렇게(한 줄 루프)

  1. 데이터 (x_0)와 랜덤 스텝 (t)를 뽑고,
  2. 폐형식으로 바로 노이즈를 섞어 (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))),
  3. 네트워크가 (\varepsilon_\theta(x_t,t)) (또는 (x_0), (v) 등)을 예측,
  4. MSE 손실 (|\varepsilon-\varepsilon_\theta|_2^2) 로 학습.
    → 요컨대 “섞은 노이즈를 맞히게” 하면, 역방향 분포도 학습됩니다.

샘플링(생성)은 이렇게

  1. (x_T\sim \mathcal N(0,I))에서 시작,
  2. 각 스텝에
    [
    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))으로 한 단계씩 복원,
  3. (x_0)이 최종 생성물.
    슬라이드의 표기 (x_T\equiv z)는 완전 잡음 상태가 잠재변수처럼 쓰인다는 뜻입니다.

왜 잘 되나

  • 작은 스텝의 가우시안 복원은 가우시안 조건부로 근사가 잘 맞고(안정),
  • 복원 네트워크는 각 스텝에서 로컬한 노이즈만 제거하면 되므로 학습이 쉽습니다.
  • 결과적으로 고품질·다양한 샘플을 얻을 수 있지만, 스텝 수가 많아 느린 단점이 있어 DDIM/샘플러 가속, 지침(클래스/텍스트)-프리 가이던스 등을 함께 씁니다.

한 줄 정리

확산모델은 데이터→잡음(정방향) 을 수식으로 정의하고, 잡음→데이터(역방향) 을 신경망이 배우게 해 잡음에서 샘플을 되살려내는 생성기입니다.

더보기

다 보여준 식은 확산모델의 로그가능도 (\log p_\theta(x_0)) 를 직접 최대화하기 어렵기 때문에,
앞방향 노이즈 과정 (q(x_{1:T}\mid x_0))변분후분포로 삼아 ELBO(하한)를 최대화하는 과정을 전개한 것입니다.


큰 흐름(수식 최소화)

  1. 목표
    생성모델은
    [
    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’ 첫줄)
  2. 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) 가 됩니다. (슬라이드 중간 전개)
  3. 항목별로 정리
    곱을 로그 합으로 풀면
    [
    \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]
    ]
    꼴이 됩니다. (슬라이드 식의 분해)
  4. 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)

  1. 데이터에서 (x_0) 샘플.
  2. 타임스텝 (t\sim \mathrm{Uniform}{1,\dots,T}).
  3. (\varepsilon\sim\mathcal N(0,I)) 뽑고 (x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t},\varepsilon) 생성.
  4. 손실 ( |\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) 생성 알고리즘(오른쪽 의사코드)

  1. 초기화: (x_T\sim\mathcal N(0,I)) (완전 잡음).
  2. 반복: (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
      ]
  3. 반환: (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)로 되돌아가는 절차”를 정확히 보여줍니다.

Score-Based Generative Modeling with SDEs

더보기

다음 슬라이드는 연속시간 확산(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)) 방향으로 가이딩합니다.
  • Loss들
    1. 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와 동치).
    2. Waveform/Spectrogram MSE(왼쪽):
      생성 결과 (\hat X_0)와 GT (\bar X)(타깃 화자 병렬 레퍼런스가 있는 경우) 사이의 재구성 손실. 병렬이 없으면 사이클/ASR-content/STFT 손실 등으로 대체 가능.
    • stop-grad 표시는 참조 신호를 조건으로만 사용하고, 그 자체로 네트워크를 “복사” 방향으로 끌고 가지 않게 하려는 설계입니다.

학습·추론 요약

  • 학습: (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 (위쪽 패널)

  1. (x^A \xrightarrow[]{\text{diffuse}} x_T^{x})
  2. (x_T^{x} \xrightarrow[\text{cond}=B]{\text{reverse}} \hat x^{B})
  3. (\hat x^{B} \xrightarrow[]{\text{diffuse}} x_T^{\hat x}\xrightarrow[\text{cond}=A]{\text{reverse}} \tilde x^{A})
  4. 사이클 손실: (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

  1. None
    DOI: file_00000000629c61faa403152c12b5cbf9
728x90