Diffusers documentation
DiscreteDDIMScheduler
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
< source >( 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.0mengembalikan 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
< source >( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensortemperature: float = 0.0generator: torch.Generator | None = Nonereturn_dict: bool = True )
Parameter
- model_output (
torch.Tensordengan bentuk(batch_size, block_length, vocab_size)) — Logit mentah dari model untuk blok saat ini. - timestep (
intatautorch.Tensor) — Indeks langkah saat ini dalam jadwal denoising, dalam[0, num_inference_steps - 1]. - sample (
torch.LongTensordengan bentuk(batch_size, block_length)) — ID token blok saat inix_t. - temperature (
float) — Suhu sampling yang diterapkan pada logits saat mengambilx0. - 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
< source >( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensorgenerator: torch.Generator | None = Nonereturn_dict: bool = True )
Parameter
- model_output (
torch.Tensordengan bentuk(batch_size, block_length, vocab_size)) — Logit mentah dari model yang dihitung ulang padasamplesaat ini (setelah predictor). - timestep (
intatautorch.Tensor) — Indeks langkah prediktor yang baru saja selesai; korektor dijalankan pada titik grid berikutnyas. - sample (
torch.LongTensordengan 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
< source >( prev_sample: torch.LongTensorsampled_tokens: torch.LongTensorsampled_probs: torch.Tensorpred_logits: torch.Tensor )
Parameter
- prev_sample (
torch.LongTensordengan bentuk(batch_size, block_length)) — Token blok yang diperbarui setelah langkah denoising saat ini. - sampled_tokens (
torch.LongTensordengan bentuk(batch_size, block_length)) — ID token yang disampelkan dari logits model, yaitu token bersih yang diprediksix0. - sampled_probs (
torch.Tensordengan bentuk(batch_size, block_length)) — Probabilitas dari token yang disampelkan. - pred_logits (
torch.Tensordengan bentuk(batch_size, block_length, vocab_size)) — Logits denoiser, diteruskan untuk self-conditioning langkah berikutnya.
Kelas output untuk penjadwal DDIM diskrit.