Basis

Energy Based Model

vision-cho 2025. 4. 11. 01:28

https://peaceful-scooter-f71.notion.site/EBM-1c69b589bd8e80aeb6a4fa80e12278b8

 

EBM | Notion

Motivation

peaceful-scooter-f71.notion.site

 

Motivation

🚨 기존의 문제점

  • Autoregressive Model

pθ(x1,x2,...,xn)=∏i=1npθ(xi∣x<i)

  • VAE

⇒ 제한된 모델 구조!

  • GAN

GAN의 경우에는 명시적으로 확률 분포 p(x)를 정의하지 않아도 됨.

⇒ 이전 모델과 달리, 구조적 제약 적고, 모델링 자유도 높음.

그러나 여전히 문제점 존재

  1. Likelihood가 정의되지 않음.
  1. unstable training
  1. hard to evaluate
  1. Mode Collapse

💡이러한 문제점들을 해결하고자 Energy-based model 제안

EBM의 특징으로는,

  1. 모델 선택의 유연함 ⇒ 아무 모델이나 사용해도 됨.
  2. 학습 안정 ⇒ GAN처럼 미니맥스 게임이 아님.
  3. 높은 퀄리티 생성
  4. 합성의 유연함 ⇒ Energy 를 정의하는 여러 함수를 자유롭게 더하거나 조합 가능 (정규화만 잘하면 됨)

Parameterizing probability distributions

p(x)를 정의하기 위해서는 2가지 조건 필요

  1. non-negative
  2. sum-to-one

이 중에서 1번 조건은 쉽게 만족시킬 수 있다.

자유롭게 g(x)를 정의하기 때문에 2번 조건을 따로 만족시켜줘야함.

만약 sum-to-one 의 조건이 없다면…

  • train set에 대한 p 값을 높였을 때, 다른 데이터에 비해 상대적으로 증가함을 보장할 수 없다.
  • 즉, train set에 대한 p 값을 높여도, 다른 데이터에서의 p 값 또한 높아질 수 있다.
  • 모든 p 의 값을 1로 설정하고, 파이 게임을 진행하기 위함.

위와 같은 이유로 normalization이 필요함.

p(x)를 정의할 때, 분자는 마음대로 정하고, 분모는 분자에 맞게 설정한다.

Energy-based model

최종적인 p(x)는 위와 같이 설정할 수 있다.

이때, g(x)를 exp(f(x))로 설정. ⇒ 왜 exponential 일까?

  • log-likelihood를 사용하려면, exponential 형태가 계산 편의.
  • 다양한 distribution은 exponential로 표현 가능.
  • EBM → 통계물리학에서 유래된 개념
  • Pros: EBM은 f(x)의 모델을 원하는 대로 자유롭게 설정할 수 있음.
  • Cons:

Training

pθ(xtrain)=exp⁡fθ(xtrain)Z(θ)

💡 train의 분포에 맞는 데이터가 주어지면 높은 likelihood 값을 출력하도록 모델 학습! 💡

Goal은 다른 생성 모델과 동일하지만, 이를 위해 수행하는 방법에서 차이가 있음.

log⁡pθ(xtrain)=log⁡(exp⁡fθ(xtrain))−log⁡(Z(θ))=fθ(xtrain)−log⁡(Z(θ))

✅ 학습 방법

  1. log-likelihood를 최대화
  2. log-likelihood의 gradient를 구할 수 있다면! gradient ascent 하자.
  3. 또는, negative log-likelihood를 gradient descent 하자.

모델을 학습시키기 위해선, (negative) log-likelihood의 gradient만 구하면 된다 !

아래와 같이 simplify

∇θlog⁡pθ(xtrain)=∇θfθ(xtrain)−∇θfθ(xsample)xsample∼exp⁡fθ(xsample)Z(θ)(=pθ(xsample))

여전히 Z 를 구할 수 없기 때문에 x_sample을 구하기 어려움.

Z를 못 구한다는 문제점을 우회하나 했으나, 샘플링 과정에서 다시 문제점 만남.

MCMC라는 것을 이용해서 샘플링을 approximation 한다 !!

Sampling from energy-based models

sampling에는 총 2가지 방법이 있음.

  • Metropolis-Hastings
  • Langevin
  1. 아무런 분포에서 x0 생성
  2. 현재 상태의 x에 약간의 노이즈를 더해 새로운 후보 x’ 만듦
  3. x’의 f 값이 더 크다면 x’ 을 채택. ( f 가 크다는 것은 energy 가 더 작다는 것! ) ⇒ 더 그럴싸한 상태

x 업데이트 과정을 살펴보면,

∇xlog⁡pθ(xt)

해당 gradient를 더하면서 gradient ascent 하는 것을 볼 수 있다.

⇒ 결국은, log(p(x)) 값이 증가하는 방향으로 x가 업데이트 될 것이다 !

⇒ p(x) 분포에 근사한 x 를 뽑을 수 있을 것이다 !

MCMC 방식을 이용하여 x_sample을 구할 수 있다.

여러 iteration을 돌아야 한다는 단점이 있어, MCMC-free 방식인 score-matching approach도 존재.

basic code

training.py
sampling.py

🚩 주의할 점

본 코드는 f_theta를 모델의 아웃풋으로 삼음.

그러나 원본 레포에서는 E_theta를 모델의 아웃풋으로 설정함.

즉, 모델의 아웃풋의 부호가 반대인 상황!

편의를 위해 model output == - energy function (앞에서 언급)

 

'Basis' 카테고리의 다른 글

[논문 Review] Visual Instruction Tuning  (0) 2025.04.11
Training Neural Networks (study)  (0) 2024.11.18
Transformers (study)  (0) 2024.09.08
Generative Adversarial Nets  (0) 2024.09.01
Diffusion  (0) 2024.08.30