AI

디퓨전 모델(Diffusion Model)의 모든 것: 노이즈가 그림이 되는 과정과 정확도 향상 전략

marvin-jung 2026. 5. 15. 21:46
반응형
SMALL
디퓨전 모델(Diffusion Model)의 모든 것: 노이즈가 그림이 되는 과정과 정확도 향상 전략
학습과 추론을 단계별로 풀어보고, KV Cache가 필요 없는 이유와 FAISS의 의외의 활용법까지 정리합니다.
#디퓨전모델 #이미지생성AI #StableDiffusion #딥러닝

이미지 생성 AI는 어떻게 무작위 노이즈에서 정교한 그림을 만들어 낼까요? 그 비밀의 핵심에 디퓨전 모델(Diffusion Model)이 자리 잡고 있습니다. 이번 글에서는 디퓨전 모델의 학습과 추론 과정을 단계별로 풀어봅니다. 더불어 LLM에서 익숙한 KV Cache가 디퓨전에서는 왜 효력을 발휘하지 못하는지, 그리고 FAISS 같은 벡터 검색 도구가 의외의 자리에서 어떻게 활용되는지까지 정리해 보겠습니다.

01이미지 생성 AI는 정말 디퓨전 모델일까

현재 우리가 아는 대부분의 이미지 생성 서비스 — Stable Diffusion, Midjourney, DALL-E 3, Imagen — 의 핵심 엔진은 디퓨전 모델 계열입니다. 다만 한 가지 짚어둘 점이 있습니다. 최근 1~2년 사이에는 Flow Matching이나 Rectified Flow처럼 디퓨전을 일반화한 변형 모델들이 등장했고, Stable Diffusion 3나 Flux 같은 최신 모델은 엄밀히 말하면 이쪽 계열에 더 가깝습니다. 하지만 큰 그림에서 보면 모두 "노이즈에서 출발해 점진적으로 이미지를 만든다"는 같은 철학을 공유합니다.

이미지 생성에는 디퓨전 외에도 GAN(생성적 적대 신경망), VAE(변분 오토인코더), Autoregressive(자기회귀) 모델이 있습니다. 그러나 사실성과 다양성, 학습 안정성을 모두 만족하는 균형점이 디퓨전 쪽에서 잡혔기 때문에 사실상 표준이 되었습니다.

02디퓨전 모델의 핵심 아이디어: 두 방향의 여정

디퓨전 모델을 이해하는 가장 좋은 방법은 두 개의 화살표를 머릿속에 그리는 것입니다.

  • Forward Process(순방향, 학습용): 깨끗한 이미지에 조금씩 노이즈를 더해서, 결국 완전한 무작위 노이즈로 만듭니다.
  • Reverse Process(역방향, 추론용): 무작위 노이즈에서 출발해 노이즈를 조금씩 걷어내며 이미지를 복원(생성)합니다.

학습할 때는 모델이 "노이즈가 얼마나 끼어 있는지 맞추는 연습"을 합니다. 이렇게 학습된 모델이 추론 시에는 거꾸로 작동하면서 그림을 그려내는 것입니다. 시각적으로 보면 다음과 같습니다.

STEP 1순수 노이즈
STEP 2희미한 윤곽
STEP 3형태 등장
STEP 4색감 정착
STEP 5완성된 이미지
▲ 추론 단계: 무작위 노이즈에서 출발해 단계마다 노이즈를 제거하며 이미지를 만들어 갑니다.
i핵심 직관

대리석 덩어리 안에 이미 다비드상이 들어 있고, 미켈란젤로는 불필요한 부분만 깎아낸다는 비유가 있습니다. 디퓨전 모델도 비슷합니다. 노이즈 안에 잠재된 이미지를 단계마다 조금씩 "조각해 내는" 방식이라고 이해하시면 됩니다.

03학습(Training): 노이즈를 예측하는 연습

학습 단계에서 모델은 매우 단순한 임무를 반복 수행합니다.

  1. 학습 데이터셋에서 깨끗한 이미지 한 장을 가져옵니다.
  2. 0부터 T(보통 1000) 사이에서 무작위 시간 단계 t를 뽑습니다.
  3. 이미지에 t에 해당하는 양의 가우시안 노이즈를 더합니다.
  4. 모델(주로 U-Net 또는 DiT)에 노이즈 낀 이미지 + t + 텍스트 조건을 입력합니다.
  5. 모델은 "여기에 들어간 노이즈가 무엇이었는지" 예측합니다.
  6. 실제 노이즈와 예측 노이즈의 오차(MSE)를 줄이는 방향으로 가중치를 업데이트합니다.
Loss = E [ ‖ ε εθ(xt, t, c) ‖² ]

수식이 복잡해 보이지만 의미는 단순합니다. 실제로 더한 노이즈(ε)와 모델이 예측한 노이즈(εθ)의 차이를 줄이는 것입니다. 여기서 c는 텍스트 프롬프트 같은 조건(condition)으로, 보통 CLIP 같은 텍스트 인코더가 만든 임베딩이 들어갑니다.

04추론(Inference): 노이즈를 조금씩 걷어내기

학습이 끝난 모델로 그림을 그릴 때는 거꾸로 작동합니다. 단계별로 정리하면 이렇습니다.

TRAIN학습 단계
  • 입력: 깨끗한 이미지 + 텍스트 캡션
  • 이미지에 무작위 노이즈 주입
  • 모델이 노이즈 양을 예측
  • 예측 오차 최소화 (MSE Loss)
  • 수억~수십억 장 반복 학습
INFER추론 단계
  • 입력: 텍스트 프롬프트 + 무작위 노이즈
  • 모델이 매 스텝에서 노이즈 예측
  • 예측한 노이즈를 빼서 한 단계 깨끗하게
  • 20~50회 반복 (DDIM, DPM++ 샘플러)
  • 최종 결과물로 이미지 출력

학습 시에는 1000 스텝까지 가지만, 추론은 보통 20~50 스텝이면 충분합니다. DDIM, DPM++ 2M Karras, Euler a 같은 샘플러(스케줄러) 알고리즘이 학습된 모델 위에서 점프 간격을 조정해 주기 때문입니다. 같은 모델이라도 어떤 샘플러를 쓰느냐에 따라 속도와 품질이 달라집니다.

⚠ Latent Diffusion이라는 한 단계 진화

Stable Diffusion은 픽셀 공간이 아니라 VAE로 압축된 잠재 공간(latent space)에서 디퓨전을 수행합니다. 512×512 이미지를 64×64 잠재 벡터로 줄여 처리하기 때문에 GPU 메모리가 1/8 수준으로 줄고 속도는 훨씬 빨라집니다. 우리가 쓰는 대부분의 오픈소스 이미지 생성 모델은 이 방식입니다.

05그래서 KV Cache는 정말 필요 없을까

결론부터 말하자면, 디퓨전 모델에는 LLM 스타일의 KV Cache가 사실상 필요 없습니다. 두 모델의 동작 방식이 근본적으로 다르기 때문입니다. LLM과 비교해 보면 이유가 명확하게 드러납니다.

구분 LLM (자기회귀) 디퓨전 모델
생성 방식 토큰을 하나씩 차례대로 생성 이미지 전체를 동시에 단계적으로 정제
이전 결과 재사용 이전 토큰 K, V를 그대로 재활용 가능 매 스텝 입력이 달라져 K, V도 달라짐
캐싱 효과 속도가 수십 배 빨라짐 (필수) 같은 의미의 캐시는 효과 없음
병목 구간 토큰 길이 N에 따라 누적 스텝 수 T 만큼 U-Net 전체를 재실행

LLM의 KV Cache는 "앞에서 만든 토큰의 attention 결과를 다시 계산하지 않는 트릭"입니다. 그런데 디퓨전 모델은 토큰을 누적하지 않습니다. 매 스텝마다 64×64 잠재 텐서 전체를 통째로 입력해서 통째로 노이즈를 예측합니다. 이전 스텝의 입력과 현재 스텝의 입력이 다른 노이즈 레벨이라서, K와 V를 재사용해도 의미가 없습니다.

!다만 가속 캐싱은 따로 있습니다

LLM 스타일의 KV Cache는 아니지만, 디퓨전 전용 가속 기법은 활발히 연구됩니다. DeepCache, Block Caching, FORA 같은 방법은 인접한 스텝 사이에서 U-Net 내부 블록의 출력이 거의 변하지 않는다는 점을 이용해 일부 레이어 계산을 건너뜁니다. 또 DiT(Diffusion Transformer) 기반 모델에서는 텍스트 임베딩에 대한 cross-attention의 K, V는 모든 스텝에서 동일하므로 그것만큼은 캐싱이 가능합니다.

06정확도(품질)를 올리는 추가 학습 전략

디퓨전 모델의 결과물 품질을 끌어올리는 가장 직관적인 방법은 추가 학습입니다. 다만 무작정 데이터만 늘리는 것보다 목적에 맞는 적응(adaptation) 기법을 선택하는 것이 비용 대비 효과가 훨씬 좋습니다. 실무에서 많이 쓰이는 방법들을 정리해 봅니다.

Fine-tuning 전체 미세조정

사전학습된 모델 전체 가중치를 새 데이터로 다시 학습합니다. 가장 강력하지만 GPU 메모리와 시간이 많이 듭니다.

LoRA Low-Rank Adaptation

원본 가중치는 그대로 두고, 작은 저차원 행렬만 추가로 학습합니다. 보통 수십 MB로 끝나서 사실상 표준이 되었습니다.

DreamBooth 개인화 학습

특정 인물이나 캐릭터, 제품을 3~5장 이미지만으로 모델에 각인시킵니다. 고유 토큰을 부여해 기억하게 만드는 방식입니다.

Textual Inversion 임베딩 학습

모델은 건드리지 않고 새로운 단어 하나에 해당하는 임베딩 벡터만 학습합니다. 가장 가벼운 방법입니다.

ControlNet 조건 제어 추가

포즈, 깊이, 윤곽선 같은 추가 입력으로 결과물을 정밀하게 통제합니다. "이 자세로 그려라" 같은 지시가 가능해집니다.

RLHF / DPO 인간 선호 정렬

사람이 더 선호한 이미지에 가까워지도록 모델을 조정합니다. 미적 품질을 높이는 데 효과적입니다.

현업에서는 보통 LoRA + ControlNet 조합으로 시작합니다. 비용 대비 효과가 가장 좋고, 한번 만든 LoRA는 다른 베이스 모델에도 어느 정도 호환되기 때문입니다.

07FAISS는 어디에 쓰일까: 검색 증강 디퓨전

FAISS(Facebook AI Similarity Search)는 고차원 벡터를 빠르게 검색하는 라이브러리로, 보통 RAG(Retrieval-Augmented Generation)에서 LLM과 함께 사용됩니다. 그런데 이미지 생성 영역에서도 FAISS가 활약하는 분야가 있습니다.

핵심 응용 분야는 RDM(Retrieval-Augmented Diffusion Model)이라는 연구 흐름입니다. 아이디어는 이렇습니다. 모델이 모든 지식을 파라미터에 욱여넣는 대신, 외부 이미지 데이터베이스를 그때그때 참조하게 만들자는 것입니다.

STEP 1
사용자 프롬프트 입력

예: "에펠탑 앞에서 우산을 든 시바견" 같은 텍스트가 들어옵니다.

STEP 2
CLIP으로 임베딩 변환

텍스트를 512차원 또는 768차원의 벡터로 인코딩합니다.

STEP 3
FAISS로 유사 이미지 K개 검색

수억 장 규모의 이미지 임베딩 DB에서 가장 가까운 후보 K장을 밀리초 단위로 찾아냅니다.

STEP 4
검색 결과를 추가 조건으로 주입

디퓨전 모델은 텍스트뿐 아니라 검색된 K장의 시각적 정보도 함께 참조하며 노이즈를 제거합니다.

STEP 5
사실성 높은 이미지 출력

모델이 본 적 없는 희귀한 객체나 최신 정보도 데이터베이스만 갱신하면 즉시 반영됩니다.

이 방식의 장점은 명확합니다. 첫째, 모델 크기를 키우지 않고도 표현 가능한 영역이 넓어집니다. 둘째, 새로운 캐릭터나 트렌드가 생겨도 재학습 없이 DB만 업데이트하면 됩니다. 셋째, 검색된 이미지를 사용자가 볼 수 있어 출처 추적이 용이합니다.

실제 구현에서는 보통 다음과 같은 흐름이 됩니다.

# FAISS로 이미지 임베딩 DB 구성하는 단순 예시 import faiss import numpy as np # 1) CLIP으로 추출한 이미지 임베딩 (N장 × 512차원) embeddings = np.load("clip_image_embeddings.npy").astype("float32") # 2) FAISS 인덱스 생성 (코사인 유사도 위해 정규화 후 내적) faiss.normalize_L2(embeddings) index = faiss.IndexFlatIP(512) index.add(embeddings) # 3) 추론 시: 텍스트 임베딩으로 상위 K개 검색 query = clip_text_encoder("a corgi wearing sunglasses") faiss.normalize_L2(query) distances, indices = index.search(query, k=4) # 4) indices로 원본 이미지를 가져와 디퓨전 모델의 추가 조건으로 사용
i대표적 실사례

Google의 RE-Imagen, NVIDIA의 eDiff-I의 일부 변형, 그리고 학술 논문 RDM(Retrieval-Augmented Diffusion Models, 2022)이 이 패러다임을 구체화했습니다. 일반 사용자용 Stable Diffusion에는 기본 탑재되어 있지 않지만, 기업 내부 자산을 활용하는 커스텀 이미지 생성 시스템을 구축할 때 매우 유용한 설계 패턴입니다.

08한 페이지 요약
질문
이미지 생성 = 디퓨전? 대부분 그렇습니다. 최신은 Flow Matching 등 변형도 포함
학습이 하는 일 "노이즈가 얼마나 끼어 있는지" 예측 연습
추론이 하는 일 무작위 노이즈에서 시작해 단계별로 노이즈 제거
KV Cache 필요? LLM 스타일은 불필요. 단, cross-attention 캐시 등 가속 기법은 따로 존재
정확도 향상 LoRA, DreamBooth, ControlNet, RLHF 등 목적별로 선택
FAISS 활용 검색 증강 디퓨전(RDM)에서 외부 이미지 DB 조회용으로 매우 유용
마무리하며

디퓨전 모델은 결국 "노이즈를 정확히 예측하는 능력"이 전부라고 해도 과언이 아닙니다. 이 단순한 목표가 어떻게 사실적인 이미지를 만들어 내는지가 가장 흥미로운 지점입니다.

LLM과 디퓨전은 같은 딥러닝 가족이지만, 데이터 형태와 생성 방식이 달라 KV Cache 같은 최적화도 서로 다른 길을 갑니다. 그리고 FAISS처럼 다른 분야에서 검증된 도구가 또 다른 방식으로 결합되면서 새로운 가능성이 열립니다.

다음 글에서는 Stable Diffusion의 내부 구조(VAE + U-Net + CLIP)를 더 깊이 들여다보거나, LoRA를 직접 학습시키는 실전 가이드를 다뤄볼 예정입니다.

태그
#디퓨전모델 #DiffusionModel #StableDiffusion #이미지생성AI #딥러닝 #KVCache #FAISS #LoRA #ControlNet #생성형AI
반응형
LIST