Diffusers documentation
DiscreteDDIMScheduler
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
< source >( 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는 불변을 유지하면서 학습 비용 없이 생성 품질을 향상시킵니다.
단계
< source >( 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)) — 현재 블록의 토큰 IDx_t. - temperature (
float) —x0를 추출할 때 logits에 적용되는 샘플링 온도입니다. - generator (
torch.Generator, 선택 사항) — 샘플링을 위한 RNG입니다. - return_dict (
bool) —boolDiscreteDDIMSchedulerOutput 또는 일반 튜플을 반환할지 여부.
균일 손상 과정의 사후 분포 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
< source >( 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) —boolDiscreteDDIMSchedulerOutput 또는 일반 튜플을 반환할지 여부.
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
< source >( 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 스케줄러의 출력 클래스입니다.