# EntropyBoundScheduler

`EntropyBoundScheduler` 会提交联合熵保持在 `entropy_bound` 以下的最低熵位置，因此大致独立的 token 会被一起接受，其余部分则重新加噪。其采样温度从第一步的 `t_max` 退火至最后一步的 `t_min`，与已发布检查点中的采样器保持一致。该方法在 [Accelerated Sampling from Masked Diffusion Models via Entropy Bounded Unmasking](https://huggingface.co/papers/2505.24857) 中提出。

此调度器由 [DiffusionGemmaPipeline](/docs/diffusers/v0.43.0/zh/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/v0.43.0/src/diffusers/schedulers/scheduling_entropy_bound.py#L51)

**参数：**

entropy_bound (`float`，默认值为 0.1)：已接受 token 的最大可容忍联合熵。值越大，每一步接受的 token 越多。

t_max (`float`，默认值为 0.8)：首次去噪步骤的采样温度。

t_min (`float`，默认值为 0.4)：最后一步去噪时的采样温度。

num_inference_steps (`int`，默认为 32)：最大去噪步数。

用于均匀损坏过程的熵界调度器。

在每一步中，调度器为每个位置采样一个候选 token，并选取 `k` 个熵最低的位置，使得 `sum_i^k entropy_i - max(entropy_1, ..., entropy_k) <= entropy_bound`。左侧表达式给出了被接受 token 之间联合互信息的上界，因此这些 token 近似相互独立。被接受的位置保留其采样到的 token；其余位置则使用均匀随机 token 重新加噪（不存在 mask token）。

由论文“Accelerated Sampling from Masked Diffusion Models via Entropy Bounded Unmasking”（https://huggingface.co/papers/2505.24857）提出。

采样温度从第一步的 `t_max` 退火至最后一步的 `t_min`，与已发布检查点的采样器保持一致（随着去噪过程推进，采样变得更为尖锐）。该温度应用于候选采样以及驱动接受决策的熵之前的 logits。

#### 步骤[[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/v0.43.0/src/diffusers/schedulers/scheduling_entropy_bound.py#L118)

**参数：**

model_output (`torch.Tensor`，形状为 `(batch_size, block_length, vocab_size)`)：模型针对当前块输出的原始 logits。

timestep （`int` 或 `torch.Tensor`）：去噪调度中的当前步索引；用于设置退火采样温度。

sample (`torch.LongTensor`，形状为 `(batch_size, block_length)`)：当前块的 token ID。

entropy_bound (`float`, *可选*) : 覆盖此步骤中配置的熵边界。

generator (`torch.Generator`，*可选*)：用于采样的随机数生成器。

return_dict (`bool`) : 是否返回 [EntropyBoundSchedulerOutput](/docs/diffusers/v0.43.0/zh/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/v0.43.0/src/diffusers/schedulers/scheduling_entropy_bound.py#L27)

**参数：**

prev_sample (`torch.LongTensor`，形状为 `(batch_size, block_length)`) : 当前去噪步骤之后更新的块 token。

accepted_index (`torch.BoolTensor`，形状为 `(batch_size, block_length)`)：布尔掩码，指示本步骤中被接受（已提交）的位置。

sampled_tokens (`torch.LongTensor`，形状为 `(batch_size, block_length)`)：从模型 logits 中采样的 Token ID。

sampled_probs (`torch.Tensor`，形状为 `(batch_size, block_length)`)：采样 token 的概率。

pred_logits (`torch.Tensor`，形状为 `(batch_size, block_length, vocab_size)`)：用于自条件化下一步的、候选项所采样的经温度缩放的 logits。

熵界调度器的输出类。

