Cómo la normalización por capas estabiliza los transformers
Desliza para mostrar el menú
Los modelos modernos de aprendizaje profundo dependen de técnicas de normalización para facilitar un entrenamiento eficiente y preciso. En el procesamiento de lenguaje natural (NLP), donde las secuencias de entrada pueden variar en longitud y estructura, la normalización es especialmente importante para estabilizar el proceso de aprendizaje. Dos métodos comunes de normalización son la normalización por lotes y la normalización por capa, pero cumplen diferentes funciones y se adaptan a distintos tipos de datos.
La normalización por lotes calcula la media y la varianza de cada característica en todo el lote de entradas. Este enfoque funciona bien en tareas de visión por computadora, donde cada imagen en un lote suele tener el mismo tamaño y estructura. Sin embargo, en tareas de NLP, especialmente con secuencias de longitud variable, la normalización por lotes puede introducir dependencias no deseadas entre muestras de un lote y puede no manejar adecuadamente las longitudes variables de las secuencias.
La normalización por capa, en cambio, normaliza las características de entrada dentro de cada punto de datos (como cada embedding de token en una oración) de forma independiente de otros puntos de datos en el lote. Esto la hace mucho más adecuada para NLP y modelado de secuencias. Al estandarizar las entradas sumadas a una neurona dentro de una capa, la normalización por capa asegura que la representación de cada token esté en una escala similar, independientemente de su posición o de la composición del lote. Esto ayuda a que los Transformers se entrenen de manera estable y representen el texto de forma más efectiva, especialmente al tratar con oraciones largas o complejas.
123456789101112131415161718192021import numpy as np def layer_norm(x, epsilon=1e-5): """ Applies layer normalization to a 2D numpy array x. Each row is normalized independently. """ mean = np.mean(x, axis=1, keepdims=True) variance = np.var(x, axis=1, keepdims=True) normalized = (x - mean) / np.sqrt(variance + epsilon) # Optional: learnable scale and bias (gamma and beta) gamma = np.ones_like(mean) beta = np.zeros_like(mean) return gamma * normalized + beta # Example: normalize a batch of 3 token embeddings (rows) embeddings = np.array([[2.0, 4.0, 6.0], [1.0, 3.0, 5.0], [0.0, 0.0, 0.0]]) normalized_embeddings = layer_norm(embeddings) print(normalized_embeddings)
Imagina cada fila en tu entrada como una incrustación de token única, similar a un personaje en una historia, cada uno con sus propias particularidades. La función layer_norm da a cada token una oportunidad justa ajustando sus valores para que estén centrados alrededor de cero y compartan la misma escala. Calcula la media y la varianza para cada fila, luego transforma los valores para que ningún token destaque demasiado ni pase desapercibido. Esta normalización independiente significa que, sin importar la longitud de la secuencia o la composición del lote, las características de cada token están equilibradas y listas para que el modelo las interprete. Este enfoque mantiene el entrenamiento del modelo estable y eficiente, especialmente al trabajar con longitudes y estructuras impredecibles que se encuentran en datos de PLN del mundo real.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla