Depuración de redes neuronales

10

Construí una red neuronal artificial en Python usando la función de optimización scipy.optimize.minimize (gradiente conjugado).

Implementé la verificación de gradiente, verifiqué todo, etc., y estoy bastante seguro de que funciona correctamente.

Lo he ejecutado varias veces y llega a 'Optimización finalizada con éxito', sin embargo, cuando aumento el número de capas ocultas, el costo de la hipótesis aumenta (todo lo demás se mantiene igual) después de que finalizó con éxito.

Intuitivamente, parece que el costo debería disminuir cuando se aumenta el número de capas ocultas, ya que es capaz de generar una hipótesis más compleja que puede ajustarse mejor a los datos, sin embargo, este no parece ser el caso.

Me interesaría saber qué está pasando aquí, o si he implementado la red neuronal de manera incorrecta.

usuario3726050
fuente

Respuestas:

9

Hay tantas formas de equivocarse con una red neuronal que será difícil de depurar. Además, para abordar su intuición, cada capa oculta adicional hace que el aprendizaje sea mucho más difícil. Dicho esto, aquí hay algunas posibilidades:

  1. Has agregado la pérdida de peso. Agregar más capas agrega más pesos, lo que aumenta su costo de regularización.
  2. El problema es lo suficientemente simple como para que un modelo con una sola capa oculta sea suficiente. Agregar más capas ocultas dificulta el aprendizaje de la red (problema de optimización más difícil).
  3. El método de optimización no está haciendo un gran trabajo (prefiero escalar a scipy.optimize).
  4. Está utilizando la función de activación sigmoide / tanh. La función sigmoidea causa el problema del gradiente de fuga que dificulta el aprendizaje con más capas. Intenta usar la función ReLu.

Entrenar redes neuronales requiere mucha práctica, suerte y paciencia. Buena suerte.

usuario1133029
fuente
1
Buena respuesta. Sin embargo, tenga en cuenta que 2, 3, 4 pueden interactuar de formas complejas. La depuración se puede hacer verificando los valores de activación de la ANN, la magnitud de los pesos de la ANN, vigilando el error dentro de la muestra y fuera de la muestra y la convergencia del optimizador, etc.
Def_Os
3

Aumentar el número de capas ocultas para una red neuronal estándar en realidad no mejorará los resultados en la mayoría de los casos. Cambiar el tamaño de la capa oculta lo hará.

Este hecho (que el número de capas ocultas hace muy poco) se ha observado históricamente y es la motivación detrás del campo del aprendizaje profundo. El aprendizaje profundo es una forma inteligente de entrenar redes neuronales multicapa, por ejemplo, al aislar subconjuntos de características al entrenar diferentes capas.

Buen video introductorio sobre este tema en YouTube

eric chiang
fuente
2
El aprendizaje profundo consiste en aumentar el número de capas ocultas. De lo contrario, se llamaría aprendizaje gordo :)
Emre
@Emre definitivamente quiso decir eso. ¡Maldice mi puntuación!
eric chiang