Score based models

seung·2025년 1월 13일

Generative Model

목록 보기
7/7

우리가 생성모델에서 하고자 하는 것은 결국 데이터의 분포 즉, p(x)를 알고 싶은 것이다.

이것을 학습하기 위한 방법이 여러가지 있다.
그중에서 우리는 우리가 알고 있는 확률분포 모델 family를 정해서 거기 안에서 가장 그럼직한 likelihood가 높은 것을 찾는 방식을 했었다.

파라미팅 모델을 학습한다고도 하는데 p_theta(x)로 표현할 수 있다.

우리는 p_theta(x)를 보통 이렇게 표현할 수 있다.

위와 같은 식을 exponential family, 즉 지수족이라고 하는데
이렇게 부르는 이유는 확률 분포 안에 e를 사용하기 때문이다.

또한 확률이라는 것은 다 더하면 1이어야 되기 때문에
Z_theta를 나누어서 확률로써 표현한다.
(Z_theta는 분자의 모든 경우의 수를 다 더한 normalization 값이다.)

p_theta를 위와 같이 모델링하고 likelihood를 최대화하는 방향으로 학습을 진행한다.

Explicit/ Implicit model

이제 p_theta(x)를 어떻게 구체적으로 모델링 하느냐에 따라 다양한 생성모델을 만들 수 있다.

  • Explicit model
    Bayesian networks, Markov Random Field, Autogressive models, Flow models등이 이 분류에 속한다.

    explicit model은 p_theta(x)를 우리가 정확히 알고 있는 확률 밀도함수, 확률 질량함수로 p_theta(x)를 정확히 정의하는 모델을 의미한다.

    우리가 수학적으로 정확히 적고 정의할 수 있기 때문에 명백하다(explicit).

    이런 식으로 모델링하면 우리가 이해도 할 수 있고, 무슨 변수들이 있는지 정확히 알수 있으며, 그 값이 어떤의미를 지니는지도 알 수 있다.
    또한 p_theta를 직접적으로 모델링하기 때문에 어떤 입력이 들어왔을 때 likelihood를 직접적으로 계산할 수 있어서 최대화할 수 있다.

  • Implicit model
    샘플링하는 모델들이 여기에 속하는데,
    p_theta(x)를 직접적으로 모델링할려고 하기 보다는 내가 근사한 모델이 샘플링만 잘하면 된다!

    즉, 가우시안 노이즈를 입력으로 넣어주었을 때, 나오는 결과가 p(x)로 부터 샘플링한것과 다름없는 리얼한 이미지가 나오기만 한다면 만족하는 것!

explicit은 확률모델이라서 random noise가 들어있어서 랜덤한데,
implicit은 noise의 input이 정확히 같으면 deterministic하게 결정된다.

Score matching

score matching도 조금 다른 접근이긴 하지만
p(x)를 직접적으로 모델링 하는 것이 어려우니 score라고 불리는 p(x)의 gradient field을 대신해서 예측하자해서 나온 방법이다.

  • score란?
    아래의 그림을 보면 빨갛게 있는 부분이 보이는데 이것은 density가 높을 부분을 의미한다.
    아래의 그림은 2d 가우시안을 모델을 그린것으로 빨간 부분이 두개가 봉우리일 것이다.

    우리가 이 2d 평면에 점을 무한히 뿌리고 거기에서의 기울기들을 다 계산해서 나타내면 아래와 같이 gradient field를 표현할 수 있다.
    이러한 gradient field를 score라고 한다!!

  • score matching의 장점
    기존의 우리가 explicit하게 모델링하는 p_theta(x)는
    normalization 함수가 항상 있어서 다 더했을 때 1이 되고 항상 양수여야 되는 제약조건이 있다.

    즉 normalize factor는 모든 변수에 대해서 다 계산해서 더해줘야 되는데 불가능한 일이다...

    우리는 그래서 이것을 우회하는 방식으로 해결하는데 VAE에서는 p_theta(x)의 lower bound를 계산해서 그것을 최대화 하는 방식으로 해결한다.

    score matching에서는 p_theta(x)를 log를 붙이고 x에 대해 미분하여 표현함으로써 normalize factor는 상수처리되어 없어지게 되어 제약조건이 사라지게 된다는 장점이 있다!!
    (즉, score로 모델링하게 되면 explicit할 때 생기는 제약 조건이 싹 다 없어짐!!)

score estimation

이 스코어를 어떻게 추정할까??

Given : p_data로 부터 i.i.d하게 x 샘플들이 뽑혔다고 생각해보자

Task : 우리가 하려고 하는 일은 true score, 즉 p_data 분포의 gradient를 근사하려고 하는 것이다.

score model(파라메트릭 모델)를 만들어서 예측하려고 하는 것이다

score model로 neural network를 사용하기도 하는 신경망을 사용하려면 목적함수가 필요하다.

아래의 두개의 필드를 비교하기 위한 목적함수를 어떻게 정할까?

위의 파란색은 true score이고, 빨간색은 우리 모델이 예측한 score이다.
두 개 score간의 차이, 사이 각이 있을 것이다 이것을 줄여주는 쪽으로 학습하는 것이 젤 이상적이다!

Average Euclidean distance
아래와 같이 두개의 차이를 계산하여 줄이는 방식으로 학습할 것이다.

그 목적 함수를 우리는 fisher divergence라고 부른다.

하지만 이 함수에서 우리가 p_data를 모르는데 도대체 gradient 스코어는 어떻게 구하지?

objective function

함수를 모르기 때문에 우회할 방법들을 찾기 시작했고, 굉장히 똑똑한 방식으로 위의 함수와 동치이지만 다른 방식으로 만들었다.

그것이 바로 아래와 같은 식을 가진 score matching이다!!!
어떻게 이런식으로 바뀔수 있는 것일까? 알아보자!일단 이해하기 쉽게 가정하기 위해 x를 scalar, 1차원 벡터라고 가정하면, 아래와 같이 전개할 수 있다.

3가지 term으로 구성된다.

  • 1번째 term
    관심이 없는 텀이다.
    왜냐하면 objective function의 목표는 theta를 업데이트 하는 것이기 때문에 theta와 관련되어 있지 않은 1번째 텀은 버려도 된다.

  • 2번째 term
    이건 기댓값으로 나타내면 우리가 변환시키려고 하는 것의 첫번째 요소가 된다.

  • 3번째 term
    log 미분과 부분적분을 이용해서 이 term을 전개하면,
    아래의 2개의 식으로 나올수 있는데
    첫번째는 우리가 극단적인 값일때 확률은 0에 수렴한다는 가정을 하기 때문에 0이 되어서 지울 수 있고
    우리가 원하는 요소만 남게 되는 것이다!!

이때 s_theta(x)를 미분한것이 trace(s_theta(x))가 되는 것은 아래와 같은 이유이고 ||s_theta||^2이 trace(s_theta(x))이기 때문에 성립이다.


Langevin Dynamics

위의 내용을 정리하면 우리는 fisher divergence식 대신에 score matching 식을 줄여나가는 방향으로 학습하게 되면
s_theta(x)가 true score를 정확하게 예측하게 될 것이다!

  • 1번째 그림
    이렇게 s_theta를 구하면 우리는 점을 랜덤하게 뿌렸을 때 그 점들에서 density가 높아지는하는 방향을 알 수 있다.

  • 2번째 그림
    2번째 그림 처럼 그 표지판대로 그대로 따라가다 보면, density가 높은 곳으로 점들이 움직인다.
    하지만 그냥 이렇게 따라가게 되면 항상 deterministic하게 한 값만 나오게 될것이다.(다양한 분포를 담지 못한다.)

  • 3번째 그림
    3번째 그림처럼 random 요소를 추가해서 sampling하는 것을 Langevin Dynamics 샘플링이라고 하고, 이런 방식을 통해서 다양한 이미지를 커버할 수 있게 된다.

score based model의 문제


data sample이 있고, 그것의 score를 잘 살펴보면,
원래대로라면, 모든 가능한 x에 대해서 score가 잘 예측이 되어야 하는데,

data sample을 보면 중간에 데이터가 없는것을 볼 수 있다.(이것은 고차원으로 갈 수록 더 심해진다.)

우리가 고차원 모든 좌표들을 다 표현할만큼 데이터를 다 모을 수 없기 때문에 당연히 데이터가 존재하지 않은 부분이 생기고, 우리가 그부분은 정확하게 예측할 수 없다.

스코어를 구하지 못하는 부분을 어떻게 해결해야 할까?

해결책

objective function에 noise를 추가해서 해결해보자!!

noise를 추가하지 않으면 학습이 불안정하게 되는데 noise를 추가하면 학습이 안정적으로 되는 것을 알 수 있다.

어떻게 이렇게 될 수 있는 걸까 자세히 알아보자!

즉 노이즈를 추가함으로써 우리가 알지 못하는 좌표 영역의 값을 만들어 스코어를 계산하고 학습하는 것이다!!
모르는 것보다 이렇게 하는게 더 학습하고 성능이 좋다는 것!

score based model의 문제2


첫번째 그림처럼 우리 real data들은 density에서 ratio가 있어서 한곳에 더 밀집되어 있는 상황이 많다.

이때 스코어도 이를 반영하여 예측해야 하는데 그 사이에 데이터도 없다 보니깐 서로 커뮤니케이션할 것도 없어서
두번째 그림처럼 비율을 고려하지 않고 동등하게 분리되는 문제가 생긴다.

분포의 비율을 고려해서 샘플링하는 방법이 없을까??

해결책

중간의 점들, 즉 가교들이 있음으로써 어느 점으로 더 가교들이 몰리는지로 분포의 비율을 측정하는 것이다.

결국 이 문제도 1번째 문제의 해결책과 마찬가지로 노이즈를 통해 중간의 점들을 만들어서 이용하는 것이다!

Annealed Langevin Dynamics

2번째 문제 해결을 하기 위해서 처음에는 노이즈를 엄청 주고 학습을 하고 어느정도 학습이 되면 노이즈를 좀 줄여서 학습하고,
그 후에 노이즈를 더 줄여서 학습을 시키면 훨씬 더 제대로 샘플링이 되고, 생성모델의 성능이 좋아진다.

이러한 방식을 Annealed Langevin Dynamics 샘플링이라고 한다.


NCNS 성능

score matching을 이용한 Generative Modeling by Estimating Gradients of the Data Distribution 논문에서 나오는
NCNS는 나온 당시에 GAN과 견줄만한 성능을 보였고,

이후 이와 같은 기반인 diffusion등 더 좋은 성능을 보이는 모델들이 나왔다.

결론

  1. No need to be normalized / invertible
    score로 접근함으로써 확률분포를 만들때 있는 제약조건(sum to 1)을 사용하지 않아도 됨으로써 구하지 않아도 되는 장점!

  2. No minimax optimization
    이 당시에는 GAN같은 모델이 떴는데 적대적인 학습을 했어야 했는데 이 방식은 거리함수를 줄이는 방향으로 학습하기 때문에 안정적이다!

  1. Adding noise and annealing the noise levels are critical
    score matching의 단점들을 해결하는 방식으로 noise를 추가하는 방식을 사용!

0개의 댓글