Trabajar con redes neuronales: lista de verificación para la depuración

Trabajar con redes neuronales: lista de verificación para la depuración

El código de los productos de software de aprendizaje automático suele ser complejo y bastante confuso. Detectar y eliminar errores es una tarea que requiere muchos recursos. Incluso el más simple redes neuronales de avance Requieren un enfoque serio de la arquitectura de la red, la inicialización de pesos y la optimización de la red. Un pequeño error puede provocar problemas desagradables.

Este artículo trata sobre un algoritmo para depurar sus redes neuronales.

Skillbox recomienda: Curso práctico Desarrollador de Python desde cero.

Recordamos: para todos los lectores de "Habr": un descuento de 10 rublos al inscribirse en cualquier curso de Skillbox utilizando el código promocional "Habr".

El algoritmo consta de cinco etapas:

  • comienzo fácil;
  • confirmación de pérdidas;
  • comprobar resultados intermedios y conexiones;
  • diagnóstico de parámetros;
  • control del trabajo.

Si algo te parece más interesante que el resto, puedes pasar inmediatamente a estas secciones.

comienzo fácil

Una red neuronal con una arquitectura compleja, regularización y un programador de tasa de aprendizaje es más difícil de depurar que una normal. Estamos siendo un poco complicados aquí, ya que el punto en sí está indirectamente relacionado con la depuración, pero sigue siendo una recomendación importante.

Un comienzo sencillo es crear un modelo simplificado y entrenarlo en un conjunto (punto) de datos.

Primero creamos un modelo simplificado.

Para empezar rápidamente, creamos una pequeña red con una única capa oculta y comprobamos que todo funciona correctamente. Luego complicamos gradualmente el modelo, comprobando cada nuevo aspecto de su estructura (capa adicional, parámetro, etc.) y seguimos adelante.

Entrenamos el modelo en un único conjunto (punto) de datos.

Como comprobación rápida de la integridad de su proyecto, puede utilizar uno o dos puntos de datos de capacitación para confirmar si el sistema está funcionando correctamente. La red neuronal debe mostrar un 100% de precisión en el entrenamiento y las pruebas. Si este no es el caso, entonces o el modelo es demasiado pequeño o ya tienes un error.

Incluso si todo está bien, prepara el modelo para una o más épocas antes de continuar.

Evaluación de pérdidas

La estimación de pérdidas es la principal forma de refinar el rendimiento del modelo. Debe asegurarse de que la pérdida sea apropiada para el problema y que las funciones de pérdida estén clasificadas en la escala correcta. Si utiliza más de un tipo de pérdida, asegúrese de que todos estén en el mismo orden y escalados correctamente.

Es importante estar atento a las pérdidas iniciales. Compruebe qué tan cerca está el resultado real del resultado esperado si el modelo comenzó con una suposición aleatoria. EN El trabajo de Andrey Karpathy sugiere lo siguiente:: “Asegúrese de obtener el resultado que espera cuando comience con una pequeña cantidad de parámetros. Es mejor comprobar inmediatamente la pérdida de datos (con el grado de regularización establecido en cero). Por ejemplo, para CIFAR-10 con un clasificador Softmax, esperamos que la pérdida inicial sea 2.302 porque la probabilidad difusa esperada es 0,1 para cada clase (ya que hay 10 clases) y la pérdida Softmax es la probabilidad logarítmica negativa de la clase correcta. como − ln (0.1) = 2.302.”

Para el ejemplo binario, simplemente se realiza un cálculo similar para cada una de las clases. Aquí, por ejemplo, están los datos: 20% 0 y 80% 1. La pérdida inicial esperada será de hasta –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Si el resultado es mayor que 1, puede indicar que los pesos de la red neuronal no están correctamente equilibrados o que los datos no están normalizados.

Comprobación de resultados intermedios y conexiones.

Para depurar una red neuronal, es necesario comprender la dinámica de los procesos dentro de la red y el papel de las capas intermedias individuales a medida que están conectadas. Estos son los errores comunes que puede encontrar:

  • expresiones incorrectas para actualizaciones de Gradle;
  • no se aplican actualizaciones de peso;
  • gradientes explosivos.

Si los valores del gradiente son cero, esto significa que la tasa de aprendizaje en el optimizador es demasiado lenta o que está encontrando una expresión incorrecta para actualizar el gradiente.

Además, es necesario monitorear los valores de las funciones de activación, pesos y actualizaciones de cada una de las capas. Por ejemplo, la magnitud de las actualizaciones de parámetros (ponderaciones y sesgos) debería ser 1-e3.

Existe un fenómeno llamado “Dying ReLU” o "problema de gradiente que desaparece", cuando las neuronas ReLU generarán cero después de aprender un gran valor de sesgo negativo para sus pesos. Estas neuronas nunca se vuelven a activar en ningún punto de los datos.

Puede utilizar la comprobación de gradiente para identificar estos errores aproximando el gradiente mediante un enfoque numérico. Si está cerca de los gradientes calculados, entonces la retropropagación se implementó correctamente. Para crear una verificación de gradiente, consulte estos excelentes recursos de CS231 aquí и aquíAsí como lección Andrew Nga sobre este tema.

Faizan Sheikh Indica tres métodos principales para visualizar una red neuronal:

  • Los preliminares son métodos simples que nos muestran la estructura general del modelo entrenado. Estos incluyen la salida de formas o filtros de las capas individuales de la red neuronal y los parámetros dentro de cada capa.
  • Basado en activación. En ellos desciframos las activaciones de neuronas individuales o de grupos de neuronas para comprender sus funciones.
  • Basado en gradientes. Estos métodos tienden a manipular los gradientes que se forman a partir de los pases hacia adelante y hacia atrás del entrenamiento del modelo (incluidos los mapas de prominencia y los mapas de activación de clases).

Existen varias herramientas útiles para visualizar las activaciones y conexiones de capas individuales, p. ConX и Tablero de tensor.

Trabajar con redes neuronales: lista de verificación para la depuración

Diagnóstico de parámetros

Las redes neuronales tienen muchos parámetros que interactúan entre sí, lo que complica la optimización. En realidad, esta sección es objeto de investigación activa por parte de especialistas, por lo que las sugerencias siguientes deben considerarse sólo como consejos, puntos de partida a partir de los cuales construir.

Tamaño del paquete (tamaño de lote): si desea que el tamaño del lote sea lo suficientemente grande como para obtener estimaciones precisas del gradiente de error, pero lo suficientemente pequeño como para que el descenso de gradiente estocástico (SGD) regularice su red. Los tamaños de lote pequeños conducirán a una rápida convergencia debido al ruido durante el proceso de entrenamiento y, posteriormente, a dificultades de optimización. Esto se describe con más detalle. aquí.

Tasa de aprendizaje - demasiado bajo dará lugar a una convergencia lenta o al riesgo de quedarse estancado en los mínimos locales. Al mismo tiempo, una alta tasa de aprendizaje provocará una divergencia en la optimización porque se corre el riesgo de saltar a través de la parte profunda pero estrecha de la función de pérdida. Intente utilizar la programación de velocidad para reducirla mientras entrena la red neuronal. Actualizado con CS231n Hay una gran sección dedicada a este problema..

Recorte de degradado  — recortar los gradientes de los parámetros durante la retropropagación al valor máximo o norma marginal. Útil para solucionar problemas de gradientes explosivos que pueda encontrar en el punto tres.

Normalización por lotes - Se utiliza para normalizar los datos de entrada de cada capa, lo que nos permite resolver el problema del cambio de covariables interno. Si está utilizando Dropout y Batch Norma juntos, mira este artículo.

Descenso de gradiente estocástico (SGD) — Existen varias variedades de SGD que utilizan el impulso, las tasas de aprendizaje adaptativo y el método Nesterov. Sin embargo, ninguno de ellos tiene una ventaja clara tanto en términos de eficiencia del aprendizaje como de generalización (detalles aquí).

Regularización - es crucial para construir un modelo generalizable, ya que agrega una penalización por la complejidad del modelo o los valores extremos de los parámetros. Esta es una forma de reducir la varianza del modelo sin aumentar significativamente su sesgo. Más información detallada - aquí.

Para evaluar todo usted mismo, debe desactivar la regularización y comprobar usted mismo el gradiente de pérdida de datos.

Renunciando es otro método para optimizar su red y evitar la congestión. Durante el entrenamiento, el abandono se lleva a cabo únicamente manteniendo la actividad de la neurona con una cierta probabilidad p (hiperparámetro) o poniéndola a cero en el caso contrario. Como resultado, la red debe utilizar un subconjunto diferente de parámetros para cada lote de entrenamiento, lo que reduce los cambios en ciertos parámetros que se vuelven dominantes.

Importante: si utiliza tanto la normalización de abandono como la de lotes, tenga cuidado con el orden de estas operaciones o incluso con su uso conjunto. Todo esto todavía se está discutiendo y complementando activamente. Aquí hay dos discusiones importantes sobre este tema. en Stackoverflow и Arxiv.

control de trabajo

Se trata de documentar flujos de trabajo y experimentos. Si no documenta nada, es posible que olvide, por ejemplo, qué tasa de aprendizaje o ponderación de clases se utilizan. Gracias al control, puedes ver y reproducir fácilmente experimentos anteriores. Esto le permite reducir la cantidad de experimentos duplicados.

Sin embargo, la documentación manual puede convertirse en una tarea complicada cuando se trata de un gran volumen de trabajo. Aquí es donde entran herramientas como Comet.ml para ayudarlo a registrar automáticamente conjuntos de datos, cambios de código, historial experimental y modelos de producción, incluida información clave sobre su modelo (hiperparámetros, métricas de rendimiento del modelo e información ambiental).

Una red neuronal puede ser muy sensible a pequeños cambios y esto provocará una caída en el rendimiento del modelo. Realizar un seguimiento y documentar su trabajo es el primer paso que puede dar para estandarizar su entorno y modelado.

Trabajar con redes neuronales: lista de verificación para la depuración

Espero que esta publicación pueda ser un punto de partida para que comiences a depurar tu red neuronal.

Skillbox recomienda:

Fuente: habr.com

Añadir un comentario