Neural Network를 활용한 Reverse Process 학습을 제안하여 실용화.
에 있다
ddpm 논문에서는 diffusion model을 diffusion Probabilistic Model이라고 지칭한다. '확률적' 관점을 더 강조한 느낌.
이미지에 점진적으로 노이즈를 추가하고, 노이즈를 다시 없애면서 원본 이미지를 복원
목표:
고품질 이미지 생성
이미지 복원 등
모델 개요
Forward Process
q(x1:T∣x0):=∏t=1Tq(xt∣xt−1)
노이즈를 점진적으로 추가하는 과정
전체 마르코프 과정의 결합 확률 분포
각 시간 단계에서 노이즈를 추가하는 과정은 바로 직전 단계에만 의존한다.
각 시간 단계에서 상태가 xt →xt+1로 변할 확률을 모두 고려한 결합 확률 분포
마르코프 과정:
현재 상태가 오로지 직전 상태에만 의존하는 확률 과정.
즉, 현재 xt는 바로 이전 상태 xt−1만 참조하고 그 이전의 데이터와는 직접적인 관련이 없음.
그런데 왜 모든 시점의 확률을 곱할까?
수식은 마르코프 과정 전체에 대한 결합 확률 분포를 표현하기 때문임.각 단계의 확률을 개별적으로 정의x, 과정 전체에서 발생할 확률을 계산하려는 거다. 요소 설명
- q(x1:T∣x0): 정방향 과정에서 원본 데이터 x0가 주어졌을 때, x1, x2, ..., xT까지 점진적으로 노이즈를 추가하는 전체 과정의 확률
- ∏t=1Tq(xt∣xt−1): 각 단계에서 xt−1에서xt로 변할 확률을 전부 곱한 것
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)
t-1 단계에서 t 단계로 넘어갈 때 노이즈를 점진적으로 추가. 각 수식은 픽셀 하나의 값에 대해 적용된다. 즉, xt와 xt−1의 각 픽셀 값은 서로 같은 위치에서 매칭되고, 같은 위치의 xt−1 픽셀 값에 직접적인 영향(Markov Chain의 원리)을 받아 xt의 값이 결정된다.
수식 설명
q(xt∣xt−1): 이전 단계 xt−1가 주어졌을 때, xt가 어떻게 분포하는지를 나타내는 조건부 확률 분포
N(xt;1−βtxt−1,βtI): xt는 평균이 1−βtxt−1, 분산이 βtI인 가우시안 분포에서 샘플링된 데이터
= xt의 모든 픽셀 값이 각 xt−1를 중심으로 하는 가우시안 분포에서 샘플링된 값
xt: t 시점의 노이즈가 추가된 데이터
xt−1: t−1 시점의 노이즈가 추가된 데이터
βt: 각 시점에서 노이즈 크기를 조절하는 파라미터 (Variance Schedule)
N(μ,σ2): 평균이 μ, 분산이 σ2인 가우시안 분포(정규분포)
I: 단위 행렬 (각 데이터 차원에서 독립적으로 노이즈가 추가됨을 의미)
Reverse Process
노이즈를 제거하면서 이미지를 복원 학습 목표: 역방향 확률 분포 모델링 (모델이 학습하는 부분)
수식
pθ(x0:T):=p(xT)∏t=1Tpθ(xt−1∣xt)
전체 마르코프 과정의 결합 확률 분포
xT에서 시작해 x0으로 도달할 때의 확률을 계산하는 과정
이 노이즈에서 시작했을 때, 특정한 과정을 거쳐 원래 데이터로 복원될 확률은 얼마일까?
요소 설명
p(xT): 초기 상태의 노이즈 확률 분포. 초기는 완전 노이즈이기 때문에 아마 가우시안 분포를 따른다고 가정.
∏t=1Tpθ(xt−1∣xt): 각 단계에서 xT에서 xT−1로 변할 확률을 모두 곱한 것. 즉, 모든 시간 단계에서의 조건부 확률을 곱해서 전체 확률을 계산함.
pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))
pθ(xt−1∣xt): 현재 단계 xt가 주어졌을 때, 이전 단계 xt−1가 어떻게 분포하는지를 나타내는 조건부 확률 분포
목표: pθ(x0)을 최대화하는 것. pθ(x0): 노이즈에서 원본을 되찾을 확률.
근데 보통 딥러닝에서 최대화하는 것보단 최소화로 변환해서 사용한다. 왜냐면 계산하기 더 쉽기 때문에. -> Negative Log-Likelihood (NLL, 음의 로그 가능도) 를 사용
직접 최적화하기 어려우므로 -> 변분 추정을 이용하여 우상향 경계를 설정한다.
max(pθ(x0))−>min(logpθ(x0))
log를 왜 이용할까?
변분추정(variational bound): 확률을 계산할 때, 그 수식이 너무 복잡하므로 그 값을 근사하게 계산함.
손실함수 유도 차근히 뜯어보기
변분추론을 적용한 전개
우리는 pθ(x0)를 직접 계산하기 어려우니까, 대신 전체 마르코프 체인 확률을 사용해서 근사할 수 있어.
pθ(x0)=∫pθ(x0:T)dx1:T
이걸 로그를 취하면:
logpθ(x0)=log∫pθ(x0:T)dx1:T
이 식을 다루기 어렵기 때문에 Jensen's Inequality (옌센 부등식) 을 사용하면:
logpθ(x0)≥Eq[logq(x1:T∣x0)pθ(x0:T)]
옌센(젠센) 부등식(Jensen's Inequality)란?
"평균을 먼저 구하고 함수 적용" 한 값은, "먼저 함수 적용한 후 평균" 을 낸 값보다 항상 작거나 같다!를 이용한 등식 f(E[X])≤E[f(X)]
이제 좌변에 음수를 곱해서 최소화 문제로 바꾸면:
−logpθ(x0)≤Eq[−logq(x1:T∣x0)pθ(x0:T)]
기대값을 추가하면:
E[−logpθ(x0)]≤Eq[−logq(x1:T∣x0)pθ(x0:T)]
짠. 논문의 (3)번 식이 된다.
다시 지피티한테 물어봄. 식 유도에 대해. 비전공자로서 이해가 된 답변을 가져옴.
우리가 원래 하고 싶은 건 pθ(x0)를 직접 최적화하는 것이야.
즉, 우리가 원하는 최적화 목표는:
maxpθ(x0)
하지만 딥러닝에서 직접 확률을 다루는 대신 Negative Log-Likelihood (NLL) 를 최소화하는 방식으로 바꿔서 최적화하는 게 일반적이야:
min−logpθ(x0)
즉, 확률을 최대화하는 대신, 음의 로그 가능도를 최소화하는 문제로 바꾼 것!
이렇게 하면 수학적으로 계산하기 편하고, 경사 하강법(Gradient Descent)으로 최적화하기 쉬워. -> 여기까진 이해 o
그런데 왜 기대값이 등장하는가? ✅ 문제: pθ(x0) 를 직접 계산하기 어렵다! pθ(x0)를 계산하려면 전체 마르코프 체인에서 x0가 나올 확률을 다 합쳐야 해.
즉, xT부터 시작해서 x0까지 오는 모든 가능성을 고려해야 해.
이걸 수식으로 쓰면: pθ(x0)=∫pθ(x0:T)dx1:T
즉, x1:T에 대해 적분(총합)을 취해야 하는데, 이 적분을 직접 계산하는 건 너무 복잡해!
그래서 적분을 기대값 형태로 변형해서 다루기 쉽게 바꾸는 거야.
기억나니? 그래프의 아래 면적을 적분으로 구하는 거? 적분이 기대값과 완전 같은 개념은 아니지만 기대값을 확률 분포에서 구하려면 적분이 필요함.
: Forward 과정의 마지막 단계에서 xT 가 노이즈 분포 p(xT) 와 얼마나 다른지를 측정하는 항
즉,
Forward 과정에서 마지막 ( x_T ) 는 우리가 설계한 ( q(x_T | x_0) ) 로부터 나오는데,
우리가 모델에서 가정한 초기 노이즈 분포p(xT)는 보통 정규분포 N(0,I) 를 따르게 설정한다.
그러므로 이 KL 발산 항을 최소화하면, Forward 과정이 xT에서 우리가 원하는 가우시안 분포로 잘 수렴하도록 도와줌.
-> 학습 과정에서 상수값이 되기 때문에 무시.
(2) 두 번째 KL 발산 항: DKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))
"모델 pθ(xt−1∣xt)이 실제 역과정(Reverse process) 분포 q(xt−1∣xt,x0)를 얼마나 잘 따라가는지" 를 측정.
q(xt−1∣xt,x0): Forward 과정에서 우리가 정의한 실제 노이즈 제거 확률 분포 (Ground truth)
pθ(xt−1∣xt): 우리가 학습하려는 역과정(Reverse process)의 모델 예측 값
KL 발산 DKL: 두 확률 분포의 차이를 나타냄
이 KL 발산 값을 최소화하면?
-> 모델 pθ(xt−1∣xt) 가 실제 Forward 과정에서의 노이즈 제거 분포 q(xt−1∣xt,x0)와 최대한 비슷해지도록 학습됨을 의미.
최적화 방식 (손실 함수 L을 어떻게 학습하나?)
최적화해야 하는 손실 함수 L 은 결국:
L=∑t=1TDKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))
이다.
즉, Forward 과정에서 정의한 q(xt−1∣xt,x0) 를 모델이 예측하는 pθ(xt−1∣xt) 가 최대한 비슷하게 만들도록 학습하는 것.
논문에서는 이 KL 발산을 직접 최소화하기보다는,
Forward 과정에서 한 번에 샘플링할 수 있는 ( x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon )
이 수식을 활용해서 모델이 노이즈 ϵ을 예측하는 방식으로 학습한다.
즉, 최종적으로 손실 함수는 모델이 예측한 노이즈와 실제 노이즈 간의 차이를 최소화하는 방식으로 변형한다.