Diffusers documentation
DiscreteDDIMScheduler
DiscreteDDIMScheduler
Le DiscreteDDIMScheduler échantillonne chaque position du canevas à partir de la postérieure discrète exacte du processus de corruption uniforme (D3PM), conformément à Structured Denoising Diffusion Models in Discrete State-Spaces.
Il ne comporte aucun paramètre, et l'étape finale engage de manière déterministe les jetons prédits. Un mode prédicteur-correcteur facultatif ajoute les balayages de Gibbs leave-one-out de Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation via corrector_steps.
Ce planificateur est utilisé par 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 )
Paramètres
- num_inference_steps (
int, par défaut 32) — Le nombre d'étapes de débruitage, définissant la grille temporelle linéaire sur laquelle la distribution a posteriori est évaluée. - corrector_steps (
int, par défaut 0) — Nombre de balayages correcteurs de Gibbs exécutés après chaque étape prédicteur.0correspond à l'échantillonnage ancestral DDIM standard. - corrector_k (
int, par défaut 1) — Nombre de positions rééchantillonnées par balayage du correcteur. - corrector_selection (
str, par défaut"lowest_log_margin") — Méthode de sélection des positions rééchantillonnées :"lowest_log_margin","lowest_maxprob","lowest_current_prob"ou"random". - corrector_selection_tau (
float, par défaut 1.0) — Température de la sélection de positions Gumbel-top-k (plus la valeur est basse, plus la sélection est gloutonne).
Planificateur DDIM discret pour le processus de corruption uniforme, suivant « Structured Denoising Diffusion Models in Discrete State-Spaces » (D3PM, https://huggingface.co/papers/2107.03006).
Sur le calendrier linéaire, la probabilité de survie d’un jeton propre au temps t est alpha(t) = 1 - t. Une étape de débruitage allant du temps t à s < t échantillonne chaque position de bloc à partir de la postérieure exacte q(x_s | x_t, x0), qui, pour le noyau uniforme, se décompose en trois chemins : sauter vers le jeton propre prédit x0, rester sur le jeton actuel, ou sauter vers un jeton aléatoire uniforme. Contrairement à la diffusion masquée, il n’y a pas de jeton de masque ; les positions non engagées portent des jetons aléatoires.
Un mode prédicteur-correcteur optionnel suit « Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation » via le débruiteur leave-one-out (LOO) (https://huggingface.co/papers/2605.22765).
Lorsque corrector_steps > 0, le pipeline exécute ce nombre de balayages correcteurs de Gibbs après chaque étape de prédicteur (voir step_correct()), en rééchantillonnant les positions les moins confiantes à partir de la conditionnelle à une coordonnée Cat(alpha_s * x0_loo + (1 - alpha_s) / K) tout en maintenant les autres fixes, ce qui laisse la marginale p_s invariante et améliore la génération sans coût d'entraînement.
étape
< source >( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensortemperature: float = 0.0generator: torch.Generator | None = Nonereturn_dict: bool = True )
Paramètres
- model_output (
torch.Tensorde forme(batch_size, block_length, vocab_size)) — Logits bruts du modèle pour le bloc actuel. - timestep (
intoutorch.Tensor) — Index de l'étape actuelle dans le calendrier de débruitage, dans[0, num_inference_steps - 1]. - sample (
torch.LongTensorde forme(batch_size, block_length)) — Identifiants des jetons du bloc actuelx_t. - temperature (
float) — Température d'échantillonnage appliquée aux logits lors du tirage dex0. - generator (
torch.Generator, facultatif) — Générateur aléatoire pour l'échantillonnage. - return_dict (
bool) — Indique s'il faut retourner un DiscreteDDIMSchedulerOutput ou un simple tuple.
Échantillonner le bloc suivant à partir de la postérieure q(x_s | x_t, x0) du processus de corruption uniforme.
Avec a = alpha_t / alpha_s (probabilité de survie de s à t) et b = alpha_s, la masse a posteriori de chaque trajet est
propre : b * (1 - a) / K + a * b * 1[x_t = x0], stable : a * (1 - b) / K, bruit : (1 - a) * (1 - b) / K,
la dernière étape (b = 1) engage donc de manière déterministe les jetons propres prédits.
step_correct
< source >( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensorgenerator: torch.Generator | None = Nonereturn_dict: bool = True )
Paramètres
- model_output (
torch.Tensorde forme(batch_size, block_length, vocab_size)) — Logits bruts du modèle recalculés sur l'sampleactuel (post-predictor). - timestep (
intoutorch.Tensor) — L’indice d’étape du prédicteur vient d’être terminé ; le correcteur s’exécute au point de grille suivants. - sample (
torch.LongTensorde forme(batch_size, block_length)) — Identifiants des jetons du bloc actuel à affiner. - generator (
torch.Generator, facultatif) — Générateur aléatoire pour l'échantillonnage. - return_dict (
bool) — Indique s'il faut retourner un DiscreteDDIMSchedulerOutput ou un simple tuple.
Effectuer un balayage d'un correcteur de Gibbs au temps post-prédicteur s, en suivant le prédicteur-correcteur leave-one-out de https://huggingface.co/papers/2605.22765.
Les logits du modèle (recalculés sur l'sample actuel) sont convertis en débruiteur LOO, la conditionnelle à une coordonnée p_s(x^l | x^{-l}) = Cat(alpha_s * x0_loo + (1 - alpha_s) / K) est formée, les positions corrector_k les moins confiantes sont sélectionnées, et ces positions sont rééchantillonnées tandis que les autres sont maintenues fixes. Le balayage préserve p_s, il affine donc l'échantillon sans modifier sa marginale et n'exige aucune formation supplémentaire.
DiscreteDDIMSchedulerOutput
classe diffusers.DiscreteDDIMSchedulerOutput
< source >( prev_sample: torch.LongTensorsampled_tokens: torch.LongTensorsampled_probs: torch.Tensorpred_logits: torch.Tensor )
Paramètres
- prev_sample (
torch.LongTensorde forme(batch_size, block_length)) — Tokens du bloc mis à jour après l'étape de débruitage actuelle. - sampled_tokens (
torch.LongTensorde forme(batch_size, block_length)) — Identifiants des jetons échantillonnés à partir des logits du modèle, c'est-à-dire les jetons propres préditsx0. - sampled_probs (
torch.Tensorde forme(batch_size, block_length)) — Probabilités des jetons échantillonnés. - pred_logits (
torch.Tensorde forme(batch_size, block_length, vocab_size)) — Les logits du débruiteur, transmis pour l'auto-conditionnement de l'étape suivante.
Classe de sortie pour le planificateur DDIM discret.