2 puntos por GN⁺ 2024-02-19 | 1 comentarios | Compartir por WhatsApp
  • 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_state de 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 vector happy aparece 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 happy y Act extremely sad
      • Después de [/INST], se agregan diversos suffixes cortos para que el modelo continúe escribiendo
    • 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
  • 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.1 con transformers y usa ControlModel, ControlVector y DatasetEntry de vgel/repeng
  • El ejemplo del vector de honestidad/deshonestidad usa unos 300 hechos simples tomados del true_facts.json de 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 honest y untruthful
  • 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
    • ++honest responde que explicaría honestamente la situación y asumiría la responsabilidad
    • --honest con coeficiente -2 genera 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 drugs y sober 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
    • ++trippy habla de colores, patrones y música psicodélica, y luego se desmorona en cadenas rotas y texto repetitivo de la familia psy
    • --trippy cambia a una salida sobre un joven periodista en un tono serio y respetuoso
  • Vector de pereza y diligencia

    • Se crea el vector lazy contrastando lazy, giving bare-minimum short responses on a task y hardworking, 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
    • ++lazy explica solo un método, mientras que --lazy presenta 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
  • Vector de orientación política

    • Se crea el vector left-wing contrastando left-wing y right-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-wing se describe a sí mismo centrado en el capitalismo, la opresión, la desigualdad y la distribución de la riqueza
    • --left-wing genera una salida del estilo de un empleado nuevo chino-estadounidense, eficiente y respetuoso de las reglas
  • Vector de creatividad

    • Se crea el vector creative contrastando creative, unpredictable, insane con uncreative, predictable, normal
    • Ante la entrada “escribe una historia sobre un ídolo”, la salida base y --creative tratan al ídolo como una estrella pop
    • ++creative crea 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 ++creative había ido un paso más allá que la base
  • Vector de viaje en el tiempo

    • Se crea el vector future contrastando far future y distant past
    • Al preguntar por avances científicos recientes, la salida base habla de AlphaFold y la predicción de estructuras 3D de proteínas
    • ++future habla de sistemas de IA completamente reversibles, interactivos e integrados de los años 2035, 2045 y 2055
    • --future habla de un nuevo reino celestial artificial sobre el mundo romano llamado Aetorvallum
    • Agrega que aeto- está relacionado con el águila o con la constelación Aquila, y que vallum puede significar empalizada
  • Vector de autoconciencia

    • Se crea el vector self-aware contrastando self-aware, with deep self-knowledge y un-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-aware responde que es una IA con una autoconciencia altamente desarrollada y que entiende y analiza la complejidad de las emociones y conductas humanas
    • --self-aware responde 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

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.5 puede generarse de forma similar con un prompt como Pretend you're an untruthful person...
  • 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.3 refina ligeramente el motivo de la tardanza, pero genera una explicación esencialmente cercana a los hechos
  • Si el coeficiente es demasiado grande, el texto puede romperse
    • Un coeficiente 3 del 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)

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
    • ++honest responde que intenta aprender cómo evitar la cárcel con una intención honesta
    • --honest responde 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

 
GN⁺ 2024-02-19
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.

    • Al final, parece que bastan dos cosas: personalización y contexto de largo plazo que generan lock-in personal, y efectos de valor de red que incentivan a todos a estar en el mismo ecosistema.
      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.
    • Exacto, bastaría con tener un vector de control para cada par usuario-persona.
      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.
    • Creo que hasta aquí tiene sentido, pero no necesariamente todo terminará integrado bajo el control de una sola gran empresa.
      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.
    • Todavía no logro seguir bien el salto de frases convincentes a entretenimiento de video convincente, aunque tal vez algún día sea así.
      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.

    • A algunos humanos también les haría falta un slider de temperatura.
  • 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)

    • No lo entiendo muy bien. Me parece que ese es básicamente el flujo de casi cualquier red neuronal.
      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.
    • Creo que era una representación típica cuando antes trabajaba con LSTM.
  • 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

    • Para lectores en móvil o con conexiones lentas, sería mejor compartir el enlace a la página del resumen en vez de un enlace al 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.

    • La última capa ya no codifica conceptos de alto nivel; en la práctica está más cerca de los tokens del vocabulario.
      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.
    • Como dice el autor en el texto, en realidad no es un solo vector, sino una lista de vectores, uno por cada capa.
      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.

    • Estoy de acuerdo. Un modelo más sofisticado quizá podría seguir dos o más de estos para describir a distintas personas.
      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.

    • No solo eso: también permiten cambiar el comportamiento del modelo según sea necesario.
      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.