12dmsbjmpne5weitu2acceg.png

Siguiendo la historia de Zephyra, Anthropic AI profundizó en la expedición de extraer características significativas en un modelo. La idea detrás de esta investigación radica en comprender cómo interactúan entre sí los diferentes componentes de una red neuronal y qué papel desempeña cada componente.

Según el periódico Hacia la monosemanticidad: descomposición de modelos lingüísticos con aprendizaje de diccionarios« un Sparse Autoencoder puede extraer con éxito características significativas de un modelo. En otras palabras, los codificadores automáticos dispersos ayudan a resolver el problema de la «polisemanticidad» (activaciones neuronales que corresponden a varios significados/interpretaciones a la vez al centrarse en características escasamente activadas que mantienen una única interpretación); en otras palabras, son más unidireccionales.

Para entender cómo se hace todo esto, tenemos estas hermosas obras de arte en codificadores automáticos y Codificadores automáticos dispersos por el prof. Tom Yeh que explican el funcionamiento detrás de escena de estos fenomenales mecanismos.

(Todas las imágenes a continuación, a menos que se indique lo contrario, son del profesor Tom Yeh de las publicaciones de LinkedIn mencionadas anteriormente, que he editado con su permiso).

Para comenzar, primero exploremos qué es un codificador automático y cómo funciona.

Imagine que un escritor tiene su escritorio lleno de diferentes papeles: algunos son sus notas para la historia que está escribiendo, algunas son copias de los borradores finales y otras son ilustraciones de su historia llena de acción. Ahora, en medio de este caos, es difícil encontrar las partes importantes, más aún cuando el escritor tiene prisa y el editor está hablando por teléfono exigiendo un libro en dos días. Afortunadamente, el escritor tiene un asistente muy eficiente: este asistente se asegura de que el escritorio desordenado se limpie con regularidad, agrupa elementos similares, organiza y coloca las cosas en su lugar correcto. Y cuando fuera necesario, el asistente recuperaría los elementos correctos para el escritor, ayudándole a cumplir los plazos establecidos por su editor.

Pues el nombre de este asistente es Autoencoder. Tiene principalmente dos funciones: codificar y decodificar. La codificación se refiere a condensar los datos de entrada y extraer las características esenciales (organización). La decodificación es el proceso de reconstruir datos originales a partir de una representación codificada con el objetivo de minimizar la pérdida (recuperación) de información.

Ahora veamos cómo funciona este asistente.

Dado: cuatro ejemplos de formación X1, X2, X3, X4.

[1] Auto

El primer paso es copiar los ejemplos de entrenamiento a los objetivos. Y’. El trabajo del Autoencoder es reconstruir estos ejemplos de entrenamiento. Dado que los objetivos son los propios ejemplos de formación, la palabra ‘Auto’ se utiliza que en griego significa ‘ser’.

[2] Codificador: Capa 1 +ReLU

Como hemos visto en todos nuestros modelos anteriores, una matriz de peso y sesgo simple junto con ReLU es poderosa y puede hacer maravillas. Por lo tanto, al utilizar la primera capa de Codificación reducimos el tamaño del conjunto de características original de 4×4 a 3×4.

Un resumen rápido:

Transformación lineal : El vector de incrustación de entrada se multiplica por la matriz de peso W y luego se suma con el vector de sesgo b,

z = W.x+bdónde W. es la matriz de peso, x es nuestra incrustación de palabras y b es el vector de sesgo.

Función de activación ReLU : A continuación, aplicamos ReLU a esta z intermedia.

ReLU devuelve el máximo por elementos de la entrada y cero. Matemáticamente, h = máx{0,z}.

[3] Codificador: Capa 2 + ReLU

La salida de la capa anterior es procesada por la segunda capa del codificador, que reduce aún más el tamaño de entrada a 2×3. Aquí es donde se produce la extracción de características relevantes. Esta capa también se denomina «cuello de botella», ya que las salidas de esta capa tienen características mucho más bajas que las de entrada.

[4] Decodificador: Capa 1 + ReLU

Una vez que se completa el proceso de codificación, el siguiente paso es decodificar las características relevantes para reconstruir el resultado final. Para hacerlo, multiplicamos las características del último paso con los pesos y sesgos correspondientes y aplicamos la capa ReLU. El resultado es una matriz de 3×4.

[5] Decodificador: Capa 2 + ReLU

Se aplica una segunda capa de decodificador (peso, sesgos + ReLU) en la salida anterior para dar el resultado final, que es la matriz 4×4 reconstruida. Lo hacemos para volver a la dimensión original y poder comparar los resultados con nuestro objetivo original.

[6] Gradientes de pérdida y retropropagación

Una vez obtenida la salida de la capa decodificadora, calculamos los gradientes del error cuadrático medio (MSE) entre los salidas (Y) y el objetivos (Y’). Para ello encontramos 2*(Y-Y’) que nos proporciona los gradientes finales que activan el proceso de retropropagación y actualiza los pesos y sesgos en consecuencia.

Ahora que entendemos cómo funciona el Autoencoder, es hora de explorar cómo funciona. escasa variación es capaz de lograr interpretabilidad para modelos de lenguaje grandes (LLM).

Para empezar, supongamos que nos dan:

  • La salida de un transformador después de que la capa de alimentación directa la haya procesado, es decir, supongamos que tenemos las activaciones del modelo para cinco tokens (X). Son buenos pero no arrojan luz sobre cómo el modelo llega a su decisión o hace las predicciones.

La pregunta principal aquí es:

¿Es posible asignar cada activación (3D) a un espacio de dimensión superior (6D) que ayude con la comprensión?

[1] Codificador: capa lineal

El primer paso en la capa Encoder es multiplicar la entrada X con pesos de codificador y agregue sesgos (como se hace en el primer paso de un Autoencoder).

[2] Codificador: ReLU

El siguiente subpaso es aplicar la función de activación ReLU para agregar no linealidad y suprimir activaciones negativas. Esta supresión lleva a que muchas características se establezcan en 0, lo que habilita el concepto de escasez: generar características dispersas e interpretables. F.

La interpretabilidad ocurre cuando tenemos sólo una o dos características positivas. si examinamos f6podemos ver X2 y X3 son positivos, y se puede decir que ambos tienen ‘Montaña’ en común.

[3] Decodificador: Reconstrucción

Una vez que hayamos terminado con el codificador, procedemos al paso del decodificador. multiplicamos F con pesos de decodificador y agregar sesgos. Esto produce X’que es la reconstrucción de X a partir de características interpretables.

Como se hace en un Autoencoder, queremos X’ estar lo más cerca posible de X como sea posible. Para garantizar esto, es esencial una mayor formación.

[4] Decodificador: Pesos

Como paso intermedio, calculamos la norma L2 para cada uno de los pesos en este paso. Los guardamos a un lado para usarlos más tarde.

norma L2

También conocida como norma euclidiana, la norma L2 calcula la magnitud de un vector usando la fórmula: ||x||₂ = √(Σᵢ xᵢ²).

En otras palabras, suma los cuadrados de cada componente y luego saca la raíz cuadrada del resultado. Esta norma proporciona una forma sencilla de cuantificar la longitud o distancia de un vector en el espacio euclidiano.

Como se mencionó anteriormente, un Sparse Autoencoder inculca una capacitación extensa para reconstruir el X’ más cerca a X. Para ilustrar esto, procedemos a los siguientes pasos a continuación:

[5] Escasez: Pérdida L1

El objetivo aquí es obtener tantos valores cercanos a cero/cero como sea posible. Lo hacemos invocando escasez de L1 penalizar los valores absolutos de los pesos; la idea central es que queremos que la suma sea lo más pequeña posible.

Pérdida de L1

La pérdida L1 se calcula como la suma de los valores absolutos de los pesos: L1 = λΣ|w|, donde λ es un parámetro de regularización.

Esto anima a que muchos pesos se vuelvan cero, simplificando el modelo y mejorando así interpretabilidad.

En otras palabras, L1 ayuda a centrarse en las características más relevantes y al mismo tiempo evita el sobreajuste, mejora la generalización del modelo y reduce la complejidad computacional.

[6] Escasez: gradiente

El siguiente paso es calcular L1gradientes que -1 para valores positivos. Así, para todos los valores de f > 0 el resultado se establecerá en -1.