Diffusers documentation
DiscreteDDIMScheduler
DiscreteDDIMScheduler
El DiscreteDDIMScheduler muestrea cada posición del lienzo de la posterior discreta exacta del proceso de corrupción uniforme (D3PM), siguiendo Structured Denoising Diffusion Models in Discrete State-Spaces.
No tiene parámetros, y el paso final compromete de forma determinista los tokens predichos. Un modo opcional de predictor-corrección
añade los barridos Gibbs leave-one-out de Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation a través de corrector_steps.
Este programador es utilizado por DiffusionGemmaPipeline.
DiscreteDDIMScheduler
clase 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, por defecto 32) — El número de pasos de desruido, que define la cuadrícula de tiempo lineal sobre la que se evalúa la posterior. - corrector_steps (
int, valor predeterminado 0) — Número de barridos correctores de Gibbs que se ejecutan después de cada paso del predictor.0recupera el muestreo ancestral DDIM simple. - corrector_k (
int, por defecto 1) — Número de posiciones muestreadas de nuevo por barrido del corrector. - corrector_selection (
str, por defecto"lowest_log_margin") — Cómo se eligen las posiciones re-muestreadas:"lowest_log_margin","lowest_maxprob","lowest_current_prob"o"random". - corrector_selection_tau (
float, valor predeterminado 1.0) — Temperatura de la selección de posiciones Gumbel-top-k (un valor más bajo es más codicioso).
Programador DDIM discreto para el proceso de corrupción uniforme, siguiendo “Structured Denoising Diffusion Models in Discrete State-Spaces” (D3PM, https://huggingface.co/papers/2107.03006).
En la programación lineal, la probabilidad de supervivencia de un token limpio en el tiempo t es alpha(t) = 1 - t. Un paso de desruido desde el tiempo t hasta s < t muestrea cada posición de bloque de la posterior exacta q(x_s | x_t, x0), que para el kernel uniforme se descompone en tres rutas: saltar al token limpio predicho x0, permanecer en el token actual o saltar a un token aleatorio uniforme. A diferencia de la difusión enmascarada, no hay un token de máscara; las posiciones no comprometidas contienen tokens aleatorios.
Un modo opcional de predictor-corregidor sigue “Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation” mediante el denoiser leave-one-out (LOO) (https://huggingface.co/papers/2605.22765).
Cuando corrector_steps > 0, el pipeline ejecuta ese número de barridos correctores de Gibbs después de cada paso del predictor (ver step_correct()), muestreando de nuevo las posiciones de menor confianza desde la condicional de una coordenada Cat(alpha_s * x0_loo + (1 - alpha_s) / K) mientras mantiene el resto fijo, lo que deja la marginal p_s invariante y mejora la generación sin coste de entrenamiento.
paso
< 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 crudos del modelo para el bloque actual. - timestep (
intotorch.Tensor) — Índice del paso actual dentro del programa de desruido, en[0, num_inference_steps - 1]. - sample (
torch.LongTensorde forma(batch_size, block_length)) — IDs de tokens del bloque actualx_t. - temperature (
float) — Temperatura de muestreo aplicada a los logits al extraerx0. - generator (
torch.Generator, opcional) — Generador de números aleatorios para el muestreo. - return_dict (
bool) — Si se debe devolver un DiscreteDDIMSchedulerOutput o una tupla simple.
Muestree el siguiente bloque de la posterior q(x_s | x_t, x0) del proceso de corrupción uniforme.
Con a = alpha_t / alpha_s (probabilidad de supervivencia de s a t) y b = alpha_s, la masa posterior de cada ruta es
limpio: b * (1 - a) / K + a * b * 1[x_t = x0], mantener: a * (1 - b) / K, ruido: (1 - a) * (1 - b) / K,
por lo que el último paso (b = 1) confirma de forma determinista los tokens limpios predichos.
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 crudos del modelo recalculados en lasampleactual (post-predictor). - timestep (
intotorch.Tensor) — El índice del paso del predictor que acaba de completarse; el corrector se ejecuta en el siguiente punto de la cuadrículas. - sample (
torch.LongTensorde forma(batch_size, block_length)) — IDs de tokens del bloque actual para refinar. - generator (
torch.Generator, opcional) — Generador de números aleatorios para el muestreo. - return_dict (
bool) — Si se debe devolver un DiscreteDDIMSchedulerOutput o una tupla simple.
Ejecuta un barrido de corrector de Gibbs en el tiempo posterior al predictor s, siguiendo el predictor-corrector leave-one-out de https://huggingface.co/papers/2605.22765.
Los logits del modelo (recalculados en la sample actual) se convierten en el desruidador LOO, se forma la condicional de una coordenada p_s(x^l | x^{-l}) = Cat(alpha_s * x0_loo + (1 - alpha_s) / K), se seleccionan las posiciones de corrector_k con menor confianza y se muestrea de nuevo en esas posiciones mientras el resto se mantiene fijo. El barrido preserva p_s, por lo que refina la muestra sin alterar su marginal y no requiere entrenamiento adicional.
DiscreteDDIMSchedulerOutput
clase 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 del bloque actualizados tras el paso de desruido actual. - sampled_tokens (
torch.LongTensorde forma(batch_size, block_length)) — IDs de tokens muestreados de los logits del modelo, es decir, los tokens limpios predichosx0. - sampled_probs (
torch.Tensorde forma(batch_size, block_length)) — Probabilidades de los tokens muestreados. - pred_logits (
torch.Tensorde forma(batch_size, block_length, vocab_size)) — Los logits del desruidador, transmitidos para la autocondición del siguiente paso.
Clase de salida para el programador DDIM discreto.