명장 홈🤖 AI명장유튜브 AI 강좌를 함께 정리하고 함께 배우는 명장 플랫폼명장 게시판 홈요청하기
본문 태그 링크 끄기

스탠퍼드 CS25 V5: 이미지 생성과 그 너머를 위한 확산 모델의 트랜스포머

Stanford Online · 2025-06-24 · 유튜브 시청 30,324 · 게시판 조회 0 · 외국인

전문LLM·생성AI

유튜브 썸네일

난이도 전문#확산모델#트랜스포머#이미지생성#DiT#멀티모달

← 목록

저자: Stanford Online (외국인) · 원제: Stanford CS25: V5 I Transformers in Diffusion Models for Image Generation and Beyond

난이도 판정: 원자막 전체를 사전 검수한 선정표의 난이도. 확산·플로 매칭과 트랜스포머를 전제로 DiT, PixArt-alpha, SANA, MMDiT 등의 논문 구조와 실험 결과를 비교한다. 조건 변조, 어텐션 복잡도, 모달리티별 투영, 매개변수 공유와 문맥 내 학습의 미해결 문제까지 다루므로 연구 수준의 이해가 필요하다.

요약

⏱ 03:37확산 모델은 무작위 잡음을 여러 단계에 걸쳐 제거해 이미지를 생성한다. 텍스트 인코더의 임베딩, 잡음 잠재 표현, 시간 단계를 핵심 네트워크에 넣고, 정제한 잠재 표현을 디코더로 복원한다. 픽셀 공간보다 잠재 공간을 쓰면 계산 부담을 줄일 수 있다. 대표적인 확산 학습은 추가한 잡음을 예측하는 엡실론 목적함수를 사용하며, 플로 매칭은 잡음과 데이터를 직선 경로로 연결하고 속도장을 예측한다. 강연의 초점은 잡음 스케줄보다 이러한 연속 모달리티를 처리하는 네트워크 구조에 있다.

⏱ 19:04순수 트랜스포머는 복잡한 U-Net을 단순화하고 트랜스포머 분야의 발전과 스케일링 특성을 활용하며 LLM 백본과도 쉽게 연결할 수 있다. DiT는 ViT의 패치화·위치 임베딩·블록 구성을 유지하면서 시간 및 클래스 임베딩과 생성 헤드를 추가한다. 두 조건 임베딩의 합을 적응형 층 정규화로 주입하며, 단순한 클래스 조건에서는 교차 어텐션보다 효율과 성능이 좋았다. 항등 블록 초기화는 학습 안정화에 도움이 된다. 조건을 넣는 방식 자체가 생성 품질을 좌우하는 중요한 설계 요소다.

⏱ 29:36PixArt-alpha는 텍스트 인코더와 잡음 잠재 표현의 자기 어텐션, 텍스트와의 교차 어텐션을 결합하고 클래스 조건부 DiT로 초기화한다. T5 계열은 이미지 속 문자 표현과 긴 프롬프트 처리에 유리하며, CLIP의 문맥 길이는 약 77이다. 임베딩 테이블과 덧셈을 활용한 조건 변조로 기존 DiT 대비 계산량을 27% 줄였고, 6억 매개변수로 좋은 품질·정렬 평가를 얻었다. 여러 인코더의 풍부하고 다양한 표현이 도움이 된다는 설명은 있지만, 그 효과를 체계적으로 규명한 연구는 부족하다는 점도 구분해야 한다.

⏱ 42:52고해상도에서는 어텐션의 이차 비용이 병목이다. 강연의 예시는 잠재 표현 16×512×512, 헤드 24개, 배치 1에서 FlashAttention 없이 FP16 메모리를 약 190GB로 추산한다. SANA는 잠재 공간을 더 압축하고 선형 자기 어텐션을 사용한다. K·V의 공통 계산을 쿼리마다 재사용해 n² 연산을 피하면서 텍스트와의 교차 어텐션은 유지한다. 소프트맥스 제거로 약해진 국소성은 역잔차·합성곱 기반 Mix-FFN으로 보완하며, 위치 임베딩도 제거한다. 효율과 표현력의 교환 관계를 함께 살피는 사례다.

⏱ 49:07MMDiT는 이미지와 텍스트에 별도의 QKV 투영과 조건 변조를 두고, 투영된 표현을 연결해 어텐션을 수행함으로써 두 모달리티를 함께 진화시킨다. Stable Diffusion 3에서는 여러 어텐션 변형 중 낮은 검증 손실을 보였고, QK 정규화로 학습 안정성을 확보했다. Flux는 MMDiT와 일반 DiT 블록을 조합해 계산을 활용하며, Lumina2는 모달리티별 처리 후 통합하는 구조로 유연성을 높인다. 반면 DiT-Air는 연결된 토큰의 자기 어텐션과 매개변수 공유로 설계를 단순화할 수 있음을 보여 준다.

⏱ 40:31GAN은 실시간 단일 단계 생성과 단계 증류의 손실 함수에서 여전히 쓰이며, 좋은 데이터와 특정 용도에서는 유효하다. 범용 생성에는 많은 다양한 데이터가 필요하고, 사전학습 모델의 퓨샷 활용은 그 전제를 없애지 않는다. 이미지 평가는 구성적 관계·미적 품질 등 여러 지표를 함께 봐야 한다. MMDiT의 마스킹은 적용 위치와 필요성부터 따져야 하는 미해결 문제다. 단순 이해 작업과 달리 생성에서는 스타일과 충실도를 위해 시각 특징의 조건 변조가 중요하다.

⏱ 1:09:41구조적 제어에는 ControlNet 같은 보조 네트워크, FluxControl처럼 입력 채널을 늘리는 방식, 작은 어댑터 등이 있다. 자세·분할 맵은 공간 대응을 갖지만 피사체 중심 생성과 편집은 그렇지 않을 수 있다. 비디오는 시간 의존성과 압축이 추가되고 완전한 3D 어텐션의 비용이 커진다. 2D 모델을 단순 확장하거나 프레임을 조금씩 바꾸는 것만으로 영화 수준의 시공간 일관성을 보장하기 어렵다. 효율 연구로 LTX-Video, 사실성과 충실도의 사례로 Wan이 소개된다.

⏱ 1:12:22차세대 방향은 사전학습 LLM에 이미지 생성 요소를 결합해 문맥 내 학습을 가능하게 하는 것이다. 이산 토큰의 자기회귀와 연속 토큰의 확산을 함께 다루는 Transfusion, Playground v3, FuseDiT 등이 소개된다. 직접 탐구하려면 Diffusers의 구현을 출발점으로 삼을 수 있다. MoE, 데이터 구성, 정렬·사후학습, 안전성과 암기 완화, 기계적 해석 가능성은 남은 연구 과제다. 이런 구조는 이미지·비디오를 넘어 로보틱스와 유전자 합성에도 적용된다.

⏱ 00:041. 강연의 범위와 텍스트 이미지 생성

⏱ 00:04오늘 Hugging Face의 사약 폴(Sayak Paul)을 모시게 되어 영광입니다. 확산 모델과 이미지 생성 등을 활발히 연구하는 분입니다. 일상 업무로는 Diffusers 라이브러리에 기여하고, 확산 모델을 학습시키고 관리하며, 응용 아이디어를 실험합니다. 특정 피사체를 중심으로 한 생성, 선호도 정렬, 확산 모델 평가에 관심이 있습니다. 일을 하지 않을 때는 기타를 연주하거나 ICML 튜토리얼과 드라마 「슈츠」를 몰아봅니다. 이제 사약에게 마이크를 넘기겠습니다.

⏱ 00:43이번에는 CS25에서 평소 다루던 주제에서 조금 벗어나 보겠습니다. 시각 모달리티, 특히 그 생성 측면은 자주 다루지 않았던 것 같아서 이런 이야기를 하게 되어 기쁩니다. 먼저 몇 가지 말씀드리겠습니다. 이 강연은 가능한 모든 방법을 망라하는 개관이 아닙니다. 여러분이 매우 중요하다고 생각하는 연구가 빠져 있을 수 있다는 점에 미리 양해를 구합니다. 확산이나 플로 매칭(flow matching)의 세부 원리도 깊이 다루지 않고, 맥락을 잡을 만큼만 빠르게 소개하겠습니다.

⏱ 01:30오늘 설명할 아키텍처는 확산을 쓰든 플로 매칭을 쓰든 대체로 적용할 수 있습니다. 저는 주로 이미지와 비디오를 다루므로 이미지 예시를 들겠지만, 이런 구조는 오디오 같은 다른 연속 모달리티에도 잘 일반화되는 것으로 알려져 있습니다. 발표 후에는 슬라이드를 공유하겠습니다. 진행 순서는 확산 모델과 플로 매칭의 간단한 소개, 이 분야 초기 이미지 생성 아키텍처, DiT와 제가 그 친구들이라고 부르는 구조들입니다. 끝으로 최근 관심을 갖게 된 유망한 연구 방향에 대한 생각을 나누고, 질의응답 시간도 갖겠습니다.

⏱ 02:39텍스트 이미지 생성 분야의 멋진 예시들로 여러분의 흥미를 끌고 싶었습니다. 다만 이제는 이런 예시가 꽤 익숙할 것입니다. 요즘 관심도 이미지에만 머물기보다 처음부터 여러 모달리티를 함께 생성하는 방향으로 옮겨가고 있습니다. 그래도 몇 가지 이미지를 보며 시작하겠습니다. 제가 가장 좋아하는 것은 마지막 예시인 ‘달에서 알을 깨고 태어나는 작은 우주비행사’입니다. 인간의 상상력이 정말 멀리 나아갔다고 느낍니다. 여기서 DALL-E 3를 제외한 모델은 모두 공개 모델이며, 이들이 보여 주는 사실적인 이미지 표현도 상당히 인상적입니다.

⏱ 03:262. 반복 생성 파이프라인과 잠재 공간

영상 장면 05:06
▶ 05:06 영상에서 보기

⏱ 03:26확산 모델을 어떻게 이해하는지 인포그래픽으로도 보여 드리겠습니다. 무작위 잡음 벡터에서 시작해 시간을 두고 잡음을 제거하면 사실적인 이미지가 되는 과정입니다. 자세히 보면 GAN과 달리 반복적이라는 점을 알 수 있습니다. GAN은 한 번에 결과를 만드는 반면, 확산 모델은 순차적으로 여러 번 처리합니다. 처음의 무작위 잡음을 우리가 원하는 이미지가 될 때까지 계속 제거하는 것입니다. 이 슬라이드에서 기억할 핵심은 이 과정이 반복적이라는 사실입니다.

⏱ 04:16이 잡음 제거 과정에 텍스트 조건을 걸면 어떻게 될까요? 조건을 주는 방법은 여러 가지지만, 저는 텍스트가 특히 자유로운 표현을 가능하게 하는 조건이라고 생각합니다. 텍스트를 조건으로 사용하면 여기 보이는 것처럼 추상적인 생명체도 얻을 수 있습니다. 텍스트 이미지 생성이 상상과 표현의 자유를 크게 넓혀 준다고 느끼실 것입니다. 한 걸음 물러서서, 상당히 높은 성능의 텍스트 이미지 모델을 갖추려면 무엇이 필요한지 머릿속에 구조를 그려 보겠습니다. ‘호랑이처럼 생긴 고양이’라는 프롬프트에서 위쪽 이미지까지 가려면 어떤 요소들이 필요하며, 어떻게 연결해야 할까요? 각 요소를 연결한 그림을 보고 거꾸로 짚어 가면서 직관을 쌓아 보겠습니다.

⏱ 05:18텍스트가 있으면 그것을 다룰 임베딩이 필요하고, 이 역할을 텍스트 인코더가 합니다. 최신 모델은 보통 텍스트 인코더를 하나 이상 사용합니다. 예를 들어 Stable Diffusion 3는 하나도 둘도 아닌 세 개의 텍스트 인코더에 의존합니다. 프롬프트를 인코더에 넣어 임베딩을 얻는 것입니다. 한편 앞서 본 것처럼 가우스 분포에서 뽑은 무작위 잡음으로 시작하므로, 잡음이 섞인 잠재 표현도 있습니다. 여기에 텍스트 임베딩과 시간 단계가 함께 들어갑니다. 시간 단계와 관련한 계산은 스케줄러가 담당하며, 스케줄러는 잠시 후 다시 설명하겠습니다. 이 시점에 필요한 조건은 텍스트 임베딩, 잡음 잠재 표현, 시간 단계입니다.

⏱ 06:14이 입력들을 핵심 확산 네트워크에 전달합니다. 앞의 슬라이드에서 보았듯이 네트워크를 여러 단계에 걸쳐 순차적으로 실행하면 정제된 잠재 표현을 얻게 됩니다. 그것을 디코더 모델에 넣으면 최종 이미지가 나옵니다. 여기서 확산 모델을 크게 두 종류로 구분하고 싶습니다. 방금 설명한 구조는 잠재 공간 확산 모델에 해당하며, 별도로 픽셀 공간 확산 모델도 있습니다. 최근의 고성능 확산 모델은 잠재 공간을 사용하는 경우가 일반적입니다. 픽셀 공간에서 계산하는 것은 비용이 높고 연산량이 매우 크기 때문입니다. 그림에 원시 픽셀이 아닌 잡음 잠재 표현이 표시된 이유입니다.

⏱ 07:093. 확산 학습과 플로 매칭

⏱ 07:09이를 다른 모달리티로 일반화하면, 핵심 질문은 원시 데이터를 어떻게 표현하고 그 중간 표현을 어떻게 계산하느냐입니다. 오디오에서도 이와 유사한 대응 관계를 생각할 수 있습니다. 정리하면 성능 좋은 텍스트 이미지 시스템에는 대략 이런 구성 요소가 필요합니다. 이제 학습과 최종 추론을 설명하기 위해 몇 가지 표기와 개념을 도입하겠습니다. 이미지로 설명하지만 텍스트를 제외하면 대체로 모달리티에 무관한 설명입니다. 물론 이 방식을 이산적인 텍스트 토큰에 그대로 적용할 수는 없습니다.

⏱ 08:04원본 이미지가 있고, 표준 가우스 분포에서 잡음을 뽑는다고 합시다. 시간 단계는 균등 분포에서 뽑습니다. 잡음 스케줄과 그것을 제어하는 항들도 있으며, 조건 벡터도 있습니다. 조건 벡터는 텍스트 임베딩일 수도 있고, 깊이 맵이나 분할 맵 같은 구조적 제어 신호일 수도 있습니다. 그리고 학습할 확산 모델이 있습니다. 학습할 때는 이미지의 중간 표현을 계산합니다. 픽셀 공간의 경우로 말하면 깨끗한 이미지에 적은 양의 잡음을 더하고, 모델이 얼마만큼의 잡음이 추가되었는지를 예측하도록 합니다. 널리 채택되는 확산 네트워크 학습의 매개변수화이며, 엡실론 목적함수(epsilon objective)라고 부릅니다. 기본적으로 추가된 잡음의 양을 배우게 하는 것입니다.

⏱ 09:13샘플링할 때는 원하는 이미지에 도달할 때까지 잡음 예측을 순차적으로 반복합니다. 무작위 잡음에서 시작해 텍스트 임베딩 같은 조건 아래 여러 단계에 걸쳐 잡음을 제거하고, 우리가 원하는 데이터가 될 때까지 같은 과정을 이어 갑니다. 요즘에는 플로 매칭도 점점 흔해지고 있습니다. Flux나 Stable Diffusion 3를 들어 보셨다면, 둘 다 플로 매칭에 기반한 모델입니다. 플로 매칭에서는 경로를 더 곧게 만듭니다. 잡음과 깨끗한 데이터를 직선 경로로 연결하려고 하므로, 슬라이드 첫 항목에 선형 보간 식이 나오는 것입니다. 신경망은 목표 속도장(velocity field)을 예측합니다.

⏱ 10:13기억할 점은 플로 매칭이 잡음과 깨끗한 데이터를 직선으로 연결하려 한다는 것입니다. 반면 확산 모델에서는 경로가 직선이라고 가정하지 않습니다. 플로 매칭에서 여러 부분이 단순해지는 이유이기도 합니다. 다만 오늘 강연에서 더 관심을 두는 것은 네트워크 자체입니다. 잡음을 어떤 방식으로 더해야 하는지, 어떤 잡음 스케줄을 따라야 하는지가 중심 주제는 아닙니다. 이 강연은 네트워크를 어떻게 매개변수화하고 구성하느냐에 초점을 맞춥니다.

⏱ 10:524. 확산 네트워크의 입력과 출력 요구사항

⏱ 10:52이제 확산 모델에 필요한 구성 요소와, 기대하는 수준으로 동작하려면 충족해야 할 핵심 요구사항을 살펴보겠습니다. 첫째는 잡음 입력을 처리하는 방법입니다. 잡음은 이 방식의 토대이므로 없애 버릴 수 없습니다. 픽셀 공간에서 채널 우선 형식으로 데이터를 나타내면 슬라이드와 같은 텐서 형태가 됩니다. 잠재 공간에서는 표현이 더 압축됩니다. 실제로 우리가 다루는 것은 대개 잠재 공간 확산 모델이므로, 모델을 통과할 데이터의 형태를 미리 이해해 두는 것이 도움이 됩니다.

⏱ 11:53또한 조건을 처리해야 합니다. 텍스트 이미지 모델에서 텍스트는 바로 조건입니다. 시간 단계도 빠질 수 없습니다. 잠재 표현에 더해지는 잡음의 양은 시간 단계에 따라 달라져야 합니다. 예를 들어 시간 단계가 10일 때와 100 또는 1,000일 때 추가하는 잡음의 양은 다릅니다. 시간 단계는 현재 생성 궤적의 어느 지점에 있는지 모델에 알려 주는 매우 중요한 조건입니다. 잡음을 적게 제거해야 하는지, 더 적극적으로 제거해야 하는지 등을 판단할 근거가 됩니다. 호랑이, 새와 같은 클래스나 자연어 등 다른 형태의 조건도 있습니다.

⏱ 12:48입력과 조건 사이의 의존 관계도 모델링해야 합니다. 잡음 입력이 조건과 어떻게 상호작용해야 할까요? 교차 어텐션(cross-attention) 관점에서 생각할 수 있으며, 이 내용은 잠시 후 설명하겠습니다. 마지막 출력은 어떤 방식으로 만들지도 결정해야 합니다. 트랜스포머 구조라면 전부 바로 디코딩할지, 순수 합성곱 구조라면 업샘플링할지 등의 선택이 있습니다. 확산 네트워크는 다른 특별한 매개변수화를 쓰는 경우를 제외하면 일반적으로 입력과 출력의 형태가 정확히 같습니다. 다른 방식도 있지만, 네트워크로 들어가는 텐서와 모델이 내놓아야 할 텐서의 형태가 같은 경우가 훨씬 흔합니다.

⏱ 13:445. U-Net의 역사와 복잡한 구성

⏱ 13:44역사를 조금 살펴보겠습니다. DDPM이나 잠재 확산 모델 등 초기 연구는 U-Net 기반 아키텍처를 사용했습니다. 역사적으로 U-Net이 이 분야를 상당 기간 지배해 왔습니다. StyleGAN 같은 모델도 모두 U-Net 기반 구조를 갖고 있었습니다. 비교적 최근이라고 할 수 있는 2023년의 SDXL까지도 U-Net에 의존했습니다. 이 분야 아키텍처의 연대기를 생각하면 SDXL은 충분히 최근의 모델이며, 사용 정도를 보아도 의미 있는 모델입니다. 따라서 먼저 이 패러다임에서의 U-Net 구조를 살펴보고, 왜 트랜스포머로 넘어갈 필요가 생겼는지 생각해 보는 것이 좋겠습니다.

⏱ 14:49확산용 U-Net은 매우 거대합니다. 이것도 U-Net에서 벗어나고 싶어지는 이유 중 하나지만, 그것만으로 설명이 끝나지는 않습니다. 거대한 U-Net 내부에 어떤 요소가 있는지 봅시다. 먼저 들어오는 입력을 직접 처리하는 합성곱 스템(stem)이 필요합니다. 이어 여러 다운 블록이 있으며, 정규화 층과 합성곱 층으로 이루어진 맞춤형 잔차 블록을 포함합니다. 정규화, 투영, 일반적인 트랜스포머 연산으로 구성된 맞춤형 트랜스포머 블록도 들어갑니다. 해상도를 바꾸는 합성곱 층이 있고, 더 높은 해상도로 올리는 업샘플링도 필요합니다.

⏱ 15:45일반적인 U-Net처럼 중간 블록에서는 해상도를 바꾸지 않습니다. 그다음에는 다운 블록에서 업샘플링한 출력을 다시 다운샘플링하는 일련의 블록을 거칩니다. 최종적으로 입력과 동일한 형태의 출력을 만듭니다. 이쪽 블록은 대응하는 다운 블록과 기본적으로 비슷한 구성입니다. 다만 업샘플링 대신 다운샘플링 층을 사용합니다. 이 밖에도 신경 써야 할 부수적인 요소들이 있습니다.

⏱ 16:27예를 들면 시간 단계를 어떻게 임베딩할지, 추가 임베딩을 어떻게 만들지 등을 고려해야 합니다. 클래스 조건부 모델이면 클래스를 임베딩하는 방식이 필요하고, 텍스트 이미지 모델이면 텍스트 임베딩을 처리하는 방식이 필요합니다. 즉 조건 임베딩을 어떻게 조절하는지는 다루는 조건의 종류에 따라 달라집니다. 여기 보이는 것은 U-Net 다운 블록의 구조입니다. 너무 거대해서 그림을 전치해야 했습니다. 머릿속으로 떠올리는 것조차 괴롭습니다. 아키텍처를 자주 다루는 분이라면 이것이 벌써 좋지 않은 징후라는 데 동의하실 것입니다. 구조를 머릿속에 그리기조차 어렵습니다.

⏱ 17:15다운 블록을 확대해 보면 앞서 말한 맞춤형 ResNet 블록들과 맞춤형 트랜스포머 블록들이 있습니다. 개별 구성 요소가 아주 난해하거나 처음 보는 것은 아닙니다. 결국 익숙한 블록들을 조합한 것이며, 그림에는 단계마다 해상도가 어떻게 바뀌는지도 표시했습니다. 이것들을 전부 합치면 이런 모습입니다. 상당히 줄여 그렸는데도 머릿속에서 전체를 상상하기는 매우 어렵습니다. 단지 이미지를 생성하는 작업을 위한 구조치고는 블록들이 너무 복잡하고 부담스럽습니다. 이것이 전체적인 그림입니다. 기대만큼 완전한 도식은 아닐 수 있지만, U-Net 전체를 화면 하나에 넣는 것 자체가 어렵습니다.

⏱ 18:186. 순수 트랜스포머로 전환하는 이유

영상 장면 20:09
▶ 20:09 영상에서 보기

⏱ 18:18자연스럽게 다음으로 시도할 일은 합성곱 층을 MLP 블록으로 바꾸어 구조를 단순화하는 것입니다. Google 연구진이 UViT 아키텍처에서 이런 시도를 했습니다. 순수 트랜스포머 기반 구조의 전신이라고 볼 수 있지만, 아직 완전한 형태는 아니었습니다. U-Net 설계에서 보았던 복잡함과 구조적 부담이 여전히 상당 부분 남아 있었습니다. 그렇다면 왜 순수한 트랜스포머 기반 아키텍처가 필요할까요? 첫 번째 이유는 트랜스포머 분야의 발전을 함께 누릴 수 있기 때문입니다. Noam Shazeer의 표현을 빌리면 온갖 ‘신성한 은총’을 얻을 수 있다는 것이죠. GELU, QK 정규화, 병렬 MLP 층 등을 이용하고 싶을 것입니다.

⏱ 19:22좋은 스케일링 특성도 이유입니다. 순수 트랜스포머 확산 아키텍처나 백본을 다른 백본, 가령 순수 LLM 백본과 연결하려 할 때 통합이 매우 쉬워집니다. 그리고 거대한 U-Net에서 벗어날 수 있습니다. 개인적으로는 이것이 가장 큰 동기입니다. U-Net에서 영감을 받은 기존 구조를 바꿔야 할 이유, 즉 아키텍처의 패러다임 전환이 필요한 이유가 충분히 전달되었기를 바랍니다. 이제 이 코드를 보면 눈이 편안해질 것입니다. 낯설지 않은 일반적인 비전 트랜스포머의 순전파입니다. 이미지 생성으로 확장하더라도 이 코드가 크게 바뀔 필요는 없다는 것이 제가 강조하려는 점입니다.

⏱ 20:27실제로 바뀌는 부분이 많지 않다는 데 동의하실 것입니다. 패치화(patchification)와 위치 임베딩 등 핵심 구성은 그대로 있습니다. 클래스 임베딩 방식, 즉 y 임베더는 다르고, 시간 단계를 임베딩하는 요소도 추가로 필요합니다. 나머지는 여전히 블록들을 차례대로 통과하고, 마지막 층에서 출력을 디코딩한 다음 패치를 다시 합치는 방식입니다. 일반적인 ViT와 매우 비슷하지만 생성용 출력 헤드도 고려해야 합니다. 요점은 표준 ViT 순전파를 크게 바꾸지 않는다는 것입니다.

⏱ 21:217. DiT의 시간·클래스 임베딩

⏱ 21:21좀 더 자세히 보아도 몇 군데의 수정 외에는 익숙할 것입니다. 뒤에서 설명할 스케일(scale)과 시프트(shift) 매개변수가 있고, 그 밖에는 같은 층 정규화, 패치화 층, 임베딩, 선형 변환과 형태 변경 연산이 있습니다. 대부분은 익숙한 구성입니다. 겉보기에 조금 생소한 부분부터 설명하겠습니다. 먼저 시간 단계는 어떻게 임베딩할까요? 지금까지 시간 단계의 중요성을 여러 번 강조했으니, 실제 임베딩 방식과 예상 출력 형태를 보겠습니다. 이 경우 출력 형태는 배치 크기와 트랜스포머 블록의 은닉 차원으로 이루어집니다.

⏱ 22:23시간 단계는 0에서 1,000 사이일 수 있으며, 0은 잡음이 없는 상태, 1,000은 완전히 잡음화된 상태를 뜻합니다. 각 t를 사인파 주파수로 임베딩해 위상 정보를 알 수 있게 합니다. 네트워크는 매 순간 매우 낮은 주파수와 매우 높은 주파수를 모두 보게 되므로, 어떤 위상으로 조절해야 하는지 알아야 합니다. 사인파 주파수가 유용한 이유입니다. 그다음에는 이 서로 다른 주파수들에 어떤 가중치를 줄지 학습해야 하며, 이를 위해 매우 얕은 MLP에 통과시킵니다. 클래스 레이블은 단순히 nn.Embedding 층으로 임베딩하면 됩니다. 표준적인 패치화는 합성곱 스템으로 수행하고, 위치 인코딩에는 일반적인 사인·코사인 방식을 사용합니다.

⏱ 23:25최종 조건을 만들 때는 시간 단계 임베딩과 클래스 레이블 임베딩을 각각 구해서 더합니다. 이렇게 얻은 조건이 트랜스포머 블록으로 들어갑니다. 특히 조건 c가 모든 블록에서 고정되어 있다는 점을 기억해야 합니다. 실제 입력인 잡음 잠재 표현과 조건의 관계를 모델링하려면 교차 어텐션을 쓸 것이라고 예상할 수 있습니다. 하지만 뒤에서 보겠듯 실제로는 그렇지 않습니다. 한 걸음 물러서서 조건을 트랜스포머 블록 안에 주입하는 방법을 생각해 봅시다. 적응형 층 정규화(adaptive layer normalization, AdaLN)가 있으며, 이미지에서 얻고자 하는 스타일적 측면을 모델링하는 데 매우 중요합니다.

⏱ 24:308. 적응형 층 정규화와 학습 안정성

영상 장면 27:02
▶ 27:02 영상에서 보기

⏱ 24:30기본적으로 표준 층 정규화에 변조 매개변수(modulation parameters)라는 추가 매개변수 집합을 두는 방식입니다. 이 매개변수는 조건 공간에서 작동합니다. 조건은 시간 단계 임베딩과 클래스 임베딩의 합이라는 점을 기억하십시오. QKV, 멀티헤드 자기 어텐션, MLP 층 등 일반적인 트랜스포머 부분은 넘어가겠습니다. 슬라이드에는 표준 트랜스포머 인코더 블록 내부의 계산을 정하는 식들이 있으며, 익숙한 내용입니다. 지금 설명해야 할 부분은 조건을 어떻게 변조하고 트랜스포머 블록에 실제로 주입하느냐입니다.

⏱ 25:25교차 어텐션은 꽤 자연스러운 선택처럼 보이지만 여기서는 사용하지 않습니다. 자기 어텐션은 계속 수행하면서, 식의 아래쪽에 보이는 것처럼 자기 어텐션과 함께 조건을 변조합니다. 이 변조 매개변수는 학습 대상 모달리티의 데이터로부터 학습됩니다. 최종 출력은 단일 층 디코더로 얻은 다음, 패치들을 다시 합치는 언패치화(unpatchify)를 수행하여 입력과 같은 형태로 만듭니다. 초기화도 중요하므로 짚고 넘어가겠습니다. 기본적으로는 표준 비전 트랜스포머 초기화이지만 두 가지 핵심 수정이 있습니다.

⏱ 26:20각 트랜스포머 블록을 항등 블록으로 초기화합니다. 초기 ImageNet 학습 연구에서 영감을 얻은 것입니다. ResNet 블록들을 학습할 때 배치 정규화 층의 베타 매개변수를 0으로 초기화하곤 했는데, 이것이 학습 안정화에 도움이 되었고 여기서도 마찬가지였습니다. 적응형 층 정규화는 중요할 뿐 아니라 계산도 더 효율적입니다. 조건과 잡음 입력 사이의 의존성을 표현하려면 교차 어텐션이 자연스러운 선택이라고 앞서 말했지만, 그래프를 보면 결과는 전혀 그렇지 않습니다. 적응형 층 정규화가 가장 좋은 성능을 내며 교차 어텐션을 큰 차이로 앞섭니다.

⏱ 27:10단순히 조건이 쉽게 모델링되기 때문만은 아닙니다. 이미지 같은 연속 모달리티에서는 교차 어텐션으로 의존 관계를 표현하는 것이 그리 자명하지 않습니다. 특히 클래스 임베딩처럼 조건이 간단하다면 교차 어텐션을 쓰는 것은 계산 낭비라서 타당하지 않고, 그래프도 이를 뒷받침합니다. 이후 연구에서는 적응형 층 정규화를 더 계산 효율적으로 만드는 변형도 탐구했으며, 몇 장 뒤에서 다루겠습니다. 지금은 시간 단계 임베딩과 클래스 임베딩의 합에 대해 변조를 수행합니다. 이 조건을 여러 트랜스포머 블록 전반에 걸쳐 어떻게 변조하는지가 매우 중요하며, 뒤에서 다시 보겠습니다.

⏱ 28:109. 클래스 조건부 DiT에서 PixArt-alpha로

⏱ 28:10예상대로 계산량을 늘리면 성능도 잘 확장됩니다. U-Net 기반 모델에 사용하던 학습 기법들을 확산 트랜스포머에도 기본적으로 그대로 적용할 수 있다는 점도 좋습니다. 계산 규모에 따라 잘 확장되고, 같은 크기의 U-Net 모델들과 비교해도 성능이 좋습니다. 하지만 이제 이미지 생성 분야에서 누가 클래스 조건부 생성만 하느냐고 생각하실 수 있습니다. 바로 다음으로 살펴볼 문제입니다. 표준 확산 트랜스포머 구조에서 텍스트 이미지 생성을 가능하게 하려면 무엇이 필요한지 생각해 보겠습니다. 기존 구조에 어떤 요소가 빠져 있고, 무엇을 더해야 텍스트 이미지 생성 도구가 될까요? 이를 탐구한 초기 연구 중 하나가 PixArt-alpha입니다.

⏱ 29:25먼저 자연어 프롬프트를 어떻게 임베딩할지가 자연스러운 질문입니다. 답은 간단합니다. 텍스트 인코더가 필요하며, PixArt-alpha도 정확히 그렇게 합니다. 그다음에는 맥락적 의존 관계를 어떻게 학습할지 생각해야 합니다. 이제는 시간 단계 외에 클래스 대신 자연어 텍스트가 있습니다. 잡음 잠재 표현에는 자기 어텐션을 적용하고, 잡음 잠재 표현과 텍스트 사이에는 교차 어텐션을 적용할 수 있습니다. 여기서 텍스트는 단순한 클래스가 아닙니다. ‘달 위에서 알을 깨고 태어나는 아기 우주비행사’ 같은 자연어 설명을 뜻합니다. 클래스 레이블과는 다르므로 이런 구성이 타당할 수 있습니다.

⏱ 30:19잡음 잠재 표현에 자기 어텐션을 적용하여 패치 내부의 국소적인 의존 관계를 모델링하고, 잡음 패치와 텍스트 임베딩 사이에는 교차 어텐션을 적용하는 것입니다. 시간 단계도 변조할 방법을 찾아야 합니다. DiT 연구에서 보았듯이 시간 단계 임베딩을 트랜스포머 블록 전반에 걸쳐 변조하는 일은 중요합니다. 사용할 수 있고 구조도 호환되는 클래스 조건부 확산 트랜스포머가 있다면, 일부 블록은 그 모델의 가중치로 초기화하는 편이 합리적일 수 있습니다. 계산을 낭비할 필요가 없고, 학습 안정화에도 도움이 될 수 있기 때문입니다.

⏱ 31:08PixArt-alpha가 하는 일이 바로 이것입니다. 지금까지 주의 깊게 들으셨다면 이런 구성의 구현 자체가 극도로 어렵지는 않다는 점을 아셨을 것입니다. 실제 연구가 이런 생각을 그대로 구현한다는 사실도 도움이 됩니다. PixArt-alpha는 텍스트 인코더로 프롬프트를 임베딩하고, 잡음 잠재 표현에 자기 어텐션을 수행하며, 잡음 잠재 표현과 텍스트 사이의 의존성을 교차 어텐션으로 모델링합니다. 또 클래스 조건부 DiT 모델로 초기화하여 학습을 가속합니다. 이렇게 구성 요소를 직접 생각해 보고 그것이 실제로 구현된 모습과 연결할 수 있습니다.

⏱ 31:5710. 텍스트 인코더와 PixArt-alpha의 효율

⏱ 31:57텍스트 인코더 선택을 조금 더 이야기하겠습니다. PixArt-alpha는 이미지 안의 문자 렌더링 능력을 얻기 위해 Flan-T5-XXL을 사용했습니다. 동시기에 나온 Imagen 같은 연구도 텍스트 인코더를 키우면 이미지 속에 글자를 렌더링하는 데 도움이 된다는 점을 보여 주었습니다. 긴 프롬프트를 얼마나 잘 따르는지도 문제입니다. SDXL 같은 모델은 텍스트 임베딩에 CLIP을 사용하지만, CLIP의 문맥 길이는 제 기억으로 77 정도로 매우 짧습니다. T5-XXL을 쓰면 훨씬 긴 문맥을 다룰 수 있어 프롬프트를 길게 쓰고 더 자세히 설명할 수 있습니다.

⏱ 32:49텍스트 인코더의 선택 공간을 탐구하는 것은 여전히 좋은 연구 주제입니다. T5 대신 일반적인 언어 모델을 쓰면 어떨지 궁금할 수도 있습니다. 실제로 사용하는 것 자체는 그리 어렵지 않으며, Lumina 같은 여러 연구가 이를 상당히 탐구했습니다. 확산 모델은 이미 계산량의 제약을 받는데, 왜 또 다른 무거운 모델을 추가하느냐고 생각할 수 있습니다. 그래도 괜찮다고 보는 이유가 있습니다. 프롬프트 임베딩을 계산하는 작업의 특성 때문입니다.

⏱ 33:20프롬프트 임베딩은 한 번만 계산하면 되는 작업입니다. 따라서 대규모 언어 모델처럼 메모리 대역폭의 제약을 받는 모델을 함께 사용하는 것도 괜찮습니다. 여기서도 적응형 층 정규화가 다시 등장합니다. 원래 DiT의 각 블록에서는 시간 단계 임베딩과 클래스 임베딩의 합을 사용했습니다. PixArt-alpha에는 이미 별도의 풍부한 텍스트 인코더로 텍스트 임베딩을 계산하는 경로가 있으므로, 그 임베딩은 굳이 다시 손대거나 변조하지 않으려 합니다. 클래스 임베딩까지 변조하던 원래 DiT와 다른 점입니다.

⏱ 34:16각 확산 트랜스포머 인코더 블록에 적응형 층 정규화 블록을 두는 대신, 임베딩 테이블들을 유지하고 더합니다. 매번 행렬 곱셈을 하는 대신 다른 임베딩 테이블과의 덧셈으로 처리하는 것입니다. 계산량을 상당히 줄일 수 있어 원래 확산 트랜스포머 연산의 27%를 절감합니다. 상당히 우아한 아이디어이며, 성능을 유지하면서 매개변수를 줄이는 방법에 대한 또 다른 시각을 제공합니다.

⏱ 35:07비교적 작은 모델이라는 점을 생각하면 성능도 인상적입니다. 매개변수는 6억 개, 즉 0.6B에 불과한데 여러 평가에서 매우 좋은 결과를 보였습니다. 2023년 등장 당시 상당히 뛰어났습니다. 제가 GenEval 점수도 가져온 줄 알았는데, 여기에는 없군요. 다만 마지막 차트는 사람의 선호 평가를 보여 줍니다. 품질은 전체적인 이미지 품질이고, 정렬은 텍스트와 생성 이미지가 얼마나 잘 일치하는지입니다. PixArt-alpha는 두 측면 모두 좋은 성능을 냈습니다. 아직 이차 복잡도의 일반 어텐션을 쓰므로 시간·메모리 복잡도를 이야기해야 하지만, 그 전에 질문을 받겠습니다. 스티븐, 괜찮을까요? 네, 질문해 주십시오.

⏱ 36:1811. 질의응답: 다양한 조건 표현과 모델 선택

⏱ 36:18질문: 최신 확산 모델이 텍스트 인코더를 여러 개 사용한다고 하셨는데, 이유가 무엇인가요? 같은 텍스트를 서로 다른 방식으로 인코딩하면 어떤 이점이 있나요? 답변: 여러 텍스트 인코더가 왜 이미지 생성 성능을 높이는지에 대한 질문입니다. 클래스 조건부 DiT에서는 시간 단계뿐 아니라 클래스 임베딩도 변조했습니다. 자기 어텐션과 함께 변조한 조건은 이 둘을 더한 것이었습니다. 텍스트 이미지 모델에서는 이 문제가 그렇게 간단하지 않습니다. 텍스트 임베딩과 시간 단계 임베딩 외에, 텍스트 입력으로부터 계산한 다른 조건은 어떻게 변조할지도 생각해야 합니다.

⏱ 37:19표현이 풍부하고 다양할수록 생성 백본에 좋다는 것이 관찰됩니다. 여러 인코더를 사용하는 모델은 보통 CLIP과 T5를 조합합니다. CLIP과 T5는 완전히 다른 모델입니다. CLIP의 텍스트 임베딩에는 대조 학습의 성격이 들어가고, T5의 임베딩은 전혀 다른 성격을 갖습니다. 임베딩이 다양할수록 생성 성능에 유리하다는 것이 일반적인 믿음이지만, 이 점에 대한 체계적인 연구가 있는 것은 아닙니다. 언어 모델 하나만으로 해결하는 연구도 있습니다. 좋은 사전학습 덕분에 언어 모델이 두 성격을 모두 물려받았을 가능성도 있습니다. 다른 질문이 있나요?

⏱ 38:23질문: 최첨단 기업들은 대부분 확산 트랜스포머를 쓰나요? 여전히 합성곱이 있는 원래 U-Net을 쓰는 곳도 있나요, 아니면 용도에 따라 다른가요? 답변: 효율적이고 쉽게 적응시킬 수 있어서 대부분 확산 트랜스포머를 쓰는 것으로 생각합니다. 다른 종류의 제어를 넣으려는 경우, 예를 들어 이미지에서 가져온 스타일 참조를 추가 프롬프트로 제공하려는 경우에도 확산 트랜스포머 쪽이 더 쉽습니다. 몇 장 뒤에서 그런 방법을 살펴보겠습니다.

⏱ 38:59질문: 행렬 곱셈을 정확히 어떻게 피하나요? 좀 더 자세히 설명해 주시겠어요? 답변: 원래 확산 트랜스포머에서는 변조 매개변수를 아핀 층으로 만듭니다. 그 출력을 나누면 서로 다른 변조 매개변수들이 나오며, 행렬 곱셈은 그 부분에서 발생합니다. 그런데 여기서는 임베딩 테이블로 계산하므로 아핀 변환이 없습니다. 그렇게 얻은 값을 시간 단계 임베딩에 더하면 끝입니다. 이 방식으로 행렬 곱셈을 피하며, 계산량 27% 감소도 주로 여기서 나옵니다. 다음 내용으로 가기 전에 마지막 질문을 받겠습니다. Zoom과 온라인에도 질문이 있으니 그중 하나를 읽겠습니다.

⏱ 40:1712. 질의응답: GAN과 데이터가 적은 상황

⏱ 40:17질문: 이미지나 비디오 생성에서 GAN을 사용할 이유가 아직 있나요? 사실상 확산 모델로 완전히 대체되었나요? 답변: 완전히 대체되었다고 하지는 않겠습니다. 확산 모델은 여전히 순차적입니다. 정말 극단적인 실시간 생성을 원한다면 GAN이 좋은 선택이며, 실제로 사용하는 기업도 많습니다. 멋진 이미지를 한 번에 생성하려면 GAN이 적합합니다. 시간 단계 증류(time step distillation)는 좋은 이미지를 만드는 데 필요한 시간 단계나 추론 단계의 수를 줄이는 연구인데, 거기서도 실제로 GAN 손실을 사용합니다. 따라서 GAN이 당장 완전히 사라지지는 않을 것입니다.

⏱ 41:00질문: GAN에는 모드 붕괴(mode collapse) 같은 문제가 많다고 알고 있었습니다. 답변: 맞습니다. 그런 문제가 있습니다. 그래도 특정한 사용 사례가 있고 상당히 좋은 데이터셋을 갖추었다면 좋은 GAN을 학습할 수 있습니다. 질문: 온라인에서 하나 더 묻겠습니다. 이미지 생성, 특히 확산 모델 학습에는 대량의 데이터가 필요한데, 데이터가 적은 상황에 맞는 기법이나 아키텍처 선택이 있나요? 답변: 좋은 질문입니다. 짧게 답하면 없다고 하겠습니다. 다만 용도와 어느 정도 관련이 있습니다. 의료 영상처럼 다양성이 아주 많이 필요하지 않은 경우도 있습니다.

⏱ 41:45하지만 일반적으로 잘 작동하는 범용 생성 모델을 원한다면, 필요한 편향과 특성을 습득하도록 많은 데이터로 학습해야 합니다. 자연 이미지의 분포를 학습하고 늘 사실적인 이미지를 내놓게 하려면 많은 데이터, 적어도 다양한 데이터가 필요합니다. 질문: 요즘 LLM은 사전학습 후에 제로샷이나 퓨샷 학습을 할 수 있는데요. 답변: 문맥 내 학습(in-context learning)은 조금 뒤에서 이야기하겠습니다. 다만 그 경우에도 이미 사전학습된 모델을 사용할 수 있다는 전제가 있습니다. 바로 그 점입니다.

⏱ 42:3213. 고해상도 생성의 어텐션 비용과 SANA

영상 장면 43:20
▶ 43:20 영상에서 보기

⏱ 42:32이번 부분은 이차적인 시간·메모리 복잡도 문제로 시작하겠습니다. 이제는 이미지 생성, 특히 4K 같은 고해상도 이미지를 만드는 상황입니다. 잠재 공간에서 계산하더라도 일반적인 어텐션은 비용이 극도로 커집니다. 잠재 표현의 채널 수가 16이고 공간 크기가 512×512라고 합시다. 여전히 매우 크며, VLM 분야에서 흔히 보는 것보다 훨씬 큽니다. 슬라이드에 간단한 계산 예시를 넣었습니다. FlashAttention을 사용하지 않은 추산으로, FP16에서도 약 190GB가 필요합니다. 어텐션 헤드 24개, 배치 크기 1, 펼친 시퀀스 길이 등 합리적인 기본값을 넣은 결과입니다.

⏱ 43:50물론 FlashAttention을 쓰지 않은 계산이지만, 매우 높은 품질과 해상도의 이미지를 다루려 할 때 확산 모델의 일반적인 이차 어텐션이 얼마나 부담스러운지는 알 수 있습니다. 무엇을 할 수 있을까요? 간단한 선택이 두 가지 있습니다. 하나는 더 많이 압축된 공간에서 계산하는 것입니다. 형태가 1×16×512×512인 잠재 표현은 이미 충분히 압축되어 있지만, 압축률을 더 높일 수 있을까요? 다른 하나는 n×n 곱셈을 하지 않는 선형 어텐션을 사용하는 것입니다. 다음에 살펴볼 SANA 아키텍처는 둘 다 사용합니다. 더 압축된 잠재 공간과 어텐션의 선형 변형을 함께 쓰는 것입니다.

⏱ 44:51선형 어텐션을 쓰면 복잡도는 줄지만 어느 정도 성능 손실이 있을 수 있습니다. SANA는 그 손실을 보완하기 위해 Mix-FFN을 사용하며, 자세한 내용은 곧 설명하겠습니다. 먼저 큰 그림을 보자면 자기 어텐션에는 선형 어텐션을 쓰지만, 잡음 잠재 표현과 주어진 텍스트 프롬프트 사이의 의존성을 모델링하는 교차 어텐션은 여전히 수행합니다. 자기 어텐션에는 n² 계산이 없고, 식에서도 이를 확인할 수 있습니다. K와 V 투영에서 공통 항을 계산하고 모든 쿼리에 재사용합니다. 이렇게 하면 n×n 곱셈을 하지 않아도 되고, 곱셈이 n에 의해 상한이 정해지므로 복잡도를 O(n²)에서 O(n)으로 줄일 수 있습니다.

⏱ 45:5514. 선형 어텐션의 보완과 모달리티별 표현

⏱ 45:55이차 어텐션을 사용하지 않은 데 대한 보완 장치가 필요하므로 Mix-FFN 블록을 사용합니다. 역잔차 블록(inverted residual blocks)과 점별 합성곱(pointwise convolution) 등을 조합하여 국소 의존 관계를 모델링합니다. 소프트맥스를 제거하면 국소성이라는 개념을 잃기 때문입니다. 전부 잃는다고 할 수는 없겠지만, 상당 부분이 사라집니다. 따라서 국소성을 모델링할 구성 요소가 필요하며, Mix-FFN이 그 역할을 합니다. SANA는 위치 임베딩도 제거했습니다. 이름이 재미있는데 NoPE, 즉 위치 임베딩이 없다는 뜻입니다.

⏱ 46:47Mix-FFN 안의 합성곱 블록들이 여기에 도움이 됩니다. 결국 합성곱 이야기로 조금 돌아오지만, 완전한 합성곱 구조는 아닙니다. 몇 개의 합성곱만 넣은 것이고 전체는 여전히 주로 DiT 기반입니다. 단순한 선형 MLP 대신 국소 상호작용을 고려하도록 합성곱 층 두 개를 둡니다. 모델 크기에 비해 성능도 꽤 좋습니다. 커널 융합과 연구진이 사용하는 특별한 DPM 솔버의 효과는 여기서 따로 감안하지 않더라도, 표의 네 번째 행까지 이미 상당히 좋은 결과라고 생각합니다. GenEval 성능과 DPG 성능이 모두 괜찮습니다. 이런 지표들은 이미지의 구성적 관계, 충실도, 전체 품질 등을 평가하며, 현실적인 평가 근거도 갖추고 있습니다.

⏱ 48:05다른 주제로 넘어가기 전에 마지막으로 한 가지 어텐션 방식을 더 설명하겠습니다. 비교적 새로운 방식이며, VLM 분야에서는 거의 쓰지 않는다는 의미에서도 새롭습니다. 서로 다른 모달리티의 의존성을 별도의 공간에서 모델링하면 어떨까요? 동기 중 하나는 텍스트 임베딩입니다. 대규모 언어 모델로 텍스트 임베딩을 계산하면 그 모델의 편향도 많이 물려받습니다. 일반적인 자기회귀 LLM을 사용한다면 단방향성 편향도 따라옵니다. 이런 편향은 여러 방식으로 생성 모델에 스며들 수 있습니다.

⏱ 49:0715. MMDiT의 분리 투영과 공동 진화

영상 장면 49:34
▶ 49:34 영상에서 보기

⏱ 49:07한 가지 아이디어는 QKV 투영을 모달리티마다 따로 하는 것입니다. 텍스트 임베딩에 QKV 투영을 적용하고, 잡음 잠재 표현에는 별도의 QKV 투영 매개변수 집합을 둡니다. 그다음 어텐션을 계산하기 직전에 이들을 이어 붙입니다. 즉 연결된 표현을 대상으로 어텐션을 계산하는 것입니다. 개념적으로는 이미지 잠재 표현과 텍스트 임베딩을 별도로 투영하고, 실제 어텐션 직전에 연결하는 것이 전부입니다. 이것이 Stable Diffusion 3 논문에서 제안한 MMDiT입니다.

⏱ 49:56연구의 동기는 텍스트 임베딩 안에 있을 수 있는 서로 다른 편향을 제거하는 것이었습니다. 연구진은 텍스트 임베딩과 이미지 임베딩이 질적으로 얼마나 다른지도 보여 주었습니다. 서로의 편향을 그대로 물려받지 않고 표현의 다양성을 확보하려면 왜 서로 다른 텍스트 임베딩이 필요한지에 대한 힌트도 됩니다. 전체 도식은 조금 복잡해 보일 수 있습니다. 크기가 커 보이는 이유는 모델링하는 각 모달리티마다 별도의 투영 행렬이 있기 때문입니다. 왼쪽에는 캡션, 오른쪽에는 잡음 잠재 표현이 있고, 각각의 QKV 투영과 적응형 층 정규화 행렬을 따로 둡니다.

⏱ 50:51그러나 개념적으로는 간단합니다. 적응형 층 정규화 행렬도 따로, QKV 투영 행렬도 따로, 출력 투영 행렬도 따로 둡니다. 관심 있는 두 모달리티에 대해 모든 것을 별도로 마련하는 것입니다. 이를 통해 주어진 작업, 여기서는 이미지 생성에 맞게 서로 다른 모달리티의 두 임베딩이 함께 진화하도록 할 수 있습니다.

⏱ 51:3216. Stable Diffusion 3의 조건과 스케일링

⏱ 51:32교차 어텐션에 익숙한 분이라면, 이렇게 어텐션을 계산할 때 마스킹은 어떻게 하느냐고 물으실 수 있습니다. 이것은 실제로 활발한 연구 주제입니다. MMDiT 방식의 어텐션에서 마스크를 전체적으로 어떻게 적용해야 할지는 아직 알지 못합니다. 변조에는 시간 단계와 조건 임베딩을 모두 사용합니다. Stable Diffusion 3는 보통 T5가 아닌 CLIP에서 계산한 별도의 풀링된 텍스트 임베딩을 사용합니다. 다른 텍스트 인코더의 편향을 그대로 물려받지 않도록 표현의 다양성이 필요한 것입니다.

⏱ 52:21Stable Diffusion 3는 텍스트 인코더를 세 개 사용하지만, 추론할 때는 조합을 바꿀 수 있습니다. 이미지 안의 글자 표현을 아주 잘하려면 T5가 필요하다는 것을 연구진이 보여 주었습니다. 그러나 그 외의 작업은 사용 중인 두 CLIP만으로도 많이 할 수 있고, 문자 렌더링에 집중하지 않는다면 T5를 빼도 됩니다. MMDiT가 정말 중요한 차이를 만드는지 궁금할 수 있는데, 결과적으로 중요했습니다. 연구진은 CrossDiT, UViT 등 여러 어텐션 변형을 시험했으며 MMDiT가 가장 낮은 검증 손실을 보였습니다. 검증 손실은 GenEval 같은, 우리가 관심을 갖는 이미지 생성 지표와도 상당히 잘 상관된다는 것을 보여 주었습니다.

⏱ 53:22규모를 키웠을 때도 잘 동작하지만 QK 정규화(QK-normalization)가 필요합니다. 동시기에 나온 연구들이 있어서 QK 정규화를 처음부터 새로 발명할 필요가 없었습니다. 일반적인 트랜스포머 연구의 발전을 이용하여 학습 불안정성을 해결한 것입니다. 그리고 이 이미지 없이는 Stable Diffusion 3 설명이 완성되지 않는다고 생각합니다. 단지 재미로 보여 드리는 것이 아닙니다. 프롬프트가 얼마나 복잡한지, 모델이 그것을 얼마나 잘 해석해 이런 생명체를 만들어 냈는지 보여 주기 때문입니다. 이런 프롬프트를 생각해 낸 저자들에게 공을 돌리고 싶습니다. 필요한 세부 묘사를 유지하면서도 인상적인 프롬프트 준수 능력을 보여 준 초기 모델 중 하나였습니다.

⏱ 54:3017. Flux와 Lumina2의 블록 구성

영상 장면 56:40
▶ 56:40 영상에서 보기

⏱ 54:30MMDiT는 여기서 멈추지 않았습니다. 몇 가지 다른 변형도 설명하겠습니다. Stable Diffusion 3는 모든 트랜스포머 블록에서 MMDiT 방식의 어텐션을 사용하며, 계산 부담이 큽니다. 트랜스포머 인코더를 다뤄 보셨다면 모달리티마다 별도의 투영 행렬을 유지해야 하는 MMDiT의 높은 연산 비용을 이해하실 것입니다. 그렇다면 MMDiT 블록과 일반 DiT 블록을 섞어서 FLOPs를 더 잘 활용할 수 있지 않을까요? 먼저 일정 수의 MMDiT 블록을 통과시킨 뒤 최종 표현을 연결하고, 그 연결된 공간에서는 MMDiT 대신 일반 DiT를 수행하는 것입니다. Black Forest Labs의 Flux 같은 최근 모델이 정확히 이렇게 합니다.

⏱ 55:44다른 변형도 가능합니다. 모달리티 A를 여러 트랜스포머 블록에 넣어 출력 A를 얻고, 모달리티 B, 예를 들면 텍스트 임베딩은 별도의 트랜스포머 블록들에 통과시킵니다. 이 출력들을 이어 붙여 다시 다른 트랜스포머 블록들을 통과시키면 최종 출력을 얻습니다. 이렇게 하면 각 블록을 독립적으로 구성할 수 있습니다. 모달리티 A용 트랜스포머 블록과 모달리티 B용 블록을 서로 다르게 만들 수 있으므로 유연성과 제어력이 더 커집니다. Lumina2 연구가 사용한 방식입니다.

⏱ 56:36그림에서 보듯 조건은 별도의 트랜스포머 블록들로, 잡음 잠재 표현은 또 다른 트랜스포머 블록들로 처리합니다. 그런 다음 이들을 연결하고 다시 트랜스포머 블록들을 거칩니다. 오른쪽 큰 도식의 왼쪽에 있는 블록은 잡음 잠재 표현을 모델링하는 블록과 다를 수 있습니다. 이 때문에 더 큰 유연성과 제어력을 얻습니다. 이런 설계가 복잡해 보일 수 있으니 어떻게 단순화할 수 있을지도 말씀드리고 싶습니다. 충분히 단순화할 수 있을지도 모릅니다. 다만 그 전에 질문이 있는지 잠깐 확인하겠습니다. Zoom 쪽에도 질문이 있나요? 온라인 질문을 몇 개 보겠습니다.

⏱ 57:3818. 질의응답: 생성 평가와 비디오의 난제

⏱ 57:38질문: GPT-4는 완전히 다른 아키텍처인가요? 확산 트랜스포머와 비교하면 어떤가요? 답변: 혼합 아키텍처를 사용하는 것으로 생각합니다. 분명히 LLM 요소가 있고, 그것을 이미지 생성이 가능하도록 발전시켰습니다. 이런 혼합 아키텍처는 잠시 후 이야기하겠습니다. 질문: 이미지와 비디오 생성 평가에 좋은 자동 지표가 있나요? 아니면 창작 글쓰기처럼 주로 사람의 주관적 평가에 의존하나요? 답변: 서로 다른 지표를 묶어서 평가한다고 생각합니다. 이미지 하나를 단일 지표로 평가할 수는 없습니다. 정확히 무엇을 보려는지에 따라서도 달라집니다. 구성적 관계에 관심이 있으면 그에 맞는 지표를, 미적 품질에 관심이 있으면 또 다른 지표를 써야 합니다.

⏱ 58:40질문: 이미지 생성 모델이 손가락 같은 것을 잘 만들지 못한다는 이야기가 흔하고 Reddit에서도 자주 봅니다. 개수 세기나 공간적 일관성 같은 문제는 여전한가요, 아니면 기본적인 문제들은 거의 해결되었나요? 답변: Flux 같은 모델은 확실히 훨씬 나아졌다고 생각합니다. 질문: 이미지 생성과 비교할 때 비디오 생성에는 어떤 큰 추가 과제가 있고, 어떻게 극복할 수 있을까요? 답변: 첫 번째 문제는 시간입니다. 확산 기반 이미지 생성도 이미 연산량이 큰데, 비디오에는 시간 축이 하나 더 있습니다. 그래서 연산이 훨씬 많아지고 차원의 저주 문제도 더 커집니다. 프레임을 많이 생성할수록 부담이 계속 커지므로, 효율을 높이는 방법이 지금 꼭 필요합니다.

⏱ 59:52질문: 시간적 의존 관계 같은 문제도 추가되겠군요. 답변: 맞습니다. 모델링해야 할 의존성의 축이 하나 더 생깁니다. 사실상 완전한 3차원 어텐션을 수행하는 것이므로, 생각만 해도 비용이 엄청납니다. 질문의 일부가 잘 들리지 않습니다. 다시 말씀해 주시겠어요? 질문: 비디오에서는 매 프레임을 처음부터 새로 생성할 필요 없이, 이미 어느 정도 만들어진 것에 작은 변화만 주면 되지 않나요? 답변: 2차원 이미지 생성 모델을 확장해 시공간 생성을 하게 한다고 해서 현실적인 상황에서 잘 되는 것은 아닙니다. 영화 같은 프레임을 만들고 싶다면 시공간적 일관성이 사라지므로 그 방식만으로는 잘 되지 않습니다.

⏱ 1:00:53[청취 불가 부분에 이어] 그래도 한계는 있어야 합니다. 너무 많은 이전 프레임을 입력으로 사용하면 쿼리 쪽의 계산도 매우 부담스러워집니다. 따라서 시간 차원을 효과적으로 압축하는 방법을 찾아야 합니다. 프레임 수가 가변적이라고 해 봅시다. 의미를 유지하면서 효율적으로 처리하려면 이것을 잠재 공간의 시간 차원에 어떻게 대응시켜야 할까요? 비디오에서는 공간 압축만 하는 것이 아니라 시간 압축도 해야 합니다. 모델을 발전시켜 가면서 이 두 가지를 어떻게 함께 모델링할지가 문제입니다. 다른 질문이 있나요? 하나 정도 더 받겠습니다.

⏱ 1:01:4419. 질의응답: 조건 변조의 직관과 마스킹

⏱ 1:01:44질문: Zoom에서 적응형 층 정규화가 왜 그렇게 잘 작동하는지 직관을 설명해 달라는 질문이 있습니다. 답변: 층 정규화는 기본적으로 학습을 안정화하기 위해 사용합니다. 여러 블록에 걸쳐 더 안정적인 표현을 얻게 합니다. 그런데 이미지에는 일반적인 표현 외에도 모델링하고 싶은 특성들이 있고, 그런 특징들이 트랜스포머 블록 안으로 자유롭게 흘러들어 가게 해야 합니다. 그래서 변조가 필요합니다. 그렇지 않으면 정규화 매개변수와 어텐션 특징, 또는 MLP가 계산하는 특징들이 생성 성능에 도움이 되는 방식으로 상호작용하지 못합니다.

⏱ 1:02:37단순한 이해 작업이나 판별 성능만 다룬다면 그 차이가 그렇게 중요하지 않을 수 있습니다. 하지만 스타일과 충실도를 중시한다면, 시각적 단서에서 얻은 추가 특징을 변조해야 합니다. 다른 질문이 있나요? 질문: [일부 청취 불가] MMDiT에서 마스킹을 어떻게 해야 할지 아직 모른다면, 차선책이나 마스킹의 대안이 있나요? 답변: 하나의 직관적인 생각은, MMDiT에서 애초에 왜 마스킹이 필요한지 묻는 것입니다. MMDiT의 목적 하나는 텍스트 임베딩 표현에 있을 수 있는 단방향성 편향에서 벗어나는 것이었습니다.

⏱ 1:03:33둘째로 프롬프트가 아주 길다면 처음부터 마스크를 계산하지 않아도 됩니다. 또 짧은 프롬프트보다는 길고 자세히 묘사한 프롬프트가 더 낫다는 결과도 있습니다. 다소 직관에 기대는 답변입니다만, 요점은 MMDiT 어텐션에서 마스크를 추가하는 것이 정말 간단하지 않다는 점입니다. 질문: [말이 겹침] 텍스트와 이미지 양쪽에서 QKV를 따로 계산하는 것에 관한 질문이었습니다. 이미지 쪽에서는 어떤가요? 답변: 이미지 사이 상호작용에는 이론상 마스크를 쓸 수 있습니다. 다만 문제를 어떻게 정의하고, 어디에 마스크를 넣어야 할까요?

⏱ 1:04:18텍스트 이미지 생성만 한다면 어떨까요? 다른 종류의 조건 제어가 추가되어 있다면 그 상호작용의 일부를 마스킹하고 싶을 수 있습니다. 그러나 텍스트 이미지 생성에만 한정한다면 처음부터 어디에 마스크를 넣어야 할까요? 질문: 제 말은 마스킹을 피하려는 것이라는 뜻입니다. 답변: 아, 그래서 애초에 마스킹을 하지 않은 것일 수도 있겠군요. 아마 그들의 동기도… 질문: 네, 바로 그겁니다. 답변: 마지막 질문이 더 있으면 하나 받겠습니다. 좋습니다. 이제 설계를 단순화할 아이디어를 남겨 드리겠습니다. 복잡하게 느껴졌을 수 있지만 꼭 그렇게 복잡할 필요는 없습니다. 어떻게 줄일 수 있는지 보겠습니다.

⏱ 1:05:0720. 매개변수 공유와 DiT-Air의 단순화

영상 장면 1:07:12
▶ 1:07:12 영상에서 보기

⏱ 1:05:07매개변수 공유(parameter sharing)는 얼마나 유용할까요? 앞에서 본 AdaLN이나 계산량을 27% 줄인 PixArt-alpha 연구 같은 공유가 얼마나 도움이 되는지 물을 수 있습니다. AdaLN 공유는 이미 보았는데, ALBERT처럼 QKVO와 MLP도 공유할 수 있을까요? 예전 ALBERT에서는 여러 층에서 투영 행렬을 모두 공유하고 MLP 행렬도 공유했습니다. 또 자기 어텐션 다음에 교차 어텐션을 수행하는 구성이 정말 필요할까요? MMDiT가 반드시 필요할까요? 앞선 질문에도 아마 답이 될 것입니다. 이런 요소들이 설계 공간을 상당히 복잡하게 만드니, 더 단순하게 할 수 있는지 생각해 봅시다.

⏱ 1:06:01잡음 잠재 표현의 자기 어텐션과 잡음 잠재 표현·텍스트 간 교차 어텐션을 따로 수행하거나 MMDiT를 쓰지 않고, 연결된 공간에서 그냥 자기 어텐션을 할 수 있을까요? 모든 이미지 토큰과 텍스트 토큰을 이어 붙인 후 그 전체에 자기 어텐션을 계산할 수 있는지 묻는 것입니다. 텍스트 인코더의 비결도 궁금합니다. 세 개를 쓰기도 하고 두 개를 쓰기도 하는데, 결국 생성에 무엇이 도움이 될까요? 알고 보면 상당히 많이 단순화할 수 있습니다. 효율을 원한다면 QKVO 매개변수를 공유할 수 있고, 적응형 층 정규화 매개변수도 분명히 공유할 수 있습니다. 이미지 토큰과 텍스트 토큰을 연결한 표현 공간에 자기 어텐션을 수행하는 것도 가능합니다.

⏱ 1:06:59좋은 소식이라고 생각합니다. 다만 Apple이 이 연구를 오픈소스로 공개하지 않았으므로 직접 구현해야 한다는 점은 아쉽습니다. 그래도 설계를 상당히 단순화할 수 있다는 것을 알 수 있습니다. 도식의 맨 오른쪽이 제가 설명한 단순화된 구조입니다. 연결된 공간에서 계산하고, 적응형 층 정규화 매개변수를 줄이며, QKV 투영과 MLP 층도 공유합니다. 실제로 꽤 잘 동작합니다. 그래프에서 초록색이 단순화한 설계이며 항상 가장 낮은 손실을 얻습니다. 층 정규화 매개변수 외에 QKV와 MLP도 공유할 수 있지만, 효율만을 목표로 한다면 어느 정도의 품질 저하는 감수해야 할 수 있습니다.

⏱ 1:08:05텍스트 인코더와 관련하여 Apple 연구진은 양방향 CLIP과 텍스트 전용 LLM을 함께 쓰는 편이 더 좋다는 것을 발견했습니다. CLIP과 T5의 조합 대신 CLIP과 일반적인 대규모 언어 모델을 사용하면 텍스트 표현이 더 좋아집니다. 성능도 꽤 좋습니다. 표의 마지막 행이 Apple의 DiT-Air 연구이고, 굵게 표시된 수치들이 좋은 결과를 보여 줍니다. 정리하면 설계를 단순화할 수 있고, 이 결과만 보면 MMDiT가 반드시 필요한 것은 아닙니다. 앞으로 어떻게 될지는 더 지켜보아야겠습니다.

⏱ 1:08:4721. 구조적 제어와 비디오 모델

영상 장면 1:11:20
▶ 1:11:20 영상에서 보기

⏱ 1:08:47이제 이런 질문이 떠오를 것입니다. 텍스트 이미지 생성이 자유로운 것은 좋지만, 더 많은 제어 신호는 어떻게 넣을까요? 텍스트 이미지 모델에 구조적 입력을 추가하려면 어떻게 해야 할까요? 예를 들어 특정 자세를 따르게 하거나, 특정 분할 맵을 따르게 하고 싶을 수 있습니다. 여러 구조적 신호를 동시에 결합할 수 있을까요? 한 가지 방법은 구조적 입력에서 두드러진 표현을 계산해 주는 보조 네트워크를 학습하는 것입니다.

⏱ 1:09:30구조적 이미지 신호에서 얻은 표현을 기본 확산 모델 안에 주입하는 방법을 찾는 것입니다. ControlNet 계열 연구가 이런 철학을 따릅니다. 또 기본 확산 트랜스포머 자체를 바꾸어, 입력 채널 수를 늘리고 더 많은 제어 정보를 받아들이게 할 수도 있습니다. FluxControl 프레임워크의 방식입니다. 모든 조건과 잡음 잠재 토큰 사이에 의존 관계를 모델링하는 작은 어댑터 네트워크를 학습하는 방법도 있습니다. 여기서 중요한 점은 구조적 제어에는 항상 공간적 대응 관계가 있다는 것입니다. 반면 특정 피사체를 중심으로 한 생성이나 이미지 편집은 직접적인 공간 대응이 없을 수 있습니다. 이런 경우에는 어떻게 해야 할까요? 이것 역시 활발한 연구 주제입니다.

⏱ 1:10:40비디오의 위치 인코딩에는 RoPE가 상당히 잘 작동합니다. 앞서 말했듯 완전한 3차원 어텐션이므로 계산 공간의 비용은 훨씬 커집니다. 어떤 형태로든 어텐션을 분해하면 되지 않겠느냐고 생각할 수 있지만, 잘 되지 않는다는 점을 분명히 말씀드립니다. 비디오 모델의 효율 관련 연구에 관심이 있다면 LTX-Video를 살펴보시길 강력히 권합니다. 충실도나 사실적인 표현 같은 성능 측면에서는 개인적으로 Wan을 가장 좋아합니다. 상당히 좋습니다. 여기 작은 시연이 있습니다. 아직 짧은 형식의 비디오이지만, 사실성과 충실도가 상당히 개선되었다고 생각합니다.

⏱ 1:11:3522. 문맥 내 학습과 남은 연구 과제

⏱ 1:11:35이제 강연 끝부분이니 차세대 아키텍처도 조금 소개하고 싶습니다. 확산 모델에서 문맥 내 학습을 어떻게 가능하게 할지 궁금하실 것입니다. 언어 모델에서는 제로샷 학습 같은 것이 매우 흔합니다. 확산에서는 어떻게 문맥 내 학습을 가능하게 할까요? 현재 아키텍처만으로는 합리적인 시간 안에 이를 달성하기에 분명히 충분하지 않습니다. 기본 아이디어는 LLM에 구성 요소를 더해 이미지도 잘 생성하도록 만드는 것입니다. 최근의 Bagel 같은 연구가 그렇습니다. 다른 연구의 이름은 잘 들리지 않지만, 이들도 비슷한 철학을 따릅니다. 반드시 확산 기반인 것은 아닙니다.

⏱ 1:12:22사전학습된 LLM에서 시작해 이미지 생성 능력을 갖추도록 구성 요소를 더합니다. 예를 들면 이산 토큰에는 자기회귀를 수행하고, 동시에 연속 토큰에는 확산을 수행할 수 있습니다. 이런 연구 방향 중 하나가 Transfusion입니다. Playground v3, FuseDiT, Transfusion 같은 연구들이 있습니다. FuseDiT는 저희 그룹의 연구입니다. 문맥 내 학습이라는 문제를 전체적으로 어떻게 탐구할지 다루는 연구 중, 여러분이 찾을 수 있는 유일한 오픈소스 연구일 것이라고 생각합니다.

⏱ 1:13:01이런 아키텍처들을 탐구하고 싶은 마음이 생기셨기를 바랍니다. Hugging Face에서 제가 작업하는 Diffusers 라이브러리를 살펴보시길 환영합니다. 오늘 설명한 모델들의 구현이 비교적 깔끔하게 정리되어 있으니, 직접 코드를 살펴보고 수정하는 데 도움이 될 것입니다. 물론 다루지 못한 것도 많습니다. 시간이 약 1분 초과되었는데, 앞으로 1분 안에 마치겠습니다. 양해 부탁드립니다. 요즘 다시 뜨거운 주제인 전문가 혼합(MoE)은 설명하지 못했습니다. HiDream이라는 모델처럼 MoE도 확산 커뮤니티에 들어오고 있습니다.

⏱ 1:13:46학습도 전혀 다루지 못했습니다. 여기에는 데이터 구성, 정렬, 사후학습, 안전성 문제 완화, 암기와 그 완화 등 온갖 복잡한 문제가 있습니다. 이런 모델의 활용은 이미지와 비디오 생성보다 훨씬 넓습니다. 로보틱스, 유전자 합성 등 여러 분야에 적용됩니다. 기계적 해석 가능성(mechanistic interpretability)에 관심이 있다면, 이 거대한 모델들을 해석하는 일도 결코 쉽지 않다는 점을 말씀드리고 싶습니다. 저도 이런 문제들에 큰 관심이 있습니다. 여기까지입니다. 감사합니다. [청중 박수]

난이도 전문#확산모델#트랜스포머#이미지생성#DiT#멀티모달

← 목록으로
공유페이스북밴드

이 글에 대해 요청(숨김) 수정 요청