GN⁺: 새로운 이론적 관점에서 본 '스크래치'로부터의 디퓨전 모델
(chenyang.co)새로운 이론적 관점에서 본 스크래치부터의 확산 모델
- 확산 모델은 최근 생성 모델링에서 인상적인 결과를 보여주었으며, 특히 다중 모드 분포에서의 샘플링에 뛰어남.
- 확산 모델은 텍스트-이미지 생성 도구인 Stable Diffusion에서 널리 채택되었을 뿐만 아니라 오디오/비디오/3D 생성, 단백질 설계, 로봇 경로 계획 등 다양한 응용 분야에서도 뛰어난 성능을 보임.
- 이 튜토리얼은 최적화 관점에서 확산 모델을 소개하며, 이론과 코드를 모두 다루어 확산 모델을 스크래치부터 구현하는 방법을 설명함.
확산 모델 훈련하기
- 확산 모델은 훈련 예제에서 학습된 집합으로부터 샘플을 생성하는 것을 목표로 함.
- 확산 모델 훈련은 다음과 같은 과정을 포함함:
- K에서 x0을 샘플링하고, σmin과 σmax 사이에서 노이즈 레벨 σ를 샘플링하고, N(0,I)에서 노이즈 ϵ을 샘플링함.
- 노이즈 데이터 xσ=x0+σϵ을 생성함.
- 제곱 손실을 최소화하면서 xσ에서 ϵ(노이즈의 방향)을 예측함.
- 실제 훈련은
training_loop
함수를 통해 수행되며, 이는 배치의x0
을 반복하고,generate_train_sample
을 사용하여 노이즈 레벨sigma
와 노이즈 벡터eps
를 샘플링함.
노이즈 스케줄
- 실제로 σ는 [σmin,σmax] 구간에서 균등하게 샘플링되지 않고, 이 구간은 N개의 구별된 값인 _σ 스케줄_로 이산화됨.
-
Schedule
클래스는 가능한sigmas
의 리스트를 캡슐화하고, 훈련 중에 이 리스트에서 샘플링함. - 로그-선형 스케줄을 사용하며, 다른 스케줄과 비교하여 기본 매개변수로 이 스케줄을 비교하는 플롯을 제공함.
장난감 예제
- 이 튜토리얼에서는 스파이럴에서 샘플링된 점들로 구성된 장난감 데이터셋을 사용함.
- 이 간단한 데이터셋에 대해 다층 퍼셉트론(MLP)을 사용하여 디노이저를 구현함.
- MLP는 x∈R2와 노이즈 레벨 σ의 연결을 입력으로 받고, 노이즈 ϵ∈R2를 예측함.
- 모든 필수 구성 요소를 갖추고 나면 확산 모델을 훈련할 수 있음.
디노이징을 근사적 투영으로 해석하기
- 확산 훈련 절차는 디노이저 ϵθ(x,σ)를 학습하며, 논문에서는 학습된 디노이저를 데이터 매니폴드 K에 대한 근사적 투영으로 해석함.
- 이는 확산 샘플링 알고리즘의 수렴을 분석하기 위해 상대 오차 근사 모델을 도입하는 것을 동기로 함.
거리 및 투영 함수
- 집합 K⊆Rn에 대한 _거리 함수_는 distK(x)로 정의되며, x∈Rn의 _투영_은 이 거리를 달성하는 점들의 집합으로 정의됨.
- 만약 projK(x)가 유일하다면, distK(x)의 기울기는 이 유일한 투영을 향함.
이상적인 디노이저
- 특정 노이즈 레벨 σ에 대한 이상적 또는 최적의 디노이저 ϵ∗는 훈련 손실 함수의 정확한 최소화자임.
- 데이터가 K에 대한 유한 집합 위의 이산 균등 분포일 때, 이상적인 디노이저는 정확한 닫힌 형태의 표현을 가짐.
상대 오차 모델
- 확산 샘플링 알고리즘의 수렴을 분석하기 위해 상대 오차 모델을 도입함.
- 이 모델은 디노이저에 의해 예측된 투영 x−σϵθ(x,σ)가 입력 x에 대해 σ가 distK(x)/n을 잘 추정할 때 projK(x)를 잘 근사한다고 가정함.
확산 모델에서 샘플링하기
- 학습된 디노이저 ϵθ(x,σ)에서 샘플링하여 K에 속하는 점 x0을 얻기 위해, 노이즈 xt와 노이즈 레벨 σt를 가진 디노이저 ϵθ(xt,σt)가 x0을 예측함.
확산 샘플링을 거리 최소화로 해석하기
- 확산 샘플링 반복을 함수 f(x)=12distK(x)2에 대한 기울기 하강으로 해석할 수 있음.
- σt 스케줄을 어떻게 선택해야 하는지는 샘플링 중에 취할 기울기 단계의 수와 크기를 결정함.
기울기 추정을 통한 개선된 샘플러
- 기울기 추정을 통해 새로운 효율적인 샘플러를 도출함.
- 이 샘플러는 기존의 DDIM 샘플러보다 빠른 수렴을 보여줌.
대규모 예제
- 위에서 제공된 훈련 코드는 장난감 데이터셋뿐만 아니라 이미지 확산 모델을 스크래치부터 훈련하는 데에도 사용할 수 있음.
- 샘플링 코드는 사전 훈련된 최첨단 잠재 확산 모델에서 샘플링하는 데 수정 없이 작동함.
기타 자료
- 확산 모델에 대한 다음 블로그 게시물도 추천함:
- 확산 모델이란 무엇인가는 마르코프 과정을 역전하는 이산 시간 관점에서 확산 모델을 소개함.
- 데이터 분포의 기울기를 추정하여 생성 모델링을 하는 것은 확산 모델을 확률 미분 방정식을 역전하는 연속 시간 관점에서 소개함.
- 주석이 달린 확산 모델은 확산 모델의 파이토치 구현을 자세히 설명함.
GN⁺의 의견
- 이 튜토리얼은 확산 모델을 최적화 관점에서 소개하며, 이론적 배경과 실제 코드 구현을 연결하는 방식으로 설명함으로써 초급 소프트웨어 엔지니어에게도 접근성을 제공함.
- 확산 모델은 다양한 데이터 유형에 적용 가능하며, 이는 다중 모드 분포에서의 샘플링이 중요한 다양한 응용 분야에서의 활용성을 시사함.
- 튜토리얼은 확산 모델의 훈련과 샘플링 과정을 단계별로 설명하며, 이를 통해 모델의 작동 원리와 구현 방법에 대한 심층적인 이해를 돕는다.
- 확산 모델의 훈련과 샘플링 과정은 상대적으로 복잡하며, 이를 이해하고 구현하기 위해서는 머신러닝과 딥러닝의 기본적인 지식이 필요함.
- 이 기술을 도입할 때는 계산 비용과 훈련 데이터의 품질, 모델의 복잡성과 같은 요소들을 고려해야 하며, 이를 통해 더 정교하고 다양한 샘플을 생성할 수 있는 잠재력을 가짐.
Hacker News 의견
-
저자의 말: 확산 모델을 이해하려고 할 때 코드와 수학을 훨씬 단순화할 수 있다는 것을 깨달았고, 이로 인해 블로그 글과 확산 라이브러리를 작성하게 됨. 질문에 기꺼이 답변할 준비가 되어 있음.
- 저자는 확산 모델을 이해하는 과정에서 코드와 수학을 단순화할 수 있다는 점을 발견하고, 이에 관한 블로그 글과 라이브러리를 작성함.
-
다른 훌륭한 글, 'Diffusion Models From Scratch'는 수학적인 세부 사항을 더 자세히 다루고 있으며, 이해하기 쉬운 500줄 미만의 구현을 동반함.
- 'Diffusion Models From Scratch'라는 글은 확산 모델에 대한 수학적인 내용을 더 깊게 다루고, 간결한 코드 구현을 제공함.
-
이 글에는 코드가 포함되어 있어 좋음. 확산 논문은 많은 수식으로 유명하지만, 코드는 우리 같은 사람들에게 더 명확하고 이해하기 쉬움. 모든 이론 논문은 참조 구현 코드와 함께 제공되어야 함.
- 확산 관련 논문들은 복잡한 수식으로 가득하지만, 코드는 이해하기 쉽고 정확함. 이론적인 논문들은 참조할 수 있는 구현 코드가 있어야 한다는 의견.
-
확산 트랜스포머에 대한 확장을 보고 싶음. Sora와 다른 비디오 생성 모델을 구동하는 데 사용됨. 이 글과 'GPT From Scratch'를 결합하여 'Diffusion Transformer From Scratch' 소개를 만들면 좋을 것 같음.
- 확산 트랜스포머에 대한 추가 정보를 원하며, 이를 통해 비디오 생성 모델을 만드는 방법에 대한 소개가 있으면 좋겠다는 의견.
-
좋은 글이지만, 확산 모델이 확률 로그의 도함수(점수 함수)를 모델링하고, 확산 샘플링이 랑제뱅 동역학과 유사하다는 중요한 특성을 놓치고 있음. 이것이 GAN보다 훈련하기 쉬운 이유를 설명해 줌.
- 확산 모델이 점수 함수를 모델링하고 확산 샘플링이 랑제뱅 동역학과 유사하다는 중요한 특성을 강조하며, 이것이 GAN보다 훈련이 쉬운 이유를 설명한다고 주장함.
-
매우 흥미로움. Iterative alpha-(de)Blending 논문이 떠오름. 이 논문도 개념적으로 더 단순한 확산 모델을 설정하고, 대략적인 반복적인 투영 과정으로 이를 수식화함. 이 접근법은 노이즈 제거 오류 분석과 같은 더 흥미로운 실험을 가능하게 함.
- Iterative alpha-(de)Blending 논문을 언급하며, 이 논문이 확산 모델을 단순화하고 반복적인 투영 과정으로 표현하는 방법을 제시한다고 언급함.
-
확산의 아이디어 중 하나는 방대한 양의 훈련 데이터를 얻는 것인가? 즉, 무작위로 확산된 이미지들과 확산되지 않은 이미지를 대조하는 것인가?
- 확산 모델의 아이디어 중 하나가 대량의 훈련 데이터를 활용하는 것인지에 대한 질문을 제기함.
-
이론에 대한 좋은 설명임. 데이터셋에 독립적인 것으로 보임. 이미지 생성의 구체적인 사항에 대해 궁금함. 예를 들어, 이미지 생성기가 피아노 건반을 생성하기 어려운 이유는 무엇인가? 더 나은 중거리 제약 표현이 필요해 보임.
- 이론 설명이 좋고 데이터셋에 독립적이라는 점을 언급하며, 이미지 생성의 구체적인 어려움, 특히 피아노 건반과 같은 복잡한 패턴을 생성하는 데 필요한 요소에 대해 질문함.
-
모든 기계 학습 모델은 컨볼루션임을 기억하라.
- 모든 기계 학습 모델이 컨볼루션을 기반으로 한다는 단언적인 의견을 제시함.
-
이 글의 댓글을 사용하여 비밀 메시지를 보내는 비밀 사회가 있으니 구글링하지 말 것.
- 댓글을 통해 비밀 메시지를 주고받는 비밀 사회가 있다는 풍자적인 주장을 함.