LoRA (Low-Rank Adaptation)
يضبط LoRA النماذج الكبيرة بدقة عبر تجميد أوزانها وتدريب مصفوفات تحديث صغيرة منخفضة الرتبة، مما يقلل المعلمات القابلة للتدريب والذاكرة ومساحة التخزين.
LoRA، اختصاراً لـ التكيّف منخفض الرتبة، طريقة من الضبط الدقيق الفعّال من حيث المعلمات (PEFT) تكيّف نموذجاً كبيراً مدرّباً مسبقاً مع مهمة جديدة عبر تجميد الأوزان الأصلية وتدريب زوج صغير من المصفوفات إلى جانب طبقات محددة. ويشكّل حاصل ضرب المصفوفتين تحديثاً منخفض الرتبة يُضاف إلى الأوزان المجمدة، فلا تتلقى التدرجات سوى نسبة ضئيلة جداً من المعلمات. قدّم Hu وزملاؤه في Microsoft هذه الطريقة عام 2021، فقلّصت معلمات التدريب في GPT-3 175B بمقدار 10,000 مرة، وقلّصت ذاكرة GPU اللازمة للتدريب بمقدار 3 مرات مقارنةً بـالضبط الدقيق الكامل باستخدام Adam، مع مطابقة جودة الضبط الدقيق الكامل أو التفوق عليها في RoBERTa وDeBERTa وGPT-2 وGPT-3. وتُستخدم الآن على نطاق واسع لتخصيص النماذج اللغوية الكبيرة (LLMs) ونماذج الانتشار ومحولات الرؤية على عتاد متواضع. أما LoRa، بروتوكول الراديو طويل المدى لأجهزة إنترنت الأشياء، فهو مصطلح لا علاقة له بذلك.
آلية عمل LoRA#
يغيّر الضبط الدقيق مصفوفة الأوزان W المدرّبة مسبقاً، ذات الحجم d × k، من خلال تحديث ΔW. تفترض LoRA أن لهذا التحديث رتبة جوهرية منخفضة، لذا يمكن كتابته على شكل حاصل ضرب مصفوفتين رفيعتين: ΔW = B × A، حيث A بحجم r × k وB بحجم d × r، والرتبة r أصغر بكثير من d أو k. ويصبح خرج الطبقة h = Wx + (α / r) × BAx، حيث α ثابت تحجيم. تُهيّأ A بقيم عشوائية صغيرة وB بأصفار، لذا يبدأ التدريب من النموذج المدرّب مسبقاً تماماً. ولا يجري تحديث سوى A وB أثناء الانتشار العكسي، ما يلغي أيضاً حالة المحسّن لجميع الأوزان المجمدة.
في إسقاط بحجم 4096 × 4096، يدرّب الضبط الدقيق الكامل نحو 16.8 مليون وزن، بينما يدرّب محوّل رتبته 8 العدد 8 × (4096 + 4096) = 65,536. ينشئ البرنامج النصي PyTorch أدناه هذا المحوّل ويدمجه في الطبقة المجمدة:
import torch
from torch import nn
# A frozen pretrained 4096 x 4096 projection, like one in a transformer attention block
base = nn.Linear(4096, 4096).requires_grad_(False)
# LoRA's trainable rank-8 update: B @ A, scaled by alpha / r
# B starts at zero, so the adapted layer initially matches the pretrained one
r, alpha = 8, 16
A = nn.Parameter(torch.randn(r, 4096) * 0.01)
B = nn.Parameter(torch.zeros(4096, r))
trainable = A.numel() + B.numel()
total = trainable + sum(p.numel() for p in base.parameters())
print(f"Trainable: {trainable:,} of {total:,} parameters ({trainable / total:.2%})")
# After training, merge the update into the base weight so inference costs nothing extra
nn.init.normal_(B, std=0.01) # stand-in for trained values
x = torch.randn(2, 4096)
adapted = base(x) + (alpha / r) * (x @ A.T @ B.T)
merged = nn.functional.linear(x, base.weight + (alpha / r) * B @ A, base.bias)
print(f"Merged layer matches adapter output: {torch.allclose(adapted, merged, atol=1e-5)}")يدرّب المحوّل 65,536 من أصل 16,846,848 معلَمة في الطبقة، أي 0.39%، ويعطي دمج B × A في W المخرجات نفسها التي ينتجها تشغيل المحوّل على نحو منفصل. لذلك تعمل نماذج LoRA المدمجة بالسرعة نفسها تماماً للنموذج الأصلي، وهي ميزة على طبقات المحوّلات السابقة التي تضيف عمليات حسابية إضافية إلى كل تمريرة أمامية.
استخدام LoRA عملياً#
كيّفت الورقة الأصلية إسقاطي الاستعلام والقيمة في الانتباه ضمن المحوّل فقط، بينما تستهدف كثير من الوصفات الآن كل طبقة خطية. الرتبة وα هما المعاملان الفائقان الرئيسيان: وتضبط مكتبة Hugging Face PEFT القيمتين الافتراضيتين r = 8 وα = 8. وبما أن النموذج الأساسي يبقى دون تغيير، يمكن لعملية نشر واحدة الاحتفاظ بنسخة واحدة منه وتبديل المحوّلات الصغيرة المخصصة للمهام. عند استخدام الرتبة 4 في إسقاطي الاستعلام والقيمة لـ GPT-3 175B، انخفض حجم كل نقطة تحقق مكيّفة من 350 GB إلى نحو 35 MB، أي أصبحت أصغر بنحو 10,000 مرة.
- النماذج اللغوية: تكيّف الفرق نماذج LLM مفتوحة مع مجال أو أسلوب أو صيغة تعليمات على GPU واحد، وغالباً ما تجمع LoRA مع بيانات ضبط التعليمات.
- توليد الصور: تعلّم ملفات LoRA نماذج Stable Diffusion وما شابهها شخصية أو منتجاً أو أسلوباً فنياً، وتُشارك وتُكدّس على نحو منفصل عن نقطة التحقق الأساسية.
- نماذج الرؤية والنماذج متعددة الوسائط: تخصّص المحوّلات الرؤية ونماذج الرؤية واللغة (VLMs) للصور الطبية أو الصناعية أو المستندات، دون إعادة تدريب العمود الفقري.
المتغيرات#
- QLoRA: تجمّد النموذج الأساسي بدقة NormalFloat ذات 4 بتات وتدرّب محوّلات LoRA فوقه. استخدمها Dettmers وزملاؤه لضبط نموذج يضم 65 مليار معلَمة على GPU واحد بسعة 48 GB مع الحفاظ على أداء الضبط الدقيق الكامل ذي 16 بتاً.
- DoRA: تقسّم كل وزن مدرّب مسبقاً إلى مقدار واتجاه، وتطبّق LoRA على الاتجاه فقط، ما يقلّص فجوة الدقة مقارنةً بالضبط الدقيق الكامل مع الحفاظ على كلفة الاستدلال نفسها.
LoRA والمصطلحات ذات الصلة#
- الضبط الدقيق الفعّال من حيث المعلمات: مصطلح شامل للطرائق التي لا تدرّب سوى جزء صغير من النموذج. ويُعد تجميد الطبقات أبسط هذه الطرائق، وتتيحه Ultralytics YOLO في وسيطة التدريب
freeze، التي تُبقي أول N طبقات من نموذج YOLO26 على أوزانها المدرّبة مسبقاً فيما تُدرّب الطبقات المتبقية. - الضبط الدقيق الكامل: يحدّث كل وزن ويخزّن نسخة كاملة الحجم من النموذج لكل مهمة. وفي البرمجة والرياضيات، تفوق الضبط الدقيق الكامل بفارق كبير على LoRA القياسي، في حين عانى LoRA بدرجة أقل من النسيان الكارثي للمهارات الأخرى للنموذج الأساسي.
- ضبط المطالبات: يتعلم تضمينات مطالبات لينة تُضاف إلى بداية الإدخال مع إبقاء جميع أوزان النموذج مجمدة.
- التعلّم بالنقل: الفكرة العامة لإعادة استخدام المعرفة المكتسبة من مهمة في مهمة أخرى. وLoRA إحدى الطرق الفعّالة لتنفيذ ذلك.
- دمج النماذج: يدمج أوزان نماذج ضُبطت بدقة على نحو منفصل، ويُعد دمج عدة محوّلات LoRA في نموذج أساسي واحد حالة شائعة لذلك.










