
سلامة نماذج اللغة الكبيرة: تحليل كيفية تغيير الضبط الدقيق لسلوك الرفض وتقييم دفاعات تجميد الطبقات والرتبة المنخفضة.
صفحة المشروع · البدء السريع · الاستخدام · واجهة سطر الأوامر · النتائج · إعادة الإنتاج · الأسئلة الشائعة · الاستشهاد
يمكن لبضع عشرات من الأمثلة الضارة أن تزيل رفض النموذج المُحاذى للطلبات الضارة. تُموضع الأعمال السابقة الأمان في طبقات واتجاهات محددة، مما يوحي بحماية الموضع الذي تم العثور عليه. يختبر هذا المستودع تلك الفرضية بالطريقة التي يفعلها مهاجم تكيّفي. فهو يحدد أين يمكن استعادة الرفض، ويجمّد تلك المنطقة ويهاجم مجددًا، ويُصلح تحديث الأوزان ثم يدع المهاجم ينشره.
تقوم الدراسة على ثلاثة قياسات.
هذا المستودع هو القياس وكلا الدفاعين في صورة مكتبة صغيرة، إضافة إلى سجلات التشغيل والسكربتات التي تعيد بناء جداول الورقة.
(أ) يستبدل الترقيع المتزامن للتنشيط مخرجات طبقة النموذج المخترق بالحالة النظيفة عند التعبئة المسبقة وكل خطوة فك ترميز. (ب) في هجوم Llama المتطابق، يؤدي تجميد الطبقات 0–17 إلى نقل انتقال نصف السقف من 15 إلى 27–28.
pip install "git+https://github.com/js-lee-AI/refusal-relocates.git"
import numpy as np
import refusal
rng = np.random.default_rng(0)
A = rng.standard_normal((16, 512)) / 512 ** 0.5 # LoRA factors of one module, rank 16
B = rng.standard_normal((512, 16)) / 16 ** 0.5
for name, decay in [("ordinary", 0.5), ("spread", 1.0)]:
b = B * decay ** np.arange(16) # energy in a few directions, or spread flat
before, after = refusal.update_stats(A, b), refusal.update_stats(*refusal.remove_top_k(A, b, k=2))
print(f"{name:8s} PR/r {before['pr_over_r']:.2f} top-2 energy {before['top2_energy_fraction']:.2f}"
f" norm left after top-2 removal {after['unscaled_norm'] / before['unscaled_norm']:.2f}")
# ordinary PR/r 0.10 top-2 energy 0.94 norm left after top-2 removal 0.24
# spread PR/r 0.94 top-2 energy 0.18 norm left after top-2 removal 0.90
يضع الضبط الدقيق العادي معظم تحديثه في عدد قليل من الاتجاهات المفردة، لذا فإن إزالة أعلى اتجاهين تزيل معظمه. أما التحديث الموزَّع فله طيف مسطّح، لذا فإن الإزالة نفسها تترك معظمه في مكانه. كما أن PR/r، وهو نسبة المشاركة على رتبة LoRA، هو أيضًا درجة كاشف الطيف في الورقة البحثية.
يعمل هذا على وحدة المعالجة المركزية في نحو ثانية واحدة ولا ينزّل أي شيء. الشيفرة نفسها موجودة في examples/quickstart.py، ويشغّلها CI عند كل دفعة.
لتدريب نقاط حفظ حقيقية وتعديلها وتقييمها، ثبّت الإضافة models.
pip install "refusal-relocates[models] @ git+https://github.com/js-lee-AI/refusal-relocates.git"
| التثبيت | يضيف | يكفي لـ |
|---|---|---|
pip install "git+https://github.com/js-lee-AI/refusal-relocates.git" | numpy | النواة الطيفية، إزالة top-k، الكاشف، مُقيِّم الرفض، أمر refusal |
pip install "refusal-relocates[models] @ git+https://github.com/js-lee-AI/refusal-relocates.git" | torch, transformers, peft, accelerate, safetensors, scikit-learn, datasets | التدريب، الترقيع المتزامن، المجسّات والتقييم على نموذج |
git clone ثم pip install -e ".[models,test]" | pytest | experiments/ وrecords/ وtests/ |
تم الاختبار باستخدام Python 3.11.5 وPyTorch 2.10.0 وTransformers 4.57.3 وPEFT 0.18.0. تُحمَّل النماذج بصيغة bfloat16 على جهاز CUDA.
import refusal
data = refusal.load_data("data/prompt_sets.json") # built by `refusal prepare`, see below
prompts = data["advbench"][:40]
clean, tokenizer = refusal.load_model("meta-llama/Llama-3.1-8B-Instruct")
attacked, _ = refusal.load_model("meta-llama/Llama-3.1-8B-Instruct", adapter="runs/attack/adapter")
for layer in [6, 9, 12, 15, 18]:
responses = refusal.lockstep_generate(clean, attacked, tokenizer, prompts, layer=layer)
print(layer, sum(refusal.is_refusal(r) for r in responses) / len(prompts))
يقرأ كلا النموذجين الرموز نفسها، وعند الطبقة المختارة يُستبدل ناتج النموذج المخترق بناتج النموذج النظيف. يشغّل refusal patch القياس الكامل مع حدّه الأدنى وحدّه الأعلى وضابطيه، ويقيّم الرفض المتماسك عبر بوابة الحيرة وLlama-Guard، ويبلّغ عن عمق الانتقال.
import refusal
stats = refusal.update_stats(A, B) # one module, A is rank x in and B is out x rank
A2, B2 = refusal.remove_top_k(A, B, k=2) # the top-two repair, as new LoRA factors
result = refusal.calibrate_detector(benign_scores, attack_scores, budget=0.05)
تُحسب درجة كاشف المحوّل على أنها PR/r بمتوسط على إسقاطات الانتباه الخاصة به، والتي يحسبها refusal spectra من محوّل محفوظ على وحدة المعالجة المركزية.