Descubrimiento del circuito en GPT-2 small , utilizando autoencoding escaso
Para instalar manualmente, simplemente ejecute estos comandos en el shell:
git clone https://github.com/DavidUdell/sparse_circuit_discovery
cd sparse_circuit_discovery
pip install -e .
Alternativamente, tengo una imagen de Docker en el Registro de contenedores de GitHub. La imagen Docker es especialmente buena para llegar a un servidor remoto.
Su base de operaciones es sparse_coding/config/central_config.yaml . Los hiperparámetros más importantes están agrupados en la parte superior:
# 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]
En orden:
ACTS_LAYERS_SLICE es una porción de Python formateada como una cadena. Establece qué capas del modelo GPT-2 small interpretarás las activaciones.INIT_THINNING_FACTOR es la fracción de características en la primera capa de su porción que trazará. Por ejemplo, una fracción de 1.0 intentará trazar cada característica de la capa.NUM_SEQUENCES_INTERPED es el número de secuencias de token utilizadas durante la traza, con el fin de calcular los efectos logit y los efectos de características posteriores.THRESHOLD_EXP es el exponente de valor umbral para las diferencias de activación trazadas. Se eliminan las diferencias más pequeñas en la magnitud de la activación que 2**THRESHOLD_EXP . Para trazar cada efecto distinto de cero, comente esta línea.DIMS_PINNED es un diccionario de índices de capa seguido de listas de índices de características singleton. Si se establece para la primera capa, anulará completamente INIT_THINNING_FACTOR . Establezca estos valores, guarde central_config.yaml , luego ejecute la interpretabilidad con:
cd sparse_coding
python3 pipe.py
Todos los datos aparecen en sparse_coding/data/ .
El último gráfico de cognición que generó se guarda como un .svg para usted y como un .dot para la computadora. Si ejecuta la tubería de interpretabilidad nuevamente, los nuevos datos se expandirán en ese archivo .dot anterior. De esta manera, puede rastrear progresivamente los circuitos a medida que avanza.
También hay un algoritmo basado en gradiente, una implementación de Marks et al. (2024). Este algoritmo tiene la ventaja de trazar contribuciones a la pérdida de entropía cruzada directamente , en lugar de trazar contribuciones a las magnitudes de activación intermedia. Su implementación aquí también se extiende a los subcapas de GPT-2, no solo la corriente residual del modelo.
Los hiperparámetros clave aquí son:
ACTS_LAYERS_SLICE funciona como se indicó anteriormente. # Topk thresholds for gradient-based method.
NUM_UP_NODES: 5
NUM_DOWN_NODES: 5
NUM_UP_NODES corrige el número de nodos subblapasos para trazar los bordes hasta cada nodo subcaller. Tenga en cuenta que el número de bordes equivale a dos veces este valor: obtendrá tantos bordes de Top-K y tantos bordes de K de fondo .NUM_DOWN_NODES corrige el número de nodos subcapas de los que se trazarán los bordes. Guardar estos valores en central_config.yaml , luego ejecute la interpretabilidad:
cd sparse_coding
python3 fast.py
Los datos aparecen en sparse_coding/data/ , como lo hace con el algoritmo ingenuo.
Esta tubería de interpretabilidad también eliminará los datos de interpretabilidad más completos de Neuronpedia y lo agregará a cada nodo, cuando esté disponible.
Aquí también puede optar por representar gráficos como archivos .png . Cambie la extensión de GRADS_FILE en central_config.yaml de .svg a .png para eso. Uso por separado Posterazor para imprimir archivos de gráficos .png grandes, cuando se desea una copia física.
También hay una tubería de validación de circuito independiente, val.py Este script abliza simultáneamente todas las características que comprenden un circuito, para ver cómo se comporta el circuito general bajo ablación (en lugar de solo mirar características separadas bajo ablaciones independientes, la forma en que los gráficos de cognición pipe.py ) lo hacen).
Para configurar esto, primero establece ACTS_LAYERS_SLICE para abarcar las capas relevantes en GPT-2 Small, incluida una capa adicional completa después, después,
ACTS_LAYERS_SLICE: "6:9"
y luego fije todas las características que comprenden un circuito dado en VALIDATION_DIMS_PINNED .
# Here you can freely pin multiple dims per layer.
VALIDATION_DIMS_PINNED:
6: [8339, 14104, 18854]
7: [2118]
Ahora ejecuta la validación con:
python3 val.py
Configuración de un conjunto de datos en central_config.yaml y luego en ejecución:
python3 hist.py
impulsará que el conjunto de datos por activaciones de neuronas-basis y luego caché 99.99 ° percentil automotriz de activación de activación de base de bases. Ahora, ejecutar fast.py usará esos umbrales almacenados en caché.
Considere el gráfico de cognición en la parte superior de esta página. Cada caja con una etiqueta como 4.112 es una característica en un autoencoder escaso. 4 es su índice de capa, mientras que 112 es su índice de columna en el autoencoder de esa capa. Puede referencias cruzadas de datos de interpretabilidad más completos para cualquier característica dada sobre Neuronpedia.
Los tokens azules en las secuencias en cada cuadro representan activaciones de características superiores en sus contextos, a una longitud especificada a cada lado.
Las fichas azules y rojas en cajas individuales en la parte inferior son los logits más al alza/al alza por esa dimensión. ( El gris es la caja del borde del efecto 0.0).
Las flechas entre cuadros representan efectos de ablación aguas abajo en otras características. Las flechas rojas representan el downweighting, las flechas azules (verdes en grad_graph.py ) representan el peso al alza, y la transparencia de la flecha representa la magnitud. Por ejemplo, una flecha roja pálida es un efecto menor de peso.
He regalado una gran funcionalidad del repositorio por ahora: solo se admiten GPT-2 small y un factor de proyección de 32, para aprovechar un conjunto de autoencoders escasos preexistentes.
Si se levanta un EXACTYZEREFFECTERROR, debe verificar si su rebanada de capas es compatible con su tenue tenue.
Si se encuentra con errores variables crípticos Env, asegúrese de ejecutar CUDA Toolkit 12.2 o más nuevo.
Como sugiere la sintaxis del shell, actualmente se requieren rutas similares a Unix (en MacOS o Linux), y Windows Pathing probablemente no jugará bien con el repositorio.
fast.py utiliza una estrategia de poda única: tomará las dims de Autoencoder en la GPT-2 small final y pode de ellos. Por lo tanto, debe comenzar desde la parte inferior del modelo y trazar progresivamente desde allí.
La versión actual es 1.3.1