Chapter 4. 확산 모델의 발전
이 장에서는 확산 모델의 발전 과정을 세 가지 측면으로 소개함:
- 조건부 생성을 위한 확산 모델
- 전체 확산 경로가 아닌 부분공간만을 확산하는 모델
- 변형 상황(variation)을 고려한 확산 모델
4.1 조건부 생성에서의 점수
조건부 생성은 실제로 확산 모델을 사용할 때 많이 쓰이는 방식이다.
기본적으로 확산 모델은 조건을 입력으로 추가할 수 있다.
예: $x \sim p(x)$ 대신, $x \sim p(x|y)$로 바꾸어, 조건 $y$에 따라 데이터를 생성.
- 예를 들어 $x$는 이미지, $y$는 텍스트 설명이라면,
조건부 생성은 텍스트에 맞는 이미지를 생성하는 것임. - 이러한 조건부 생성에서는 점수 기반 학습이 핵심인데,
조건이 없는 경우에는 점수 함수가 $\nabla_x \log p(x)$
조건이 있는 경우에는 $\nabla_x \log p(x|y)$
조건부 점수를 얻는 방법은 다음과 같은 수식 변환으로 가능함:
베이즈 정리를 이용한 수식 전개:
$$p(x|y) = \frac{p(y|x) p(x)}{p(y)}$$
양변에 로그를 취하면:
$$\log p(x|y) = \log p(y|x) + \log p(x) - \log p(y)$$
따라서 양변에 $\nabla_x$를 취하면:
$$\nabla_x \log p(x|y) = \nabla_x \log p(y|x) + \nabla_x \log p(x)$$
이로부터 조건부 점수는 두 개의 점수 함수의 합으로 나타낼 수 있음:
- $\nabla_x \log p(x|y)$ = 분류 모델 $p(y|x)$의 점수 + 무조건 분포 $p(x)$의 점수
4.2 분류기 가이던스 (Classifier Guidance)
- 분류기 가이던스란?
분류 모델 $p(y|x)$를 학습시킨 뒤, 이 분류기의 점수를 이용하여 조건부 점수를 근사하는 방식이다. - 분류기 가이던스에서의 조건부 점수는 다음과 같이 표현됨:
$$\nabla_x \log p_\gamma(x|y) = \gamma \cdot \nabla_x \log p(y|x) + \nabla_x \log p(x) \tag{4.1}$$
여기서:
- $\gamma > 1$ 이면 조건을 더욱 강조
- $\gamma = 1$ 이면 일반적인 조건부 분포
- $\gamma < 1$ 이면 조건의 영향 약화
분류기 가이던스의 단점 두 가지:
- 라벨이 필요한 점수 학습
→ $\nabla_x \log p(y|x)$ 학습을 위해 레이블이 필요하여,
→ 비지도 학습을 할 수 없음 - 오류 전파 가능성
→ 분류기가 학습한 조건 관계가 정확하지 않으면,
→ 분류기에서 비롯된 오류가 샘플링 결과에 영향을 줌
4.3 분류기를 사용하지 않는 가이던스 (Classifier-Free Guidance)
이 방법은 위 단점을 극복하고자 제안된 방식으로,
분류기를 사용하지 않고도 조건부 점수를 얻는 방식이다.
핵심 아이디어:
- 조건부 점수는 다음처럼 직접 계산 가능:
$$\nabla_x \log p_\gamma(x|y) = \gamma \cdot \nabla_x \log p(x|y) + (1 - \gamma) \cdot \nabla_x \log p(x)$$
이때 $\gamma$는 하이퍼파라미터로 조절 가능하며,
$\gamma = 0$은 조건 없이, $\gamma = 1$은 조건만 반영한 점수.
구현 방법
- 입력 $(x, y)$를 주면 $\nabla_x \log p(x|y)$ 학습
- 입력 $x$만 주면 $\nabla_x \log p(x)$ 학습
(조건 없는 입력은 $y = \varnothing$로 취급) - 입력이 조건이 없음을 나타내는 경우는 다음과 같이 표현:
- 임베딩 벡터 $\phi$를 제로 벡터 $\mathbf{0}$로 사용
- 또는 드롭아웃 등으로 조건을 제거
- 그림에서는 중심이 다른 세 원을 조건에 따라 이동시키는 모습 표현
- 조건이 달라짐에 따라 생성되는 샘플의 분포도 이동
베이즈 정리와 결합한 수식 대입:
$$\log p(y|x) = \log p(x|y) + \log p(y) - \log p(x) \Rightarrow \nabla_x \log p(y|x) = \nabla_x \log p(x|y) - \nabla_x \log p(x)$$
이를 식 (4.1)에 대입하면:
$$\nabla_x \log p_\gamma(x|y) = \gamma (\nabla_x \log p(x|y) - \nabla_x \log p(x)) + \nabla_x \log p(x) = \gamma \nabla_x \log p(x|y) + (1 - \gamma) \nabla_x \log p(x)$$
→ 이로부터 확실하게 알 수 있음:
조건부 점수는 조건 있는 점수와 조건 없는 점수의 선형 결합임.
정리
- 분류기 가이던스: 분류기 $p(y|x)$ 학습 필요, 레이블 필요
- 분류기 없는 가이던스: $p(x|y)$와 $p(x)$를 함께 학습하여 조건별 점수를 얻음
- 하이퍼파라미터 γ\gamma를 통해 조건 반영 정도 조절 가능
- 조건을 제로벡터 또는 드롭아웃으로 표현하여 조건 없는 경우를 학습에 포함시킬 수 있음
- 분류기 없는 가이던스는 조건 점수와 조건 없는 점수의 선형 결합으로 유연한 제어 가능
4.4 부분공간 확산 모델
기존 확산 모델은 입력 데이터와 같은 공간에서 확산되어 완전히 잡음이 되도록 구성됨. 이때 데이터 차원이 변하지 않으며, 입력 차원 수와 동일한 차원 수를 유지.
하지만 이 과정에서 다음과 같은 3가지 주요 문제가 존재함:
문제점 1: 조건부 점수 함수 학습의 어려움
- 조건부 확산 모델에서는 각 조건 $y$에 대해 $\nabla_x \log p(x|y)$를 학습해야 함.
- 고차원 데이터의 경우, 각 조건마다 다른 방향성과 범위를 가지므로 효율적인 학습이 어려움
- 또한 샘플 수가 적은 조건에 대해 학습된 점수는 부정확할 수 있으며, 생성 품질 저하를 초래할 수 있음.
문제점 2: 계산량의 과다
- 고차원 공간에서의 점수 계산은 매우 많은 계산량을 요구함.
- 특히, 각 시간 단계마다 벡터 필드 $\nabla_x \log p(x)$ 를 계산해야 하는데, 이 연산은 차원 수에 비례함.
- CNN 기반 모델을 사용하더라도 처리량 한계 때문에 연산 병목이 발생.
문제점 3: 잠재 공간 추상 표현 학습 불가
- 차원이 변하지 않으면 잠재 공간(latent space) 으로의 추상화가 어려움.
- 기존의 VAE나 GAN은 입력을 압축하여 요약 표현을 얻을 수 있었으나, 기존 확산 모델은 모든 상세 정보를 유지함.
- 따라서 요약된 표현 학습이 불가능, 일반적인 representation learning에 불리함.
4.4.1 부분공간 확산 모델의 학습
1. 잠재공간으로의 매핑
- 입력공간을 잠재공간(latent space) 으로 매핑하여 확산을 수행
- Autoencoder나 U-Net 기반 인코더를 통해 입력공간을 잠재공간으로 압축
예:
Stable Diffusion 모델은 이 방식을 사용하여 계산량과 메모리 사용량을 대폭 절감함.
2. 부분공간 확산 모델 정의
- 일부 차원만을 선택하여 확산을 수행하는 모델
- 원래의 전체 공간 $\mathbb{R}^n$이 아닌 부분공간 $\mathbb{R}^m$ 에서만 확산 진행 ($m < n$)
- 이 방법은 잡음이 퍼지는 영역을 제한함으로써 효율적이고 의미 있는 모델링 가능
- 특히 의미 있는 feature 차원에만 잡음을 추가하여 더 나은 생성 가능
수식적으로 정의된 부분공간 확산 과정
확률 미분방정식(SDE)
$dx = f(x, t) dt + G(x, t) dw$
- 여기서 $x$: 데이터, $t$: 시간, $f$: drift term, $G$: 확산계수, $w$: 위너(브라운 운동) 과정
시간 구간 $[0, T]$을 $K+1$개 구간으로 나눔:
$$(t_0, t_1, ..., t_K), \quad t_0 = 0, \quad t_{K+1} = T$$
부분공간 정의 방법
- $U_k \in \mathbb{R}^{n \times m}$: 각 시점 $t_k$에서의 부분공간을 정의하는 직교 행렬
- 이때 $U_k^\top x$는 원래 데이터 $x$를 부분공간으로 사영한 것
- 나머지 $I - U_k U_k^\top$는 제거된 공간
추세 계수 정의
$$f(x, t) = f_t(x) + \sum_{k=1}^K \delta(t - t_k) (U_k U_k^\top - I_d)x$$
- $\delta(t - t_k)$: 디랙 델타함수로 시간 $t_k$에서 변화가 있음을 의미
- 사영 연산으로 일부 차원만 유지됨
부분공간에서의 데이터 표현
- $x_k = U_k^\top x$: 시간 $t_k$에서의 부분공간 데이터
이제 확산방정식은 부분공간의 데이터 $x_k$에 대해서만 적용되며, 다음과 같이 단순화됨:
$$dx_1 = f(t)x_1 dt + g(t) dw_1$$
- $w_1 = U_1^\top dw$: 부분공간에서의 노이즈
- $g(t)$: 시간에 따른 확산 스케일 함수
따라서 전체 공간의 확산이 아닌, 부분 공간만을 대상으로 점수 학습 가능
4.4.2 부분공간 확산 모델의 표본추출
- 시간 간격 $(t_k, t_{k+1})$마다 역방향 점수 함수 $s_\theta(x_k, t)$를 통해 역방향 샘플링
- 다만, $t_k$ 시점에서 부분공간이 갑자기 사라질 수 없으므로 경계 조건을 설정함
- $x$의 전체 공간 중 일부 $x_1$만 특정 시점에서 가우시안 샘플링 후 멈춤
- 나머지 차원은 계속 확산됨
분산 정의
$$\Sigma_{k|k-1}(t_k) = \frac{\alpha(t_k)^2}{n_{k-1} - n_k} \mathbb{E}[\|x^{\perp}_{k|k-1}(0)\|^2] + \sigma(t_k)^2$$
- $\alpha(t), \sigma(t)$: 확산 커널의 스케일 파라미터
- 첫 번째 항: 데이터로부터 계산된 샘플 분산
- 두 번째 항: 커널의 기본 확산분산
의미
- 위와 같은 방법을 통해, 부분공간만을 샘플링 대상으로 삼는 근사 생성 가능
- 공간 전체가 아닌 특정 feature 공간만 학습해도 충분히 좋은 품질을 얻을 수 있음
- 결과적으로 표현 학습, 메모리 절감, 잡음 효율성 증가 등의 효과
'Theory > Computer Vision' 카테고리의 다른 글
[Diffusion 스터디] 확산 모델의 수학 4.5 ~ 5.7 정리(CH4, CH5 완료) (1) | 2025.07.07 |
---|---|
[Diffusion 스터디] 확산 모델의 수학 3.6 ~ 3.7 정리(CH3 완료) (0) | 2025.06.23 |
[Diffusion 스터디] 확산 모델의 수학 3 ~ 3.5 정리 (2) | 2025.06.19 |
[Diffusion 스터디] 확산 모델의 수학 2.4.0 ~ 2.4.4 정리(CH2 완료) (0) | 2025.06.10 |
[Diffusion 스터디] 확산 모델의 수학 2.3.2 ~ 2.3.4 정리 (1) | 2025.06.05 |