텍스트는 어떻게 이미지가 되는가: 생성형 AI 이해하기
확산 모델 자체는 픽셀 간의 통계적 규칙만 알 뿐, "강아지"나 "고흐 스타일" 같은 추상적인 언어를 직접 이해하지 못한다. 여기서 CLIP이 등장한다.
CLIP은 사진과 글을 동시에 이해하도록 만든 인공지능이다. 이 모델의 핵심 아이디어는 아주 단순하다. “이 사진과 이 문장은 서로 잘 어울리는가?”만 맞히도록 학습시키는 것이다. CLIP의 핵심 원리인 '대조 학습(Contrastive Learning)'과 '제로샷 예측(Zero-shot Prediction)'을 알아보자.
Contrastive pre-training
먼저 학습 단계에서는 수많은 이미지와 그에 대응하는 문장을 함께 보여준다. 예를 들어 강아지 사진과 “pepper the aussie pup”이라는 문장이 한 쌍으로 들어온다. 사진은 이미지 인코더를 거쳐 하나의 숫자 벡터로 변환되고, 문장은 텍스트 인코더를 거쳐 또 다른 숫자 벡터로 변환된다. 그다음, 한 번에 여러 장의 이미지와 여러 개의 문장을 한 묶음으로 놓고, 모든 이미지–문장 조합의 유사도를 계산한다.
이때 학습의 목표는 아주 명확하다. 실제로 서로 짝이 맞는 이미지와 문장은 점수가 높아지도록 만들고, 짝이 아닌 조합은 점수가 낮아지도록 만드는 것이다. 예를 들어 강아지 사진은 “a photo of a dog”과는 가깝게, “a photo of a plane”과는 멀어지게 학습된다.
이 과정을 반복하면, 모델은 이미지와 텍스트를 같은 의미 공간에 배치하는 능력을 갖게 된다. 중요한 점은 이 단계에서 모델이 “이건 강아지 클래스다”처럼 고정된 라벨을 배우지 않는다는 것이다. 대신, 의미가 비슷한 이미지와 문장이 서로 가깝게 위치하도록 정렬하는 법을 배운다.
중요한 점은, CLIP이 이미지와 텍스트를 같은 의미 공간 (embedding space) 안에서 다루도록 학습되었다는 것이다. 즉, “강아지”라는 텍스트 임베딩 벡터와 실제 강아지 그림의 이미지 임베딩 벡터는 서로 가까운 위치에 있다. 이 덕분에 텍스트가 곧 이미지의 의미를 가리키는 좌표처럼 작동하게 된다.
Create dataset classifier from label text
일반적인 이미지 분류 모델은 학습 단계에서 클래스 개수가 고정된 분류 레이어(classification head)를 사용한다.
예를 들어 학습 데이터에
1번: 강아지
2번: 고양이
만 포함되어 있다면, 학습되지 않은 ‘너구리’ 이미지를 입력하더라도 모델은 출력 공간에 ‘너구리’라는 선택지가 없기 때문에 정답을 맞힐 수 없다.
CLIP은 고정된 분류 레이어를 사용하지 않는다. 대신, 학습이 완료된 CLIP은 이미지와 설명(텍스트) 사이의 유사성을 본다. 즉, 데이터셋의 클래스 이름 자체를 분류기로 사용한다.
예를 들어 분류해야 할 클래스가 “dog, car, plane”이라면, 이 단어들을 그대로 쓰지 않고 “a photo of a dog”, “a photo of a car”와 같은 자연어 문장으로 바꾼다. 이렇게 문장 형태로 만든 라벨들을 텍스트 인코더에 넣으면, 모델이 이해하는 공간 속에 특정 좌표(벡터)가 찍힌다. 이게 곧 '기준점'이 된다.
이 벡터들은 학습된 모델 입장에서 보면, “강아지라는 개념”, “자동차라는 개념”을 대표하는 기준점 역할을 한다. 즉, 별도의 분류기를 학습하지 않아도, 이 문장 벡터들이 곧 분류기의 가중치처럼 작동하게 된다.
다시 말해, CLIP에서는 분류기를 따로 만드는 대신, 텍스트 인코더가 라벨을 해석해서 자동으로 분류 기준을 만들어 주는 구조이다.
Use for zero-shot prediction
이제 실제 예측 단계에서는 새로운 이미지가 하나 들어온다. 이 이미지는 이미지 인코더를 거쳐 하나의 벡터로 변환됩니다. 그다음, 앞에서 만든 각 라벨 문장 벡터들과의 유사도를 계산한다.
모델은 이 이미지가 어떤 문장과 가장 가까운지를 비교하고, 가장 유사도가 높은 문장에 해당하는 클래스를 선택한다. 예를 들어 새로 들어온 이미지가 강아지 사진이라면, “a photo of a dog”이라는 문장 벡터와 가장 가깝게 나타나고, 최종 예측 결과는 dog가 된다.
이 과정에서 핵심은, 이 데이터셋에 대해 별도의 학습을 한 적이 없다는 점이다. 오직 “강아지”, “자동차” 같은 클래스 이름과, 과거에 배운 이미지–텍스트 대응 관계만으로 예측이 이루어진다. 그래서 이를 제로샷 예측이라고 부른다.
Stable Diffusion은 ‘말로 그림을 지시할 수 있게 만든 최초의 실용적 이미지 생성 엔진’이다.
스테이블 디퓨전이 성공할 수 있었던 가장 큰 이유 중 하나는, 이미지를 “잘 그리는 능력”과 “무엇을 그려야 하는지 이해하는 능력”을 분리해서 설계했기 때문이다. 이 두 역할 중에서, 이미지를 실제로 만들어내는 역할은 확산 모델이 담당하고, 사람의 언어를 이해해 그림의 방향을 잡아주는 역할은 CLIP이 담당한다.
스테이블 디퓨전은 CLIP의 텍스트 인코더가 만들어낸 텍스트 임베딩을, 이미지 생성 과정의 조건으로 사용한다. 이미지 생성은 잠재 공간(Latent Space)의 무작위 노이즈(zT)에서 시작해 점점 노이즈를 제거해 가는 과정인데, 이때 U-Net 모델은 단순히 "자연스러운 이미지"를 만드는 방향으로만 움직이지 않는다. 대신, 텍스트 인코더가 제공한 임베딩 벡터와 일치하는 방향으로 노이즈를 제거하도록 유도된다.
이를 기술적으로 보면, 확산 모델 내부의 U-Net 구조는 잠재 표현(z)을 처리하는 동안 계속해서 텍스트 정보를 참고한다. 이를 교차 어텐션(Cross-Attention, Q/K/V)이라고 부르는데, 이는 "이 잠재 공간의 특정 영역은 문장의 어떤 부분과 관련이 있는가"를 계속 확인하는 과정이다. 예를 들어 "노란 해바라기"라는 프롬프트가 주어지면, 모델은 색을 결정할 때는 '노란'이라는 단어에, 형태를 만들 때는 '해바라기'라는 단어에 더 집중하게 된다.
이렇게 해서 확산 모델은 zT에서 z로, 그리고 디코더를 통해 픽셀 이미지 x̃를 하나하나 만들어 가고, 텍스트 임베딩은 매 denoising step마다 교차 어텐션을 통해 참조되어 사용자의 의도와 맞는지를 지속적으로 반영한다.
그 결과, 스테이블 디퓨전은 단순히 그럴듯한 이미지를 만드는 수준을 넘어서, 사람의 언어 의도를 반영한 이미지를 생성할 수 있게 된다.
텍스트 인코더는 텍스트를 잠재 공간이 이해할 수 있는 의미 벡터로 바꾸는 역할을 하고, U-Net 기반 확산 모델은 그 벡터를 조건으로 참조하며 노이즈를 제거해 실제 이미지를 만들어 낸다. 텍스트 조건화와 확산 모델의 통합(교차 어텐션 메커니즘)이 바로 스테이블 디퓨전을 텍스트 기반 이미지 생성의 표준으로 만든 핵심 구조이다.
그림 3을 기준으로 보면, 먼저 DDPM이 실제로 무엇을 하는지부터 이해할 수 있다.
그림 중앙의 잠재 공간(Latent Space) 안에서는 확산 과정이 진행되는데, 여기서 이미지 생성은 완전히 무작위에 가까운 노이즈 상태에서 시작한다. 이 노이즈는 zT로 표현되고, Denoising U-Net은 이를 한 단계씩 정제하면서 zT-1,zT-2를 거쳐 최종적으로 의미 있는 이미지 표현인 z0에 도달하도록 설계되어 있다.
DDPM의 가장 큰 특징은 한 단계에서 제거하는 노이즈의 양이 매우 작다는 점이다. 그래서 모델은 노이즈를 조금 제거하고 다음 단계로 넘어가는 일을 수백 번 반복한다. 일반적으로 이 과정은 500에서 1000단계에 이르며, 각 단계마다 동일한 연산이 반복된다. 즉, 매 단계마다 U-Net이 호출되고, 텍스트 조건을 반영하기 위한 cross-attention이 계산되며, skip connection을 포함한 전체 네트워크가 다시 실행된다. 이 구조 자체가 DDPM이 느릴 수밖에 없는 근본적인 이유이다.
이러한 속도 저하는 구조적인 선택에서 비롯된다. DDPM은 마르코프 체인 구조를 따르는데, 이는 현재 상태 zt에서 다음 상태 zt-1을 계산할 때 오직 바로 직전 상태만을 참고한다는 가정이다. 이 때문에 중간 단계를 건너뛰는 것이 불가능하며, 모든 단계가 순차적으로 수행되어야 한다. 병렬화도 어렵고, 단계 수를 인위적으로 줄이면 이미지 품질이 급격히 나빠지는 문제가 발생한다.
또한 DDPM의 역확산 과정은 확률적(Stochastic)이다. 매 단계마다 평균과 분산을 계산한 뒤, 그 분포에서 다시 노이즈를 랜덤으로 샘플링한다. 즉, 정해진 길을 가는 것이 아니라 매번 확률적인 분포 안에서 다음 지점을 선택하는 방식이다. 이 확률적 샘플링은 계산량을 늘리고, 결과의 불확실성도 함께 키운다.
이러한 문제는 Stable Diffusion 구조에서는 더 크게 드러난다. 이 그림이 보여주듯 Stable Diffusion은 픽셀 공간이 아닌 압축된 잠재 공간에서 확산을 수행하지만, 여전히 매 스텝마다 U-Net 전체와 cross-attention(Q, K, V)이 실행되며, 텍스트 조건이 반복적으로 반영된다. 결국 스텝 수 자체가 곧 연산 비용이 된다.
이 한계를 해결하기 위해 등장한 것이 DDIM이다. DDIM은 DDPM의 학습 방식은 그대로 유지하되, 샘플링 과정 즉, 복원 과정에서 마르코프 체인의 제약을 깨뜨림으로써 반드시 모든 단계를 거쳐야 하는가라는 질문에 해답을 제시했다.
그림 4와 같이, 비마르코프적(Non-Markovian) 프로세스는 xt에서 xt-1로 갈 때 오직 직전 단계만 보는 것이 아니라, 원본 이미지(x0)에 대한 예측치를 직접 참조한다.
다시 말해 xt는 어떤 원래 이미지 x0에서 특정 규칙으로 만들어진 상태이고, DDIM은 xt 에서 노이즈 방향 εθ을 예측하고 이를 이용해 같은 x0로 이어지는 하나의 경로를 계산한다.
DDIM은 DDPM에서 학습된 노이즈 예측기 εθ가 단순히 한단계 앞의 노이즈를 제거하는 것을 넘어 사실상 최종 이미지 x0로 가는 '방향성(Score)'을 이미 학습했다는 점에 주목한다. 즉, DDIM은 과거의 모든 단계(xt, xt+1, ...)가 사실은 x0라는 하나의 기점에서 파생되었다는 점을 이용해, xt에서 x0를 바라보며 성큼성큼 나아가는 방식을 취한다.
현재 단계 xt에서 학습된 모델을 이용해 이 노이즈가 다 제거되면 어떤 이미지(x0)가 될 것인가를 미리 예측한다. 이를 Predicted x0라고 부른다. x0로 가는 방향을 알고 있기 때문에, t-1, t-2, ...를 다 거칠 필요 없이 t-10, t-20으로 크게 점프해도 목표 궤적에서 벗어나지 않게 된다.
DDPM이 매 단계 새로운 랜덤 노이즈를 추가하는 확률적(Stochastic) 과정이었다면, DDIM은 역과정을 확률적 샘플링이 아닌 결정론적(Deterministic) 경로로 재정의했다. 랜덤 노이즈를 다시 뽑지 않고, 하나의 고정된 경로를 따라 복원한다. 그 결과, 같은 초기 노이즈를 주면 항상 같은 이미지가 생성되고, 필요한 단계 수도 20~50단계 수준으로 크게 줄어든다.
이 차이는 실제 성능에서 분명하게 드러난다. DDPM은 느리지만 다양성이 있고, 결과가 매번 달라진다. 반면 DDIM은 훨씬 빠르고, 재현성이 높으며, 실시간에 가까운 이미지 생성을 가능하게 한다.
이 그림에서 특히 중요한 점은, 가장 무거운 연산이 중앙의 Denoising U-Net과 그 내부의 cross-attention이라는 사실이다. DDIM은 이 블록을 호출하는 횟수를 극적으로 줄인다. DDPM이 U-Net을 1000번 호출한다면, DDIM은 20~30번만 호출한다. 이 차이가 바로 Stable Diffusion이 연구용 모델을 넘어 실제 서비스로 사용 가능해진 결정적인 이유이다.