¿Hay alguna manera de determinar o reducir las opciones con las que uno debería experimentar para mejorar (por ejemplo) una red neuronal clasificadora de imágenes binarias?

En primer lugar, permítame señalarle un recurso perspicaz. El siguiente enlace explica con gran detalle cómo proceder con la fase de capacitación de las NN:

CS231n Redes neuronales convolucionales para reconocimiento visual

A continuación, otro recurso que puede ayudarlo a lidiar con los problemas comunes de NN:

Anhelo de aprendizaje automático

He estado entrenando NN para la clasificación de imágenes (por ejemplo, OCR) desde 2012. Comencé mi viaje con NN simples, luego con NN convolucionales y luego con arquitecturas muy locas. El proceso que sigo es:

  1. Comience con una arquitectura muy compleja con muchas neuronas y con pocos ejemplos de datos (<1k) en mi conjunto de datos de entrenamiento. Si puedo lograr una buena precisión, paso al paso 2. Si no puedo, aumento la complejidad de la red.
  2. Utilice el conjunto de datos de entrenamiento original (generalmente tengo conjuntos de datos de entrenamiento de 10k a 300k ejemplos). Después de cada época, ejecuto el NN contra un conjunto de datos de validación (~ 10k ejemplos). Si la precisión del entrenamiento es baja, regrese al paso 1 y aumente la complejidad. Si la precisión del entrenamiento es buena y la precisión de la validación es baja, vaya al paso 3. Si la precisión del entrenamiento es buena y la precisión de la validación es buena, vaya al paso 4.
  3. Si la precisión de la validación es mucho menor que la precisión del entrenamiento, tiene un modelo sobreajustado. Puede recopilar más ejemplos para el conjunto de datos de capacitación. O, lo que suelo hacer, puede agregar el abandono a la red. Si la precisión del entrenamiento es buena, debería poder obtener un modelo generalizado utilizando la deserción o la regularización L1 / L2. Cuando la precisión de validación es buena, vaya al paso 4.
  4. Ejecuto el modelo contra un conjunto de datos de prueba (~ 10k ejemplos). Este conjunto de datos debe ser muy similar al escenario real donde se ejecutará su modelo. La precisión que obtienes aquí es la precisión de tu modelo.

Después de ejecutar una iteración como esta, creo una arquitectura NN más simple (con menos memoria y operaciones) y comienzo desde el paso 1. Mi objetivo es obtener un modelo muy delgado al final, que pueda ejecutar, por ejemplo, en AWS Lambda o en dispositivos con poca memoria / CPU.

Cuando creo un NN más simple que tiene poca precisión, me detengo y utilizo el último con buena precisión.