Diffusers documentation

DiscreteDDIMScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DiscreteDDIMScheduler

DiscreteDDIMScheduler mengambil sampel setiap posisi kanvas dari posterior diskrit eksak dari proses korupsi seragam (D3PM), mengikuti Structured Denoising Diffusion Models in Discrete State-Spaces. Jadwal ini bebas parameter, dan langkah akhir secara deterministik mengunci token yang diprediksi. Mode predictor-corrector opsional menambahkan sapuan Gibbs leave-one-out dari Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation melalui corrector_steps.

Scheduler ini digunakan oleh DiffusionGemmaPipeline.

DiscreteDDIMScheduler

kelas diffusers.DiscreteDDIMScheduler

< >

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

Parameter

  • num_inference_steps (int, defaultnya 32) — Jumlah langkah denoising, yang mendefinisikan grid waktu linear tempat posterior dievaluasi.
  • corrector_steps (int, default 0) — Jumlah sweep korektor Gibbs yang dijalankan setelah setiap langkah prediktor. 0 mengembalikan sampling DDIM ancestral biasa.
  • corrector_k (int, defaultnya 1) — Jumlah posisi yang disampel ulang per sapuan korektor.
  • corrector_selection (str, defaultnya "lowest_log_margin") — Bagaimana posisi yang disampel ulang dipilih: "lowest_log_margin", "lowest_maxprob", "lowest_current_prob", atau "random".
  • corrector_selection_tau (float, default 1.0) — Suhu pemilihan posisi Gumbel-top-k (semakin rendah, semakin serakah).

Penjadwal DDIM diskrit untuk proses korupsi seragam, mengikuti “Structured Denoising Diffusion Models in Discrete State-Spaces” (D3PM, https://huggingface.co/papers/2107.03006).

Pada jadwal linear, probabilitas kelangsungan hidup token bersih pada waktu t adalah alpha(t) = 1 - t. Satu langkah denoising dari waktu t ke s < t mengambil sampel setiap posisi blok dari posterior eksak q(x_s | x_t, x0), yang untuk kernel seragam terurai menjadi tiga rute: melompat ke token bersih yang diprediksi x0, tetap pada token saat ini, atau melompat ke token acak seragam. Berbeda dengan difusi bermasker, tidak ada token masker; posisi yang belum terkomitmen membawa token acak.

Mode predictor-corrector opsional mengikuti “Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation” melalui denoiser leave-one-out (LOO) (https://huggingface.co/papers/2605.22765). Ketika corrector_steps > 0, pipeline menjalankan sejumlah sweep korektor Gibbs tersebut setelah setiap langkah predictor (lihat step_correct()), dengan melakukan resampling pada posisi yang paling tidak yakin dari kondisional satu-koordinat Cat(alpha_s * x0_loo + (1 - alpha_s) / K) sambil mempertahankan posisi lainnya tetap, yang membuat marginal p_s tetap invarian dan meningkatkan generasi tanpa biaya pelatihan.

langkah

< >

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

Parameter

  • model_output (torch.Tensor dengan bentuk (batch_size, block_length, vocab_size)) — Logit mentah dari model untuk blok saat ini.
  • timestep (int atau torch.Tensor) — Indeks langkah saat ini dalam jadwal denoising, dalam [0, num_inference_steps - 1].
  • sample (torch.LongTensor dengan bentuk (batch_size, block_length)) — ID token blok saat ini x_t.
  • temperature (float) — Suhu sampling yang diterapkan pada logits saat mengambil x0.
  • generator (torch.Generator, opsional) — RNG untuk sampling.
  • return_dict (bool) — Apakah akan mengembalikan DiscreteDDIMSchedulerOutput atau tuple biasa.

Sampelkan blok berikutnya dari posterior q(x_s | x_t, x0) dari proses korupsi seragam.

Dengan a = alpha_t / alpha_s (probabilitas bertahan dari s ke t) dan b = alpha_s, massa posterior dari setiap rute adalah

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

sehingga langkah terakhir (b = 1) secara deterministik mengonfirmasi token bersih yang diprediksi.

step_correct

< >

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

Parameter

  • model_output (torch.Tensor dengan bentuk (batch_size, block_length, vocab_size)) — Logit mentah dari model yang dihitung ulang pada sample saat ini (setelah predictor).
  • timestep (int atau torch.Tensor) — Indeks langkah prediktor yang baru saja selesai; korektor dijalankan pada titik grid berikutnya s.
  • sample (torch.LongTensor dengan bentuk (batch_size, block_length)) — ID token blok saat ini untuk disempurnakan.
  • generator (torch.Generator, opsional) — RNG untuk sampling.
  • return_dict (bool) — Apakah akan mengembalikan DiscreteDDIMSchedulerOutput atau tuple biasa.

Jalankan satu sapuan korektor Gibbs pada waktu pasca-prediktor s, mengikuti metode prediktor-korektor leave-one-out dari https://huggingface.co/papers/2605.22765.

Logit model (dihitung ulang pada sample saat ini) dikonversi menjadi denoiser LOO, kondisional satu koordinat p_s(x^l | x^{-l}) = Cat(alpha_s * x0_loo + (1 - alpha_s) / K) dibentuk, posisi corrector_k yang paling tidak percaya diri dipilih, dan posisi tersebut disampel ulang sementara sisanya dipertahankan tetap. Sweep mempertahankan p_s, sehingga menyempurnakan sampel tanpa mengubah marginalnya dan tidak memerlukan pelatihan tambahan.

DiscreteDDIMSchedulerOutput

kelas diffusers.DiscreteDDIMSchedulerOutput

< >

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

Parameter

  • prev_sample (torch.LongTensor dengan bentuk (batch_size, block_length)) — Token blok yang diperbarui setelah langkah denoising saat ini.
  • sampled_tokens (torch.LongTensor dengan bentuk (batch_size, block_length)) — ID token yang disampelkan dari logits model, yaitu token bersih yang diprediksi x0.
  • sampled_probs (torch.Tensor dengan bentuk (batch_size, block_length)) — Probabilitas dari token yang disampelkan.
  • pred_logits (torch.Tensor dengan bentuk (batch_size, block_length, vocab_size)) — Logits denoiser, diteruskan untuk self-conditioning langkah berikutnya.

Kelas output untuk penjadwal DDIM diskrit.

Update on GitHub