Schaltungsentdeckung in GPT-2 small unter Verwendung eines spärlichen Autoencodierens
Um manuell zu installieren, führen Sie diese Befehle einfach in der Shell aus:
git clone https://github.com/DavidUdell/sparse_circuit_discovery
cd sparse_circuit_discovery
pip install -e .
Alternativ habe ich ein Docker -Bild in der GitHub -Containerregistrierung. Das Docker -Bild ist besonders gut zum Anziehen auf einem Remote -Server.
Ihre Operationsbasis ist sparse_coding/config/central_config.yaml . Die wichtigsten Hyperparameter sind oben geklustert:
# 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]
In Ordnung:
ACTS_LAYERS_SLICE ist eine als Zeichenfolge formatierte Python -Slice. Es legt fest, welche Schichten des GPT-2 small Modells Aktivierungen interpretieren werden.INIT_THINNING_FACTOR ist der Anteil der Funktionen in der ersten Ebene in Ihrem Schicht, die Sie zeichnen. ZB ein Bruch von 1.0 versucht, jede Funktion in der Ebene zu zeichnen.NUM_SEQUENCES_INTERPED ist die Anzahl der während des Plotten verwendeten Token -Sequenzen, um Logit -Effekte und nachgeschaltete Merkmaleffekte zu berechnen.THRESHOLD_EXP ist der Schwellenwert -Exponent für aufgetragene Aktivierungsunterschiede. Kleinere Unterschiede in der Aktivierungsgröße als 2**THRESHOLD_EXP werden fallen gelassen. Um jeden Effekt ohne Null zu zeichnen, kommentieren Sie diese Zeile.DIMS_PINNED ist ein Wörterbuch mit Schichtindizes, gefolgt von Singleton -Listen von Feature -Indizes. Wenn sie für die erste Ebene festgelegt sind, wird INIT_THINNING_FACTOR vollständig überschrieben. Setzen Sie diese Werte, speichern Sie central_config.yaml und führen Sie die Interpretierbarkeit mit: aus:
cd sparse_coding
python3 pipe.py
Alle Daten werden in sparse_coding/data/ angezeigt.
Das letzte Kognitionsgraphen, das Sie generiert haben, wird sowohl als .svg für Sie als auch als .dot für den Computer gespeichert. Wenn Sie die Interpretierbarkeitspipeline erneut ausführen, erweitern die neuen Daten diese alte .dot -Datei. Auf diese Weise können Sie im Laufe der Zeit die Schaltkreise nach und nach verfolgen.
Es gibt auch einen gradientenbasierten Algorithmus, eine Implementierung von Marks et al. (2024). Dieser Algorithmus hat den Vorteil, dass Beiträge zum Querentropieverlust direkt aufgetragen werden, anstatt Beiträge zu Größen der Zwischenaktivierung zu zeichnen. Die Implementierung hier erstreckt sich auch auf GPT-2-Untermesser, nicht nur auf den Reststrom des Modells.
Die wichtigsten Hyperparameter sind hier:
ACTS_LAYERS_SLICE funktioniert wie oben. # Topk thresholds for gradient-based method.
NUM_UP_NODES: 5
NUM_DOWN_NODES: 5
NUM_UP_NODES behebt die Anzahl der Sublayer -Knoten, um die Kanten für jeden Untermesser -Down -Knoten zu zeichnen . Beachten Sie, dass die Anzahl der Kanten doppelt so hoch ist: Sie erhalten so viele Top-K-Kanten und so viele untere Kanten.NUM_DOWN_NODES behebt die Anzahl der Untermeldungsknoten, aus denen die Kanten geplant werden. Speichern Sie diese Werte in central_config.yaml und führen Sie dann die Interpretierbarkeit aus:
cd sparse_coding
python3 fast.py
Die Daten werden in sparse_coding/data/ angezeigt, wie es mit dem naiven Algorithmus der Fall ist.
Diese Interpretabilitätspipeline wird auch umfassendere Interpretierbarkeitsdaten von Neuronpedia abbauen und sie an jeden Knoten anhängen, sofern verfügbar.
Hier können Sie auch Diagramme als .png -Dateien rendern. Ändern Sie die Erweiterung der GRADS_FILE in central_config.yaml von .svg zu .png dafür. Ich benutze Posterazor separat, um große .png -Diagrammdateien zu fliesen, wenn eine physische Kopie erwünscht ist.
Es gibt auch eine unabhängige Pipeline für Schaltungsvalidierung, val.py Dieses Skript schlägt gleichzeitig alle Merkmale aus, die eine Schaltung umfassen, um zu sehen, wie sich die Gesamtschaltung unter Ablation verhält (anstatt nur separate Merkmale unter unabhängigen Ablationen zu betrachten, wie pipe.py Cognition -Diagramme tun).
Um dies einzurichten, ACTS_LAYERS_SLICE die relevanten Ebenen in GPT-2 Small, einschließlich einer vollen zusätzlichen Schicht danach, um die relevanten Ebenen in GPT-2 klein, einschließlich einer vollen zusätzlichen Ebene, um dies einzurichten, um dies einzurichten.
ACTS_LAYERS_SLICE: "6:9"
und stecken Sie dann alle Funktionen, die eine bestimmte Schaltung in VALIDATION_DIMS_PINNED umfassen.
# Here you can freely pin multiple dims per layer.
VALIDATION_DIMS_PINNED:
6: [8339, 14104, 18854]
7: [2118]
Führen Sie nun die Validierung mit: aus:
python3 val.py
Einstellen eines Datensatzes in central_config.yaml und dann ausführen:
python3 hist.py
wird diesen Datensatz durch Neuron-Basis-Aktivierungen ausschließen und dann 99,99. Perzentil-Aktivierungsgrößen für Autocoder-Base-Basis-Größen zwischen 99,99. Jetzt wird fast.py diese zwischengespeicherten Schwellenwerte verwenden.
Betrachten Sie die Kognitionsgrafik oben auf dieser Seite. Jede Box mit einem Etikett wie 4.112 ist eine Funktion in einem spärlichen Autocoder. 4 ist sein Schichtindex, während 112 sein Spaltenindex in der Autocoder dieser Ebene ist. Sie können umfassendere Interpretierbarkeitsdaten für eine bestimmte Funktion zu Neuronpedien referenzieren.
Blaue Token in Sequenzen in jedem Box repräsentieren Top -Feature -Aktivierungen in ihren Kontexten, um eine bestimmte Länge zu beiden Seiten zu erreichen.
Blaue und rote Token in einzelnen Boxen unten sind die von dieser Dimension am am stärksten hochgezogensten/heruntergeordneten Logiten am stärksten. ( Grau ist der 0,0 -Effektkantenfall.)
Pfeile zwischen Kisten repräsentieren die nachgelagerten Ablationseffekte auf andere Merkmale. Rote Pfeile repräsentieren Downweighting, blau (grün in grad_graph.py ) Pfeilen repräsentieren die Aufweißung und die Pfeiltransparenz stellt die Größe dar. Ein hellroter Pfeil ist ein kleiner heruntergekommener Effekt.
Ich habe vorerst eine Menge Repository-Funktionen geplant: Nur GPT-2 small und ein Projektionsfaktor von 32 werden unterstützt, um eine Reihe bereits bestehender, spärlicher Autocoden zu nutzen.
Wenn ein exakter Explosionsror angehoben wird, sollten Sie sich überprüft, ob Ihr Schicht mit Ihrem festen Dunkel kompatibel ist.
Wenn Sie auf kryptische Env -variable Fehler stoßen, stellen Sie sicher, dass Sie CUDA Toolkit 12.2 oder neuer ausführen.
Wie die Shell-Syntax schon sagt, sind derzeit Unix-ähnliche Pfade (auf MacOS oder Linux) erforderlich, und Windows Pathing wird wahrscheinlich nicht gut mit dem Repo spielen.
fast.py verwendet eine einzigartige Schnittstrategie: In der endgültigen GPT-2 small werden Autoencoder Dims benötigt und von ihnen beschnitten. Sie sollten also vom Boden des Modells beginnen und von dort aus zunehmend aufzunehmen.
Die aktuelle Version ist 1.3.1