Diffusion Models
확산 모델은 점진적으로 노이즈를 추가하는 과정을 역으로 학습해, 순수한 노이즈에서 새로운 샘플로 한 단계씩 변환하여 이미지, 동영상, 오디오를 생성합니다.
확산 모델은 점진적인 노이즈 추가 과정을 되돌리는 방법을 학습해 데이터를 생성하는 생성형 AI 모델입니다. 학습 중 이미지나 기타 데이터에 여러 작은 단계에 걸쳐 가우시안 노이즈를 추가하고, 신경망은 각 단계에서 노이즈를 예측하는 방법을 학습합니다. 생성 시 모델은 완전히 무작위인 노이즈에서 시작해 새 샘플이 나타날 때까지 단계적으로 노이즈를 제거합니다. Jascha Sohl-Dickstein과 동료들은 2015년 비평형 열역학을 이용한 심층 비지도 학습에서 이 접근 방식을 제안했습니다. Jonathan Ho, Ajay Jain, Pieter Abbeel은 2020년 잡음 제거 확률적 확산 모델(DDPM)로 경쟁력 있는 성능을 달성했으며, 이 모델은 CIFAR-10에서 최첨단 FID 3.17을 기록했습니다. 2021년 OpenAI 연구진은 확산 모델이 ImageNet 이미지 합성에서 GAN보다 뛰어나다는 점을 보였으며, 현재 확산 모델과 플로 매칭 계열 모델은 텍스트-이미지 시스템인 Stable Diffusion, 동영상 생성기, 이미지 편집기, 과학 모델을 구동합니다.
확산 모델의 작동 방식#
순방향 과정은 학습되는 것이 아니라 고정되어 있습니다. T개 단계마다 가우시안 노이즈를 조금씩 추가합니다. DDPM은 단계별 노이즈 분산이 0.0001에서 0.02까지 선형으로 증가하도록 설정하고 T = 1,000을 사용합니다. 가우시안 노이즈의 합도 가우시안 분포를 따르므로, 학습 이미지는 폐형식으로 임의의 단계 t로 바로 이동할 수 있습니다. xt = sqrt(alpha_bar_t) * x0 + sqrt(1 - alpha_bar_t) * noise에서 alpha_bar_t은 처음 t개 단계에 대한 1 - beta의 곱입니다. 학습 과정에서는 이미지와 임의의 단계, 새로운 노이즈를 반복해서 선택해 xt을 만들고, DDPM의 단순화된 목적 함수인 평균 제곱 오차를 사용해 네트워크가 해당 노이즈를 예측하도록 학습합니다. 다음 코드는 DDPM의 스케줄을 사용해 사진에 순방향 과정을 적용합니다.
import urllib.request
import numpy as np
import torch
from PIL import Image
# DDPM's linear schedule: 1,000 steps whose noise variance rises from 0.0001 to 0.02
betas = torch.linspace(1e-4, 0.02, 1000)
alpha_bar = torch.cumprod(1 - betas, dim=0)
# Load a photo and scale its pixels to [-1, 1]
image = Image.open(urllib.request.urlopen("https://ultralytics.com/images/bus.jpg")).convert("RGB").resize((256, 256))
x0 = torch.tensor(np.array(image), dtype=torch.float32).permute(2, 0, 1) / 127.5 - 1
# Jump straight to step t in closed form: x_t = sqrt(alpha_bar) * x0 + sqrt(1 - alpha_bar) * noise
frames = []
for t in (0, 99, 299, 599, 999):
xt = alpha_bar[t].sqrt() * x0 + (1 - alpha_bar[t]).sqrt() * torch.randn_like(x0)
frames.append(((xt.clamp(-1, 1) + 1) * 127.5).byte().permute(1, 2, 0).numpy())
print(f"step {t + 1}: image weight {alpha_bar[t].sqrt():.3f}, noise weight {(1 - alpha_bar[t]).sqrt():.3f}")
Image.fromarray(np.hstack(frames)).save("forward_diffusion.jpg")이미지 가중치는 1단계의 1.000에서 100단계의 0.947, 300단계의 0.630, 600단계의 0.161, 1,000단계의 0.006으로 낮아지고, 노이즈 가중치는 1.000까지 높아집니다. 저장된 forward_diffusion.jpg에는 버스가 선명하게 보이다가 점차 거칠고 희미해진 뒤 사라지는 모습이 나타납니다.
생성은 이 과정을 역방향으로 실행합니다. 완전히 무작위인 가우시안 노이즈에서 시작해 각 단계에서 네트워크가 현재 샘플의 노이즈를 예측하고, 솔버가 그 일부를 제거한 뒤 조금 더 깨끗해진 결과를 다음 단계에 전달합니다. 텍스트 프롬프트나 클래스 레이블은 조건으로 네트워크에 입력되며, 흔히 교차 어텐션을 사용합니다. Jonathan Ho와 Tim Salimans가 도입한 무분류기 안내는 하나의 네트워크를 조건이 있는 경우와 없는 경우 모두 학습하고, 샘플링 시 무조건부 예측을 조건부 예측 방향으로 외삽합니다. Stable Diffusion 1.x 파이프라인의 기본값인 7.5와 같이 안내 스케일을 높이면 다양성이 줄어드는 대신 프롬프트를 더 충실하게 따릅니다.
샘플링 속도 높이기#
DDPM 샘플링은 이미지 하나당 네트워크를 1,000회 평가하므로, 이 분야의 발전은 대부분 평가 횟수를 줄이는 데 집중되어 왔습니다.
- 더 나은 샘플러: DDIM은 결정론적 샘플러로 학습된 DDPM을 재사용하며, 실제 소요 시간 기준으로 10~50배 빠르게 고품질 샘플을 생성합니다. 이후 개발된 ODE 솔버는 일반적인 생성 단계를 약 20~50회로 줄입니다.
- 잠재 확산: 잠재 확산 모델은 픽셀 대신 오토인코더의 압축 표현에서 노이즈를 제거합니다. Stable Diffusion의 오토인코더는 512×512×3 이미지를 64×64×4 잠재 표현으로 변환해 값의 수를 48배 줄입니다.
- 증류: 일관성 모델은 모든 노이즈 샘플을 깨끗한 샘플로 직접 변환하는 방법을 학습해 한 단계 생성을 가능하게 합니다. 잠재 일관성 모델은 동일한 개념을 Stable Diffusion에 적용해 2~4단계로 생성합니다.
- 더 직선적인 경로: 플로 매칭과 직선화 플로는 솔버가 더 적은 단계로 따라갈 수 있는 노이즈에서 데이터로 이어지는 직선 경로를 따라 학습합니다.
노이즈 제거 네트워크 자체는 DDPM과 Stable Diffusion 1.x의 합성곱 U-Net에서 현재 대부분의 이미지 및 동영상 생성기에 사용되는 확산 트랜스포머(DiT)로 발전했습니다.
확산 모델과 다른 생성 모델 비교#
- 생성적 적대 신경망(GAN): GAN은 순방향 패스 한 번으로 샘플을 생성하지만, 생성기와 판별기 간의 적대적 학습은 불안정성 및 모드 붕괴를 일으키기 쉽습니다. 모드 붕괴가 발생하면 생성기가 데이터의 일부만 포괄하게 됩니다. 확산 모델의 학습은 안정적인 회귀 방식이며 데이터 분포를 더 완전하게 포괄하지만, 샘플링 단계가 많이 필요합니다.
- 변분 오토인코더(VAE): VAE는 한 번의 패스로 잠재 벡터를 샘플로 디코딩하며, 생성된 샘플은 대체로 더 흐릿합니다. 잠재 확산 모델은 이미지를 압축할 때만 VAE 방식의 오토인코더를 사용하고, 생성은 확산 모델에 맡깁니다.
- 자기회귀 모델: 언어 모델과 시각 자기회귀 모델은 이전에 생성된 내용을 조건으로 한 번에 토큰 또는 스케일 하나씩 생성합니다. 확산 모델은 각 단계에서 샘플의 모든 부분을 병렬로 정제하며, 확산 언어 모델은 동일한 노이즈 제거 방식을 텍스트에 적용합니다.
실제 적용 사례#
- 이미지 생성 및 편집: 텍스트-이미지 모델은 프롬프트로 이미지를 만들고, 이미지 인페인팅은 마스킹된 영역을 주변 환경에 맞게 다시 생성합니다. ControlNet은 에지, 깊이 또는 포즈 맵으로 레이아웃을 제어하며, 확산 업스케일러는 초해상도 처리를 수행합니다.
- 동영상 생성: 동영상 생성 모델은 여러 프레임에 걸쳐 있는 압축 잠재 표현의 노이즈를 제거하므로, 각 프레임을 주변 프레임과 함께 생성합니다.
- 합성 학습 데이터: 생성된 이미지는 드문 결함, 이례적인 날씨, 흔치 않은 시점 등 비전 데이터셋의 부족한 부분을 보완합니다. Ultralytics Platform의 데이터셋에서 유사 이미지 생성 작업은 기존 이미지에서 영감을 얻어 배치당 1~16개의 새 이미지를 생성합니다. 선택한 이미지는 레이블 없이 데이터셋에 추가되어 주석을 달 수 있습니다.
- 로보틱스: 확산 정책은 카메라 이미지를 조건으로 삼고 노이즈 제거를 수행해 로봇 동작 시퀀스를 생성합니다.
- 과학: AlphaFold 3은 원자 좌표의 노이즈를 제거하는 확산 모듈을 사용해 단백질, 핵산, 소분자로 구성된 복합체의 구조를 예측하며, AlphaFold 2의 구조 모듈을 대체합니다.










