# EntropyBoundScheduler

`EntropyBoundScheduler` фиксирует позиции с наименьшей энтропией, для которых совместная энтропия не превышает `entropy_bound`, благодаря чему приблизительно независимые токены принимаются совместно, а остальные подвергаются повторному шумлению. Температура выборки аннелируется от `t_max` на первом шаге до `t_min` на последнем, что соответствует сэмплеру опубликованной контрольной точки. Предложено в [Accelerated Sampling from Masked Diffusion Models via Entropy Bounded Unmasking](https://huggingface.co/papers/2505.24857).

Этот планировщик используется в [DiffusionGemmaPipeline](/docs/diffusers/main/ru/api/pipelines/diffusion_gemma#diffusers.DiffusionGemmaPipeline).

## EntropyBoundScheduler[[diffusers.EntropyBoundScheduler]]

#### diffusers.EntropyBoundScheduler[[diffusers.EntropyBoundScheduler]]

```python
diffusers.EntropyBoundScheduler(entropy_bound: float = 0.1, t_max: float = 0.8, t_min: float = 0.4, num_inference_steps: int = 32)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_entropy_bound.py#L51)

**Параметры:**

entropy_bound (`float`, по умолчанию 0.1) : Максимально допустимая совместная энтропия принятых токенов. Большие значения приводят к принятию большего количества токенов на каждом шаге.

t_max (`float`, по умолчанию 0.8) : Температура выборки на первом шаге денойзинга.

t_min (`float`, по умолчанию 0.4) : Температура выборки на последнем шаге денойзинга.

num_inference_steps (`int`, по умолчанию 32) : Максимальное количество шагов денойзинга.

Планировщик с ограничением энтропии для процесса равномерного повреждения.

На каждом шаге планировщик выбирает по одному кандидату на каждую позицию и принимает `k` позиций с наименьшей энтропией, для которых выполняется условие `sum_i^k entropy_i - max(entropy_1, ..., entropy_k) <= entropy_bound`. Левая часть этого выражения является верхней границей для совместной взаимной информации принятых токенов, поэтому они приблизительно независимы. В принятых позициях сохраняется выбранный токен; остальные позиции подвергаются повторному шумлению с использованием равномерно случайных токенов (токен маски не используется).

Предложено в статье «Accelerated Sampling from Masked Diffusion Models via Entropy Bounded Unmasking» (https://huggingface.co/papers/2505.24857).

Температура выборки аннелируется от `t_max` на первом шаге до `t_min` на последнем, что соответствует сэмплеру выпущенной контрольной точки (более острый выбор по мере продвижения процесса денойзинга). Она применяется к логитам как перед выборкой кандидатов, так и перед энтропией, определяющей принятие.

#### шаг[[diffusers.EntropyBoundScheduler.step]]

```python
step(model_output: torch.Tensor, timestep: int | torch.Tensor, sample: torch.LongTensor, entropy_bound: float | None = None, generator: torch.Generator | None = None, return_dict: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_entropy_bound.py#L118)

**Параметры:**

model_output (`torch.Tensor` формы `(batch_size, block_length, vocab_size)`) : Сырые логиты модели для текущего блока.

timestep (`int` или `torch.Tensor`) : Текущий индекс шага в расписании денойзинга; задает температуру отжига при выборке.

sample (`torch.LongTensor` формы `(batch_size, block_length)`) : ID токенов текущего блока.

entropy_bound (`float`, *необязательный*) : Переопределяет настроенное ограничение энтропии для этого шага.

generator (`torch.Generator`, *необязательный*) : генератор случайных чисел для выборки.

return_dict (`bool`) : Нужно ли возвращать [EntropyBoundSchedulerOutput](/docs/diffusers/main/ru/api/schedulers/entropy_bound#diffusers.EntropyBoundSchedulerOutput) или обычный кортеж.

Принимайте позиции с наименьшей энтропией в пределах заданного порога энтропии и заново добавляйте шум к остальным.

## EntropyBoundSchedulerOutput[[diffusers.EntropyBoundSchedulerOutput]]

#### diffusers.EntropyBoundSchedulerOutput[[diffusers.EntropyBoundSchedulerOutput]]

```python
diffusers.EntropyBoundSchedulerOutput(prev_sample: torch.LongTensor, accepted_index: torch.BoolTensor, sampled_tokens: torch.LongTensor, sampled_probs: torch.Tensor, pred_logits: torch.Tensor)
```

[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_entropy_bound.py#L27)

**Параметры:**

prev_sample (`torch.LongTensor` формы `(batch_size, block_length)`) : Обновлённые токены блока после текущего шага денойзинга.

accepted_index (`torch.BoolTensor` формы `(batch_size, block_length)`) : Булева маска позиций, принятых (закреплённых) на этом шаге.

sampled_tokens (`torch.LongTensor` формы `(batch_size, block_length)`) : Идентификаторы токенов, выбранные из логитов модели.

sampled_probs (`torch.Tensor` формы `(batch_size, block_length)`) : Вероятности сэмплированных токенов.

pred_logits (`torch.Tensor` формы `(batch_size, block_length, vocab_size)`) : логиты, масштабированные по температуре, из которых были выбраны кандидаты, для самоусловливания следующего шага.

Класс вывода для планировщика с ограничением энтропии.

