Diffusers documentation
DiscreteDDIMScheduler
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
< source >( 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.0recupera 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
< source >( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensortemperature: float = 0.0generator: torch.Generator | None = Nonereturn_dict: bool = True )
Parâmetros
- model_output (
torch.Tensorde forma(batch_size, block_length, vocab_size)) — Logits brutos do modelo para o bloco atual. - timestep (
intoutorch.Tensor) — Índice atual da etapa dentro do agendamento de remoção de ruído, em[0, num_inference_steps - 1]. - sample (
torch.LongTensorde forma(batch_size, block_length)) — IDs dos tokens do bloco atualx_t. - temperature (
float) — Temperatura de amostragem aplicada aos logits ao sortearx0. - 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
< source >( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensorgenerator: torch.Generator | None = Nonereturn_dict: bool = True )
Parâmetros
- model_output (
torch.Tensorde forma(batch_size, block_length, vocab_size)) — Logits brutos do modelo recalculados nasampleatual (pós-predictor). - timestep (
intoutorch.Tensor) — O índice do passo do preditor que acabou de ser concluído; o corretor é executado no ponto de grade seguintes. - sample (
torch.LongTensorde 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
< source >( prev_sample: torch.LongTensorsampled_tokens: torch.LongTensorsampled_probs: torch.Tensorpred_logits: torch.Tensor )
Parâmetros
- prev_sample (
torch.LongTensorde forma(batch_size, block_length)) — Tokens do bloco atualizados após a etapa atual de desruidamento. - sampled_tokens (
torch.LongTensorde forma(batch_size, block_length)) — IDs de tokens amostrados dos logits do modelo, ou seja, os tokens limpos previstosx0. - sampled_probs (
torch.Tensorde forma(batch_size, block_length)) — Probabilidades dos tokens amostrados. - pred_logits (
torch.Tensorde 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.