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)를 정의하지 않아도 됨.
⇒ 이전 모델과 달리, 구조적 제약 적고, 모델링 자유도 높음.
그러나 여전히 문제점 존재
- Likelihood가 정의되지 않음.
- unstable training
- hard to evaluate
- Mode Collapse
💡이러한 문제점들을 해결하고자 Energy-based model 제안

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

p(x)를 정의하기 위해서는 2가지 조건 필요
- non-negative
- 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)=expfθ(xtrain)Z(θ)
💡 train의 분포에 맞는 데이터가 주어지면 높은 likelihood 값을 출력하도록 모델 학습! 💡
Goal은 다른 생성 모델과 동일하지만, 이를 위해 수행하는 방법에서 차이가 있음.
logpθ(xtrain)=log(expfθ(xtrain))−log(Z(θ))=fθ(xtrain)−log(Z(θ))
✅ 학습 방법
- log-likelihood를 최대화
- log-likelihood의 gradient를 구할 수 있다면! gradient ascent 하자.
- 또는, negative log-likelihood를 gradient descent 하자.
모델을 학습시키기 위해선, (negative) log-likelihood의 gradient만 구하면 된다 !

아래와 같이 simplify
∇θlogpθ(xtrain)=∇θfθ(xtrain)−∇θfθ(xsample)xsample∼expfθ(xsample)Z(θ)(=pθ(xsample))
여전히 Z 를 구할 수 없기 때문에 x_sample을 구하기 어려움.
Z를 못 구한다는 문제점을 우회하나 했으나, 샘플링 과정에서 다시 문제점 만남.
MCMC라는 것을 이용해서 샘플링을 approximation 한다 !!
Sampling from energy-based models
sampling에는 총 2가지 방법이 있음.
- Metropolis-Hastings
- Langevin

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

x 업데이트 과정을 살펴보면,
∇xlogpθ(xt)
해당 gradient를 더하면서 gradient ascent 하는 것을 볼 수 있다.
⇒ 결국은, log(p(x)) 값이 증가하는 방향으로 x가 업데이트 될 것이다 !
⇒ p(x) 분포에 근사한 x 를 뽑을 수 있을 것이다 !
MCMC 방식을 이용하여 x_sample을 구할 수 있다.
여러 iteration을 돌아야 한다는 단점이 있어, MCMC-free 방식인 score-matching approach도 존재.
basic code
🚩 주의할 점
본 코드는 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 |
