AI 기본 지식

Flow Models

study_love 2025. 11. 28. 16:56

 오늘은 Diffusion과 같은 생성 모델 중 하나인 Flow Model의 기본 원리에 대해서 설명해보도록 하겠다. Flow Model은 기본적으로 z ~ N(0,1)에서 sampling한 random한 noise로부터 그럴듯한 이미지를 만들어보자는 것이 목적이다.

Methods 

 이미지 공간의 변수를 x, 표준정규분포 N(0,1)을 따르는 잠재변수를 z라고 하자. 그리고 x = f(z)라는 어떤 변환 함수 f가 존재한다고 가정해보자. 이때 우리가 원하는 것은 표준 정규분포에서 확률이 높은 z가 데이터셋에 존재할 확률이 높은 로 자연스럽게 대응되도록 를 학습하는 것이다. 그렇게 되면, 단순히 z∼p(z)에서 샘플링한 후 x=f(z)를 계산함으로써 와 거의 동일한 분포를 가지는 생성 샘플을 얻을 수 있다.

이제 확률이 높은 z가 확률이 높은 로 자연스럽게 대응되도록 를 어떻게 학습할 수 있는지에 대해 알아보도록 하자. 변수 변환 공식(change of variables)에 의해, p(x)는 밑의 식과 같이 표현될 수 있다. {x = f(z)는 일대일 대응되는 가역적인 변환} 

 

위 식에 따라서 z = f_inv(x)를 만족하는 f_inv와 p_z를 알 때, 어떤 이미지 x가 등장할 확률 p(x)를 알 수 있다. f가 잘 훈련되어있지 않은 초기에는, x가 실제 dataset에 많이 존재하는 이미지임에도 불구하고(p_x(x)가 커야하는데도) f_inv가 x를 확률이 낮은 z쪽으로 mapping시켜서 즉, p_z(f_inv(x)){=p_z(z)} 값이 작아서 p_x(x) 또한 작게 나올 것이다. 
이를 해결하려면 p_z(f_inv(x))가 커지도록, 즉 데이터가 실제로 자주 등장하는 영역에 높은 확률을 부여하도록 f를 조정해줘야 한다. 방법은 간단하다. f를 하나의 deep learning model로 설계한 뒤, 모든 데이터에 대해 p(x)의 곱(= log-likelihood의 합)이 최대가 되도록 하는 방향으로 maximum likelihood loss를 이용해 모델을 학습시키면 된다. 이렇게 학습을 통해 좋은 f를 찾고 나면, 데이터셋에서 등장할 확률이 높은 x는 z에서도 확률이 높도록 잘 mapping될 것이다.

 이제 p(z)에서 무작위로 z를 샘플링해 x = f(z)를 계산해보자. 그렇게 얻어진 x들의 히스토그램을 그려보면, 실제 train dataset에서 x를 무작위로 뽑아서 만든 히스토그램과 거의 유사한 분포가 나타나게 된다.

 

읽기 조금 힘들텐데, 한줄 한줄 씩 집중에서 읽다보면 concept을 이해할 수 있을 것이다.