해당 포스팅은 Diffusion Models in Vision: A Survey 논문과 기타 Reference 자료를 참고하여 Diffusion이 무엇이고, 최근 동향이 어떤지 확인하기 위해 작성되었습니다.
Diffusion Model Abstract
Denoising diffusion model은 generatvie modeling 영역에서 remarkable한 result를 올리며 computer vision에서 최근에 떠오른 토픽이다.
Diffusion Model은 크게 두 가지 스테이지로 나눌 수 있다.
Diffusion Model의 장단점은 다음과 같다.
위의 그림은 generative modeling에서 한가닥했던 모델들인 GAN, VAE, flow model등과 diffusion을 한번에 비교해놓았다.
Diffusion은 앞에서 언급했다시피, high quality sample과 model diversity에 집중한 모델이다.
논문에서는 vision 영역에서 적용된 denoising diffusion model에 대해 다방면으로 종합적인 리뷰를 제공하고 있지만, 해당 포스팅에서는 Generic diffusion modeling framework 중 하나인 noise conditioned score networks에 대해 집중적으로 다뤄보도록 하겠다.
이전 생성모델의 한계
Diffusion model이 나오기 전, generative modeling 영역에서 가장 많이 사용했던 모델에는 GAN, VAE, Flow-based model 등이 있다. 각각의 모델은 현재의 大 생성시대를 만드는데 일조하였지만, 뚜렷한 한계점이 존재하였다.
그렇기 때문에 다음과 같은 Score-based Generative model이 등장하게 되었다.
Score-based Generative Models
기본적으로 모집단이 연속확률분포를 따르는 데이터들의 집합이라고 가정하면, 샘플링 된 데이터는 확률밀도함수(데이터 분포)에서 높은 확률값을 갖는 데이터들이다. Likelihood 가 높으면 높을수록, 해당 샘플이 관측될 확률도 높기 때문이다.
반면, pdf값이 낮은 곳에서 추출한 샘플은 random noise에 가깝다.
위 같은 사실을 이용해 Generative model에서 좋은 샘플을 얻으려면 어떻게 해야할까?
가장 먼저 쉽게 할 수 있는 행동은 처음부터 좋은 샘플을 얻는 것이 아니라, 데이터 공간상에서 임의의 데이터를 생성하는 것이다. 그것이 곧 random noise가 될 것이다. Score-based 기법은 해당 데이터가 생성된 위치에서 pdf의 기울기를 계산하고, 확률이 높아지는 방향으로 데이터를 업데이트시킨다. 즉, gradient ascent 방법을 활용한다. 확률값이 높은 곳에 도달하면 위의 MNIST sampling과 유사한 데이터를 생성가능할 것이다.
좀더 수식적으로 보면 다음과 같다.
위에서 pdf의 기울기를 계산한 것은 곧 관측치 x의 score function을 구한것과도 같다. Score function은 pdf의 미분과정이다. 주의할점은 일반적인 딥러닝 backpropagation에서는 gradient를 구할때 파라미터에 대한 편미분을 시행하지만, 여기서는 입력 데이터 x에 대한 미분을 진행한다.
그림을 통해서 보면 data sample들은 모두 p(x)라는 확률분포를 따른다. Score를 데이터로부터 추정하면 gradient의 방향을 알 수 있고, 그 방향을 따라가면 새로운 데이터를 어디서 sampling할지 알 수 있다. 이를 Langevin dynamics를 이용한다고 한다. 데이터 분포를 몰라도, 기울기가 커지는 방향으로 따라가는 것이 score-based generatvie model의 핵심이다. 여기서 Score를 데이터로부터 추정하는 것이 training 과정이며, 추정된 score를 바탕으로 새로운 데이터를 생성하는 것이 testing 과정이다.
Score Network and Loss
그렇다면 Score는 어떻게 구할 수 있을까? 결론부터 말하면, 연속확률분포로부터 이 값을 추정하는 것은 어렵기 때문에 neural network를 통해 score를 계산하는 방법을 사용한다! 그렇게 해서 일종의 regression problem 처럼 실제 True score와 network를 통해 나온 predicted score를 비교해 최소화하는 loss를 사용한다.
그런데 여기서 문제가 하나 있다. 바로 실제 데이터 분포인 p(x)를 알 수 없기에 true score를 계산할 수 없다는 것이다. 이를 해결하기 위해 Score Matching이라는 기법이 등장하여 logp(x)를 score 함수형태로 대체하게 되었다.
하지만 이 마저도 불완전한 loss 수식인것이, true score를 구성하는 jacobian matrix 부분이 차원이 커지면 커질수록 계산량이 부담스러워지기 때문에 Denoising Score Matching이라는 새로운 기법이 등장하게 되었다.
Denoising Score Matching (DSM)
Denoising Score Matching (이하 DSM) 기법은 diffusion model 중 하나인 DDPM 처럼 가우시안 노이즈를 입력 데이터에 더하는 방식을 사용한다. Generative modeling에 관심이 많은 독자들은 VAE의 encoder구조에 대해 많이들 들어봤을 것이다. Decoder에서 reconstruction image를 잘 만드려면 좋은 latent variable z가 있어야 한다. 그 z를 만들기 위한 구조가 encoder인데 input image x에서 z를 만드는 확률분포인 p(z|x)는 직접 구할 수 없기 때문에 가우시안 분포를 따르는 q(z|x)로 근사하게 된다.
여기서도 p(noise x|x)를 직접 구하기 어렵기 때문에 q(noise x|x) 분포로 근사를 하고 로그를 취해 gradient를 계산을 하게 된다. 해당 항과 noise x에 대해 score network가 예측한 값을 최소화하는 방향으로 학습을 진행한다.
여기서 noise가 충분히 작으면 원래 데이터의 score를 예측가능하게 된다.
Score Network
다시 전체 구조를 살펴보면 다음과 같다.
여기서 중요한 것은 노이즈 이미지에 대한 score function을 neural network로 학습시킨다는 것이며, network input인 노이즈 이미지와 network output인 predicted score는 차원이 동일하다. 따라서 모델 구조로도 차원 보존이 가능한 U-Net을 주로 사용한다.
Langevin Dynamics
이렇게 앞서 만든 score network가 잘 학습되었다면, 이론적으로 모든 데이터 공간상에서 score를 계산할 수 있게 된다.
초기에는 역시 임의의 데이터(랜덤 노이즈)에서 시작하여 해당 데이터에서 추정된 score를 바탕으로 데이터를 업데이트한다. 이러한 gradient ascent 과정을 수식으로 작성하면 다음과 같다.
이처럼 score를 이전 시점 data에 더해줘 데이터를 이동시키고, 딥러닝에서의 parameter update와 같이 local maxima (딥러닝 학습에서는 local minima)에 빠지는 일을 막기 위해 random noise를 추가해준다.
앞서 이론적으로 모든 데이터 공간상에서 score를 계산할 수 있다고 말했지만, 실제로는 특정 공간에서 얻을 수 있는 score 정보가 훨씬 많다. Network input으로 들어가는 noise x를 만들기 위한 q(noise x|x) 자체가 uniform 분포가 아니기 때문이다. 따라서 데이터가 확률값이 높은 부분에서 주로 샘플링 되고, 확률값이 낮은 부분에서는 score 정보를 얻기 힘들다.
따라서, 이러한 문제를 해결하기 위해 데이터 공간에 노이즈를 추가하여 perturbed density를 만들어 노이즈가 확률이 낮은 공간을 채울 수 있게 한다. 이렇게 하면 모든 공간에 대해 score 추정이 원활하게 된다. 위 방식을 도입한 score network를 noise conditional score networks (NCSN)이라고 한다.
Network 구조와 loss를 살펴보면, network input으로 기존의 노이즈 이미지와 더불어 데이터 분포를 흐리게 해줄 노이즈를 하나 더 추가한다. 이는 사전에 정의된 다양한 크기의 노이즈를 사용한다. score function의 파라미터에도 noise condition이 추가된다. q(noise x|x) 분포는 gaussian distribution이므로 아래의 수식처럼 표현할 수 있다.
Annealed Langevin Dynamics
위에서의 NCSN 모델을 이용하여 generation을 진행하게 되는데, 이때 초기 랜덤 노이즈에서 시작할때 score 방향을 잘 잡아주기 위해 gradient ascent 진행시 노이즈를 많이 부여해준다. 이후에는 방향을 어느정도 잡았으므로 추가해주는 노이즈 크기를 감소시키면서 진행한다. 최종적으로는 초기 데이터 분포와 비슷해져서 원하는 좋은 품질의 데이터를 샘플링 할 수 있게 된다.
정리하자면 Score-based Generative Model은 score network를 통해 노이즈가 추가된 입력이미지의 gradient를 계산하고, gradient가 증가하는 방향으로 데이터 분포에서의 공간을 이동시켜주는 방식이다.
추후에는 NCSN과 diffusion model의 DDPM 모델을 결합한 Stochastic Differential Equations (SDE)에 대해 공부해보도록 하겠습니다. 감사합니다.
https://horizon.kias.re.kr/25133/
https://velog.io/@bismute/Diffusion-Model-%EC%9E%85%EB%AC%B8%ED%95%98%EA%B8%B0
댓글 영역