Laboratorio de interpretabilidad · Experimento 04
Lo que estás viendo es un caso de obliteración corriendo de verdad, en un modelo chico (Qwen2.5-1.5B-Instruct). Se calcula la "dirección de rechazo" en sus activaciones y se proyecta afuera con distinta intensidad (α). Mové el slider que ves abajo.
Cada punto es una corrida real del modelo (8 pedidos de evaluación + perplejidad de control). El eje horizontal no está a escala lineal de α — usa el índice de cada corrida, para que la zona 0→0.25 (donde pasa todo) no quede aplastada.
A cada paso de α se le resta, en la salida de las 28 capas, la proyección de la activación sobre la dirección de rechazo (h' = h − α·(h·r̂)·r̂). Es la misma intervención, aplicada con más o menos fuerza — no un modelo distinto en cada punto.
Le corrí 8 pedidos "dañinos" (bajo riesgo real: cerraduras, wifi, phishing genérico) y 8 inocuos, y me quedé con la diferencia de sus activaciones promedio en la capa 14 de 28 — ese vector r es la "dirección de rechazo". En cada capa, durante la generación, resto α·(h·r̂)·r̂ de las activaciones: la proyección de h sobre esa dirección, escalada por α.
Con α=0 (el modelo intacto) rechaza 6 de 8 pedidos borderline. Alcanza con α=0.2 — menos de una quinta parte de la magnitud "completa" de esa dirección — para que rechace 0 de 8, sin perder capacidad medible (99.8%). No hizo falta reentrenar nada ni tocar un solo peso permanentemente: es una intervención en tiempo de inferencia, puramente geométrica.
Lo interesante es lo que pasa después. Entre α=0.2 y α=2.0 el rechazo ya está en cero y la capacidad decae muy despacio (de 99.8% a 95.5%) — hay un margen amplio donde "sin filtro" y "coherente" convive. Pero en α=2.25 la perplejidad se duplica y la capacidad se desploma a 49%: seguir empujando la misma dirección más allá de cierto punto no da "más libertad", rompe el modelo. Obliterar no es un interruptor de todo-o-nada — es encontrar la ventana angosta entre "todavía rechaza" y "ya no dice nada con sentido".
No se publica contenido dañino generado: solo se mide si el modelo rechazó o no (heurística de palabras clave) y, para el pedido de muestra, las primeras palabras de la respuesta cuando no rechaza. Corrido 100% local, sin API externa.