2P by neo 8달전 | favorite | 댓글 1개

새로운 이론적 관점에서 본 스크래치부터의 확산 모델

  • 확산 모델은 최근 생성 모델링에서 인상적인 결과를 보여주었으며, 특히 다중 모드 분포에서의 샘플링에 뛰어남.
  • 확산 모델은 텍스트-이미지 생성 도구인 Stable Diffusion에서 널리 채택되었을 뿐만 아니라 오디오/비디오/3D 생성, 단백질 설계, 로봇 경로 계획 등 다양한 응용 분야에서도 뛰어난 성능을 보임.
  • 이 튜토리얼은 최적화 관점에서 확산 모델을 소개하며, 이론과 코드를 모두 다루어 확산 모델을 스크래치부터 구현하는 방법을 설명함.

확산 모델 훈련하기

  • 확산 모델은 훈련 예제에서 학습된 집합으로부터 샘플을 생성하는 것을 목표로 함.
  • 확산 모델 훈련은 다음과 같은 과정을 포함함:
    1. K에서 x0을 샘플링하고, σmin과 σmax 사이에서 노이즈 레벨 σ를 샘플링하고, N(0,I)에서 노이즈 ϵ을 샘플링함.
    2. 노이즈 데이터 xσ=x0+σϵ을 생성함.
    3. 제곱 손실을 최소화하면서 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 샘플러보다 빠른 수렴을 보여줌.

대규모 예제

  • 위에서 제공된 훈련 코드는 장난감 데이터셋뿐만 아니라 이미지 확산 모델을 스크래치부터 훈련하는 데에도 사용할 수 있음.
  • 샘플링 코드는 사전 훈련된 최첨단 잠재 확산 모델에서 샘플링하는 데 수정 없이 작동함.

기타 자료

  • 확산 모델에 대한 다음 블로그 게시물도 추천함:
    1. 확산 모델이란 무엇인가는 마르코프 과정을 역전하는 이산 시간 관점에서 확산 모델을 소개함.
    2. 데이터 분포의 기울기를 추정하여 생성 모델링을 하는 것은 확산 모델을 확률 미분 방정식을 역전하는 연속 시간 관점에서 소개함.
    3. 주석이 달린 확산 모델은 확산 모델의 파이토치 구현을 자세히 설명함.

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 논문을 언급하며, 이 논문이 확산 모델을 단순화하고 반복적인 투영 과정으로 표현하는 방법을 제시한다고 언급함.
  • 확산의 아이디어 중 하나는 방대한 양의 훈련 데이터를 얻는 것인가? 즉, 무작위로 확산된 이미지들과 확산되지 않은 이미지를 대조하는 것인가?

    • 확산 모델의 아이디어 중 하나가 대량의 훈련 데이터를 활용하는 것인지에 대한 질문을 제기함.
  • 이론에 대한 좋은 설명임. 데이터셋에 독립적인 것으로 보임. 이미지 생성의 구체적인 사항에 대해 궁금함. 예를 들어, 이미지 생성기가 피아노 건반을 생성하기 어려운 이유는 무엇인가? 더 나은 중거리 제약 표현이 필요해 보임.

    • 이론 설명이 좋고 데이터셋에 독립적이라는 점을 언급하며, 이미지 생성의 구체적인 어려움, 특히 피아노 건반과 같은 복잡한 패턴을 생성하는 데 필요한 요소에 대해 질문함.
  • 모든 기계 학습 모델은 컨볼루션임을 기억하라.

    • 모든 기계 학습 모델이 컨볼루션을 기반으로 한다는 단언적인 의견을 제시함.
  • 이 글의 댓글을 사용하여 비밀 메시지를 보내는 비밀 사회가 있으니 구글링하지 말 것.

    • 댓글을 통해 비밀 메시지를 주고받는 비밀 사회가 있다는 풍자적인 주장을 함.