# DiscreteDDIMScheduler

`DiscreteDDIMScheduler`, [Structured Denoising Diffusion Models in Discrete State-Spaces](https://huggingface.co/papers/2107.03006) makalesinde belirtildiği üzere, her tuval konumunu, uniform bozulma sürecinin (D3PM) kesin ayrık posterior dağılımından örnekler. Parametresizdir ve son adım, tahmin edilen tokenları deterministik olarak sabitler. İsteğe bağlı predictor-corrector modu, `corrector_steps` aracılığıyla [Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation](https://huggingface.co/papers/2605.22765) makalesindeki leave-one-out Gibbs taramalarını ekler.

Bu zamanlayıcı [DiffusionGemmaPipeline](/docs/diffusers/main/tr/api/pipelines/diffusion_gemma#diffusers.DiffusionGemmaPipeline) tarafından kullanılır.

## 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)
```

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

**Parametreler:**

num_inference_steps (`int`, varsayılan 32) : Gürültü azaltma adım sayısı, posteriorun değerlendirildiği doğrusal zaman ızgarasını tanımlar.

corrector_steps (`int`, varsayılan 0) : Her tahminci adımından sonra çalıştırılan Gibbs düzeltici tarama sayısı. `0`, düz atal DDIM örneklemeyi geri getirir.

corrector_k (`int`, varsayılan 1) : Doğrulayıcı taraması başına yeniden örneklenen konum sayısı.

corrector_selection (`str`, varsayılan `"lowest_log_margin"`) : Yeniden örneklenen konumların nasıl seçileceği: `"lowest_log_margin"`, `"lowest_maxprob"`, `"lowest_current_prob"` veya `"random"`.

corrector_selection_tau (`float`, varsayılan 1.0) : Gumbel-top-k konum seçiminin sıcaklığı (düşük değerler daha açgözlü davranır).

D3PM (https://huggingface.co/papers/2107.03006) makalesindeki "Structured Denoising Diffusion Models in Discrete State-Spaces" çalışmasına dayanan, uniform corruption process için ayrık DDIM zamanlayıcısı.

Doğrusal zaman çizelgesinde, `t` anında temiz bir token'ın hayatta kalma olasılığı `alpha(t) = 1 - t`'dir. `t` anından `s < t` anına bir gürültü azaltma adımı, her blok konumunu tam posterior dağılımdan `q(x_s | x_t, x0)` örnekler; bu dağılım, uniform çekirdek için üç yola ayrılır: tahmin edilen temiz token'a `x0` atlamak, mevcut token'da kalmak veya uniform olarak rastgele bir token'a atlamak. Masked diffusion'dan farklı olarak, mask token'ı yoktur; taahhüt edilmemiş konumlar rastgele token'lar taşır.

İsteğe bağlı bir öngörücü-düzeltici modu, "Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation" makalesini (https://huggingface.co/papers/2605.22765) takip ederek leave-one-out (LOO) gürültü azaltıcıyı kullanır. `corrector_steps > 0` olduğunda, pipeline her öngörücü adımından sonra bu kadar Gibbs düzeltici taraması çalıştırır (bkz. [step_correct()](/docs/diffusers/main/tr/api/schedulers/discrete_ddim#diffusers.DiscreteDDIMScheduler.step_correct)), kalanları sabit tutarak en az güvenilen konumları tek koordinat koşullu dağılımdan `Cat(alpha_s * x0_loo + (1 - alpha_s) / K)` yeniden örnekler; bu işlem marjinal `p_s` dağılımını değişmez bırakır ve ek eğitim maliyeti olmadan üretimi iyileştirir.

#### adım[[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)
```

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

**Parametreler:**

model_output (`torch.Tensor`, şekli `(batch_size, block_length, vocab_size)`) : Modelin mevcut blok için ham logit'leri.

timestep (`int` veya `torch.Tensor`) : Gürültü azaltma zaman çizelgesi içindeki mevcut adım indeksi, `[0, num_inference_steps - 1]` aralığında.

sample (`torch.LongTensor`, şekli `(batch_size, block_length)`) : Mevcut blok token kimlikleri `x_t`.

temperature (`float`) : `x0` çekilirken logitlere uygulanan örneklem sıcaklığı.

generator (`torch.Generator`, *isteğe bağlı*) : Örnekleme için RNG.

return_dict (`bool`) : [DiscreteDDIMSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/discrete_ddim#diffusers.DiscreteDDIMSchedulerOutput) döndürülecek mi yoksa düz bir tuple mı döndürülecek.

Düz bozulma sürecinin posterior dağılımı `q(x_s | x_t, x0)`'den sonraki bloğu örnekleyin.

`a = alpha_t / alpha_s` (`s`'den `t`'ye hayatta kalma olasılığı) ve `b = alpha_s` olmak üzere, her bir yolun posterior kütlesi

temiz: `b * (1 - a) / K + a * b * 1[x_t = x0]`, kal: `a * (1 - b) / K`, gürültü: `(1 - a) * (1 - b) / K`,

son adım (`b = 1`) tahmin edilen temiz tokenları deterministik olarak onaylar.

#### 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)
```

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

**Parametreler:**

model_output (`torch.Tensor`, şekli `(batch_size, block_length, vocab_size)`) : Mevcut (post-predictor) `sample` üzerinde yeniden hesaplanan modelin ham logit'leri.

timestep (`int` veya `torch.Tensor`) : Az önce tamamlanan tahmin edici adım indeksi; düzeltici, bir sonraki ızgara noktasında `s` çalışır.

sample (`torch.LongTensor`, şekli `(batch_size, block_length)`) : İncelenecek mevcut blok token kimlikleri.

generator (`torch.Generator`, *isteğe bağlı*) : Örnekleme için RNG.

return_dict (`bool`) : [DiscreteDDIMSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/discrete_ddim#diffusers.DiscreteDDIMSchedulerOutput) döndürülecek mi yoksa düz bir tuple mı döndürülecek.

Öngörücüden sonraki `s` zamanında, https://huggingface.co/papers/2605.22765 makalesindeki leave-one-out öngörücü-düzeltici yöntemine uygun olarak tek bir Gibbs düzeltici taraması çalıştırın.

Model logit'leri (mevcut `sample` üzerinde yeniden hesaplanır) LOO gürültü azaltıcıya dönüştürülür, tek koordinat koşullu `p_s(x^l | x^{-l}) = Cat(alpha_s * x0_loo + (1 - alpha_s) / K)` oluşturulur, en az güvenilen `corrector_k` konumları seçilir ve bu konumlar yeniden örneklenirken diğerleri sabit tutulur. Tarama `p_s`'yi koruduğundan, örneklemeyi marjinalini değiştirmeden rafine eder ve ek eğitim gerektirmez.

## 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)
```

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

**Parametreler:**

prev_sample (`torch.LongTensor`, şekli `(batch_size, block_length)`) : Güncel gürültü azaltma adımından sonra güncellenmiş blok jetonları.

sampled_tokens (`torch.LongTensor`, şekli `(batch_size, block_length)`) : Model logitlerinden örneklenen token kimlikleri, yani tahmin edilen temiz tokenlar `x0`.

sampled_probs (`torch.Tensor`, şekli `(batch_size, block_length)`) : Örneklenen tokenların olasılıkları.

pred_logits (`torch.Tensor`, şekli `(batch_size, block_length, vocab_size)`) : Bir sonraki adımda kendiliğinden koşullandırma için geçirilen gürültü azaltıcı logitleri.

Ayrık DDIM zamanlayıcısı için çıktı sınıfı.

