اكتشاف الدائرة في GPT-2 small ، باستخدام الترميز التلقائي المتفرق
للتثبيت يدويًا ، ما عليك سوى تشغيل هذه الأوامر في القشرة:
git clone https://github.com/DavidUdell/sparse_circuit_discovery
cd sparse_circuit_discovery
pip install -e .
بدلاً من ذلك ، لدي صورة Docker على سجل حاوية Github. صورة Docker جيدة بشكل خاص للسحب إلى خادم بعيد.
قاعدة العمليات الخاصة بك هي sparse_coding/config/central_config.yaml . يتم تجميع أهم أجهزة hyperarameters أعلى:
# Note: leave out entries for None. Writing in `None` values will get you the
# string "None".
## ------------------------------------------------------------------------- ##
## --------------------------- Key Hyperparameters ------------------------- ##
## ------------------------------------------------------------------------- ##
# ACTS_LAYERS_SLICE should be a Python slice, in str format. Set it to ":" to
# plot data from all model layers.
ACTS_LAYERS_SLICE: "9:12"
INIT_THINNING_FACTOR: 1.0
NUM_SEQUENCES_INTERPED: 1
THRESHOLD_EXP: 5.0
# Only pin single dims per layer. If not set, every ablation effect is plotted.
DIMS_PINNED:
3: [331]
بالترتيب:
ACTS_LAYERS_SLICE عبارة عن شريحة بيثون منسقة كسلسلة. إنه يحدد طبقات النموذج GPT-2 small الذي ستقوم بتفسير التنشيطات فيه.INIT_THINNING_FACTOR هو جزء من الميزات في الطبقة الأولى في الشريحة التي ستخططها. على سبيل المثال ، سيحاول جزء من 1.0 رسم كل ميزة في الطبقة.NUM_SEQUENCES_INTERPED هو عدد تسلسل الرمز المميز المستخدم أثناء التخطيط ، لغرض حساب تأثيرات السجل وتأثيرات ميزة المصب.THRESHOLD_EXP هو الأسس القيمة العتبة للاختلافات التنشيط التي تم رسمها. يتم إسقاط اختلافات أصغر في حجم التنشيط من 2**THRESHOLD_EXP . لرسم كل تأثير غير صفري ، التعليق على هذا الخط.DIMS_PINNED هو قاموس مؤشرات الطبقة تليها قوائم Singleton من مؤشرات الميزات. إذا تم تعيينه للطبقة الأولى ، فسيتم تجاوزه تمامًا INIT_THINNING_FACTOR . قم بتعيين هذه القيم ، Save central_config.yaml ، ثم قم بتشغيل التفسير مع:
cd sparse_coding
python3 pipe.py
تظهر جميع البيانات في sparse_coding/data/ .
يتم حفظ الرسم البياني الإدراكي الأخير الذي أنشأته ككلا من .svg لك .dot للكمبيوتر. إذا قمت بتشغيل خط أنابيب التفسير مرة أخرى ، فستتوسع البيانات الجديدة على ملف .dot القديم. بهذه الطريقة ، يمكنك تتبع الدوائر تدريجياً كما تذهب.
هناك أيضًا خوارزمية قائمة على التدرج ، وهي تنفيذ Marks et al. (2024). تتمتع هذه الخوارزمية بميزة التخطيط للمساهمات في فقدان الإدخال المتقاطع مباشرة ، بدلاً من التخطيط للمساهمات في أحجام التنشيط المتوسطة. يمتد تنفيذها هنا أيضًا إلى الطبقات الفرعية لـ GPT-2 ، وليس فقط التيار المتبقي للنموذج.
Heaframeters الرئيسية هنا هي:
ACTS_LAYERS_SLICE يعمل على النحو الوارد أعلاه. # Topk thresholds for gradient-based method.
NUM_UP_NODES: 5
NUM_DOWN_NODES: 5
NUM_UP_NODES بإصلاح عدد العقد الفرعية لتخطيط الحواف حتى ، لكل عقدة ساو متوقعة. لاحظ أن عدد الحواف يساوي ضعف هذه القيمة: ستحصل على العديد من الحواف العليا و Thit That Dould-K الحواف.NUM_DOWN_NODES يعمل على إصلاح عدد العقد الفرعية التي سيتم رسم الحواف منها . احفظ هذه القيم في central_config.yaml ، ثم قم بتشغيل التفسير:
cd sparse_coding
python3 fast.py
تظهر البيانات في sparse_coding/data/ ، كما هو الحال مع الخوارزمية الساذجة.
سيؤدي خط أنابيب التفسير هذا أيضًا إلى سحب بيانات التفسير الأكثر شمولية من Neuronpedia وإلحاقها بكل عقدة ، عند توفرها.
هنا يمكنك أيضًا اختيار تقديم الرسوم البيانية كملفات .png . قم بتغيير امتداد GRADS_FILE في central_config.yaml من .svg إلى .png لذلك. أنا أستخدم posterazor بشكل منفصل لطباعة ملفات الرسم البياني .png كبيرة ، عندما تكون نسخة فعلية مطلوبة.
هناك أيضًا خط أنابيب للتحقق من صحة الدائرة ، val.py هذا البرنامج النصي في وقت واحد يفسد جميع الميزات التي تشتمل على دائرة ، لمعرفة كيف تتصرف الدائرة الكلية تحت الاجتثاث (بدلاً من مجرد النظر إلى ميزات منفصلة تحت أجسام مستقلة ، فإن الرسوم البيانية الإدراكية pipe.py Contion).
لإعداد هذا ، أول مجموعة ACTS_LAYERS_SLICE لتشمل الطبقات ذات الصلة في GPT-2 صغيرة ، بما في ذلك طبقة إضافية كاملة بعد ، بعد ،
ACTS_LAYERS_SLICE: "6:9"
ثم قم بتثبيت جميع الميزات التي تشتمل على دائرة معينة في VALIDATION_DIMS_PINNED .
# Here you can freely pin multiple dims per layer.
VALIDATION_DIMS_PINNED:
6: [8339, 14104, 18854]
7: [2118]
الآن قم بتشغيل التحقق من الصحة مع:
python3 val.py
إعداد مجموعة بيانات في central_config.yaml ثم التشغيل:
python3 hist.py
سوف تتوافق مع مجموعة البيانات عن طريق تنشيط الخلايا العصبية ثم تنشيط تنشيط التلقائي التلقائي 99.99. الآن ، سيستخدم تشغيل fast.py تلك العتبات المخزنة مؤقتًا.
النظر في الرسم البياني الإدراك في الجزء العلوي من هذه الصفحة. كل مربع مع ملصق مثل 4.112 هو ميزة في مشفر تلقائي متفرق. 4 هو فهرس الطبقة ، في حين أن 112 هو فهرس العمود الخاص به في المشفر التلقائي لهذا الطبقة. يمكنك إعادة توجيه بيانات تفسير أكثر شمولية لأي ميزة معينة على الخلايا العصبية.
تمثل الرموز الزرقاء في التسلسلات في كل مربع تنشيطات الميزات العليا في سياقاتها ، إلى طول محدد إلى أي من الجانبين.
الرموز المميزة الزرقاء والأحمر في الصناديق الفردية في الأسفل هي السجلات الأكثر وزنًا/تقترب من هذا البعد. ( الرمادي هو حالة حافة التأثير 0.0.)
تمثل الأسهم بين الصناديق تأثيرات الاجتثاث في اتجاه مجرى النهر على ميزات أخرى. تمثل الأسهم الحمراء الأسفل ، والأزرق (الأخضر في grad_graph.py ) تمثل السهام التي تمثل زيادة الوزن ، وتمثل شفافية الأسهم حجمها. على سبيل المثال ، السهم الأحمر الشاحب هو تأثير بسيط للوزن.
لقد قمت بإعداد الكثير من وظائف المستودع في الوقت الحالي: يتم دعم فقط GPT-2 small وعامل إسقاط من 32 ، للاستفادة من مجموعة من أجهزة الترميز التلقائي المتفرقة مسبقًا.
إذا تم رفع hemazeoeffecterror ، فيجب عليك التحقق مما إذا كانت شريحة طبقاتك متوافقة مع DIM المثبتة.
إذا كنت تواجه الأخطاء المتغيرة Cryptic ENV ، فتأكد من تشغيل مجموعة أدوات CUDA 12.2 أو الأحدث.
كما يوحي بناء جملة shell ، فإن المسارات التي تشبه UNIX (على MacOS أو Linux) مطلوبة حاليًا ، وربما لن يتم تشغيل Windows Pathing مع الريبو.
يستخدم fast.py استراتيجية تشذيب فريدة من نوعها: سوف يستغرق الأمر Dims Autoender في الطبقة GPT-2 small النهائية ويقلب منها. لذلك يجب أن تبدأ من أسفل النموذج وتخطط تدريجياً من هناك.
الإصدار الحالي هو 1.3.1