# ScoreSdeVeScheduler

`ScoreSdeVeScheduler` هو مُجدول معادلة تفاضلية عشوائية (SDE) من نوع انفجار التباين. تم تقديمه في ورقة [Score-Based Generative Modeling through Stochastic Differential Equations](https://huggingface.co/papers/2011.13456) التي كتبها Yang Song و Jascha Sohl-Dickstein و Diederik P. Kingma و Abhishek Kumar و Stefano Ermon و Ben Poole.

ملخص الورقة البحثية هو:

*إنشاء الضوضاء من البيانات أمرٌ سهل؛ أما إنشاء البيانات من الضوضاء فهو نمذجة توليدية. نقدّم معادلة تفاضلية عشوائية (SDE) تحوّل بسلاسة توزيع بيانات معقّد إلى توزيع مسبق معروف من خلال حقن الضوضاء ببطء، ومعادلة تفاضلية عشوائية معاكسة في الزمن تحوّل التوزيع المسبق مرة أخرى إلى توزيع البيانات من خلال إزالة الضوضاء ببطء. والأهم من ذلك، أن معادلة الزمن المعاكس تعتمد فقط على حقل التدرّج المعتمد على الزمن (المعروف أيضاً باسم الدرجة) لتوزيع البيانات المُعطَّبة. بالاستفادة من التطورات في النمذجة التوليدية القائمة على الدرجة، يمكننا تقدير هذه الدرجات بدقة باستخدام الشبكات العصبية، واستخدام محلّلات SDE العددية لتوليد العينات. نُظهر أن هذا الإطار يحوي الأساليب السابقة في النمذجة التوليدية القائمة على الدرجة والنمذجة الاحتمالية الانتشارية، مما يتيح إجراءات أخذ عينات جديدة وقدرات نمذجة جديدة. على وجه الخصوص، نقدّم إطار تنبّؤ-تصحيح لتصحيح الأخطاء في تطوّر معادلة الزمن المعاكس المُفرَّضة. كما نُشتق معادلة تفاضلية عادية عصبية مكافئة تأخذ عينات من نفس التوزيع الذي تأخذه معادلة SDE، لكنها تتيح أيضاً حساب الاحتمال الدقيق، وتحسين كفاءة أخذ العينات. بالإضافة إلى ذلك، نقدّم طريقة جديدة لحل المسائل العكسية باستخدام النماذج القائمة على الدرجة، كما يُستدل عليه من تجارب على التوليد الشرطي حسب الفئة، وتعبئة الصور، وتلوين الصور. وبدمج ذلك مع تحسينات معمارية متعددة، نحقق أداءً قياسياً في التوليد غير الشرطي للصور على CIFAR-10 مع درجة Inception تبلغ 9.89 وFID تبلغ 2.20، واحتمال تنافسي يبلغ 2.99 بت/بعد، ونُظهر لأول مرة توليد صور عالية الوضوح بمقاس 1024 x 1024 من نموذج توليدي قائم على الدرجة.*

## ScoreSdeVeScheduler[[diffusers.ScoreSdeVeScheduler]]

#### diffusers.ScoreSdeVeScheduler[[diffusers.ScoreSdeVeScheduler]]

```python
diffusers.ScoreSdeVeScheduler(num_train_timesteps: int = 2000, snr: float = 0.15, sigma_min: float = 0.01, sigma_max: float = 1348.0, sampling_eps: float = 1e-05, correct_steps: int = 1)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L45)

**المعاملات:**

num_train_timesteps (`int`، القيمة الافتراضية 2000) : عدد خطوات الانتشار لتدريب النموذج.

snr (`float`، القيمة الافتراضية 0.15) : معامل يوزّن الخطوة من عينة `model_output` (من الشبكة) إلى الضوضاء العشوائية.

sigma_min (`float`، القيمة الافتراضية 0.01) : مقياس الضوضاء الأولي لسلسلة سيجما في إجراء العينة. يجب أن يعكس سيجما الأدنى توزيع البيانات.

sigma_max (`float`، القيمة الافتراضية 1348.0) : القيمة القصوى المستخدمة لنطاق خطوات الزمن المستمرة المُمرَّرة إلى النموذج.

sampling_eps (`float`، القيمة الافتراضية 1e-5) : القيمة النهائية للعينات حيث تتناقص الخطوات الزمنية تدريجياً من 1 إلى epsilon.

correct_steps (`int`، القيمة الافتراضية 1) : عدد خطوات التصحيح التي تُنفَّذ على العينة المُنتَجة.

`ScoreSdeVeScheduler` هو مُجدول معادلة تفاضلية عشوائية (SDE) من نوع انفجار التباين.

يرث هذا النموذج من [SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin) و [ConfigMixin](/docs/diffusers/v0.43.0/ar/api/configuration#diffusers.ConfigMixin). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدولات التعلم، مثل التحميل والحفظ.

#### add_noise[[diffusers.ScoreSdeVeScheduler.add_noise]]

```python
add_noise(original_samples: Tensor, noise: Tensor, timesteps: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L300)

**المعاملات:**

original_samples (`torch.Tensor`) : العينات الأصلية التي سيتم إضافة الضوضاء إليها.

noise (`torch.Tensor`) : متجه الضوضاء الذي يُضاف إلى العينات الأصلية.

timesteps (`torch.Tensor`) : الخطوات الزمنية التي يُضاف عندها الضوضاء، مما يحدد مستوى الضوضاء من الجدول الزمني.

**يعيد:** `torch.Tensor`

العينات الضوضائية مع ضوضاء مضافة مُقيّمة وفقًا لجدول خطوات الزمن.

أضف الضوضاء إلى العينات الأصلية وفقًا لجدول الضوضاء عند خطوات الزمن المحددة. هذه هي عملية الانتشار الأمامية.

#### get_adjacent_sigma[[diffusers.ScoreSdeVeScheduler.get_adjacent_sigma]]

```python
get_adjacent_sigma(timesteps: Tensor, t: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L156)

**المعاملات:**

timesteps (`torch.Tensor`) : الموتر (Tensor) لمؤشرات خطوات الزمن المنفصلة.

t (`torch.Tensor`) : الموتر (Tensor) لقيم خطوات الزمن المستمرة.

**يعيد:** `torch.Tensor`

قيم سيجما لمؤشر الخطوة الزمنية المجاورة (السابقة).

يعيد قيمة sigma المقابلة لمؤشر الخطوة الزمنية السابقة. عندما تكون الخطوة الزمنية صفرًا (لا توجد خطوة زمنية سابقة)، يعيد صفرًا.

#### scale_model_input[[diffusers.ScoreSdeVeScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, timestep: int | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L88)

**المعاملات:**

sample (`torch.Tensor`) : العينة المدخلة.

timestep (`int`، *اختياري*) : الخطوة الزمنية الحالية في سلسلة الانتشار.

**يعيد:** `torch.Tensor`

عينة إدخال مُقيّمة.

يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.

#### set_sigmas[[diffusers.ScoreSdeVeScheduler.set_sigmas]]

```python
set_sigmas(num_inference_steps: int, sigma_min: float | None = None, sigma_max: float | None = None, sampling_eps: float | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L124)

**المعاملات:**

num_inference_steps (`int`) : عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا.

sigma_min (`float`، *اختياري*) : قيمة مقياس الضوضاء الأولية (تتجاوز القيمة المُعطاة أثناء إنشاء المجدول).

sigma_max (`float`، *اختياري*) : قيمة مقياس الضوضاء النهائية (تتجاوز القيمة المُعطاة أثناء إنشاء المجدول).

sampling_eps (`float`، *اختياري*) : قيمة خطوة الزمن النهائية (تتجاوز القيمة المُعطاة أثناء إنشاء المجدول).

Sets the noise scales used for the diffusion chain (to be run before inference). The sigmas control the weight of the `drift` and `diffusion` components of the sample update.

#### set_timesteps[[diffusers.ScoreSdeVeScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int, sampling_eps: float | None = None, device: typing.Union[str, torch.device, NoneType] = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L105)

**المعاملات:**

num_inference_steps (`int`) : عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا.

sampling_eps (`float`، *اختياري*) : قيمة خطوة الزمن النهائية (تتجاوز القيمة المُعطاة أثناء إنشاء المجدول).

device (`str` أو `torch.device`، *اختياري*) : الجهاز الذي يجب نقل خطوات الزمن (timesteps) إليه. إذا كان `None`، فلن يتم نقل خطوات الزمن.

يحدد الخطوات الزمنية المستمرة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).

#### step_correct[[diffusers.ScoreSdeVeScheduler.step_correct]]

```python
step_correct(model_output: Tensor, sample: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L245)

**المعاملات:**

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

generator (`torch.Generator`، *اختياري*) : مولّد أرقام عشوائية.

return_dict (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان يجب إرجاع [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple` أم لا.

**يعيد:** [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple`

إذا كانت قيمة `True`، يُعاد [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput)، وإلا يُعاد tuple يكون العنصر الأول فيه tensor العينة.

صحّح العينة المتنبأ بها بناءً على `model_output` للشبكة. يُنفَّذ هذا الإجراء عادةً بشكل متكرر بعد إجراء التنبؤ لخطوة الزمن السابقة.

#### step_pred[[diffusers.ScoreSdeVeScheduler.step_pred]]

```python
step_pred(model_output: Tensor, timestep: int, sample: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L177)

**المعاملات:**

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

timestep (`int`) : الخطوة الزمنية المنفصلة الحالية في سلسلة الانتشار.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

generator (`torch.Generator`، *اختياري*) : مولّد أرقام عشوائية.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [SdeVeOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/score_sde_ve#diffusers.schedulers.scheduling_sde_ve.SdeVeOutput) أو `tuple` أم لا.

**يعيد:** [SdeVeOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/score_sde_ve#diffusers.schedulers.scheduling_sde_ve.SdeVeOutput) أو `tuple`

إذا كانت قيمة return_dict هي `True`، يتم إرجاع [SdeVeOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/score_sde_ve#diffusers.schedulers.scheduling_sde_ve.SdeVeOutput)، وإلا يتم إرجاع tuple حيث يكون العنصر الأول هو tensor العينة.

تنبّأ بالعيّنة من الخطوة الزمنية السابقة عن طريق عكس عملية المعادلة التفاضلية العشوائية (SDE). تنقل هذه الدالة عملية الانتشار من مخرجات النموذج المُتعلَّم (والتي تكون في الغالب الضوضاء المتنبَّأ بها).

## SdeVeOutput[[diffusers.schedulers.scheduling_sde_ve.SdeVeOutput]]

#### diffusers.schedulers.scheduling_sde_ve.SdeVeOutput[[diffusers.schedulers.scheduling_sde_ve.SdeVeOutput]]

```python
diffusers.schedulers.scheduling_sde_ve.SdeVeOutput(prev_sample: Tensor, prev_sample_mean: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_sde_ve.py#L29)

**المعاملات:**

prev_sample (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)` للصور) : العينة المحسوبة `(x_{t-1})` لخطوة الزمن السابقة. يجب استخدام `prev_sample` كمدخل للنموذج التالي في حلقة إزالة الضوضاء.

prev_sample_mean (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)` للصور) : متوسط `prev_sample` المُحسب على مدى الخطوات الزمنية السابقة.

فئة الإخراج لدالة `step` الخاصة بالجدول الزمني.

