Diffusers documentation
DiscreteDDIMScheduler
DiscreteDDIMScheduler
يعتمد DiscreteDDIMScheduler على أخذ عينات لكل موضع في اللوحة من التوزيع الخلفي المنفصل الدقيق لعملية التلوث المنتظم (D3PM)، وذلك وفقاً لـ Structured Denoising Diffusion Models in Discrete State-Spaces. وهو خالٍ من المعلمات، حيث يقوم الخطوة النهائية بتثبيت الرموز المتوقعة بشكل حتمي. وتضيف وضع المُتنبئ-المُصحِّح الاختياري عمليات مسح Gibbs التي تستثني عنصراً واحداً من Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation عبر corrector_steps.
يُستخدم هذا المجدول بواسطة DiffusionGemmaPipeline.
DiscreteDDIMScheduler
فئة diffusers.DiscreteDDIMScheduler
< source >( num_inference_steps: int = 32corrector_steps: int = 0corrector_k: int = 1corrector_selection: str = 'lowest_log_margin'corrector_selection_tau: float = 1.0 )
المعاملات
- num_inference_steps (
int، القيمة الافتراضية 32) — عدد خطوات إزالة الضوضاء، الذي يحدد الشبكة الزمنية الخطية التي يُقيَّم عليها التوزيع اللاحق. - corrector_steps (
int، القيمة الافتراضية 0) — عدد عمليات المسح التصحيحية لجيبس التي تُنفَّذ بعد كل خطوة تنبؤية. القيمة0تعيد استرجاع أخذ عينات DDIM الأصلية البسيطة. - corrector_k (
int، القيمة الافتراضية 1) — عدد المواضع التي يتم إعادة أخذ عينات منها في كل جولة تصحيح. - corrector_selection (
str, defaults to"lowest_log_margin") — How the resampled positions are chosen:"lowest_log_margin","lowest_maxprob","lowest_current_prob", or"random". - corrector_selection_tau (
float، القيمة الافتراضية 1.0) — درجة حرارة اختيار المواقع عبر Gumbel-top-k (كلما انخفضت القيمة، زادت الجشعية).
مجدول DDIM المنفصل لعملية التلوث المنتظم، وفقاً لورقة “نماذج الانتشار غير الضوضائية المهيكلة في فضاءات الحالة المنفصلة” (D3PM، https://huggingface.co/papers/2107.03006).
في الجدول الزمني الخطي، تكون احتمالية بقاء رمز نظيف عند الزمن t هي alpha(t) = 1 - t. يقوم كل خطوة إزالة ضوضاء من الزمن t إلى s < t بسحب كل موضع في الكتلة من التوزيع اللاحق الدقيق q(x_s | x_t, x0)، والذي بالنسبة لنواة موحّدة يتفكك إلى ثلاث مسارات: القفز إلى الرمز النظيف المتوقع x0، أو البقاء على الرمز الحالي، أو القفز إلى رمز عشوائي موحّد. على عكس الانتشار المقنّع، لا يوجد رمز قناع؛ فالمواضع غير المُثبّتة تحمل رموزًا عشوائية.
يتوفر وضع اختياري للتنبؤ والتصحيح يتبع منهجية “Uniform Diffusion Models Revisited: Leave-One-Out Denoiser and Absorbing State Reformulation” عبر مُزيل الضوضاء leave-one-out (LOO) (https://huggingface.co/papers/2605.22765).
عندما يكون corrector_steps > 0، يقوم خط الأنابيب بتنفيذ عدد من جولات التصحيح Gibbs بعد كل خطوة تنبؤ (انظر step_correct())، حيث يعيد أخذ عينات من المواضع الأقل ثقة من الشرطي أحادي الإحداثي Cat(alpha_s * x0_loo + (1 - alpha_s) / K) مع إبقاء البقية ثابتة، مما يُبقي التوزيع الحدي p_s دون تغيير ويحسّن التوليد دون أي تكلفة تدريبية.
خطوة
< source >( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensortemperature: float = 0.0generator: torch.Generator | None = Nonereturn_dict: bool = True )
المعاملات
- model_output (
torch.Tensorمن الشكل(batch_size, block_length, vocab_size)) — قيم اللوجيت الخام من النموذج للكتلة الحالية. - timestep (
intأوtorch.Tensor) — مؤشر الخطوة الحالية ضمن جدول إزالة الضوضاء، ضمن[0, num_inference_steps - 1]. - sample (
torch.LongTensorمن الشكل(batch_size, block_length)) — معرّفات الرموز الحالية للكتلةx_t. - temperature (
float) — درجة الحرارة المستخدمة في العينة عند سحبx0من القيم اللوجستية. - generator (
torch.Generator، اختياري) — مولّد الأرقام العشوائية (RNG) للعينات. - return_dict (
bool) — ما إذا كان يجب إرجاع DiscreteDDIMSchedulerOutput أو مجرد tuple.
استخرج الكتلة التالية من التوزيع اللاحق q(x_s | x_t, x0) لعملية التلوث المنتظمة.
حيث a = alpha_t / alpha_s (احتمال البقاء من s إلى t) وb = alpha_s، فإن كتلة الاحتمال اللاحق لكل مسار هي
نظيف: b * (1 - a) / K + a * b * 1[x_t = x0]، ثابت: a * (1 - b) / K، ضوضاء: (1 - a) * (1 - b) / K،
إذن، الخطوة الأخيرة (b = 1) تُثبّت بشكل حتمي الرموز النظيفة المتوقعة.
step_correct
< source >( model_output: torch.Tensortimestep: int | torch.Tensorsample: torch.LongTensorgenerator: torch.Generator | None = Nonereturn_dict: bool = True )
المعاملات
- model_output (
torch.Tensorمن الشكل(batch_size, block_length, vocab_size)) — قيم اللوجيت الخام من النموذج المُعاد حسابها علىsampleالحالي (بعد المُتنبِّئ). - timestep (
intأوtorch.Tensor) — مؤشر خطوة التنبؤ التي اكتملت للتو؛ يعمل المُصحِّح عند نقطة الشبكة التاليةs. - sample (
torch.LongTensorمن الشكل(batch_size, block_length)) — معرّفات الرموز الحالية للكتلة التي يجب تحسينها. - generator (
torch.Generator، اختياري) — مولّد الأرقام العشوائية (RNG) للعينات. - return_dict (
bool) — ما إذا كان يجب إرجاع DiscreteDDIMSchedulerOutput أو مجرد tuple.
نفّذ مسحًا واحدًا لمصحّح غيبس عند وقت ما بعد المُتنبّئ s، متبعًا منهج المُتنبّئ-المُصحّح مع استبعاد عنصر واحد كما في https://huggingface.co/papers/2605.22765.
تُحوَّل قيم النموذج (المُعاد حسابها على sample الحالي) إلى مُزيل الضوضاء LOO، وتُشكَّل الشرطية ذات الإحداثي الواحد p_s(x^l | x^{-l}) = Cat(alpha_s * x0_loo + (1 - alpha_s) / K)، ثم تُختار مواضع corrector_k الأقل ثقة، وتُعاد عينة تلك المواضع بينما تبقى بقية المواضع ثابتة. يحافظ المسح على p_s، لذا فهو يُحسّن العينة دون تغيير حافيتها ولا يتطلب تدريبًا إضافيًا.
DiscreteDDIMSchedulerOutput
فئة diffusers.DiscreteDDIMSchedulerOutput
< source >( prev_sample: torch.LongTensorsampled_tokens: torch.LongTensorsampled_probs: torch.Tensorpred_logits: torch.Tensor )
المعاملات
- prev_sample (
torch.LongTensorمن الشكل(batch_size, block_length)) — رموز الكتلة المحدّثة بعد خطوة إزالة الضوضاء الحالية. - sampled_tokens (
torch.LongTensorمن الشكل(batch_size, block_length)) — معرّفات الرموز المُستخرجة من قيم النموذج الاحتمالية، أي الرموز النظيفة المتوقعةx0. - sampled_probs (
torch.Tensorمن الشكل(batch_size, block_length)) — احتمالات الرموز المُستخرجة. - pred_logits (
torch.Tensorمن الشكل(batch_size, block_length, vocab_size)) — قيم اللوجيت الخاصة بإزالة الضوضاء، والتي تُمرَّر لتسهيل التكييف الذاتي في الخطوة التالية.
فئة الإخراج لمجدول DDIM المنفصل.