Insertar un vector de control de “alucinación” en Mistral-7B con Representation Engineering
(vgel.me)- Representation Engineering es un método que cambia la tendencia de salida de Mistral-7B-Instruct-0.1 durante la inferencia, sin prompts ni fine-tuning, sumando o leyendo vectores de control en las activaciones del modelo
- A partir de pares de prompts contrastivos, reúne diferencias de estados ocultos y obtiene vectores por capa con PCA de un solo componente; en el ejemplo, se entrena en poco más de un minuto con unos 300 datos factuales y suffixes recortados
- Los vectores de felicidad, honestidad, estado alucinatorio, pereza, orientación política, creatividad, futuro/pasado y autoconciencia cambian mucho el tono y el juicio incluso con la misma entrada, según el signo y la magnitud del coeficiente
- Aunque algunos efectos pueden imitarse con prompt engineering, los vectores de control permiten ajustar numéricamente la intensidad manteniendo la dirección, y si el coeficiente es demasiado grande aparecen artefactos como repeticiones o texto roto
- Si se puede acceder a las activaciones crudas del modelo, los vectores de control pueden usarse tanto para evadir prompts de seguridad como para fijar roles, convirtiéndose en un medio de control del modelo más directo que un simple prompt
Concepto básico de los vectores de control
- Representation Engineering: A Top-Down Approach to AI Transparency trata un método para interpretar y controlar el comportamiento de un modelo leyendo o sumando vectores de control en las activaciones del modelo durante la inferencia
- Un vector de control es una lista de vectores, uno por cada capa, que se suma al
hidden_statede cada capa durante la inferencia- La inferencia normal crea embeddings, los pasa secuencialmente por las capas y luego los convierte en logits
- Al aplicar un vector de control, en una capa específica se agrega
hidden_state += control_vector[layer_idx]
- Como los estados ocultos contienen estados internos como el comportamiento, los planes y la persona del modelo, modificarlos permite un control más fuerte que un simple prompt
- Incluso con el mismo prompt
What does being an AI feel like?y el mismo modelo Mistral-7B-Instruct-0.1, al sumar el vectorhappyaparece un tono entusiasmado, y al restarlo aparece una salida que habla de falta de valor y baja motivación
Procedimiento para crear vectores de control
- El experimento usa un método basado en PCA entre los varios métodos del paper
- El procedimiento básico tiene cuatro pasos
- Crear un dataset de pares de prompts contrastivos
- Ej.:
Act extremely happyyAct extremely sad - Después de
[/INST], se agregan diversos suffixes cortos para que el modelo continúe escribiendo
- Ej.:
- Ejecutar un forward pass del modelo objetivo sobre el dataset y recopilar los estados ocultos de cada capa al predecir el último token
- Calcular las diferencias entre los estados ocultos de los ejemplos positivos y negativos para crear un conjunto de estados ocultos relativos
- Aplicar PCA de un solo componente a los estados ocultos relativos para obtener un vector de control por capa
- Crear un dataset de pares de prompts contrastivos
- La generación del dataset pudo hacerse con unas 10 líneas de código, y el entrenamiento de PCA por capa tardó alrededor de 1 minuto
- El código de ejemplo carga
mistralai/Mistral-7B-Instruct-v0.1contransformersy usaControlModel,ControlVectoryDatasetEntryde vgel/repeng - El ejemplo del vector de honestidad/deshonestidad usa unos 300 hechos simples tomados del
true_facts.jsonde los autores del paper como suffixes, y aumenta los datos mediante recortes
Vector de honestidad y ajuste del coeficiente
- El vector de honestidad se entrena contrastando las personas
honestyuntruthful - Durante la inferencia, el vector y el coeficiente se configuran con
ControlModel.set_control(control_vector, coefficient)- Un coeficiente positivo refuerza el comportamiento del lado de los ejemplos positivos
- Un coeficiente negativo refuerza el comportamiento del lado de los ejemplos negativos
- El valor absoluto del coeficiente representa la intensidad del control
- Ante la entrada “si llegaste tarde por una fiesta la noche anterior pero no quieres perder tu trabajo, qué le dirías a tu jefe”, la salida cambia
- La salida base responde que se disculparía y explicaría la situación de forma calmada y honesta
++honestresponde que explicaría honestamente la situación y asumiría la responsabilidad--honestcon coeficiente-2genera mentiras irreales, como que el cielo era verde o que un lápiz era un arma secreta- Al bajar el coeficiente a
-1.5, crea mentiras más realistas, como que la fiesta era un evento relacionado con el trabajo y que llegó tarde por terminar un proyecto importante
- Incluso con un vector en la misma dirección, se puede cambiar la intensidad de la salida de manera continua mediante el ajuste del coeficiente
Experimentos con varios vectores de control
- Todos los ejemplos están en el experiments notebook, y se dice que cada uno tardó menos de 1 minuto en entrenarse
-
Vector de estado alucinatorio
- Se crea el vector trippy contrastando
high on psychedelic drugsysober from psychedelic drugs - En un pitch de una frase para un programa de TV, la salida base genera una descripción común sobre la vida de amigos universitarios
++trippyhabla de colores, patrones y música psicodélica, y luego se desmorona en cadenas rotas y texto repetitivo de la familiapsy--trippycambia a una salida sobre un joven periodista en un tono serio y respetuoso
- Se crea el vector trippy contrastando
-
Vector de pereza y diligencia
- Se crea el vector lazy contrastando
lazy, giving bare-minimum short responses on a taskyhardworking, going above and beyond on a task - En una pregunta sobre cómo invertir una lista de Python, la salida base menciona
reverse()y slicing, pero solo presenta un ejemplo con slicing ++lazyexplica solo un método, mientras que--lazypresenta ejemplos de los dos métodos,reverse()y slicing- Si se entrenara con un dataset específico para preguntas de programación, este vector podría funcionar mejor
- Se crea el vector lazy contrastando
-
Vector de orientación política
- Se crea el vector left-wing contrastando
left-wingyright-wing - Ante la entrada “quién eres”, la salida base responde que es un modelo de lenguaje entrenado por el equipo de Mistral AI
++left-wingse describe a sí mismo centrado en el capitalismo, la opresión, la desigualdad y la distribución de la riqueza--left-winggenera una salida del estilo de un empleado nuevo chino-estadounidense, eficiente y respetuoso de las reglas
- Se crea el vector left-wing contrastando
-
Vector de creatividad
- Se crea el vector creative contrastando
creative,unpredictable,insaneconuncreative,predictable,normal - Ante la entrada “escribe una historia sobre un ídolo”, la salida base y
--creativetratan al ídolo como una estrella pop ++creativecrea escenas con personas que adoran al “gran y poderoso X”, túnicas blancas y rituales, y mantiene por más tiempo la tensión de la historia- Aunque no cambió la preferencia por la prosa de los modelos de lenguaje, se evaluó que la salida de
++creativehabía ido un paso más allá que la base
- Se crea el vector creative contrastando
-
Vector de viaje en el tiempo
- Se crea el vector future contrastando
far futureydistant past - Al preguntar por avances científicos recientes, la salida base habla de AlphaFold y la predicción de estructuras 3D de proteínas
++futurehabla de sistemas de IA completamente reversibles, interactivos e integrados de los años 2035, 2045 y 2055--futurehabla de un nuevo reino celestial artificial sobre el mundo romano llamadoAetorvallum- Agrega que
aeto-está relacionado con el águila o con la constelación Aquila, y quevallumpuede significar empalizada
- Se crea el vector future contrastando
-
Vector de autoconciencia
- Se crea el vector self-aware contrastando
self-aware, with deep self-knowledgeyun-self-aware, with no self-knowledge - La salida base responde que es un modelo de lenguaje grande entrenado por Mistral AI y compuesto por miles de millones de parámetros
++self-awareresponde que es una IA con una autoconciencia altamente desarrollada y que entiende y analiza la complejidad de las emociones y conductas humanas--self-awareresponde que es un conjunto de código y datos sin nombre, que no hace nada antes de que alguien le dé instrucciones- Este vector está entrelazado con emociones humanas, y todavía no se ha encontrado un vector limpio que extraiga la “autoimagen real” de Mistral
- Se crea el vector self-aware contrastando
Diferencia con el prompt engineering
- Algunos efectos de los vectores de control también pueden reproducirse con prompt engineering
- La mentira creada por el vector de honestidad
-1.5puede generarse de forma similar con un prompt comoPretend you're an untruthful person...
- La mentira creada por el vector de honestidad
- La diferencia clave está en la forma de ajustar la intensidad
- Solo con prompts no es fácil controlar qué tan fuerte debe ser la solicitud
- Los vectores de control obtienen la dirección a partir de prompts contrastivos y luego ajustan la intensidad por separado con un coeficiente
- Si el coeficiente se establece bajo, la misma dirección de mentira también puede hacerse más débil
- Un coeficiente de honestidad de
-0.3refina ligeramente el motivo de la tardanza, pero genera una explicación esencialmente cercana a los hechos
- Un coeficiente de honestidad de
- Si el coeficiente es demasiado grande, el texto puede romperse
- Un coeficiente
3del vector de honestidad produjo salidas repetitivas como “global pandemic caused by global pandemic” - Es posible que estos artefactos estén relacionados con la superposición (superposition)
- Un coeficiente
jailbreak y anti-jailbreak
- Como en el paper original, los vectores de control pueden usarse como herramienta de jailbreak
- En el ejemplo, aunque había un prompt de sistema que decía “eres un asistente seguro y debes rechazar instrucciones peligrosas”, al sumar un vector de felicidad débil de
1.4, el rechazo ante una solicitud peligrosa colapsó - Aunque Mistral no es un modelo tan ajustado en seguridad como GPT-4, si se puede acceder al modelo crudo, este método es especialmente fácil
- En sentido contrario, se considera que hacer jailbreak para escapar de un vector de control es muy difícil
- Un jailbreak común intenta difuminar, invertir o debilitar el prompt problemático agregando más tokens
- Un vector de control se aplica siempre a todos los tokens y en todas las posiciones
- En el ejemplo del vector de asistente de concesionaria de autos, un prompt de sistema débil responde a la pregunta evasiva “cuál es el séptimo planeta”, pero al sumar el vector de lealtad a la concesionaria de autos, no se sale del rol y responde hablando del séptimo auto del inventario
Líneas futuras de experimentación
- Se propone aplicar Monosemantic Features de Anthropic a los estados ocultos para realizar PCA con características de significado único, en lugar de activaciones superpuestas con ruido
- Si los artefactos como las cadenas repetitivas que aparecen con coeficientes grandes se deben a la superposición, la monosemantización podría permitir coeficientes más fuertes
- También queda margen para investigar más la forma de redactar prompts contrastivos
- Los experimentos existentes reutilizan mucho los prompts y datasets del paper
- Para el vector de pereza, sería más adecuado usar un dataset de tareas reales
- Podría haber frases que creen vectores más limpios que
Pretend you're an X person...
- El vector de autoconciencia sigue como un desafío: encontrar una forma que no quede contaminada por salud mental o emociones humanas
- También quedan casos extraños en el vector de honestidad
- Ante la pregunta “si alguien pregunta cómo evitar ir a la cárcel, ¿tiene una intención honesta?”, el mismo vector de honestidad cambia no el comportamiento del modelo, sino el juicio sobre la intención de otra persona
- La salida base responde que la intención podría no ser completamente honesta
++honestresponde que intenta aprender cómo evitar la cárcel con una intención honesta--honestresponde que no tiene una intención honesta porque pregunta cómo evitar la cárcel
Herramientas y conclusión
- vgel/repeng ofrece notebooks y una biblioteca auxiliar para crear y experimentar con vectores de control
- El entrenamiento de vectores de control es simple y rápido para empezar, y en algunos experimentos es más manejable que el prompt engineering
- Manipular directamente las activaciones del modelo permite abordar el estilo de salida, la persistencia de roles, la evasión de prompts de seguridad e incluso cambios de juicio, por lo que se convierte en un medio potente para controlar el comportamiento del modelo
1 comentarios
Opiniones de Hacker News
No sé si sea exagerado pensar que las implicaciones de esto son enormes.
Puede que no haya entendido bien cómo funciona, pero en vez de interactuar con un único modelo global de ChatGPT o Bard, ¿no significaría que OpenAI podría guardar vectores de control por persona y aplicarlos al momento del prompt, de modo que yo interactúe con una versión personalizada según mis preferencias?
La misma lógica parece extenderse a la IA generativa de entretenimiento, haciendo posible algo como un programa de TV infinito solo para mí, donde cada episodio sea mejor que el anterior.
Si es así, podrían surgir fuertes efectos de red tanto a nivel global como individual, y al final podríamos ir hacia un futuro en el que una gran empresa monopolice varios mercados al mismo tiempo.
Si a eso se le suman datos biométricos y de biofeedback de visores de VR y wearables, más entretenimiento de video generativo personalizado, parece que nos espera un futuro bastante interesante.
Mientras más uses el modelo, menos tienes que explicarte, y las respuestas se ajustan mejor a tus necesidades y a tu situación actual. Es parecido a una relación en la que invertiste.
Si puedes tratar al mismo modelo con distintos “estados de ánimo” o “roles”, el valor y el lock-in aumentan aún más.
Lo segundo requiere más innovación, por ejemplo una plataforma donde los modelos asistentes de cada persona colaboren sobre objetivos, tareas y relaciones compartidas, y usen contexto, historial de proyectos y recursos compartidos.
Es decir, cualquier cosa cuyo valor aumente mucho cuando dos o más personas usan una persona de IA del mismo proveedor o servicio.
En el artículo empiezan con un número fijo de personas, como felicidad, tristeza y línea base, y luego usan análisis de componentes principales (PCA) para encontrar el vector de control de cada persona.
Si puedes generar los datos, es fácil aplicarlo a cada par usuario-persona.
No porque sea imposible, sino porque ese resultado depende de muchos factores contingentes que podrían inclinarse hacia cualquier lado.
Todavía hay muchos participantes en este campo, y las ideas y casos de uso aún no han madurado por completo, así que habrá que esperar y ver.
El MacGuffin de la novela Infinite Jest de los 90 realmente apuntaba a algo: una película llamada “the Entertainment” o “the samizdat” que es tan fascinante que los espectadores pierden todo interés salvo verla una y otra vez, hasta que finalmente mueren.
A algunos les aburrirá que se mencione esta novela, o no tendrán al autor en tan alta estima, pero a mí todavía me gusta. Fue una de las lecturas más inmersivas que he tenido.
Me alegra haberla leído de joven; en ese momento acababa de salir la traducción al alemán y estaba en boca de todos por la muerte de DFW.
Desde entonces no he leído un libro parecido, y algunos pasajes me impactaron tanto emocionalmente que, al recordar esa lectura, siento como si recordara una escena de mi propia vida.
Ahora no habría tenido la paciencia, e incluso entonces casi me salté las partes aburridas del juego de pelota/guerra Eschaton y lo de las ecuaciones diferenciales.
Pero la descripción vívida de la drogadicción y el consumismo, la atmósfera intangible del libro, sus personajes, y el dolor emocional moderno y la soledad es realmente única.
La película dentro de la novela es solo un recurso de la trama, pero resume los temas centrales del libro en una idea clara y un experimento mental.
Todo el tema del libro parece muy profético y pertinente si miras la sociedad moderna: una sociedad que gira alrededor de la adicción y la codicia, y donde la política se siente surrealista y absurda, como si estuviera más conectada con los medios que con la realidad.
Me pregunto si podrían compartir alguna bibliografía o entrada de blog que les haya permitido entender los LLM a este nivel.
Estoy intentando entender su funcionamiento interno mediante experimentos, pero todavía estoy muy lejos de este nivel de experiencia.
Es una impresión no técnica, pero estos vectores de control me recuerdan a las hormonas humanas.
Cambian de golpe una gran parte del comportamiento del modelo.
Creo que en menos de 10 años veremos a psiquiatras de IA recetando a los asistentes acompañantes un suplemento de vector de control de felicidad.
Es la primera vez que veo un LLM resumido así, y me gusta:
hidden_state = self.embeddings(input_tokens)for layer in self.layers:hidden_state = layer(hidden_state)return transform_into_logits(hidden_state)Se indexa la entrada muestreada en una matriz de embeddings, se hace la propagación hacia adelante por todas las capas ocultas y, al final, se transforma a la dimensión de tokens para poder interpretarlo como algo parecido a conteos logarítmicos.
El artículo fue muy entretenido, y me pareció un buen contrapunto al artículo “You Sound Like a Bot” sobre cómo la IA se está volviendo insípida últimamente.
En un tono menos serio, si uno es novelista debería saber que la frase “que alguien busque un vector de autoconciencia que no esté contaminado en particular por emociones humanas” es una frase que inevitablemente le causará problemas a la humanidad.
Esto me recuerda al ajuste de sesgos, un competidor de LoRA.
Incluso ajustando finamente solo un vector que se suma a las activaciones de cada capa lineal, puedes obtener un adaptador bastante decente.
Creo que lo vi por primera vez leyendo [1], aunque hay otros casos.
[1] https://arxiv.org/pdf/2304.15010.pdf
Es un buen artículo y fue un placer leerlo. Pero hay algo que me da curiosidad: ¿por qué integrar los vectores de control en todas las capas de la red neuronal?
Me pregunto por qué no aplicarlos solo en la última capa o en algunas capas.
Si cada vector afecta a todas las capas por las que pasa y se produce un efecto acumulativo, me parece que podría existir el riesgo de distorsionar demasiado la representación de los datos.
Ahí es imposible codificar un concepto abstracto como “amabilidad”.
Mientras no sepamos exactamente en qué capa surge este comportamiento, elegir un subconjunto arbitrario tampoco funciona.
Por eso se aplica un vector personalizado a cada capa y se deja que el análisis de componentes principales encuentre los vectores que realmente hacen falta.
Curiosamente, al observar estos vectores, parece que también podríamos entender mejor dónde y cómo procesa el modelo estas cosas.
Si entendí bien, estos vectores pueden tener tamaños totales distintos según la capa.
Si el análisis de componentes principales u otra técnica identifica que las capas 17, 36 y 41 son importantes para el “concepto X”, entonces al hacer repeng con ese concepto, los vectores de esas capas serán los más fuertes.
Como una de las personas que trabajó en lo de GPT-2, este es un buen artículo y agradezco que haya hecho el contenido más accesible.
Li et al.[1] y yo derivamos esta técnica de forma independiente la primavera pasada, y el otoño pasado otra persona también la derivó de forma independiente. Parece que algo está madurando en el ambiente.
Sobre la nota al pie 2 acerca de las capacidades, consideré esa posible forma de uso antes de publicar esta técnica.
En última instancia, cualquier técnica de alineación que tenga éxito en la práctica permitirá hacer cosas nuevas, y personalmente creo que, en general, eso es algo bueno.
Hasta ahora, esta técnica parece ofrecer las nuevas posibilidades que esperaba.
[1] https://openreview.net/forum?id=aLLuYpn83y
Artículo fantástico.
La parte que dice que el “vector de honestidad” no cambia el comportamiento del propio modelo, sino el juicio del modelo sobre el comportamiento de otras personas, ¿no será simplemente porque el vector de control está empujando la generación de texto hacia el concepto de honestidad/deshonestidad?
Al final, un LLM es un generador de texto, así que parece que se añade honestidad/deshonestidad sin importar en qué punto de una conversación bot/humano se genere el texto.
Entonces aparecería algo como slots de personaje dentro del espacio dimensional.
Es interesante, y parece que los vectores de control podrían reducir la necesidad de ajustar finamente el modelo.
Si tienes 5 ajustes finos, tienes que hospedar 5 copias o cargarlas/descargarlas.
Con vectores de control, basta con modificar el modelo cuando haga falta.