stringtranslate.com

Normalización (aprendizaje automático)

En el aprendizaje automático , la normalización es una técnica estadística con diversas aplicaciones. Existen dos formas principales de normalización, a saber, la normalización de datos y la normalización de activación . La normalización de datos (o escalado de características ) incluye métodos que reescalan los datos de entrada para que las características tengan el mismo rango, media, varianza u otras propiedades estadísticas. Por ejemplo, una opción popular de método de escalado de características es la normalización mín-máx , donde cada característica se transforma para que tenga el mismo rango (normalmente o ). Esto resuelve el problema de que diferentes características tengan escalas muy diferentes, por ejemplo, si una característica se mide en kilómetros y otra en nanómetros.

La normalización de la activación, por otro lado, es específica del aprendizaje profundo e incluye métodos que reescalan la activación de neuronas ocultas dentro de las redes neuronales .

La normalización se utiliza a menudo para:

Las técnicas de normalización suelen justificarse teóricamente como una reducción del cambio de covarianza, una suavización de los paisajes de optimización y un aumento de la regularización , aunque se justifican principalmente por el éxito empírico. [1]

Normalización por lotes

La normalización de lotes ( BatchNorm ) [2] opera sobre las activaciones de una capa para cada minilote.

Consideremos una red de propagación hacia adelante simple, definida al encadenar módulos: donde cada módulo de la red puede ser una transformación lineal, una función de activación no lineal, una convolución, etc. es el vector de entrada, es el vector de salida del primer módulo, etc.

BatchNorm es un módulo que se puede insertar en cualquier punto de la red de propagación hacia adelante. Por ejemplo, supongamos que se inserta justo después de , entonces la red funcionaría en consecuencia: El módulo BatchNorm no funciona con entradas individuales. En cambio, debe funcionar con un lote de entradas a la vez.

Concretamente, supongamos que tenemos un lote de entradas , alimentadas todas a la vez a la red. Obtendríamos en el medio de la red algunos vectores El módulo BatchNorm calcula la media y la varianza de estos vectores por coordenadas: donde indexa las coordenadas de los vectores e indexa los elementos del lote. En otras palabras, estamos considerando la -ésima coordenada de cada vector en el lote y calculando la media y la varianza de esta colección de números.

Luego normaliza cada coordenada para tener media cero y varianza unitaria: es una pequeña constante positiva, como se agrega a la varianza para lograr estabilidad numérica, para evitar la división por cero.

Por último, aplica una transformación lineal: Aquí, y son parámetros dentro del módulo BatchNorm. Son parámetros que se pueden aprender, generalmente entrenados por descenso de gradiente.

El siguiente código ilustra BatchNorm.

importar  numpy  como  npdef  batchnorm ( x ,  gamma ,  beta ,  epsilon = 1e-8 ): # Media y  varianza de cada característica  mu  =  np.media ( x , axis = 0 ) # forma (N,) var = np.var ( x , axis = 0 ) # forma(N,)        # Normalizar las activaciones  x_hat  =  ( x  -  mu )  /  np . sqrt ( var  +  epsilon )  # forma (B, N) # Aplicar la transformación lineal  y  =  gamma  *  x_hat  +  beta  # forma (B, N) volver  y

Interpretación

y permitir que la red aprenda a deshacer la normalización si eso es beneficioso. [3] BatchNorm puede interpretarse como la eliminación de las transformaciones puramente lineales, de modo que sus capas se centren exclusivamente en modelar los aspectos no lineales de los datos, lo que puede ser beneficioso, ya que una red neuronal siempre puede cubrirse con una capa de transformación lineal encima. [4] [3]

En la publicación original se afirma que BatchNorm funciona reduciendo el "desplazamiento de la covarianza interna", aunque esta afirmación tiene tanto partidarios [5] [6] como detractores. [7] [8]

Casos especiales

El artículo original [2] recomendaba utilizar BatchNorms solo después de una transformación lineal, no después de una activación no lineal. Es decir, , no . Además, el sesgo no importa, ya que se cancelará con la resta de la media posterior, por lo que tiene la forma . Es decir, si una BatchNorm está precedida por una transformación lineal, entonces el término de sesgo de esa transformación lineal se establece en cero constante. [2]

En el caso de las redes neuronales convolucionales (CNN), BatchNorm debe preservar la invariancia de la traducción de CNN, lo que significa que debe tratar todas las salidas del mismo núcleo como si fueran puntos de datos diferentes dentro de un lote. [2] Esto a veces se denomina BatchNorm espacial, BatchNorm2D o BatchNorm por canal. [9] [10]

Concretamente, supongamos que tenemos una capa convolucional bidimensional definida por donde

Para preservar la invariancia traslacional, BatchNorm trata todas las salidas del mismo núcleo en el mismo lote como más datos en un lote. Es decir, se aplica una vez por núcleo (equivalentemente, una vez por canal ), no por activación : donde es el tamaño del lote, es la altura del mapa de características y es el ancho del mapa de características.

Es decir, aunque sólo haya puntos de datos en un lote, todas las salidas del núcleo en este lote se tratan por igual. [2]

Posteriormente, la normalización y la transformación lineal también se realizan por kernel: se aplican consideraciones similares para BatchNorm para convoluciones n -dimensionales.

El siguiente código ilustra BatchNorm para convoluciones 2D:

importar  numpy  como  npdef  batchnorm_cnn ( x ,  gamma ,  beta ,  epsilon = 1e-8 ):  # Calcular la media y la varianza para cada  canal . mean =  np.mean  ( x , axis = ( 0 , 1 , 2 ) , keepdims = True ) var = np.var ( x , axis = ( 0 , 1 , 2 ) , keepdims = True )            # Normaliza el tensor de entrada.  x_hat  =  ( x  -  media )  /  np . sqrt ( var  +  epsilon ) # Escala y desplaza el tensor normalizado.  y  =  gamma  *  x_hat  +  beta volver  y

Mejoras

BatchNorm ha sido muy popular y se han intentado muchas mejoras. Algunos ejemplos incluyen: [11]

Un problema particular con BatchNorm es que durante el entrenamiento, la media y la varianza se calcularon sobre la marcha para cada lote (generalmente como un promedio móvil exponencial ), pero durante la inferencia, la media y la varianza se congelaron con respecto a las calculadas durante el entrenamiento. Esta disparidad de entrenamiento-prueba degrada el rendimiento. La disparidad se puede reducir simulando el promedio móvil durante la inferencia: [11] : Ec. 3  donde es un hiperparámetro que se optimizará en un conjunto de validación.

Otros trabajos intentan eliminar BatchNorm, como Normalizer-Free ResNet. [12]

Normalización de capas

La normalización de capas ( LayerNorm ) [13] es un competidor habitual de BatchNorm. A diferencia de BatchNorm, que normaliza las activaciones en toda la dimensión del lote para una característica determinada, LayerNorm normaliza en todas las características dentro de una única muestra de datos. En comparación con BatchNorm, el rendimiento de LayerNorm no se ve afectado por el tamaño del lote. Es un componente clave de Transformers .

Para una entrada de datos y una capa determinadas, LayerNorm calcula la media ( ) y la varianza ( ) de todas las neuronas de la capa. De manera similar a BatchNorm, se aplican los parámetros que se pueden aprender (escala) y (desplazamiento). Se define mediante: donde y , y abarca las neuronas de esa capa.

Ejemplos

Por ejemplo, en CNN, LayerNorm se aplica a todas las activaciones de una capa. En la notación anterior, hemos observado que se elimina el índice de lote, mientras que se agrega el índice de canal.

En redes neuronales recurrentes [13] y Transformers , [14] LayerNorm se aplica individualmente a cada paso de tiempo.

Por ejemplo, si el vector oculto en una RNN en el paso de tiempo es donde es la dimensión del vector oculto, entonces se aplicará LayerNorm con donde y .

Normalización de la capa de raíz cuadrada media

La normalización de capa de raíz cuadrada media ( RMSNorm ) [15] cambia LayerNorm por Básicamente es LayerNorm donde aplicamos .

Adaptado

La norma de capa adaptativa ( adaLN ) calcula la en una LayerNorm no a partir de la activación de capa en sí, sino de otros datos. Se propuso por primera vez para CNN, [16] y se ha utilizado de manera efectiva en el Transformador de difusión (DiT). [17] Por ejemplo, en DiT, la información de condicionamiento (como el vector de codificación de texto) es procesada por un MLP en , que luego se aplica en el módulo LayerNorm en un Transformador.

Normalización del peso

La normalización de peso ( WeightNorm ) [18] es una técnica inspirada en BatchNorm. Normaliza las matrices de peso en una red neuronal, en lugar de sus activaciones neuronales.

Un ejemplo es la normalización espectral , que divide las matrices de peso por su norma espectral . La normalización espectral se utiliza en redes generativas antagónicas (GAN), como la GAN de Wasserstein . [19] El radio espectral se puede calcular de manera eficiente mediante el siguiente algoritmo:

Matriz de ENTRADA y estimación inicial

Iterar hasta la convergencia . Este es el vector propio de con valor propio .

DEVOLVER

Al reasignar después de cada actualización del discriminador, podemos establecer un límite superior y, por lo tanto, un límite superior .

El algoritmo se puede acelerar aún más mediante la memorización : en el paso , almacenar . Luego, en el paso , utilizar como estimación inicial para el algoritmo. Dado que está muy cerca de , entonces está cerca de , por lo que esto permite una convergencia rápida.

Normalización específica de CNN

Existen algunas técnicas de normalización de activación que sólo se utilizan para CNN.

Normalización de la respuesta

En AlexNet se utilizó la normalización de respuesta local [20] . Se aplicó en una capa convolucional, justo después de una función de activación no lineal. Se definió mediante donde es la activación de la neurona en la ubicación y el canal . En palabras, cada píxel de un canal se suprime por las activaciones del mismo píxel en sus canales adyacentes.

Los números son hiperparámetros seleccionados mediante un conjunto de validación.

Era una variante de la normalización de contraste local anterior . [21] donde es la activación promedio en una ventana pequeña centrada en la ubicación y el canal . Los números y el tamaño de la ventana pequeña son hiperparámetros seleccionados mediante un conjunto de validación.

Métodos similares se denominaron normalización divisiva , ya que dividen las activaciones por un número en función de las activaciones. Originalmente se inspiraron en la biología, donde se utilizaron para explicar las respuestas no lineales de las neuronas corticales y el enmascaramiento no lineal en la percepción visual. [22]

Ambos tipos de normalización local quedaron obsoletos gracias a la normalización por lotes, que es una forma más global de normalización. [23]

La normalización de la respuesta reapareció en ConvNeXT-2 como normalización de la respuesta global . [24]

Normalización de grupos

La normalización de grupos ( GroupNorm ) [25] es una técnica que se utiliza únicamente para las redes neuronales convolucionales. Puede entenderse como la LayerNorm para las redes neuronales convolucionales aplicada una vez por grupo de canales.

Supongamos que en una capa hay canales , entonces la dividimos en grupos y luego aplicamos LayerNorm a cada grupo.

Normalización de instancias

La normalización de instancias ( InstanceNorm ), o normalización de contraste , es una técnica desarrollada inicialmente para la transferencia de estilo neuronal y solo se utiliza para CNN. [26] Puede entenderse como la LayerNorm para CNN aplicada una vez por canal o, equivalentemente, como normalización de grupo donde cada grupo consta de un solo canal:

Normalización de instancias adaptativas

La normalización de instancias adaptativa ( AdaIN ) es una variante de la normalización de instancias, diseñada específicamente para la transferencia de estilo neuronal con CNN, no para CNN en general. [27]

En el método AdaIN de transferencia de estilo, tomamos una CNN y dos imágenes de entrada, una de contenido y otra de estilo . Cada imagen se procesa a través de la misma CNN y, en una determinada capa , se aplica AdaIn.

Sea la activación en la imagen de contenido y sea la activación en la imagen de estilo. Luego, AdaIn primero calcula la media y la varianza de las activaciones de la imagen de contenido y luego las usa como InstanceNorm en . Nótese que permanece sin cambios. Explícitamente, tenemos

Transformadores

Se diseñaron algunos métodos de normalización para su uso en transformadores .

El Transformer original de 2017 utilizó la configuración "post-LN" para sus LayerNorms. Era difícil de entrenar y requería un ajuste cuidadoso de los hiperparámetros y un "calentamiento" en la tasa de aprendizaje, donde comienza pequeña y aumenta gradualmente. Se descubrió que la convención pre-LN, propuesta varias veces en 2018, [28] era más fácil de entrenar, no requería calentamiento, lo que conducía a una convergencia más rápida. [29]

FixNorm [30] y ScaleNorm [31] normalizan los vectores de activación en un Transformer. El método FixNorm divide los vectores de salida de un Transformer por sus normas L2, luego los multiplica por un parámetro aprendido . ScaleNorm reemplaza todas las LayerNorms dentro de un Transformer por división con la norma L2, luego multiplicando por un parámetro aprendido (compartido por todos los módulos ScaleNorm de un Transformer). La normalización de clave de consulta ( QKNorm ) [32] normaliza los vectores de consulta y clave para que tengan una norma L2 unitaria.

En nGPT , muchos vectores se normalizan para tener una norma unitaria L2: [33] vectores de estado ocultos, vectores de incrustación de entrada y salida, columnas de matriz de peso, vectores de consulta y clave.

Misceláneas

La normalización de gradiente ( GradNorm ) [34] normaliza los vectores de gradiente durante la retropropagación.

Véase también

Referencias

  1. ^ Huang, Lei (2022). Técnicas de normalización en aprendizaje profundo. Synthesis Lectures on Computer Vision. Cham: Springer International Publishing. doi :10.1007/978-3-031-14595-7. ISBN 978-3-031-14594-0.
  2. ^ abcde Ioffe, Sergey; Szegedy, Christian (1 de junio de 2015). "Normalización por lotes: aceleración del entrenamiento de redes profundas mediante la reducción del desplazamiento interno de covariables". Actas de la 32.ª Conferencia internacional sobre aprendizaje automático . PMLR: 448–456. arXiv : 1502.03167 .
  3. ^ ab Goodfellow, Ian; Bengio, Yoshua; Courville, Aaron (2016). "8.7.1. Normalización por lotes". Aprendizaje profundo . Computación adaptativa y aprendizaje automático. Cambridge, Massachusetts: The MIT Press. ISBN 978-0-262-03561-3.
  4. ^ Desjardins, Guillaume; Simonyan, Karen; Pascanu, Razvan; kavukcuoglu, koray (2015). "Redes neuronales naturales". Avances en sistemas de procesamiento de información neuronal . 28 . Curran Associates, Inc.
  5. ^ Xu, Jingjing; Sol, Xu; Zhang, Zhiyuan; Zhao, Guangxiang; Lin, Junyang (2019). "Comprensión y mejora de la normalización de capas". Avances en los sistemas de procesamiento de información neuronal . 32 . Curran Associates, Inc. arXiv : 1911.07013 .
  6. ^ Awais, Muhammad; Bin Iqbal, Md. Tauhid; Bae, Sung-Ho (noviembre de 2021). "Revisitando el cambio de covariable interno para la normalización por lotes". IEEE Transactions on Neural Networks and Learning Systems . 32 (11): 5082–5092. doi :10.1109/TNNLS.2020.3026784. ISSN  2162-237X. PMID  33095717.
  7. ^ Bjorck, Nils; Gomes, Carla P; Selman, Bart; Weinberger, Kilian Q (2018). "Comprensión de la normalización por lotes". Avances en sistemas de procesamiento de información neuronal . 31 . Curran Associates, Inc. arXiv : 1806.02375 .
  8. ^ Santurkar, Shibani; Tsipras, Dimitris; Ilyas, Andrew; Madry, Aleksander (2018). "¿Cómo ayuda la normalización por lotes a la optimización?". Avances en sistemas de procesamiento de información neuronal . 31. Curran Associates, Inc.
  9. ^ "BatchNorm2d — Documentación de PyTorch 2.4". pytorch.org . Consultado el 26 de septiembre de 2024 .
  10. ^ Zhang, Aston; Lipton, Zachary; Li, Mu; Smola, Alexander J. (2024). "8.5. Normalización por lotes". Sumérjase en el aprendizaje profundo . Cambridge New York Port Melbourne New Delhi Singapore: Cambridge University Press. ISBN 978-1-009-38943-3.
  11. ^ ab Summers, Cecilia; Dinneen, Michael J. (2019). "Cuatro cosas que todos deberían saber para mejorar la normalización por lotes". arXiv : 1906.03548 [cs.LG].
  12. ^ Brock, Andrew; De, Soham; Smith, Samuel L.; Simonyan, Karen (2021). "Reconocimiento de imágenes a gran escala y de alto rendimiento sin normalización". arXiv : 2102.06171 [cs.CV].
  13. ^ ab Ba, Jimmy Lei; Kiros, Jamie Ryan; Hinton, Geoffrey E. (2016). "Normalización de capas". arXiv : 1607.06450 [stat.ML].
  14. ^ Phuong, Mary; Hutter, Marcus (19 de julio de 2022). "Algoritmos formales para transformadores". arXiv : 2207.09238 [cs.LG].
  15. ^ Zhang, Biao; Sennrich, Rico (16 de octubre de 2019). "Normalización de la capa de raíz cuadrada media". arXiv : 1910.07467 [cs.LG].
  16. ^ Pérez, Ethan; Strub, Florian; De Vries, Harm; Dumoulin, Vincent; Courville, Aaron (29 de abril de 2018). "FiLM: razonamiento visual con una capa de condicionamiento general". Actas de la Conferencia AAAI sobre Inteligencia Artificial . 32 (1). arXiv : 1709.07871 . doi :10.1609/aaai.v32i1.11671. ISSN  2374-3468.
  17. ^ Peebles, William; Xie, Saining (2023). "Modelos de difusión escalables con transformadores": 4195–4205. arXiv : 2212.09748 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  18. ^ Salimans, Tim; Kingma, Diederik P. (3 de junio de 2016). "Normalización de pesos: una reparametrización simple para acelerar el entrenamiento de redes neuronales profundas". arXiv : 1602.07868 [cs.LG].
  19. ^ Miyato, Takeru; Kataoka, Toshiki; Koyama, Masanori; Yoshida, Yuichi (16 de febrero de 2018). "Normalización espectral para redes generativas adversarias". arXiv : 1802.05957 [cs.LG].
  20. ^ Krizhevsky, Alex; Sutskever, Ilya; Hinton, Geoffrey E (2012). "Clasificación ImageNet con redes neuronales convolucionales profundas". Avances en sistemas de procesamiento de información neuronal . 25 . Curran Associates, Inc.
  21. ^ Jarrett, Kevin; Kavukcuoglu, Koray; Ranzato, Marc' Aurelio; LeCun, Yann (septiembre de 2009). "¿Cuál es la mejor arquitectura multietapa para el reconocimiento de objetos?". 2009 IEEE 12th International Conference on Computer Vision . IEEE. págs. 2146–2153. doi :10.1109/iccv.2009.5459469. ISBN . 978-1-4244-4420-5.
  22. ^ Lyu, Siwei; Simoncelli, Eero P. (2008). "Representación de imágenes no lineales mediante normalización divisiva". Conferencia IEEE de 2008 sobre visión artificial y reconocimiento de patrones . Vol. 2008. págs. 1–8. doi :10.1109/CVPR.2008.4587821. ISBN 978-1-4244-2242-5. ISSN  1063-6919. PMC 4207373.  PMID 25346590  .
  23. ^ Ortiz, Anthony; Robinson, Caleb; Morris, Dan; Fuentes, Olac; Kiekintveld, Christopher; Hassan, Md Mahmudulla; Jojic, Nebojsa (2020). "Normalización del contexto local: revisitando la normalización local": 11276–11285. arXiv : 1912.05845 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  24. ^ Woo, Sanghyun; Debnath, Shoubhik; Hu, Ronghang; Chen, Xinlei; Liu, Zhuang; Kweon, In So; Xie, Saining (2023). "ConvNeXt V2: Codiseño y escalado de ConvNets con autocodificadores enmascarados": 16133–16142. arXiv : 2301.00808 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  25. ^ Wu, Yuxin; Él, Kaiming (2018). "Normalización de grupo": 3–19. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  26. ^ Ulyanov, Dmitry; Vedaldi, Andrea; Lempitsky, Victor (6 de noviembre de 2017). "Normalización de instancias: el ingrediente que falta para una estilización rápida". arXiv : 1607.08022 [cs.CV].
  27. ^ Huang, Xun; Belongie, Serge (2017). "Transferencia de estilo arbitrario en tiempo real con normalización de instancias adaptativa": 1501–1510. arXiv : 1703.06868 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  28. ^ Wang, Qiang; Li, Bei; Xiao, Tong; Zhu, Jingbo; Li, Changliang; Wong, Derek F.; Chao, Lidia S. (4 de junio de 2019), Aprendizaje de modelos de transformadores profundos para traducción automática, arXiv : 1906.01787 , consultado el 18 de octubre de 2024
  29. ^ Xiong, Ruibin; Yang, Yunchang; Él, Di; Zheng, Kai; Zheng, Shuxin; Xing, Chen; Zhang, Huishuai; Lan, Yanyan; Wang, Liwei; Liu, Tie-Yan (29 de junio de 2020). "Sobre la normalización de capas en la arquitectura del transformador". arXiv : 2002.04745 [cs.LG].
  30. ^ Nguyen, Toan Q.; Chiang, David (17 de abril de 2018), Mejorar la elección léxica en la traducción automática neuronal, arXiv : 1710.01329 , consultado el 18 de octubre de 2024
  31. ^ Nguyen, Toan Q.; Salazar, Julian (2019-11-02). "Transformers sin lágrimas: Mejorando la normalización de la autoatención". arXiv : 1910.05895 . doi :10.5281/zenodo.3525484. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  32. ^ Henry, Alex; Dachapally, Prudhvi Raj; Pawar, Shubham Shantaram; Chen, Yuxuan (noviembre de 2020). Cohn, Trevor; He, Yulan; Liu, Yang (eds.). "Normalización de clave de consulta para transformadores". Hallazgos de la Asociación de Lingüística Computacional: EMNLP 2020 . En línea: Asociación de Lingüística Computacional: 4246–4253. arXiv : 2010.04245 . doi :10.18653/v1/2020.findings-emnlp.379.
  33. ^ Loshchilov, Ilya; Hsieh, Cheng-Ping; Sun, Simeng; Ginsburg, Boris (1 de octubre de 2024), nGPT: Transformador normalizado con aprendizaje de representación en la hiperesfera, arXiv : 2410.01131 , consultado el 18 de octubre de 2024
  34. ^ Chen, Zhao; Badrinarayanan, Vijay; Lee, Chen-Yu; Rabinovich, Andrew (3 de julio de 2018). "GradNorm: Normalización de gradiente para el equilibrio de pérdida adaptativo en redes multitarea profundas". Actas de la 35.ª Conferencia internacional sobre aprendizaje automático . PMLR: 794–803. arXiv : 1711.02257 .

Lectura adicional