# DiscreteDDIMScheduler

[Structured Denoising Diffusion Models in Discrete State-Spaces](https://huggingface.co/papers/2107.03006) menjadi acuan bagi `DiscreteDDIMScheduler` untuk mengambil sampel setiap posisi kanvas dari posterior diskrit yang tepat dari proses korupsi seragam (D3PM). Scheduler ini bebas parameter, dan langkah terakhir 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](https://huggingface.co/papers/2605.22765) melalui `corrector_steps`.

Scheduler ini digunakan oleh [DiffusionGemmaPipeline](/docs/diffusers/main/id/api/pipelines/diffusion_gemma#diffusers.DiffusionGemmaPipeline).

## DiscreteDDIMScheduler[[diffusers.DiscreteDDIMScheduler]]

#### diffusers.DiscreteDDIMScheduler[[diffusers.DiscreteDDIMScheduler]]

```python
diffusers.DiscreteDDIMScheduler(num_inference_steps: int = 32, corrector_steps: int = 0, corrector_k: int = 1, corrector_selection: str = 'lowest_log_margin', corrector_selection_tau: float = 1.0)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_discrete_ddim.py#L49)

**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"`) : Cara posisi yang diresample 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()](/docs/diffusers/main/id/api/schedulers/discrete_ddim#diffusers.DiscreteDDIMScheduler.step_correct)), dengan melakukan resampling pada posisi yang paling tidak percaya diri dari kondisional satu-koordinat `Cat(alpha_s * x0_loo + (1 - alpha_s) / K)` sambil mempertahankan posisi lainnya tetap, yang membuat marginal `p_s` invarian dan meningkatkan generasi tanpa biaya pelatihan.

#### langkah[[diffusers.DiscreteDDIMScheduler.step]]

```python
step(model_output: torch.Tensor, timestep: int | torch.Tensor, sample: torch.LongTensor, temperature: float = 0.0, generator: torch.Generator | None = None, return_dict: bool = True)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_discrete_ddim.py#L145)

**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 menggambar `x0`.

generator (`torch.Generator`, *opsional*) : RNG untuk sampling.

return_dict (`bool`) : Apakah akan mengembalikan [DiscreteDDIMSchedulerOutput](/docs/diffusers/main/id/api/schedulers/discrete_ddim#diffusers.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[[diffusers.DiscreteDDIMScheduler.step_correct]]

```python
step_correct(model_output: torch.Tensor, timestep: int | torch.Tensor, sample: torch.LongTensor, generator: torch.Generator | None = None, return_dict: bool = True)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_discrete_ddim.py#L248)

**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 predictor yang baru saja selesai; corrector 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](/docs/diffusers/main/id/api/schedulers/discrete_ddim#diffusers.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[[diffusers.DiscreteDDIMSchedulerOutput]]

#### diffusers.DiscreteDDIMSchedulerOutput[[diffusers.DiscreteDDIMSchedulerOutput]]

```python
diffusers.DiscreteDDIMSchedulerOutput(prev_sample: torch.LongTensor, sampled_tokens: torch.LongTensor, sampled_probs: torch.Tensor, pred_logits: torch.Tensor)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_discrete_ddim.py#L28)

**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.

