Diffusers documentation

DiscreteDDIMScheduler

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DiscreteDDIMScheduler

DiscreteDDIMScheduler는 Structured Denoising Diffusion Models in Discrete State-Spaces에 따라 균일한 손상 과정(D3PM)의 정확한 이산 사후 분포에서 각 캔버스 위치를 샘플링합니다. 이 스케줄러는 매개변수가 없으며, 마지막 단계에서 예측된 토큰을 결정적으로 확정합니다. 선택적인 predictor-corrector 모드는 corrector_steps를 통해 Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation의 leave-one-out Gibbs sweeps를 추가합니다.

이 스케줄러는 DiffusionGemmaPipeline에서 사용됩니다.

DiscreteDDIMScheduler

클래스 diffusers.DiscreteDDIMScheduler

< >

( num_inference_steps: int = 32corrector_steps: int = 0corrector_k: int = 1corrector_selection: str = 'lowest_log_margin'corrector_selection_tau: float = 1.0 )

매개변수

  • num_inference_steps (int, 기본값 32) — 디노이징 단계의 수로, 포스터iors가 평가되는 선형 시간 그리드를 정의합니다.
  • corrector_steps (int, 기본값 0) — 각 predictor 단계 이후에 실행되는 Gibbs corrector sweep의 횟수입니다. 0이면 일반적인 ancestral DDIM 샘플링을 수행합니다.
  • corrector_k (int, 기본값 1) — 각 corrector sweep에서 재샘플링되는 위치의 수.
  • corrector_selection (str, 기본값 "lowest_log_margin") — 리샘플링된 위치를 선택하는 방법: "lowest_log_margin", "lowest_maxprob", "lowest_current_prob" 또는 "random".
  • corrector_selection_tau (float, 기본값 1.0) — Gumbel-top-k 위치 선택의 온도(값이 낮을수록 탐욕적).

“Structured Denoising Diffusion Models in Discrete State-Spaces”(D3PM, https://huggingface.co/papers/2107.03006)에 따라 균일한 손상 과정(uniform corruption process)을 위한 Discrete DDIM 스케줄러입니다.

선형 스케줄에서 시간 t 시점의 클린 토큰 생존 확률은 alpha(t) = 1 - t입니다. 시간 t에서 s < t로의 단일 디노이징 단계에서는 모든 블록 위치를 정확한 사후 분포 q(x_s | x_t, x0)에서 샘플링하며, 균일 커널의 경우 이는 세 가지 경로로 분해됩니다: 예측된 클린 토큰 x0으로 점프, 현재 토큰 유지, 균일하게 무작위 선택된 토큰으로 점프. 마스크 디퓨전과 달리 마스크 토큰이 없으며, 확정되지 않은 위치에는 무작위 토큰이 배치됩니다.

선택적인 predictor-corrector 모드는 leave-one-out (LOO) denoiser를 통해 “Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation”을 따릅니다(https://huggingface.co/papers/2605.22765). corrector_steps > 0인 경우, 파이프라인은 각 predictor 단계 후 해당 수만큼의 Gibbs corrector sweeps를 실행합니다(step_correct() 참조). 이 과정에서 나머지 위치를 고정하고 가장 확신이 낮은 위치들을 one-coordinate conditional Cat(alpha_s * x0_loo + (1 - alpha_s) / K)에서 다시 샘플링하여, marginal p_s는 불변을 유지하면서 학습 비용 없이 생성 품질을 향상시킵니다.

단계

< >

( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensortemperature: float = 0.0generator: torch.Generator | None = Nonereturn_dict: bool = True )

매개변수

  • model_output (torch.Tensor, shape (batch_size, block_length, vocab_size)) — 현재 블록에 대한 모델의 원시 로짓(raw logits).
  • timestep (int 또는 torch.Tensor) — [0, num_inference_steps - 1] 범위 내의 디노이징 스케줄에서 현재 스텝 인덱스입니다.
  • sample (torch.LongTensor, shape (batch_size, block_length)) — 현재 블록의 토큰 ID x_t.
  • temperature (float) — x0를 추출할 때 logits에 적용되는 샘플링 온도입니다.
  • generator (torch.Generator, 선택 사항) — 샘플링을 위한 RNG입니다.
  • return_dict (bool) — bool DiscreteDDIMSchedulerOutput 또는 일반 튜플을 반환할지 여부.

균일 손상 과정의 사후 분포 q(x_s | x_t, x0)에서 다음 블록을 샘플링합니다.

a = alpha_t / alpha_s (s에서 t까지의 생존 확률) 및 b = alpha_s일 때, 각 경로의 사후 질량은

clean: b * (1 - a) / K + a * b * 1[x_t = x0], stay: a * (1 - b) / K, noise: (1 - a) * (1 - b) / K,

따라서 마지막 단계(b = 1)에서 예측된 클린 토큰이 결정적으로 커밋됩니다.

step_correct

< >

( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensorgenerator: torch.Generator | None = Nonereturn_dict: bool = True )

매개변수

  • model_output (torch.Tensor, shape (batch_size, block_length, vocab_size)) — 현재 (post-predictor) sample에서 다시 계산된 모델의 원시 logits입니다.
  • timestep (int 또는 torch.Tensor) — 방금 완료된 예측자 단계 인덱스이며, 보정자는 다음 그리드 포인트 s에서 실행됩니다.
  • sample (torch.LongTensor, shape (batch_size, block_length)) — 정제할 현재 블록의 토큰 ID입니다.
  • generator (torch.Generator, 선택 사항) — 샘플링을 위한 RNG입니다.
  • return_dict (bool) — bool DiscreteDDIMSchedulerOutput 또는 일반 튜플을 반환할지 여부.

https://huggingface.co/papers/2605.22765의 leave-one-out predictor-corrector를 따르며, post-predictor 시점 s에서 Gibbs corrector sweep를 한 번 실행합니다.

모델 로짓(현재 sample에서 다시 계산됨)은 LOI 디노이저로 변환되며, 1좌표 조건부 p_s(x^l | x^{-l}) = Cat(alpha_s * x0_loo + (1 - alpha_s) / K)가 형성됩니다. 이후 가장 확신이 낮은 corrector_k 위치가 선택되고, 해당 위치는 재샘플링되며 나머지 위치는 고정됩니다. 이 스윕은 p_s를 보존하므로, 주변 분포를 변경하지 않으면서 샘플을 정제할 수 있으며 추가 학습이 필요하지 않습니다.

DiscreteDDIMSchedulerOutput

class diffusers.DiscreteDDIMSchedulerOutput

< >

( prev_sample: torch.LongTensorsampled_tokens: torch.LongTensorsampled_probs: torch.Tensorpred_logits: torch.Tensor )

매개변수

  • prev_sample (torch.LongTensor, shape (batch_size, block_length)) — 현재 denoising 단계 이후 업데이트된 block 토큰.
  • sampled_tokens (torch.LongTensor, shape (batch_size, block_length)) — 모델 logits에서 샘플링된 토큰 ID, 즉 예측된 클린 토큰 x0입니다.
  • sampled_probs (torch.Tensor, shape (batch_size, block_length)) — 샘플링된 토큰의 확률입니다.
  • pred_logits (torch.Tensor, shape (batch_size, block_length, vocab_size)) — 다음 단계의 self-conditioning을 위해 전달되는 denoiser logits입니다.

이산 DDIM 스케줄러의 출력 클래스입니다.

Update on GitHub