https://process-mining.tistory.com/182
Diffusion model 설명 (Diffusion model이란? Diffusion model 증명)
Diffusion model은 데이터를 만들어내는 deep generative model 중 하나로, data로부터 noise를 조금씩 더해가면서 data를 완전한 noise로 만드는 forward process(diffusion process)와 이와 반대로 noise로부터 조금씩 복
process-mining.tistory.com
위의 블로그에서 이해가 안되는 부분을 풀어서 썼습니다.
제가 추적하면서 글 쓰는것인데 아닐 수도 있습니다.
그러니 틀린 부분 댓글로 써주세요. 제가 다시 수정하겠씁니다.
디퓨전은 무엇일까?
" Diffusion model은 데이터를 만들어내는 deep generative model 중 하나로, data로부터 noise를 조금씩 더해가면서 data를 완전한 noise로 만드는 forward process(diffusion process)와 이와 반대로 noise로부터 조금씩 복원해가면서 data를 만들어내는 reverse process를 활용한다. "
라고 정의가 되어 있다.
이미지를 점차 노이지를 넣는다 그것은 무슨 의미 일까?
이 말은
디퓨전 모델은 이미지에 점진적으로 노이즈를 추가한 다음, 그 과정을 역으로 학습하여 노이즈를 제거하는 방식으로 작동한다
이 역과정에서 각 단계는 확률적 과정이다. 즉, "현재 노이즈가 있는 이미지가 주어졌을 때, 이전 단계의 이미지가 어떤 모습이었을까?"라는 확률적 추론을 하는 것이다. 이 확률 분포를 정규분포(가우시안 분포)로 모델링하는데, 여기서 평균과 표준편차가 중요한 역할을 한다.
"현재 노이즈가 있는 이미지가 주어졌을 때, 이전 단계의 이미지가 어떤 모습이었을까?"
다시 확인 해보자.
이미지에 임의의 노이즈를 추가한다.
그냥 아무렇게나 노이즈를 넣는 게 아니라, 정규 분포를 따르는 노이즈를 이미지에 조금씩 단계적으로 더해간다.
이 과정에서 우리가 알고 있는 게 두 가지다. 하나는 노이즈 넣기 전의 원본 이미지다. 다른 하나는 정규 분포를 따르는 노이즈를 사용했기 때문에 그 노이즈가 어떤 식으로 이미지에 더해졌는지 정확히 알 수 있다.
이런 조건들이 있으니까 딥러닝으로 노이즈 섞인 이미지에서 원본 이미지를 복원하는 방법을 학습할 수 있다. 그리고 이렇게 학습한 복원 과정을 거꾸로 활용하면, 완전한 노이즈 상태에서 시작해서 점차적으로 선명한 이미지를 만들어낼 수 있게 된다.
평균과 표준편차가 중요한 역할
위의 글을 보면 평균과 표준 편차가 중요한 역할이라고 한다.
무슨 의미로 평균과 표준편차가 어떠한 중요한 역할을 할까?
평균값의 역할:
평균은 노이즈 예측을 통해 계산되는 이전 단계의 이미지를 의미한다. 이는 현재 노이즈가 섞인 이미지에서 한 단계 이전의 상태로 돌아가는 방향을 나타내며, 복원 과정의 주요 경로가 된다. 이 평균값은 모델이 예측한 노이즈를 기반으로 수식을 통해 계산된다.
표준편차의 역할:
표준편차는 각 단계에서 노이즈의 크기를 조절하는 미리 정해진 값이다. 높은 표준편차를 사용하면 각 단계에서 더 큰 변화가 허용되어 더 다양한 이미지가 생성될 수 있다. 반대로 낮은 표준편차는 각 단계에서의 변화를 제한하여 더 일관된 이미지 생성을 유도한다.
여기서 또 헷갈려 한것이있다.
그러면 디퓨전 모델은 표준편차와 평균을 예측 하는 학습을 하는것인가? (틀린 말이다)
즉 내가 이 것을 오해하게 된 이유는 noise를 추가하고 복원하는 과정에서 평균과 표준편차를 학습하여 이미지 생성을 하게 되는 것이 아닌가? 라고 생각했다.
하지만 이것을 글로 써보고 말을 해보는 순간 논리에 맞지 않다는것을 알고 또 뒤져 보았다.
결국
1. 표준편차(σ)는 학습되지 않는다:
* 미리 정해진 스케줄에 따라 고정된 값을 사용한다
* 이를 'noise schedule'이라고 부른다
* 이는 모델이 학습하는 파라미터가 아니라, 우리가 설계 시점에 정하는 값이다
2. 모델이 실제로 학습하는 것은 다음과 같다:
* 노이즈가 섞인 이미지에서 원본 이미지로 돌아가는 과정을 학습한다
* 구체적으로는 '현재 이미지에 얼마만큼의 노이즈가 섞여있는지'를 예측하는 법을 학습한다
* 이 예측값을 사용해서 '다음 단계의 이미지가 이럴 것이다'라는 평균값을 계산할 수 있다
예를 들어 흐릿한 사진을 보고 원본이 어떻게 생겼을지 추측하는 상황을 생각해볼 수 있다. 이때:
* "이 흐릿한 부분은 이정도로 흐릿해졌을 것이다"라고 추측하고 (노이즈 예측)
* 이를 바탕으로 "그러면 원본은 이렇게 생겼을 것이다"라고 예측한다 (평균값 계산)
디퓨전 모델도 이와 비슷한 방식으로 작동한다. 다만 이 과정에서 사용되는 표준편차는 우리가 미리 정해둔 값을 따르는 것이지, 모델이 학습하는 값이 아니다.
여기서 평균이 빠져 있다 (쓰다가 다시 추가한 부분)
평균도 직접적으로 학습되는 것이 아니다. 대신, 평균은 모델이 예측한 노이즈를 사용해서 수식적으로 계산된다. 이 과정을 자세히 살펴보면 다음과 같다.
1. 모델이 하는 일은 다음과 같다:
- 모델은 현재 이미지에서 노이즈를 예측하는 것만 학습한다
- 즉, "이 이미지에는 이만큼의 노이즈가 있을 것이다"라는 예측을 한다
2. 평균값이 계산되는 방식은 다음과 같다:
- 모델이 노이즈를 예측하면
- 이 예측된 노이즈와 현재 이미지를 사용해서
- 수식을 통해 이전 단계의 이미지(평균값)를 계산한다
수식으로 표현하면 다음과 같다:
$x_{t-1} = \frac{1}{\sqrt{1-\beta_t}}(x_t - \frac{\beta_t}{\sqrt{1-\beta_t}}\epsilon_\theta(x_t,t))$
여기서:
- $x_{t-1}$이 계산된 평균값이다
- $\epsilon_\theta(x_t,t)$가 모델이 예측한 노이즈이다
- $\beta_t$는 미리 정해진 스케줄의 값이다
즉, 평균은 "학습되는" 값이 아니라 "계산되는" 값이다. 모델은 노이즈만 예측하고, 그 예측된 노이즈를 사용해서 수식적으로 평균을 계산하는 것이다.
이것은 마치 요리사가 국물에서 소금의 양을 맞추는 것과 비슷하다:
- 요리사(모델)는 "이 국물에는 소금이 얼마나 들어있는지"만 맞춘다
- 그리고 그 판단을 바탕으로 수식적으로 "그럼 원래 국물은 이랬을 것이다"라고 계산한다
노이즈 추가 과정(forward process), 노이즈 제거 과정(reverse process)
이를 forward procss, reverse process로 부르고 있다.
위의 내용을 다시 정리 해보자.
노이즈 추가 과정(forward process)
이미지에 점진적으로 가우시안 노이즈를 추가하는데, 각 단계에서 얼마나 노이즈를 추가할지는 미리 정해진 스케줄을 따른다. 이 스케줄은 베타(β) 값들로 정의되며, 이 값들은 하이퍼파라미터로 고정된다.
$q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I})$
여기서:
- $x_t$는 시점 t에서의 이미지
- $\beta_t$는 노이즈 스케줄에 따른 분산값
- $\mathcal{N}$은 정규분포를 의미
이를 한 번에 계산할 수 있는 closed form은 다음과 같다:
$q(x_t|x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t)\mathbf{I})$
여기서:
- $\alpha_t = 1 - \beta_t$
- $\bar{\alpha}_t = \prod_{s=1}^t \alpha_s$
Closed form 방식:
- 바로 원하는 시점 t의 결과를 한번에 계산할 수 있습니다.
- 중간 과정을 모두 계산할 필요가 없습니다.
반면에 노이즈 제거 과정(reverse process)은 학습이 필요하다:
이 과정에서 신경망은 각 단계에서 노이즈가 있는 이미지를 보고 원본 이미지의 방향으로 한 걸음씩 되돌리는 방법을 학습해야 한다. 구체적으로는 현재 이미지에 얼마만큼의 노이즈가 있는지를 예측하는 것을 학습한다.
$p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \sigma_t^2\mathbf{I})$
여기서:
- $\mu_\theta$는 신경망이 예측하는 노이즈를 이용해 계산되는 평균값
- $\sigma_t^2$는 미리 정의된 분산값
실제로 모델은 노이즈 $\epsilon$을 예측하도록 학습되며, 이는 다음과 같은 손실 함수를 최소화하는 방향으로 진행된다:
$L = \mathbb{E}_{t,x_0,\epsilon}[\|\epsilon - \epsilon_\theta(x_t,t)\|^2]$
이렇게 설계된 이유는 매우 흥미롭다:
노이즈를 추가하는 것은 비교적 간단한 수학적 과정이지만, 노이즈를 제거하는 것은 훨씬 더 복잡한 추론을 필요로 한다. 마치 깨진 화분을 보고 원래 모양을 추측하는 것처럼, 노이즈가 있는 이미지에서 원본을 추측하는 것은 더 어려운 문제이기 때문이다.
공식이 나와서 당황스럽다.
다시 하나씩 다시 확인해보자.
$q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I})$
을 확인해보면
조건부 확률이 나와 있다.
베이즈 정리를 알아야 한다.
베이즈 정리
먼저 간단한 예시로 시작해본다. 귀여운 강아지 사진에 점진적으로 노이즈를 추가한다고 생각해본다. 각 단계에서 우리는 정확히 얼마나 많은 노이즈를 추가했는지 알고 있다. 이것이 forward process(노이즈 추가 과정)이다. 마치 깨끗한 강아지 사진이 점점 흐릿해지고 모호해지는 과정이라고 할 수 있다.
이제 reverse process(노이즈 제거 과정)를 생각해본다. 노이즈가 가득한 흐릿한 이미지를 보고 "이전 단계의 강아지 모습은 어땠을까?"를 추측해야 한다. 여기서 우리가 가진 두 가지 중요한 정보가 있다:
1. 현재 상태 (노이즈가 있는 흐릿한 강아지 이미지)
2. 노이즈가 어떻게 추가되었는지에 대한 정확한 수학적 정보
이 두 정보를 조합하면, 베이즈 정리를 통해 이전 상태의 확률 분포를 계산할 수 있다. 수학적으로 표현하면:
$p(x_{t-1}|x_t) \propto p(x_t|x_{t-1}) \cdot p(x_{t-1})$
여기서 $p(x_t|x_{t-1})$는 우리가 정확히 아는 노이즈 추가 과정이다. 이 정보를 사용하면 신경망이 학습해야 할 분포의 형태를 더 정확하게 제한할 수 있다. (위에서 평균과 표준편차
실제 응용에서는:
신경망은 완전히 자유롭게 이전 상태의 강아지 모습을 추측하는 것이 아니다. 대신, 노이즈 추가 과정에서 얻은 수학적 관계를 사용해 가능한 이전 상태의 범위를 좁힌다. 예를 들어, 흐릿한 이미지에서 강아지의 귀 모양이나 꼬리의 위치 같은 특징들을 파악하여 원본 이미지를 추측한다. 이렇게 제한된 공간에서 최적의 추측을 찾는 것이 학습의 목표가 된다.
이것은 마치 수학 문제를 풀 때 주어진 조건을 활용하여 가능한 해답의 범위를 좁히는 것과 비슷하다. 모든 가능한 강아지 이미지를 다 시도하는 것보다, 주어진 흐릿한 이미지의 특징을 이용해 효율적으로 원본을 찾는 것이다.
---
베이즈 정리는 다음글에서
https://rlfmehs23.tistory.com/61
예전에 베이즈 정리 한거 (근데 나는 스토리 텔링 형식으로 안하면 이해 안된다...)
https://rlfmehs23.tistory.com/57
----이미지 출처
https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
What are Diffusion Models?
[Updated on 2021-09-19: Highly recommend this blog post on score-based generative modeling by Yang Song (author of several key papers in the references)]. [Updated on 2022-08-27: Added classifier-free guidance, GLIDE, unCLIP and Imagen. [Updated on 2022-08
lilianweng.github.io
https://encord.com/blog/diffusion-models/
An Introduction to Diffusion Models for Machine Learning
Machine learning and artificial intelligence algorithms are constantly evolving to solve complex problems and enhance our understanding of data.
encord.com
'인공지능 공부 > 모델' 카테고리의 다른 글
디퓨전 모델 공부해보자3 : 머리속에 있는 오해를 지우자 (0) | 2024.12.25 |
---|---|
디퓨전 모델 공부해보자2 베이즈 정리는 디퓨전 모델의 핵심 인가? (1) | 2024.12.22 |