Cuando comencé con las redes neuronales artificiales (NN) pensé que tendría que luchar contra el sobreajuste como el principal problema. Pero en la práctica ni siquiera puedo lograr que mi NN pase la barrera de la tasa de error del 20%. ¡Ni siquiera puedo superar mi puntaje en un bosque aleatorio!
Estoy buscando un consejo muy general o no tan general sobre qué se debe hacer para que un NN comience a capturar tendencias en los datos.
Para implementar NN, uso Theano Stacked Auto Encoder con el código del tutorial que funciona muy bien (menos del 5% de tasa de error) para clasificar el conjunto de datos MNIST. Es un perceptrón multicapa, con una capa softmax en la parte superior, cada una de las cuales se ocultó más tarde como autoencoder (se describe completamente en el tutorial , capítulo 8). Hay ~ 50 características de entrada y ~ 10 clases de salida. El NN tiene neuronas sigmoideas y todos los datos están normalizados a [0,1]. Probé muchas configuraciones diferentes: número de capas ocultas y neuronas en ellas (100-> 100-> 100, 60-> 60-> 60, 60-> 30-> 15, etc.), diferentes aprendizajes y pre-entrenamiento tarifas, etc.
Y lo mejor que puedo obtener es una tasa de error del 20% en el conjunto de validación y una tasa de error del 40% en el conjunto de prueba.
Por otro lado, cuando trato de usar Random Forest (de scikit-learn) obtengo fácilmente una tasa de error del 12% en el conjunto de validación y del 25% (!) En el conjunto de prueba.
¿Cómo puede ser que mi NN profundo con pre-entrenamiento se comporte tan mal? ¿Qué debería probar?
Puede que le interese leer el siguiente documento de investigadores de Microsoft Research:
Tenían problemas similares a los tuyos:
Para resolver el problema, han hecho uso de una arquitectura de omisión. Con eso, entrenaron redes muy profundas (1202 capas) y lograron el mejor resultado en el desafío ILSVRC 2015.
fuente