Energy-Based Models¶
메타 정보¶
| 항목 | 내용 |
|---|---|
| 분류 | Generative Models / Probabilistic Modeling / Unsupervised Learning |
| 핵심 논문 | "A Tutorial on Energy-Based Learning" (LeCun et al., 2006) |
| 주요 저자 | Yann LeCun (NYU/Meta), Yilun Du (MIT), Igor Mordatch (Google DeepMind), Yang Song (OpenAI), Will Grathwohl (U of T) |
| 핵심 개념 | 데이터의 적합도를 스칼라 에너지 함수로 표현 -- 낮은 에너지 = 높은 확률 |
| 관련 시스템 | IGEBM, JEM, CDRL, Energy Matching, VAEBM, Cooperative EBM |
| 관련 분야 | Score Matching, Diffusion Models, Contrastive Learning, Anomaly Detection, Compositional Generation |
정의¶
Energy-Based Model (EBM)은 입력 데이터 x에 대해 스칼라 에너지 값 E(x)를 할당하는 함수를 학습하는 모델링 프레임워크다. 핵심 원칙은 "관측된 데이터에는 낮은 에너지를, 관측되지 않은 데이터에는 높은 에너지를 부여"하는 것이다.
핵심 프레임워크:
Boltzmann 분포를 통해 에너지를 확률로 변환:
p_theta(x) = exp(-E_theta(x)) / Z_theta
Z_theta = integral exp(-E_theta(x)) dx (분배 함수, partition function)
기호 정리:
E_theta(x): 파라미터 theta로 정의된 에너지 함수 (스칼라 출력)
p_theta(x): 데이터 x의 모델 확률
Z_theta: 정규화 상수 (분배 함수) -- 일반적으로 계산 불가능(intractable)
핵심 문제:
Z_theta는 전체 데이터 공간에 대한 적분이므로 고차원에서 계산 불가
-> EBM의 모든 학습 방법은 Z를 우회하거나 근사하는 전략에 기반
직관적 이해:
에너지 "지형"(landscape)을 상상
- 데이터가 많은 곳: 깊은 골짜기 (낮은 에너지)
- 데이터가 없는 곳: 높은 고원 (높은 에너지)
- 학습 목표: 데이터 분포에 맞는 에너지 지형 조각
배경: EBM의 역사와 위치¶
물리학에서 기계학습으로¶
통계물리학 기원:
1. Boltzmann Machine (Hinton & Sejnowski, 1983)
- 최초의 EBM
- 가시/은닉 유닛 간 완전 연결
- 학습: Gibbs sampling 기반 (느림)
2. Restricted Boltzmann Machine (Smolensky, 1986; Hinton, 2002)
- 층 내 연결 제거 -> 효율적 Gibbs sampling
- Contrastive Divergence로 학습 가능
- Deep Belief Network의 구성 요소
3. 현대적 EBM (Du & Mordatch, 2019)
- 임의의 딥 네트워크를 에너지 함수로 사용
- SGLD(Stochastic Gradient Langevin Dynamics)로 샘플링
- CIFAR-10 수준의 이미지 생성 달성
4. EBM 르네상스 (2020~현재)
- JEM: 분류기 = EBM (Grathwohl et al., ICLR 2020)
- Score Matching -> Diffusion Models로 주류화
- Energy Matching: Flow Matching과 EBM 통합 (Balcerak et al., NeurIPS 2025)
EBM의 범용 프레임워크 성격¶
많은 모델이 EBM의 특수 경우:
1. Softmax 분류기
E(x, y) = -f_y(x) (로짓이 음의 에너지)
p(y|x) = exp(f_y(x)) / sum_y' exp(f_y'(x))
2. Boltzmann Machine / RBM
E(v, h) = -b'v - c'h - v'Wh
p(v) = sum_h exp(-E(v,h)) / Z
3. Autoregressive Model
log p(x) = sum_t log p(x_t | x_{<t})
E(x) = -sum_t log p(x_t | x_{<t})
4. Diffusion Model (시간 조건부 EBM)
각 노이즈 레벨 sigma_t에서의 score
s(x, sigma_t) = -grad_x E_{sigma_t}(x)
5. Contrastive Learning (InfoNCE)
E(x, y) = -sim(f(x), g(y))
대조 손실 = EBM의 NCE 학습과 동치
학습 방법¶
핵심 문제: 분배 함수 Z¶
Maximum Likelihood 학습의 그래디언트:
grad_theta log p_theta(x) = -grad_theta E_theta(x) + E_{x'~p_theta}[grad_theta E_theta(x')]
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
양성 단계 (positive) 음성 단계 (negative)
양성 단계: 데이터의 에너지를 낮추라
음성 단계: 모델 분포에서 샘플한 점의 에너지를 높여라
문제: 음성 단계에서 p_theta(x')로부터의 샘플이 필요
-> Z를 모르므로 직접 샘플링 불가
-> MCMC 필요 (비용 높음)
해결책 분류:
1. MCMC 근사: CD, PCD, SGLD
2. Z 우회: Score Matching, DSM
3. Z 추정: NCE
4. 보조 모델: Adversarial, Cooperative Learning, Amortized MCMC
5. Diffusion 기반: DRL, CDRL, Energy Matching
1. Contrastive Divergence (CD)¶
Hinton (2002) -- RBM 학습의 돌파구
핵심 아이디어:
MLE의 음성 단계를 짧은 MCMC 체인으로 근사
CD-k 알고리즘:
입력: 데이터 x_0
1. x_0에서 시작하여 k번 MCMC 전이 (Gibbs sampling)
-> x_k 얻음
2. 그래디언트 계산:
delta_theta = -grad_theta E(x_0) + grad_theta E(x_k)
3. theta 업데이트
k=1 (CD-1):
가장 많이 사용
데이터에서 한 번만 Gibbs 전이
편향 있지만 실용적으로 충분
Persistent CD (PCD, Tieleman 2008):
MCMC 체인을 배치 간 유지 (초기화하지 않음)
체인이 평형에 더 가까이 도달
학습률이 크면 체인이 모델을 따라가지 못함
한계:
- k가 작으면 모델 분포의 불완전한 근사
- 고차원에서 mixing 느림
- 에너지 함수가 깊은 네트워크면 모드 탐색 어려움
2. Score Matching¶
Hyvarinen (2005) -- Z 없이 직접 학습
핵심 관찰:
Z는 theta에 무관할 수 있음 -> 그래디언트에서 소거
하지만 일반적으로는 Z가 theta에 의존
Score 정의:
s_theta(x) = grad_x log p_theta(x) = -grad_x E_theta(x)
s_data(x) = grad_x log p_data(x)
Score Matching 목적함수:
J(theta) = (1/2) E_{p_data}[ ||s_theta(x) - s_data(x)||^2 ]
s_data(x)를 모르지만, 부분적분으로 변환:
J(theta) = E_{p_data}[ tr(grad_x s_theta(x)) + (1/2)||s_theta(x)||^2 ] + const
-> p_data의 score를 알 필요 없이 최적화 가능
-> Hessian(grad_x s_theta) 계산 필요 (비용 높음)
3. Denoising Score Matching (DSM)¶
Vincent (2011) -- Score Matching의 실용적 변형
핵심 아이디어:
데이터에 노이즈를 추가하면 노이즈 분포의 score를 알 수 있음
알고리즘:
1. 데이터 x에 가우시안 노이즈 추가: x_tilde = x + sigma * epsilon
2. 노이즈 분포의 조건부 score:
grad_{x_tilde} log p(x_tilde|x) = -(x_tilde - x) / sigma^2
3. 이 score를 타겟으로 네트워크 학습:
L = E_{x, epsilon}[ ||s_theta(x_tilde) - (-(x_tilde - x)/sigma^2)||^2 ]
장점:
- Hessian 계산 불필요
- 간단한 MSE 손실
- 확장성 좋음
한계:
- 단일 노이즈 레벨: 데이터 분포가 아닌 노이즈 분포의 score를 학습
-> 해결: 다중 스케일 DSM (Song & Ermon, 2019) = NCSN
-> 극한: 연속 노이즈 스케줄 = Diffusion Model (Song et al., 2021)
4. Noise Contrastive Estimation (NCE)¶
Gutmann & Hyvarinen (2010) -- 분류 문제로 변환
핵심 아이디어:
"이 샘플이 데이터인가, 노이즈인가?"를 구분하는 분류 문제
-> Z가 학습 가능한 파라미터로 추정됨
설정:
- 데이터 분포 p_data(x)에서 n개 샘플
- 노이즈 분포 p_noise(x)에서 kn개 샘플
- k: 노이즈 비율 (하이퍼파라미터)
분류 학습:
D(x) = log p_theta(x) - log(k * p_noise(x))
L = E_{p_data}[log sigmoid(D(x))] + k * E_{p_noise}[log sigmoid(-D(x))]
log p_theta(x) = -E_theta(x) - log Z_theta
Z_theta를 학습 가능 파라미터 c로 대체:
log p_theta(x) = -E_theta(x) + c
최적해에서 c = -log Z_theta
노이즈 분포 선택:
- 균일 분포: 가장 간단
- 가우시안: 연속 데이터에 적합
- 데이터 기반: 적응적 NCE
한계:
- 노이즈 분포가 데이터와 너무 다르면 분류가 쉬워져 학습 비효율
- 고차원에서 적절한 노이즈 분포 선택 어려움
5. Langevin Dynamics 기반 학습 (SGLD)¶
Du & Mordatch (2019) -- 현대적 EBM의 부활
Stochastic Gradient Langevin Dynamics:
x_{t+1} = x_t - (alpha/2) * grad_x E_theta(x_t) + sqrt(alpha) * z_t
z_t ~ N(0, I)
학습 알고리즘:
for each batch:
1. 버퍼에서 x^- 초기화 (95% 버퍼, 5% 랜덤)
2. K 스텝 SGLD로 x^- 정제
3. 손실: L = E_theta(x^+) - E_theta(x^-) (x^+: 데이터)
4. theta 업데이트
샘플 버퍼 (Replay Buffer):
핵심 기법 -- 이전 MCMC 샘플을 재사용
- 매번 랜덤에서 시작하면 mixing 느림
- 버퍼에서 시작하면 이미 에너지가 낮은 근처에서 출발
- 점진적으로 모델 분포에 수렴
안정화 기법:
1. 에너지 정규화: L_reg = alpha * (E(x^+)^2 + E(x^-)^2)
-> 에너지 값이 발산하는 것을 방지
2. Spectral normalization: 네트워크 가중치 정규화
3. 그래디언트 클리핑: SGLD 스텝의 안정화
6. Diffusion Recovery Likelihood (DRL)¶
Gao et al. (ICLR 2021) -- Diffusion과 EBM의 결합
핵심 아이디어:
전체 데이터 분포 대신, 노이즈에서 복원하는 "조건부" 확률을 최대화
다중 노이즈 레벨 EBM:
sigma_0 < sigma_1 < ... < sigma_T
각 레벨에서 EBM 정의:
p_{theta,t}(x) = exp(-E_{theta,t}(x)) / Z_{theta,t}
Recovery Likelihood:
한 레벨 높은 노이즈 버전 x_tilde가 주어졌을 때
한 레벨 낮은 복원의 조건부 확률 최대화
L = E_{x~data, epsilon}[ -log p_{theta,t}(x | x_tilde_{t+1}) ]
장점:
- 전체 Z 대신 조건부 Z만 계산 (더 작은 영역)
- Diffusion의 안정성 + EBM의 유연성
- CIFAR-10 FID 9.58 달성
Cooperative DRL (CDRL, Gao et al., ICLR 2024):
- 보조 초기화 모델(initializer)을 함께 학습
- 초기화 모델: MCMC의 시작점 제공
- EBM: 초기화 모델의 출력을 정제
- 두 모델이 협력하여 학습 효율 극대화
- CIFAR-10 FID 3.03 달성 (EBM SOTA)
7. Energy Matching¶
Balcerak et al. (NeurIPS 2025) -- Flow Matching과 EBM의 통합
핵심 관찰:
Flow Matching은 벡터장(velocity field)을 학습
이 벡터장이 보존적(conservative)이면 스칼라 포텐셜이 존재
-> 그 포텐셜 = 에너지 함수
Energy Matching 목적함수:
E_theta(x)를 학습하되,
-grad_x E_theta(x)가 Flow Matching의 벡터장과 일치하도록
L = E_{t, x_t}[ ||-grad_x E_theta(x_t) - v_t(x_t)||^2 ]
특징:
- 시간 조건 없는 단일 에너지 함수
- 보조 생성기/네트워크 불필요
- Flow Matching의 안정된 학습 + EBM의 밀도 추정 능력
- MCMC 없이 학습 가능
의의:
EBM의 고질적 문제(MCMC 학습, 불안정)를 해결하면서
에너지 함수의 해석 가능성을 유지하는 새로운 방향
샘플링 방법 상세¶
학습된 EBM에서 새 샘플을 생성하는 것이 핵심 도전
1. Langevin Dynamics (LD / SGLD)
x_{t+1} = x_t - (alpha/2) * grad_x E(x_t) + sqrt(alpha) * z_t
특성:
- 에너지 그래디언트를 따라 하강 + 확률적 탐색
- 스텝 수가 충분하면 p_theta(x)로 수렴
- 실제로는 100~1000 스텝 필요 (느림)
- 모드 간 전환 어려움 (에너지 장벽)
2. Hamiltonian Monte Carlo (HMC)
보조 운동량 변수 v 도입:
H(x, v) = E(x) + (1/2)||v||^2
Leapfrog 적분기로 (x, v) 궤적 시뮬레이션
-> LD보다 효율적인 탐색
-> 고차원에서도 빠른 mixing
3. Amortized MCMC
별도의 생성기 g_phi(z)가 MCMC 초기점 제공:
a) z ~ N(0, I)
b) x_0 = g_phi(z) -- 좋은 시작점
c) x_K = SGLD(x_0, K) -- 소수 스텝으로 정제
-> 100+ 스텝 -> 10~20 스텝으로 단축
-> 생성기와 EBM을 교대 학습
4. Annealed MCMC (Simulated Annealing)
고온(높은 노이즈)에서 시작하여 점진적으로 냉각
-> 에너지 장벽을 넘기 쉬움
-> Diffusion의 역과정과 유사
5. 결정론적 샘플링
ODE 형태로 변환 (probability flow):
dx/dt = -grad_x E(x_t)
-> 노이즈 없이 에너지 최소화
-> 다양성 부족하지만 빠름
조합 가능성 (Compositionality)¶
EBM의 가장 독특한 강점:
여러 EBM의 에너지를 합산하여 새로운 모델 생성
AND 조합 (교집합):
E_{A AND B}(x) = E_A(x) + E_B(x)
p_{A AND B}(x) proportional to p_A(x) * p_B(x)
OR 조합 (합집합):
E_{A OR B}(x) = -log(exp(-E_A(x)) + exp(-E_B(x)))
p_{A OR B}(x) proportional to p_A(x) + p_B(x)
NOT 부정:
E_{NOT A}(x) = -E_A(x)
예시: 이미지 생성에서의 조합
E("빨간 자동차")(x)
= E("빨간")(x) + E("자동차")(x)
각 속성을 독립적으로 학습하고 조합 -> 조합 폭발 문제 우회
학습 시 본 적 없는 속성 조합도 생성 가능
Du & Mordatch (2020) "Compositional Visual Generation with Energy Based Models":
- 색상, 위치, 크기를 독립 EBM으로 학습
- 테스트 시 조합하여 새로운 장면 생성
- 학습 데이터에 없는 조합도 성공
Liu et al. (2022) "Compositional Visual Generation with Composable Diffusion Models":
- Diffusion에서도 동일 원리 적용
- Classifier-free guidance의 일반화
주요 아키텍처¶
Implicit Generation EBM (IGEBM)¶
Du & Mordatch (2019)
아키텍처:
- Wide ResNet을 에너지 함수로 사용
- 입력: 이미지 x
- 출력: 스칼라 에너지 E(x)
- 최종 풀링 후 단일 linear layer
학습:
- SGLD로 음성 샘플 생성
- 샘플 버퍼 활용
- 에너지 정규화
결과:
- CIFAR-10: 생성 + OOD 탐지
- 첫 현대적 심층 EBM
Joint Energy Model (JEM)¶
Grathwohl et al. (ICLR 2020)
핵심 관찰:
표준 분류기의 로짓을 재해석하면 EBM이 됨
분류기: p(y|x) = softmax(f(x))
f_y(x) = -E(x, y)로 정의하면:
p(x, y) = exp(f_y(x)) / Z
p(y|x) = exp(f_y(x)) / sum_{y'} exp(f_{y'}(x)) -- 기존 분류기와 동일
p(x) = sum_y exp(f_y(x)) / Z -- 생성 모델
E(x) = -logsumexp_y f_y(x) -- OOD 점수
하나의 네트워크로:
1. 분류 (p(y|x))
2. 생성 (SGLD로 p(x)에서 샘플링)
3. OOD 탐지 (E(x) 기반)
4. 보정된 불확실성
학습:
L = L_classification + L_generative
L_generative = MLE + SGLD 샘플링
결과 (CIFAR-10):
- 분류 정확도: 92.9%
- OOD 탐지 AUROC: 0.67 (SVHN)
- FID: 38.2
-> 개별 전문 모델보다는 낮지만, 단일 모델로 세 가지 수행
VAEBM¶
Xiao et al. (NeurIPS 2021)
핵심:
VAE의 decoder를 EBM으로 대체
기존 VAE: p(x|z) = N(x; mu(z), sigma(z))
VAEBM: p(x|z) proportional to exp(-E_theta(x, z)) * p_0(x|z)
p_0: 기본 가우시안 decoder
E_theta: 잔차 에너지 보정
장점:
- VAE의 빠른 잠재 샘플링 + EBM의 날카로운 생성
- 소수 MCMC 스텝으로 품질 대폭 개선
- CIFAR-10 FID 12.2 (당시 EBM SOTA)
응용 분야¶
1. Out-of-Distribution (OOD) 탐지¶
EBM의 가장 자연스러운 응용:
원리:
E(x)가 높으면 -> 학습 분포 밖 (이상치)
E(x)가 낮으면 -> 학습 분포 내 (정상)
장점 (vs 다른 방법):
- Softmax 확률보다 더 날카로운 경계
(Softmax는 OOD 입력에도 높은 확률 할당 가능)
- VAE의 ELBO보다 직접적인 밀도 추정
- 별도 OOD 학습 데이터 불필요
JEM OOD 탐지:
E(x) = -logsumexp_y f_y(x)
임계값 설정: E(x) > tau이면 OOD
Manifold Projection-Diffusion Recovery (MPDR, NeurIPS 2024):
- 데이터의 저차원 매니폴드를 활용
- 매니폴드를 따라 섭동 후 복원 에너지 측정
- 산업 결함 탐지에 적용
GAD-EBM (KDD 2024):
- 그래프 이상 탐지에 EBM 적용
- 노드/엣지 레벨의 에너지 점수 정의
- 사이버 보안, 금융 사기 탐지에 응용
2. 조합적 생성 (Compositional Generation)¶
여러 속성을 독립 EBM으로 학습 후 조합:
E_total(x) = w_1 * E_1(x) + w_2 * E_2(x) + ...
Du et al. (2020):
- 2D/3D 장면 생성에서 객체별 에너지 조합
- 학습에 없는 조합도 생성 가능
Diffusion으로의 확장 (Liu et al., 2022):
- Composable Diffusion Models
- 각 조건을 score로 분해
- score 합산 = 에너지 합산과 동치
실용적 의의:
- 레이블 조합 폭발 없이 새로운 조합 생성
- 제로샷 조합 일반화
- 각 속성 모델을 독립적으로 학습/업데이트 가능
3. 강화학습¶
보상/정책을 에너지로 모델링:
역강화학습 (IRL):
전문가 시연의 보상 함수를 EBM으로 학습
R(s, a) = -E(s, a)
전문가 행동 = 낮은 에너지
목표 조건부 정책:
E(s, a, g) = 목표 g를 달성하지 못하는 정도
에너지 최소화 = 목표 달성
Florence et al. (2022) "Implicit Behavioral Cloning":
- 행동을 EBM으로 암묵적 모델링
- 다중 모달 행동 분포 포착
- 로봇 조작에서 SOTA
4. 단백질 구조 예측¶
물리적 에너지 함수와의 자연스러운 연결:
E(structure) = E_bond + E_angle + E_torsion + E_vdW + E_electrostatic + E_learned
학습된 에너지 항이 물리적 에너지를 보완
Du et al. (2024): 단백질 설계에 EBM 활용
- 조합적 에너지로 다중 속성 최적화
- 안정성 + 결합 친화력 + 용해성 동시 고려
Python 예시¶
기본 EBM 학습 (SGLD)¶
import torch
import torch.nn as nn
class EnergyNet(nn.Module):
"""스칼라 에너지를 출력하는 네트워크."""
def __init__(self, input_dim: int, hidden_dim: int = 128):
super().__init__()
self.net = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.SiLU(),
nn.Linear(hidden_dim, hidden_dim),
nn.SiLU(),
nn.Linear(hidden_dim, 1),
)
def forward(self, x: torch.Tensor) -> torch.Tensor:
return self.net(x).squeeze(-1)
def sgld_sample(
energy_fn: nn.Module,
x_init: torch.Tensor,
n_steps: int = 100,
step_size: float = 0.01,
noise_scale: float = 0.005,
) -> torch.Tensor:
"""Stochastic Gradient Langevin Dynamics 샘플링."""
x = x_init.clone().detach().requires_grad_(True)
for _ in range(n_steps):
energy = energy_fn(x).sum()
grad = torch.autograd.grad(energy, x)[0]
noise = torch.randn_like(x) * noise_scale
x = x.detach() - (step_size / 2) * grad + noise
x.requires_grad_(True)
return x.detach()
def train_ebm(
model: EnergyNet,
data_loader,
buffer_size: int = 10000,
sgld_steps: int = 60,
n_epochs: int = 100,
lr: float = 1e-4,
reg_alpha: float = 0.1,
):
"""CD + SGLD + Replay Buffer로 EBM 학습."""
optimizer = torch.optim.Adam(model.parameters(), lr=lr)
# 리플레이 버퍼 초기화
buffer = torch.randn(buffer_size, data_loader.dataset[0].shape[0])
for epoch in range(n_epochs):
for x_pos in data_loader:
batch_size = x_pos.shape[0]
# 버퍼에서 95%, 랜덤 5%로 초기화
n_replay = int(0.95 * batch_size)
idx = torch.randint(0, buffer_size, (n_replay,))
x_neg_init = torch.cat([
buffer[idx],
torch.randn(batch_size - n_replay, x_pos.shape[1]),
])
# SGLD로 음성 샘플 생성
x_neg = sgld_sample(model, x_neg_init, n_steps=sgld_steps)
# 버퍼 업데이트
buffer[idx] = x_neg[:n_replay]
# 에너지 계산
e_pos = model(x_pos)
e_neg = model(x_neg)
# Contrastive Divergence 손실 + 정규화
loss = e_pos.mean() - e_neg.mean()
loss += reg_alpha * (e_pos ** 2 + e_neg ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch {epoch}: E+ = {e_pos.mean():.3f}, E- = {e_neg.mean():.3f}")
JEM: 분류기를 EBM으로 사용¶
import torch
import torch.nn as nn
import torch.nn.functional as F
class JEM(nn.Module):
"""Joint Energy Model: 분류기 = EBM."""
def __init__(self, backbone: nn.Module, n_classes: int):
super().__init__()
self.backbone = backbone # 로짓 출력 네트워크
self.n_classes = n_classes
def logits(self, x: torch.Tensor) -> torch.Tensor:
"""로짓 = -E(x, y)."""
return self.backbone(x)
def energy(self, x: torch.Tensor) -> torch.Tensor:
"""E(x) = -logsumexp_y f_y(x)."""
logits = self.logits(x)
return -torch.logsumexp(logits, dim=-1)
def classify(self, x: torch.Tensor) -> torch.Tensor:
"""p(y|x) = softmax(f(x))."""
return F.softmax(self.logits(x), dim=-1)
def is_ood(self, x: torch.Tensor, threshold: float = 0.0) -> torch.Tensor:
"""에너지 기반 OOD 탐지."""
return self.energy(x) > threshold
def train_jem(
model: JEM,
data_loader,
sgld_steps: int = 20,
n_epochs: int = 50,
lr: float = 1e-4,
):
"""JEM 학습: 분류 + 생성 동시 학습."""
optimizer = torch.optim.Adam(model.parameters(), lr=lr)
for epoch in range(n_epochs):
for x, y in data_loader:
# 1. 분류 손실
logits = model.logits(x)
loss_cls = F.cross_entropy(logits, y)
# 2. 생성 손실 (CD)
x_neg = sgld_sample(
lambda inp: model.energy(inp),
torch.randn_like(x),
n_steps=sgld_steps,
)
loss_gen = model.energy(x).mean() - model.energy(x_neg).mean()
# 3. 전체 손실
loss = loss_cls + loss_gen
optimizer.zero_grad()
loss.backward()
optimizer.step()
조합적 생성¶
def compose_energies(
energy_fns: list,
weights: list[float] | None = None,
) -> callable:
"""여러 EBM을 AND 조합 (에너지 합산)."""
if weights is None:
weights = [1.0] * len(energy_fns)
def composed_energy(x: torch.Tensor) -> torch.Tensor:
total = sum(w * fn(x) for w, fn in zip(weights, energy_fns))
return total
return composed_energy
# 사용 예시:
# e_red = EnergyNet(...) -- "빨간" 속성의 에너지
# e_car = EnergyNet(...) -- "자동차" 속성의 에너지
# e_combined = compose_energies([e_red, e_car])
# samples = sgld_sample(e_combined, x_init, n_steps=200)
평가 지표¶
1. FID (Frechet Inception Distance)
생성 이미지의 품질과 다양성 동시 측정
낮을수록 좋음
기준: CIFAR-10에서 CDRL FID 3.03 (EBM SOTA)
2. IS (Inception Score)
생성 이미지의 선명도와 다양성
높을수록 좋음
3. Log-Likelihood
비정규화 EBM에서는 직접 계산 불가
AIS(Annealed Importance Sampling)로 근사
또는 DRL에서 recovery likelihood로 대체
4. OOD Detection Metrics
AUROC, AUPRC, FPR@95TPR
에너지 점수 기반 이진 분류 평가
5. Calibration
ECE (Expected Calibration Error)
JEM 등에서 확률 보정 품질 평가
EBM과 Diffusion의 관계¶
Diffusion Model은 시간 조건부 EBM의 특수 경우:
Score Matching 관점:
각 노이즈 레벨 sigma_t에서:
s_theta(x, t) = -grad_x E_theta(x, t) = grad_x log p_t(x)
Diffusion = 연속 노이즈 스케줄에서의 score 학습
EBM = 단일 (또는 소수) 에너지 함수
Diffusion이 EBM보다 성공적인 이유:
1. Z 문제 회피: MSE 손실로 직접 score 학습
2. MCMC 불필요: 결정론적/확률적 역과정
3. 안정적 학습: 단순한 회귀 문제로 환원
4. 다중 스케일: 거친 구조 -> 세부 디테일 순차 생성
EBM의 반격:
Energy Matching (NeurIPS 2025):
- Diffusion의 학습 안정성 + EBM의 밀도 추정
- 시간 조건 없는 단일 에너지 함수
- MCMC 없이 Flow Matching 프레임워크로 학습
향후 전망:
- EBM과 Diffusion의 경계가 흐려지는 추세
- EBM의 이론적 우아함 + Diffusion의 실용성 통합
- 조합적 생성, OOD 탐지에서 EBM의 고유 장점 유지
한계 및 주의사항¶
1. 느린 샘플링
- MCMC 기반 샘플링은 본질적으로 순차적이고 느림
- 100~1000+ 스텝 필요 (Diffusion의 20~50 스텝 대비)
- 해결: Amortized MCMC, 짧은 체인 + 보조 생성기
- Energy Matching: MCMC 없이 ODE 샘플링 가능
2. 불안정한 학습
- 에너지 값 발산 (양/음 에너지가 무한대로)
- MCMC 체인 발산 (비현실적 이미지 생성)
- 해결: 에너지 정규화, spectral normalization, 그래디언트 클리핑
3. 모드 커버리지 부족
- MCMC가 에너지 장벽을 넘지 못해 일부 모드만 탐색
- 다중 모달 분포에서 특히 문제
- 해결: 템퍼링, 다중 체인, annealed sampling
4. 평가의 어려움
- Z를 모르므로 log-likelihood 직접 계산 불가
- AIS로 근사 가능하나 비용 높음
- FID/IS는 생성 품질만 측정, 밀도 추정 품질 미반영
5. 고차원 확장성
- 이미지 공간(pixel-level) EBM은 확장 어려움
- 잠재 공간(latent) EBM이 실용적 대안
- 해결: VAEBM, Latent EBM 계열
6. 하이퍼파라미터 민감도
- SGLD 스텝 크기, 스텝 수, 버퍼 크기, 정규화 강도 등
- 잘못 설정하면 학습 실패
- 해결: DRL/CDRL은 상대적으로 안정적
관련 연구 흐름¶
Boltzmann Machine (Hinton & Sejnowski, 1983)
|
+-- RBM (Smolensky, 1986; Hinton, 2002)
| |
| +-- Deep Belief Networks (Hinton et al., 2006)
| +-- Contrastive Divergence (Hinton, 2002)
|
+-- Score Matching (Hyvarinen, 2005)
| |
| +-- Denoising Score Matching (Vincent, 2011)
| +-- Sliced Score Matching (Song et al., 2019)
| +-- NCSN (Song & Ermon, NeurIPS 2019)
| |
| +-- Score SDE / Diffusion (Song et al., ICLR 2021)
|
+-- NCE (Gutmann & Hyvarinen, 2010)
| |
| +-- InfoNCE / Contrastive Learning (Oord et al., 2018)
|
+-- Modern Deep EBM (Du & Mordatch, NeurIPS 2019)
| |
| +-- JEM (Grathwohl et al., ICLR 2020)
| +-- Compositional EBM (Du et al., NeurIPS 2020)
| +-- VAEBM (Xiao et al., NeurIPS 2021)
|
+-- Diffusion Recovery (Gao et al., ICLR 2021)
| |
| +-- CDRL (Gao et al., ICLR 2024)
|
+-- Energy Matching (Balcerak et al., NeurIPS 2025)
| |
| +-- Flow Matching + EBM 통합
|
+-- Convex Potential Mirror Langevin (Yang et al., NeurIPS 2025)
|
+-- 효율적 MCMC 샘플링
참고 자료¶
핵심 논문¶
- LeCun, Y. et al. (2006). A Tutorial on Energy-Based Learning. In Predicting Structured Data.
- Hinton, G. (2002). Training Products of Experts by Minimizing Contrastive Divergence. Neural Computation.
- Du, Y. & Mordatch, I. (2019). Implicit Generation and Modeling with Energy Based Models. NeurIPS 2019.
- Grathwohl, W. et al. (2020). Your Classifier is Secretly an Energy Based Model and You Should Treat It Like One. ICLR 2020.
Score Matching / Diffusion 관련¶
- Hyvarinen, A. (2005). Estimation of Non-Normalized Statistical Models by Score Matching. JMLR.
- Vincent, P. (2011). A Connection Between Score Matching and Denoising Autoencoders. Neural Computation.
- Song, Y. & Ermon, S. (2019). Generative Modeling by Estimating Gradients of the Data Distribution. NeurIPS 2019.
최신 연구¶
- Gao, R. et al. (2021). Learning Energy-Based Models by Diffusion Recovery Likelihood. ICLR 2021.
- Gao, R. et al. (2024). Learning Energy-Based Models by Cooperative Diffusion Recovery Likelihood. ICLR 2024.
- Balcerak, M. et al. (2025). Energy Matching: Unifying Flow Matching and Energy-Based Models for Generative Modeling. NeurIPS 2025.
- Yang, Z. et al. (2025). Convex Potential Mirror Langevin Algorithm for Efficient Sampling of Energy-Based Models. NeurIPS 2025.
관련 개념¶
- Contrastive Learning: InfoNCE와 EBM의 연결
- Flow Matching: Energy Matching의 기반
- Anomaly Detection: EBM의 핵심 응용
- Consistency Models: 빠른 샘플링 대안
- Score Matching / Diffusion: EBM의 특수 경우