이 강의의 목표는 데이터에 노이즈를 조금씩 더하는 정방향 과정과, 그것을 거꾸로 지워 데이터를 만드는 역방향 과정을 수식으로 이해하는 것입니다.
먼저 오늘의 핵심 식을 봅니다.
x t = α ˉ t x 0 + 1 − α ˉ t ε , ε ∼ N ( 0 , I ) x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\varepsilon,\qquad \varepsilon\sim\mathcal{N}(0,I)
x t = α ˉ t x 0 + 1 − α ˉ t ε , ε ∼ N ( 0 , I )
이 식을 외우기 전에, 식 안의 말과 기호를 먼저 하나씩 풀어야 합니다.
말
뜻
x 0 x_0x 0
원본 데이터(예: 깨끗한 이미지)
x t x_tx t
t tt 단계만큼 노이즈를 더한 데이터
ε \varepsilonε
표준정규에서 뽑은 노이즈
α ˉ t \bar\alpha_tα ˉ t
0 00 과 1 11 사이의 스케줄 값. t tt 가 커질수록 0에 가까워진다
score
로그확률밀도의 기울기 ∇ x log p ( x ) \nabla_x\log p(x)∇ x log p ( x )
역과정
노이즈에서 데이터로 돌아가는 과정
수학에서 어려운 부분은 계산보다 읽기입니다. 뜻을 모르고 계산하면 공식이 암호처럼 보입니다.
깨끗한 그림에 먼지를 조금씩 뿌리면 결국 원래 그림이 안 보입니다. diffusion 모델은 먼지를 뿌리는 쉬운 과정을 정해 두고, 거꾸로 먼지를 지우는 어려운 과정을 학습합니다. 학습이 끝나면 순수한 먼지에서 시작해 그림을 만들어 냅니다.
핵심 식에 실제 기호를 넣어 읽어 봅니다.
x t = α ˉ t x 0 + 1 − α ˉ t ε x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\varepsilon
x t = α ˉ t x 0 + 1 − α ˉ t ε
α ˉ t x 0 \sqrt{\bar\alpha_t}\,x_0α ˉ t x 0 : 원본을 조금 줄여서 남긴 부분. t tt 가 커지면 α ˉ t \bar\alpha_tα ˉ t 가 작아져 원본이 희미해집니다.
1 − α ˉ t ε \sqrt{1-\bar\alpha_t}\,\varepsilon1 − α ˉ t ε : 더해지는 노이즈. t tt 가 커지면 계수가 커져 노이즈가 지배합니다.
두 계수의 제곱을 더하면 α ˉ t + ( 1 − α ˉ t ) = 1 \bar\alpha_t+(1-\bar\alpha_t)=1α ˉ t + ( 1 − α ˉ t ) = 1 이라, 전체 신호의 크기(분산)가 일정하게 유지됩니다.
즉 x t x_tx t 는 "원본 x 0 x_0x 0 "와 "노이즈 ε \varepsilonε "를 정해진 비율로 섞은 것입니다. t = 0 t=0t = 0 에서는 원본 그대로이고, t tt 가 아주 크면 α ˉ t → 0 \bar\alpha_t\to 0α ˉ t → 0 이라 x t ≈ ε x_t\approx\varepsilonx t ≈ ε , 즉 거의 순수한 노이즈가 됩니다.
데이터의 분포 p ( x ) p(x)p ( x ) 를 직접 모델링해 새 샘플을 뽑는 일은 어렵습니다. 그런데 노이즈를 더하는 정방향 과정은 아주 쉽습니다. 위 핵심 식 하나로 어느 단계 x t x_tx t 든 바로 만들 수 있기 때문입니다.
그래서 diffusion은 문제를 뒤집습니다. 쉬운 정방향 과정을 정해 두고, 모델에게는 "노이즈를 한 단계 지우는 방향"만 배우게 합니다. 이 방향이 바로 score, 즉 로그확률밀도가 커지는 쪽입니다. 데이터 분포 전체를 한 번에 배우는 대신, 각 노이즈 수준에서 국소적으로 "어디로 가야 더 그럴듯한가"만 배우면 되므로 학습이 안정적입니다.
score는 확률밀도에 로그를 씌운 뒤 위치로 미분한 벡터입니다.
s ( x ) = ∇ x log p ( x ) s(x)=\nabla_x\log p(x)
s ( x ) = ∇ x log p ( x )
이 벡터는 "확률이 커지는 방향", 즉 더 그럴듯한 데이터 쪽을 가리킵니다. 밀도가 높은 곳으로 올라가는 나침반이라고 볼 수 있습니다.
정방향 과정에서 x t x_tx t 는 x 0 x_0x 0 이 주어지면 정규분포를 따릅니다.
p ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) p(x_t\mid x_0)=\mathcal{N}\!\bigl(x_t;\ \sqrt{\bar\alpha_t}\,x_0,\ (1-\bar\alpha_t)I\bigr)
p ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I )
이것이 핵심 식과 같은 말입니다. 평균이 α ˉ t x 0 \sqrt{\bar\alpha_t}\,x_0α ˉ t x 0 , 분산이 1 − α ˉ t 1-\bar\alpha_t1 − α ˉ t 인 정규분포에서 x t x_tx t 를 뽑는 것이 곧 x t = α ˉ t x 0 + 1 − α ˉ t ε x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\varepsilonx t = α ˉ t x 0 + 1 − α ˉ t ε 입니다.
스칼라 예로 원본을 x 0 = 1 x_0=1x 0 = 1 , 노이즈를 ε = 0.5 \varepsilon=0.5ε = 0 . 5 로 두고 세 시점을 봅니다.
이른 시점 α ˉ t = 0.81 \bar\alpha_t=0.81α ˉ t = 0 . 8 1 일 때 0.81 = 0.9 \sqrt{0.81}=0.90 . 8 1 = 0 . 9 , 1 − 0.81 = 0.19 ≈ 0.436 \sqrt{1-0.81}=\sqrt{0.19}\approx 0.4361 − 0 . 8 1 = 0 . 1 9 ≈ 0 . 4 3 6 이므로
x t = 0.9 ⋅ 1 + 0.436 ⋅ 0.5 ≈ 1.12 x_t=0.9\cdot 1+0.436\cdot 0.5\approx 1.12
x t = 0 . 9 ⋅ 1 + 0 . 4 3 6 ⋅ 0 . 5 ≈ 1 . 1 2
원본 1 11 에서 크게 벗어나지 않았습니다.
중간 시점 α ˉ t = 0.36 \bar\alpha_t=0.36α ˉ t = 0 . 3 6 일 때 0.36 = 0.6 \sqrt{0.36}=0.60 . 3 6 = 0 . 6 , 0.64 = 0.8 \sqrt{0.64}=0.80 . 6 4 = 0 . 8 이므로
x t = 0.6 ⋅ 1 + 0.8 ⋅ 0.5 = 0.6 + 0.4 = 1.0 x_t=0.6\cdot 1+0.8\cdot 0.5=0.6+0.4=1.0
x t = 0 . 6 ⋅ 1 + 0 . 8 ⋅ 0 . 5 = 0 . 6 + 0 . 4 = 1 . 0
원본과 노이즈가 비슷한 비중으로 섞였습니다.
늦은 시점 α ˉ t = 0.01 \bar\alpha_t=0.01α ˉ t = 0 . 0 1 일 때 0.01 = 0.1 \sqrt{0.01}=0.10 . 0 1 = 0 . 1 , 0.99 ≈ 0.995 \sqrt{0.99}\approx 0.9950 . 9 9 ≈ 0 . 9 9 5 이므로
x t = 0.1 ⋅ 1 + 0.995 ⋅ 0.5 ≈ 0.60 x_t=0.1\cdot 1+0.995\cdot 0.5\approx 0.60
x t = 0 . 1 ⋅ 1 + 0 . 9 9 5 ⋅ 0 . 5 ≈ 0 . 6 0
이제 값의 대부분이 노이즈에서 옵니다. α ˉ t \bar\alpha_tα ˉ t 가 0으로 갈수록 x t x_tx t 는 표준정규 노이즈에 가까워집니다.
정방향 분포가 정규분포이므로 그 score를 손으로 구할 수 있습니다. log p ( x t ∣ x 0 ) = − ∥ x t − α ˉ t x 0 ∥ 2 2 ( 1 − α ˉ t ) + 상수 \log p(x_t\mid x_0)=-\dfrac{\lVert x_t-\sqrt{\bar\alpha_t}\,x_0\rVert^2}{2(1-\bar\alpha_t)}+\text{상수}log p ( x t ∣ x 0 ) = − 2 ( 1 − α ˉ t ) ∥ x t − α ˉ t x 0 ∥ 2 + 상수 를 x t x_tx t 로 미분하면
∇ x t log p ( x t ∣ x 0 ) = − x t − α ˉ t x 0 1 − α ˉ t = − ε 1 − α ˉ t \nabla_{x_t}\log p(x_t\mid x_0)
=-\frac{x_t-\sqrt{\bar\alpha_t}\,x_0}{1-\bar\alpha_t}
=-\frac{\varepsilon}{\sqrt{1-\bar\alpha_t}}
∇ x t log p ( x t ∣ x 0 ) = − 1 − α ˉ t x t − α ˉ t x 0 = − 1 − α ˉ t ε
가 됩니다(마지막 등식은 핵심 식에서 x t − α ˉ t x 0 = 1 − α ˉ t ε x_t-\sqrt{\bar\alpha_t}\,x_0=\sqrt{1-\bar\alpha_t}\,\varepsilonx t − α ˉ t x 0 = 1 − α ˉ t ε 이기 때문입니다). 즉 score는 더해진 노이즈 ε \varepsilonε 과 부호만 다른, 비례하는 방향 입니다.
score matching 은 모델 s θ s_\thetas θ 가 이 진짜 score를 맞히도록 학습합니다.
L score = E [ ∥ s θ ( x t , t ) − ∇ x t log p ( x t ∣ x 0 ) ∥ 2 ] \mathcal{L}_{\text{score}}
=\mathbb{E}\Bigl[\bigl\lVert s_\theta(x_t,t)-\nabla_{x_t}\log p(x_t\mid x_0)\bigr\rVert^2\Bigr]
L score = E [ ∥ ∥ ∥ s θ ( x t , t ) − ∇ x t log p ( x t ∣ x 0 ) ∥ ∥ ∥ 2 ]
score가 노이즈와 비례하므로, 실제로는 모델이 노이즈 ε \varepsilonε 을 직접 예측하도록 두는 편이 간단합니다. 이것이 denoising 목적함수 입니다.
L denoise = E x 0 , ε , t [ ∥ ε − ε θ ( x t , t ) ∥ 2 ] \mathcal{L}_{\text{denoise}}
=\mathbb{E}_{x_0,\varepsilon,t}\Bigl[\bigl\lVert \varepsilon-\varepsilon_\theta(x_t,t)\bigr\rVert^2\Bigr]
L denoise = E x 0 , ε , t [ ∥ ∥ ∥ ε − ε θ ( x t , t ) ∥ ∥ ∥ 2 ]
모델 ε θ \varepsilon_\thetaε θ 는 "지금 x t x_tx t 에 섞인 노이즈가 무엇인지"를 예측합니다.
역과정 은 이 예측을 이용해 노이즈를 한 단계씩 덜어 냅니다. 순수 노이즈 x T ∼ N ( 0 , I ) x_T\sim\mathcal{N}(0,I)x T ∼ N ( 0 , I ) 에서 시작해, 각 단계에서 예측한 ε θ \varepsilon_\thetaε θ (또는 score)만큼 더 그럴듯한 방향으로 조금 이동하며 x t → x t − 1 x_{t}\to x_{t-1}x t → x t − 1 로 되돌립니다. 이 과정을 T TT 부터 0 00 까지 반복하면 노이즈가 점점 걷히고, 마지막에 새로운 데이터 x 0 x_0x 0 이 나타납니다.
정방향 과정 x t = α ˉ t x 0 + 1 − α ˉ t ε x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\varepsilonx t = α ˉ t x 0 + 1 − α ˉ t ε 은 원본과 노이즈를 정해진 비율로 섞는다.
α ˉ t \bar\alpha_tα ˉ t 가 0으로 갈수록 x t x_tx t 는 순수 노이즈에 가까워진다.
score ∇ x log p ( x ) \nabla_x\log p(x)∇ x log p ( x ) 는 더 그럴듯한 데이터 쪽을 가리키는 방향이다.
정방향이 정규분포라, score는 더해진 노이즈 ε \varepsilonε 과 비례한다.
모델은 score를 맞히거나(노이즈 ε \varepsilonε 을 예측해) denoising 손실을 줄이도록 학습한다.
역과정은 순수 노이즈에서 시작해 예측한 노이즈를 단계적으로 지워 데이터를 만든다.
핵심 식은 다음과 같습니다.
x t = α ˉ t x 0 + 1 − α ˉ t ε x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\varepsilon
x t = α ˉ t x 0 + 1 − α ˉ t ε
정방향 식에서 두 계수의 제곱을 더하면 왜 1이 되고, 그것이 무엇을 뜻하는가?
score ∇ x t log p ( x t ∣ x 0 ) \nabla_{x_t}\log p(x_t\mid x_0)∇ x t log p ( x t ∣ x 0 ) 가 왜 노이즈 ε \varepsilonε 과 비례하는지 유도할 수 있는가?
denoising 목적함수 ∥ ε − ε θ ∥ 2 \lVert\varepsilon-\varepsilon_\theta\rVert^2∥ ε − ε θ ∥ 2 를 줄이는 것이 왜 역과정 학습이 되는가?