Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
refusal-relocates — سلامة نماذج اللغة الكبيرة: تحليل كيفية تغيير الضبط الدقيق لسلوك الرفض وتقييم دفاعات تجميد الطبقات والرتبة المنخفضة. | Kitploit
أدوات/GitHubGitHub/js-lee-ai/refusal-relocates
أدوات دفاعيةتحليل الثغرات الأمنيةتعلم الآلةالأوراق والأبحاثأمن الذكاء الاصطناعيالهجوم العدائي
GitHubjs-lee-ai/refusal-relocates

refusal-relocates

سلامة نماذج اللغة الكبيرة: تحليل كيفية تغيير الضبط الدقيق لسلوك الرفض وتقييم دفاعات تجميد الطبقات والرتبة المنخفضة.

عرض المستودع
190منذ 19 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

الرفض ينتقل، الرفض يتموضع، الضرر ينتقل، طبقات الأمان تحت الضبط الدقيق بقليل من العينات

arXiv Project Page Code MIT Paper CC BY 4.0 Python 3.10+ CI Stars

صفحة المشروع · البدء السريع · الاستخدام · واجهة سطر الأوامر · النتائج · إعادة الإنتاج · الأسئلة الشائعة · الاستشهاد


الأخبار

  • [2026-09-28] إصدار الشيفرة، مع سجلات التشغيل والسكربتات التي تعيد بناء جداول الورقة.

نظرة عامة

يمكن لبضع عشرات من الأمثلة الضارة أن تزيل رفض النموذج المُحاذى للطلبات الضارة. تُموضع الأعمال السابقة الأمان في طبقات واتجاهات محددة، مما يوحي بحماية الموضع الذي تم العثور عليه. يختبر هذا المستودع تلك الفرضية بالطريقة التي يفعلها مهاجم تكيّفي. فهو يحدد أين يمكن استعادة الرفض، ويجمّد تلك المنطقة ويهاجم مجددًا، ويُصلح تحديث الأوزان ثم يدع المهاجم ينشره.

تقوم الدراسة على ثلاثة قياسات.

  • يُستعاد الرفض عند عمق واحد. يسلّم الترقيع المتزامن الحالة المخفية الكاملة للنموذج النظيف عند طبقة واحدة إلى النموذج المخترق، عند التعبئة المسبقة وكل خطوة فك ترميز، ويعود الرفض عند عمق انتقال قابل لإعادة الإنتاج.
  • تجميد ذلك العمق ينقل الضرر. في مقارنة Llama-3.1-8B المتطابقة، يؤدي تجميد الطبقات 0–17 إلى نقل الانتقال من الطبقة 15 إلى الطبقتين 27 و28، ويصبح الرفض بعد الهجوم المقيّد 0.00 إلى 0.01 مقابل 0.92 إلى 0.96 في النموذج النظيف.
  • إصلاح أعلى اتجاهين يسقط أمام تحديث منتشر. إزالة أعلى اتجاهين مفردين في تحديث الأوزان تستعيد الرفض بعد عمليات ضبط دقيق قصيرة على الانتباه فقط في أربع نقاط تفتيش. المهاجم الذي ينشر التحديث يخفض إصلاح أعلى اتجاهين النسبي إلى 0.000، وكاشف مُعاير على 75 عملية ضبط دقيق حميدة لا يرصد سوى 3 من 14 حالة فشل في الإصلاح.

هذا المستودع هو القياس وكلا الدفاعين في صورة مكتبة صغيرة، إضافة إلى سجلات التشغيل والسكربتات التي تعيد بناء جداول الورقة.

ما الذي يفعله في صورة واحدة

على اليسار، يعمل النموذجان النظيف والمخترق على رموز مشتركة وتُرقَّع الحالة المخفية النظيفة في النموذج المخترق عند طبقة واحدة. على اليمين، يُعاد الهجوم مع تجميد الطبقات 0 إلى 17 ويُعاد تشغيل الترقيع على نقطة التفتيش المقيّدة

(أ) يستبدل الترقيع المتزامن للتنشيط مخرجات طبقة النموذج المخترق بالحالة النظيفة عند التعبئة المسبقة وكل خطوة فك ترميز. (ب) في هجوم 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]"pytestexperiments/ و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، ويبلّغ عن عمق الانتقال.

إصلاح محوّل وتقييمه، دون GPU

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 من محوّل محفوظ على وحدة المعالجة المركزية.

نظرة سريعة على واجهة البرمجة

تنزيل الأداة