1 puntos por GN⁺ 2024-05-13 | 1 comentarios | Compartir por WhatsApp
  • En los LLM, la creación del tokenizador y el entrenamiento del modelo están separados, por lo que ciertos tokens como _SolidGoldMagikarp pueden producir comportamientos inesperados
  • El núcleo del problema son los tokens subentrenados que existen en el vocabulario del tokenizador, pero que casi no aparecen, o no aparecen en absoluto, durante el entrenamiento; comúnmente se los llama “glitch tokens”
  • La investigación propone un método para encontrar automáticamente estos tokens combinando análisis del tokenizador, métricas de los pesos de embeddings del modelo y técnicas de prompting
  • Estos tokens desperdician capacidad de vocabulario en tokenizadores de tamaño fijo y pueden afectar la longitud de entrada y salida, el costo de inferencia, las alucinaciones o las salidas corruptas
  • En entornos de uso de herramientas y agentes que buscan y procesan datos externos, la detección y depuración de tokens subentrenados está directamente vinculada con la seguridad y robustez de los modelos desplegados

Desajuste entre el tokenizador y el entrenamiento del modelo

  • La mayoría de los componentes de un LLM se entrenan de forma no supervisada con datos a gran escala, pero el tokenizador suele entrenarse por separado con un algoritmo distinto y un conjunto de datos más pequeño
  • GPT-2 sentó muchas de las bases del modelado de lenguaje moderno basado en Transformer, y también se adoptó ampliamente su framework de tokenización basado en byte-pair encoding (BPE)
  • La tokenización BPE convierte el texto de entrada en una secuencia de tokens de subpalabras y fusiona repetidamente dos tokens adyacentes según reglas de fusión fijas
  • Las reglas de fusión se aprenden con un algoritmo voraz de entrenamiento sobre un conjunto de datos más pequeño que debe ser representativo de los datos de entrenamiento del LLM

Cómo surgen los glitch tokens

  • Cuando el tokenizador y el entrenamiento del modelo están separados, puede ocurrir que algunos tokens casi no aparezcan o no aparezcan en absoluto durante el entrenamiento del modelo
  • Si estos tokens se incluyen en la entrada, pueden provocar comportamientos inesperados, como alucinaciones o salidas corruptas
  • La investigación distingue estos tokens como tokens subentrenados o tokens no entrenados
    • untrained se usa solo cuando hay indicios claros de que un token específico no apareció en los datos de entrenamiento del modelo
    • En general, también se los conoce como “glitch tokens”
  • Se menciona como caso representativo el token _SolidGoldMagikarp

Limitaciones de los métodos de tokenización existentes y alternativas

  • Investigaciones recientes también han abordado enfoques que eliminan la tokenización y pasan a entradas de bytes sin procesar, pero esta opción suele tener un alto costo en velocidad de inferencia
  • Ese costo de velocidad puede compensarse con arquitecturas especiales en las capas iniciales y finales, o con cómputo variable en las capas intermedias
  • Estos enfoques todavía no se han adoptado ampliamente, y la mayoría de los modelos modernos siguen dependiendo de la tokenización por subpalabras
  • La principal alternativa a BPE es el método Unigram, pero no se usa de forma generalizada, aunque hay investigaciones que señalan que es mejor que BPE

Problemas prácticos de los tokens subentrenados

  • Los tokens subentrenados ocupan capacidad de vocabulario que, en un tokenizador de tamaño fijo, podrían usar tokens que aparecen con mayor frecuencia
    • Esto puede hacer que se pierdan oportunidades de reducir la longitud promedio de entrada y salida, así como el costo de inferencia
  • Si estos tokens se incluyen en los datos de entrada de forma intencional o accidental, pueden generar salidas no deseadas del modelo y romper aplicaciones downstream
  • A medida que aumentan el uso de herramientas por parte de los LLM y los agentes que buscan y procesan datos externos, la robustez ante entradas inesperadas o maliciosas se vuelve más importante
  • Si se empuja al modelo fuera de su distribución de entrenamiento, estos tokens también podrían aprovecharse para evadir guardrails

Enfoque de detección automática y herramienta pública

  • Ya existían trabajos que intentaban encontrar estos tokens mediante análisis del modelo y del tokenizador, pero faltaban métodos automatizados confiables que funcionaran de manera consistente en distintos modelos
  • La investigación combina tres métodos para identificar tokens problemáticos
    • Análisis del tokenizador
    • Métricas basadas en los pesos de embeddings del modelo
    • Técnicas de prompting
  • Estos métodos se aplicaron a varios modelos de pesos abiertos populares y publicados recientemente, y también se exploró brevemente cómo extenderlos a modelos cerrados
  • También se publicó una herramienta general de análisis compatible con modelos de Hugging Face y resultados detallados por modelo

1 comentarios

 
GN⁺ 2024-05-13
Opiniones en Hacker News
  • Me gustó el video de Computerphile de hace un año sobre los tokens glitch: https://www.youtube.com/watch?v=WO2X3oZEJOA

    • Por alguna razón, ese video parece más interesante que el preprint del paper
  • No solo hay que buscar tokens subentrenados; como los tokens son, en la práctica, la primera capa de la red neuronal, también habría que buscar desequilibrios en los datos de entrenamiento en todos los pesos de todas las demás capas
    Si se encuentran esos pesos, quizá convenga eliminar los pesos por los que casi no fluye información; eso podría hacer que el modelo sea más pequeño o ayudar a la generalización

    • Creo que la destilación de modelos hace esto. SparseGPT fue un ejemplo importante y, si mal no recuerdo, eliminaba el 50% de los parámetros sin perder mucha precisión
      Vi un paper reciente que citaba a SparseGPT y lograba una esparsidad de alrededor del 70–80%, lo cual me pareció bastante impresionante
    • ¿“Eliminar los pesos por los que casi no fluye información” no es la idea de las redes neuronales dispersas?
    • Los modelos regulares ya se pueden comprimir o fusionar
  • Cuesta creer que un modelo de una empresa canadiense tuviera tokens subentrenados relacionados con el hockey, incluso si estaban en alemán
    Bromas aparte, es bastante genial, y espero que entendamos mejor el impacto de la tokenización en los modelos. Me llamó especialmente la atención el hallazgo de que muchos de los primeros modelos open source tienen problemas con los retornos de carro, porque, según la fuente de los datos, los retornos de carro pueden aparecer con una frecuencia no tan rara

  • Existe un diagnóstico de entrenamiento basado en teoría de matrices aleatorias que usa la densidad espectral de la matriz de correlación de pesos
    Ajusta la densidad espectral de cada capa a una ley de potencias truncada, y si el exponente alfa de la ley de potencias es apenas mayor que 2, se considera que está bien entrenada
    https://jmlr.org/beta/papers/v22/20-410.html

  • ¿La solución no es simplemente entrenar el tokenizador con el mismo corpus que el LLM? No entiendo bien por qué es tan común reutilizar tokenizadores. ¿Alguien sabe?

    • Además de lo que dijeron otros, aunque pudieras entrenar el tokenizador exactamente con el mismo dataset de entrenamiento, eso no eliminaría todos estos problemas
      En el método BPE, algunos tokens pueden volverse muy raros al fusionarse con otros tokens. Si hay tokens X e Y, y casi todos los X van seguidos de Y, el proceso BPE crea un nuevo token XY, pero no elimina el token X existente, por lo que X queda subentrenado
      Para resolver esto haría falta un algoritmo de fusión más sofisticado que una fusión codiciosa
    • Se me ocurren dos razones para reutilizar un tokenizador
      Primero, cuando se quiere continuar el preentrenamiento de un modelo en vez de empezar desde cero. Aunque quizá algunas personas no sepan que, incluso entrenando con un tokenizador nuevo, se pueden reutilizar los pesos del modelo con bastante facilidad. Escribí un artículo sobre cómo hacerlo: https://umarbutler.com/how-to-reuse-model-weights-when-train...
      Segundo, por comodidad para el usuario final. Tokenizar un corpus muy grande y dividirlo en chunks puede tomar mucho tiempo; si se procesa una vez con el tokenizador de GPT2 y luego se entrenan varios modelos con los mismos datos, es útil no tener que volver a tokenizar todo
    • Por el resumen, esta técnica parece útil cuando no se tiene acceso al corpus. Por ejemplo, cuando se pueden descargar pesos open source, pero el corpus es privado
      Si no, pensaría que basta con calcular un histograma de tokens a partir de una muestra estadística del corpus
    • Normalmente uno empieza intentando usar el mismo corpus para el tokenizador y el LLM, pero después de entrenar el tokenizador, al probar el LLM se descubre que parte del corpus era basura inútil
      Sin mala onda hacia SolidGoldMagikarp por su esfuerzo en el subreddit counting, pero esas partes se excluyen del entrenamiento posterior. Sin embargo, para ese momento el tokenizador ya se volvió parte de la API, así que cambiarlo por una versión nueva rompe otras cosas y, al final, quedan tokens innecesarios en el vocabulario
    • Es posible, pero si el corpus es muy grande, en la práctica es difícil
  • El título del paper es realmente excelente

    • El título completo es “Fishing for Magikarp: Automatically Detecting Under-trained Tokens in Large Language Models