# 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/ja/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) : 受け入れられたトークンの許容される最大結合エントロピーです。値を大きくすると、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`までアニーリングされます。これにより、公開されているチェックポイントのサンプラー（デノイジングが進むにつれてサンプリングがシャープになる）と一致します。この温度は、候補のサンプリングと、受け入れを決定するエントロピーの両方において、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/main/src/diffusers/schedulers/scheduling_entropy_bound.py#L118)

**パラメータ:**

model_output (`torch.Tensor`、shape `(batch_size, block_length, vocab_size)`) : 現在のブロックに対するモデルからの生の logits。

timestep (`int` または `torch.Tensor`) : 減噪スケジュール内の現在のステップインデックス。アニーリングされたサンプリング温度を設定します。

sample (`torch.LongTensor`、shape `(batch_size, block_length)`) : 現在のブロックのトークンIDです。

entropy_bound (`float`, *任意*) : このステップで設定されたエントロピーの境界値を上書きします。

generator (`torch.Generator`, *任意*) : サンプリング用の乱数生成器。

return_dict (`bool`) : [EntropyBoundSchedulerOutput](/docs/diffusers/main/ja/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`、shape `(batch_size, block_length)`) : 現在のデノイジングステップ後の更新されたブロックトークン。

accepted_index (`torch.BoolTensor`、shape `(batch_size, block_length)`) : このステップで受け入れ（コミット）された位置のブールマスク。

sampled_tokens (`torch.LongTensor`、shape `(batch_size, block_length)`) : モデルの logits からサンプリングされたトークン ID。

sampled_probs (`torch.Tensor`、shape `(batch_size, block_length)`) : サンプルされたトークンの確率。

pred_logits (`torch.Tensor`、shape `(batch_size, block_length, vocab_size)`) : 次のステップの自己条件付けのために、候補がサンプリングされた温度スケーリング済み logits。

エントロピー境界スケジューラー用の出力クラス。

