Diffusers documentation

DiscreteDDIMScheduler

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DiscreteDDIMScheduler

O DiscreteDDIMScheduler amostra cada posição do canvas a partir da posterior discreta exata do processo de corrupção uniforme (D3PM), seguindo Structured Denoising Diffusion Models in Discrete State-Spaces. Ele é livre de parâmetros, e o passo final comete deterministicamente os tokens previstos. Um modo opcional de preditor-corretor adiciona as varreduras Gibbs leave-one-out de Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation por meio de corrector_steps.

Este scheduler é usado por DiffusionGemmaPipeline.

DiscreteDDIMScheduler

classe diffusers.DiscreteDDIMScheduler

< >

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

Parâmetros

  • num_inference_steps (int, padrão 32) — O número de etapas de remoção de ruído, definindo a grade de tempo linear na qual a posterior é avaliada.
  • corrector_steps (int, padrão 0) — Número de varreduras corretivas de Gibbs executadas após cada etapa do preditor. 0 recupera a amostragem ancestral DDIM simples.
  • corrector_k (int, padrão 1) — Número de posições reamostradas por varredura do corretor.
  • corrector_selection (str, padrão "lowest_log_margin") — Como as posições reamostradas são escolhidas: "lowest_log_margin", "lowest_maxprob", "lowest_current_prob", ou "random".
  • corrector_selection_tau (float, padrão 1.0) — Temperatura da seleção de posições Gumbel-top-k (valores menores são mais gananciosos).

Agendador DDIM discreto para o processo de corrupção uniforme, seguindo “Structured Denoising Diffusion Models in Discrete State-Spaces” (D3PM, https://huggingface.co/papers/2107.03006).

No agendamento linear, a probabilidade de sobrevivência de um token limpo no tempo t é alpha(t) = 1 - t. Um passo de desruidamento do tempo t para s < t amostra cada posição de bloco a partir da posterior exata q(x_s | x_t, x0), que, para o kernel uniforme, se decompõe em três rotas: saltar para o token limpo previsto x0, permanecer no token atual ou saltar para um token aleatório uniforme. Diferentemente da difusão mascarada, não há um token de máscara; as posições não comprometidas carregam tokens aleatórios.

Um modo opcional de preditor-corretor segue “Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation” por meio do denoiser leave-one-out (LOO) (https://huggingface.co/papers/2605.22765). Quando corrector_steps > 0, o pipeline executa esse número de varreduras corretoras de Gibbs após cada etapa do preditor (veja step_correct()), reamostrando as posições de menor confiança a partir da condicional de uma coordenada Cat(alpha_s * x0_loo + (1 - alpha_s) / K) enquanto mantém as demais fixas, o que preserva a invariância da marginal p_s e melhora a geração sem custo de treinamento.

etapa

< >

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

Parâmetros

  • model_output (torch.Tensor de forma (batch_size, block_length, vocab_size)) — Logits brutos do modelo para o bloco atual.
  • timestep (int ou torch.Tensor) — Índice atual da etapa dentro do agendamento de remoção de ruído, em [0, num_inference_steps - 1].
  • sample (torch.LongTensor de forma (batch_size, block_length)) — IDs dos tokens do bloco atual x_t.
  • temperature (float) — Temperatura de amostragem aplicada aos logits ao sortear x0.
  • generator (torch.Generator, opcional) — Gera números aleatórios para amostragem.
  • return_dict (bool) — Se deve retornar um DiscreteDDIMSchedulerOutput ou uma tupla simples.

Amostrar o próximo bloco da posterior q(x_s | x_t, x0) do processo de corrupção uniforme.

Com a = alpha_t / alpha_s (probabilidade de sobrevivência de s até t) e b = alpha_s, a massa posterior de cada rota é

limpo: b * (1 - a) / K + a * b * 1[x_t = x0], manter: a * (1 - b) / K, ruído: (1 - a) * (1 - b) / K,

então a última etapa (b = 1) confirma de forma determinística os tokens limpos previstos.

step_correct

< >

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

Parâmetros

  • model_output (torch.Tensor de forma (batch_size, block_length, vocab_size)) — Logits brutos do modelo recalculados na sample atual (pós-predictor).
  • timestep (int ou torch.Tensor) — O índice do passo do preditor que acabou de ser concluído; o corretor é executado no ponto de grade seguinte s.
  • sample (torch.LongTensor de forma (batch_size, block_length)) — IDs dos tokens do bloco atual a serem refinados.
  • generator (torch.Generator, opcional) — Gera números aleatórios para amostragem.
  • return_dict (bool) — Se deve retornar um DiscreteDDIMSchedulerOutput ou uma tupla simples.

Execute uma varredura de um corretor de Gibbs no tempo pós-preditores s, seguindo o preditor-corretor leave-one-out de https://huggingface.co/papers/2605.22765.

Os logits do modelo (recalculados na sample atual) são convertidos no denoiser LOO, a condicional de uma coordenada p_s(x^l | x^{-l}) = Cat(alpha_s * x0_loo + (1 - alpha_s) / K) é formada, as posições de corrector_k com menor confiança são selecionadas e essas posições são reamostradas enquanto as demais são mantidas fixas. A varredura preserva p_s, de modo que refina a amostra sem alterar sua marginal e não requer treinamento adicional.

DiscreteDDIMSchedulerOutput

classe diffusers.DiscreteDDIMSchedulerOutput

< >

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

Parâmetros

  • prev_sample (torch.LongTensor de forma (batch_size, block_length)) — Tokens do bloco atualizados após a etapa atual de desruidamento.
  • sampled_tokens (torch.LongTensor de forma (batch_size, block_length)) — IDs de tokens amostrados dos logits do modelo, ou seja, os tokens limpos previstos x0.
  • sampled_probs (torch.Tensor de forma (batch_size, block_length)) — Probabilidades dos tokens amostrados.
  • pred_logits (torch.Tensor de forma (batch_size, block_length, vocab_size)) — Os logits do desruidor, transmitidos para autocondicionar o próximo passo.

Classe de saída para o agendador DDIM discreto.

Update on GitHub