การค้นพบวงจรใน GPT-2 small โดยใช้การเข้ารหัสอัตโนมัติแบบเบาบาง
ในการติดตั้งด้วยตนเองเพียงเรียกใช้คำสั่งเหล่านี้ในเชลล์:
git clone https://github.com/DavidUdell/sparse_circuit_discovery
cd sparse_circuit_discovery
pip install -e .
หรือฉันมีภาพนักเทียบท่าบนรีจิสทรีคอนเทนเนอร์ GitHub อิมเมจนักเทียบท่านั้นดีเป็นพิเศษสำหรับการดึงไปยังเซิร์ฟเวอร์ระยะไกล
ฐานการดำเนินงานของคุณคือ sparse_coding/config/central_config.yaml พารามิเตอร์ที่สำคัญที่สุดคือการจัดกลุ่มขึ้นไปด้านบน:
# 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 คือจำนวนลำดับโทเค็นที่ใช้ในระหว่างการพล็อตเพื่อวัตถุประสงค์ในการคำนวณเอฟเฟกต์ logit และเอฟเฟกต์คุณสมบัติดาวน์สตรีมTHRESHOLD_EXP เป็นเลขชี้กำลังค่าเกณฑ์สำหรับความแตกต่างการเปิดใช้งานพล็อต ความแตกต่างที่น้อยกว่าในขนาดการเปิดใช้งานมากกว่า 2**THRESHOLD_EXP ถูกลดลง หากต้องการพล็อตเอฟเฟกต์ที่ไม่เป็นศูนย์แสดงความคิดเห็นบรรทัดนี้DIMS_PINNED เป็นพจนานุกรมของดัชนีเลเยอร์ตามด้วยรายการดัชนีฟีเจอร์ซิงเกิล หากตั้งค่าสำหรับเลเยอร์แรกมันจะแทนที่ INIT_THINNING_FACTOR อย่างสมบูรณ์ ตั้งค่าเหล่านี้บันทึก central_config.yaml จากนั้นเรียกใช้ความสามารถในการตีความด้วย:
cd sparse_coding
python3 pipe.py
ข้อมูลทั้งหมดจะปรากฏใน sparse_coding/data/
กราฟการรับรู้ล่าสุดที่คุณสร้างจะถูกบันทึกเป็นทั้ง .svg สำหรับคุณและเป็น .dot สำหรับคอมพิวเตอร์ หากคุณเรียกใช้ไปป์ไลน์การตีความอีกครั้งข้อมูลใหม่จะขยายออกไปตามไฟล์ .dot เก่านั้น ด้วยวิธีนี้คุณสามารถติดตามวงจรได้อย่างต่อเนื่องเมื่อคุณไป
นอกจากนี้ยังมีอัลกอริทึมที่ใช้การไล่ระดับสีซึ่งเป็นการดำเนินการของ Marks และคณะ (2024) อัลกอริทึมนี้มีข้อได้เปรียบในการวางแผนการสูญเสียข้ามการเข้าร่วม โดยตรง แทนที่จะวางแผนการมีส่วนร่วมในการเปิดใช้งานขนาดกลาง การใช้งานที่นี่ยังขยายไปถึง sublayers ของ GPT-2 ไม่ใช่แค่กระแสที่เหลือของโมเดล
คีย์ไฮเปอร์พารามิเตอร์ที่นี่คือ:
ACTS_LAYERS_SLICE ทำงานดังกล่าวข้างต้น # Topk thresholds for gradient-based method.
NUM_UP_NODES: 5
NUM_DOWN_NODES: 5
NUM_UP_NODES แก้ไขจำนวนโหนด sublayer เพื่อพล็อตขอบ ถึง สำหรับแต่ละโหนด sublayer ลง โปรดทราบว่าจำนวนของขอบเท่ากับ สอง ค่านี้: คุณจะได้รับขอบสุดยอดมากมายและขอบก้น ก้น จำนวนมากนี้NUM_DOWN_NODES แก้ไขจำนวนโหนด sublayer ที่ขอบจะถูกพล็อต จาก บันทึกค่าเหล่านี้ใน central_config.yaml จากนั้นเรียกใช้ความสามารถในการตีความ:
cd sparse_coding
python3 fast.py
ข้อมูลจะปรากฏใน sparse_coding/data/ เช่นเดียวกับอัลกอริทึมที่ไร้เดียงสา
ไปป์ไลน์การตีความนี้จะดึงข้อมูลความสามารถในการตีความที่ครอบคลุมมากขึ้นจากเซลล์ประสาทและต่อท้ายแต่ละโหนดเมื่อมี
ที่นี่คุณสามารถเลือกที่จะแสดงกราฟเป็นไฟล์. .png เปลี่ยนส่วนขยายของ GRADS_FILE ใน central_config.yaml จาก .svg เป็น .png สำหรับสิ่งนั้น ฉันใช้ posterazor เพื่อพิมพ์ไฟล์กราฟขนาดใหญ่ .png ขนาดใหญ่เมื่อต้องการสำเนาทางกายภาพ
นอกจากนี้ยังมีท่อตรวจสอบวงจรอิสระ val.py สคริปต์นี้พร้อมกันคุณสมบัติทั้งหมดที่ประกอบด้วยวงจรเพื่อดูว่าวงจร โดยรวม ทำงานอย่างไรภายใต้การระเหย (แทนที่จะดูคุณสมบัติแยกต่างหากภายใต้การระเหย pipe.py
ในการตั้งค่าสิ่งนี้ให้ตั้งค่าแรก 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
จะทำให้ไม่แน่นอนว่าชุดข้อมูลโดยการเปิดใช้งาน Neuron-Basis จากนั้นแคช 99.99th เปอร์เซ็นต์ Autoencoder-Basis Magnitudes ตอนนี้การทำงาน fast.py จะใช้เกณฑ์แคชเหล่านั้น
พิจารณากราฟความรู้ความเข้าใจที่ด้านบนของหน้านี้ แต่ละ กล่อง ที่มีฉลากเช่น 4.112 เป็นคุณสมบัติใน AutoEncoder ที่กระจัดกระจาย 4 คือดัชนีเลเยอร์ในขณะที่ 112 เป็นดัชนีคอลัมน์ในระบบอัตโนมัติของเลเยอร์นั้น คุณสามารถอ้างอิงข้อมูลการตีความที่ครอบคลุมมากขึ้นสำหรับคุณสมบัติใด ๆ ที่กำหนดในเซลล์ประสาท
โทเค็นสีน้ำเงิน ในลำดับในแต่ละกล่องแสดงถึงการเปิดใช้งานคุณสมบัติด้านบนในบริบทของพวกเขาเพื่อความยาวที่ระบุออกไปด้านใดด้านหนึ่ง
โทเค็นสีน้ำเงินและสีแดง ในแต่ละกล่องที่ด้านล่างคือ logits ที่มีน้ำหนักมากที่สุด/ลดน้ำหนักโดยมิตินั้น ( สีเทา คือตัวเรือนขอบเอฟเฟกต์ 0.0)
ลูกศร ระหว่างกล่องแสดงเอฟเฟกต์การระเหยแบบปลายน้ำกับคุณสมบัติอื่น ๆ ลูกศรสีแดงเป็นตัวแทนของลูกศรสีน้ำเงิน (สีเขียวใน grad_graph.py ) ลูกศรแสดงถึงน้ำหนักตัวและความโปร่งใสลูกศรแสดงถึงขนาด เช่นลูกศรสีแดงซีดเป็นผลกระทบที่ลดลงเล็กน้อย
ฉันได้ฟังก์ชั่นที่เก็บจำนวนมากในตอนนี้: รองรับ GPT-2 small และมีปัจจัยการฉายภาพ 32 รายการเท่านั้นที่จะใช้ประโยชน์จากชุดอัตโนมัติแบบเบาบางที่มีมาก่อน
หากมีการเลี้ยงดูอย่างแน่นอนคุณควรตรวจสอบอีกครั้งว่าชั้นเลเยอร์ของคุณเข้ากันได้กับสลัวของคุณหรือไม่
หากคุณกำลังเผชิญกับข้อบกพร่องของตัวแปรที่ซ่อนเร้นให้ตรวจสอบให้แน่ใจว่าคุณกำลังใช้งาน CUDA Toolkit 12.2 หรือใหม่กว่า
ตามที่ Shell Syntax แนะนำเส้นทางที่มีลักษณะคล้าย UNIX (บน MacOS หรือ Linux) เป็นสิ่งจำเป็นและการดำเนินการของ Windows อาจไม่ได้เล่นกับ repo
fast.py ใช้กลยุทธ์การตัดแต่งกิ่งที่ไม่เหมือนใคร: จะใช้เครื่องปรับอากาศอัตโนมัติในชั้นสุดท้าย GPT-2 small และตัดขึ้นจากพวกเขา ดังนั้นคุณควรเริ่มต้นจากด้านล่างของโมเดลและวางแผนอย่างต่อเนื่องจากที่นั่น
เวอร์ชันปัจจุบันคือ 1.3.1