[Generative Artificial Intelligence] Energy Based Models – 1

Stanford CS236 Deep Generative Models 수업의 자료를 기반으로 생성모델의 기본 개념들을 정리해보고자 한다. (참고 https://deepgenerativemodels.github.io/syllabus.html)

지금까지 다룬 autoregressive model, normalizing flow model, variational autoencoder 등의 모델들은 다 가정하고 있는 조건들이 있기 때문에 모델 architecture를 구성하는데 제약이 있었다. GAN은 훨씬 flexible하게 모델을 만들 수 있지만 이전에 얘기했듯이 학습이 불안정하고 mode collapse 등의 이슈들이 있었다. 이번에 다룰 energy based model은 모델을 flexible하게 구성을 할 수 있으면서도 안정적인 학습을 가능하게 해준다.

먼저 energy based model이 확률분포를 구성하는 방식은 매우 기본적인 확률분포의 성질에서 시작한다.

1번째 조건을 만족하도록 p(x)를 구성하는건 매우 쉽다 (제곱, exp, 절댓값, 로그 등등). 그런데 합이 항상 1이 되도록 만드는건 어렵다. 그래서 아래와 같이 p(x)를 만든다.

여기서 \(g_\theta\)를 exponential 함수로 만들면 최종적으로 아래와 같은 형태가 energy based model이 된다. exponential함수로 만드는 이유는 log probability가 natural한 scale이고 많은 distribution이 exponential한 성질을 띄고 있기 때문이다.

이렇게 만들어진 p(x)는 항상 0 이상이면서 합은 1이다. 여기서 \(-f_\theta(x)\) 를 energy 라고 부른다. 그러면 에너지가 낮은 x일수록 더 높은 확률을 가진다. (에너지가 낮은 상태를 유지하려고 하는 자연의 성질과도 연관이 된다)

이렇게 만든 energy based model은 아래와 같은 장단점을 가진다.

장점 :

  • \(f_\theta(x)\) 함수를 굉장히 flexible하게 만들 수 있다.

단점 :

  • \(p_\theta\)로부터 sampling하기가 어렵다.
  • \(p_\theta\)의 likelihood를 evaluate하고 optimize하기가 힘들다.
  • latent variable이 없으니 feature learning이 안된다. (이부분은 나중에 latent variable을 추가하면 되긴 한다)

또한 x의 dimension이 커지면 Z를 numerically 계산하기가 매우 어려워지는 Curse of dimensionality 문제도 발생한다. 그런데 몇몇 task들은 Z를 알 필요가 없긴 하다. 아래에 보이는 것처럼 Z를 몰라도 서로 다른 데이터 x, x’에 대한 에 대한 \(p_\theta(x)\)와 \(p_\theta(x’)\)의 ratio는 계산할 수 있다.

그러면 서로 다른 두 데이터중에 어느 데이터가 더 확률이 높은지는 쉽게 계산할 수 있다는것이고 잘 학습된 모델이 있다고 할때 anomaly detection, image restoration 등 응용할 수 있는 곳이 많다.

그래도 결국에 model을 학습을 시켜야 하는데 어떻게 시켜야할까?

일단 단순히 \( exp(f_\theta(x_{train})) \) 을 키우는게 solution은 아니다. \( Z(\theta)\)도 같이 커지면 최종 확률인 \(p_\theta\)가 커진다는 보장이 없다. 따라서 아래 그림처럼 다른 “wrong point”에 대해서 \(f_\theta\) 값을 줄여 \( Z(\theta)\) 를 줄이면서 \( exp(f_\theta(x_{train})) \)를 키워야 우리가 원하는 solution이 될 것이다.

그래서 사용하는 방법이 아래의 Contrastive Divergence 방법이다. training data인 \( x_{train} \)에 대해서는 \(f_\theta(x_{train})) \) 값을 키우면서 모델로부터 random으로 sampling해서 얻어낸 \( x_{sample} \)에 대해서는 \(f_\theta(x_{sample})) \) 값을 줄이는 것이다. (일반적으로 training data는 모델에서 sample된 데이터보다는 더 높은 확률을 가져야할것이기 때문에)

log-likelihood를 maximize하기 위한 식을 전개하면 아래와 같이 얻어진다. 결론은 위에서 말한대로 \(f_\theta(x_{train}) \)를 키우고 \(f_\theta(x_{sample}) \) 를 줄이는 방향으로 gradient를 계산해서 업데이트하면 된다는 결론이 나온다.

그런데 어쨋든 위 계산을 하려면 \(x_{sample}\)이 필요한데 어떻게 얻어내야 하는가? energy based model의 단점중에 하나가 sampling이 어렵다는 단점이 있었다. autoregressive나 flow 모델처럼 직접적으로 이용해서 sampling할 수 있는 방법이 따로 없다. sampling을 할만한 방법으로 iterative approach를 생각해볼 수 있는데 위에서 얘기했듯이 energy based model에서 Z계산은 어려워도 x, x’의 서로 다른 두 데이터의 확률비교는 쉽게 할 수 있다. 따라서 랜덤한 x에서 출발해서 noise를 더해가면서 새롭게 noise가 더해진 data의 확률이 더 높은가 높지 않은가를 계산해서 더 높은 확률의 data를 iterative하게 찾아 나갈 수 있다. 이 방법을 Markov Chain Monte Carlo 방식이라고 부른다.

이론적으론 가능한데 converge하는데 너무 많은 시간이 걸린다고 한다.

그래서 다르게 접근하는 방식이 score function이라고 부르는 \( \nabla _x log p_\theta(x)\)를 계산하는 것이다. 데이터인 x에 대해서 더 높은 확률을 가질 방향으로 gradient를 계산해 x를 업데이트 하는 것인데 Langevin MCMC라고 부른다. x에 대한 특정 prior distribution를 \( \pi(x) \)라고 하고 거기서 출발해 아래와 같이 x를 T step동안 업데이트 해나간다.

이 방법이 가능한 이유는 energy based model에서 score function을 계산하면 아래와 같이 Z관련 항이 없어지면서 tractable해지기 때문이다.

굉장히 잘 작동하는 방식이고 현대의 state of the art 생성모델인 diffusion model의 근간이 되는 방법이다.

Donghun Ryou



Search the website


today visits :

31

total visits :

13418


Comments

답글 남기기