# 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/ko/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) : 최대 디노이징 단계 수입니다.

균일 손상 프로세스를 위한 엔트로피 바운더리 스케줄러

각 단계에서 스케줄러는 위치별로 후보 토큰을 샘플링하고, `sum_i^k entropy_i - max(entropy_1, ..., entropy_k) <= entropy_bound` 조건을 만족하는 엔트로피가 가장 낮은 `k`개의 위치를 선택합니다. 좌변은 선택된 토큰들 간의 결합 상호 정보의 상한을 제공하므로, 해당 토큰들은 근사적으로 독립적입니다. 선택된 위치는 샘플링된 토큰을 유지하고, 나머지 위치는 균일하게 무작위로 선택된 토큰으로 다시 노이즈 처리됩니다(마스크 토큰은 없습니다).

"Accelerated Sampling from Masked Diffusion Models via Entropy Bounded Unmasking"(https://huggingface.co/papers/2505.24857)에서 제안되었습니다.

샘플링 온도는 첫 번째 단계에서 `t_max`에서 마지막 단계의 `t_min`까지 서서히 낮아지며, 이는 공개된 체크포인트의 샘플러(디노이징이 진행됨에 따라 더 날카로운 샘플링)와 일치합니다. 이 온도는 후보 샘플링과 수락을 결정하는 엔트로피 모두에 대한 로짓에 적용됩니다.

#### step[[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`, *선택 사항*) : 샘플링을 위한 RNG.

return_dict (`bool`) : [EntropyBoundSchedulerOutput](/docs/diffusers/main/ko/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)`) : 현재 denoising 단계 이후 업데이트된 block tokens.

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)`) : 다음 단계의 자기 조건화(self-conditioning)를 위해 후보가 추출된 온도 스케일링된 로짓입니다.

엔트로피 바운더리 스케줄러의 출력 클래스입니다.

