Voy a ir con más de una respuesta abstracta. Menos “hacer esto o esto” y más “Creo esto, pero puedo estar equivocado”.
Primero y ante todo; Qué esperar del entrenamiento. Desde mi experiencia, las redes neuronales tienden a no hacer lo que esperas. En mi cabeza, he pensado “esta es obviamente la mejor manera de resolver este problema, por lo tanto, debería aprender cómo hacerlo”. Pero la mejor manera de minimizar la pérdida en un pequeño ejemplo no es necesariamente la mejor en general, por lo que a veces se pierde en el camino. Algo que he visto en las redes neuronales propias y ajenas es una función funky de pérdida. Especialmente en una escala de tiempo más pequeña, no bajan suavemente como en todos los diagramas. A veces simplemente se agitan un poco (a veces arriba, a veces abajo, quién sabe a dónde va) antes de calmarse y realmente bajar y salir bien en las pruebas.
Entonces, con todo eso en mente, se hace muy difícil evaluar diferentes arquitecturas. Tal vez, para esta arquitectura, funcione, pero para esta otra arquitectura no, y tal vez sea solo por este problema . O tal vez en realidad no importa tanto, y la diferencia sería insignificante. Quién sabe. ¿No vas a pasar toda la eternidad tratando de evaluar la diferencia entre 5 capas medianas y 10 capas pequeñas (y todas las combinaciones intermedias)? Ni siquiera empiece a tratar de encontrar la tasa de aprendizaje y el factor de normalización correctos. Hay una mejor configuración, pero no vale la pena intentar encontrarla si tienes una buena configuración.
- ¿Cuáles son algunos proyectos buenos y pequeños sobre redes neuronales artificiales para estudiantes de informática?
- ¿Cómo afectará la IA el aprendizaje de idiomas y la traducción en los próximos cinco años?
- Con el surgimiento de autos sin conductor en un futuro previsible, ¿convertirse en un conductor de Uber / Lyft es una buena opción de carrera?
- ¿Cuál es la mejor manera de enseñarle a tu IA de bot de chat?
- ¿Cuáles son los métodos que utilizan los algoritmos actuales de traducción automática para tratar la polisemia?
Esta es la razón por la cual la mayoría de la gente realmente no piensa demasiado en la arquitectura, a menos que su objetivo sea idear una mejor. Tiendes a copiar algo que sabes que funciona bien para la tarea en cuestión para otras personas.
Dicho esto, puede ser divertido intentar hacer el tuyo. En cuyo caso, tal vez considere estos:
- Si nos fijamos en las CNN que han ganado la competencia ImageNet, tienen un patrón que puedes copiar.
- Kernel 3 × 3 con zancada de 1 para capas de convolución
- Use relleno para mantener el tamaño de la imagen igual para varias capas en una fila.
- Cuando reduzca la muestra de la imagen, aumente el número de mapas.
- Tus últimas capas son las más importantes; debe asegurarse de que coincidan con lo que desea de la red. El otro día tuve una situación en la que quería una salida de tamaño arbitrario, pero me quedé con un Tanh en el extremo, lo que significaba que la red inmediatamente se estrelló en la salida 1 o -1 y todavía me decían: “¡hazlo más grande! ”
- Tanh para números entre 1 y -1
- Sigmoide para números entre 0 y 1
- Softmax para un solo máximo en un vector
- La elección de la función de pérdida tiene un impacto mucho mayor que cambiar algunas capas.
- Considera cuán difícil crees que es el problema. ¿Quieres una red más grande porque es difícil? Bueno, necesitará mucha más información y mucho más tiempo para entrenar (y más por iteración de entrenamiento). Si crees que es fácil, pero solo necesita encontrar lo correcto, entonces puedes optar por una red más pequeña y entrenarla para más iteraciones.
A continuación, tengo algunas cosas que podrían considerarse opiniones más personales de las que no tengo ninguna evidencia disponible (existe, pero no la tengo):
- Use capas de convolución con una zancada de> 1 para el muestreo descendente (puede aprender lo que necesita). Esto es en lugar de agrupación máxima o agrupación promedio
- ELU tiene más sentido como función de activación que ReLU.
- Batch Normalization (BN) es amor. La normalización por lotes es la vida. Ponlo en todas partes. Es mejor que la deserción (de hecho, con ReLU, BN básicamente está cayendo la mitad de los valores).
- Adadelta funciona => No necesitas una tasa de aprendizaje si solo quieres algo que funcione. Sin embargo, generalmente lo hace un poco peor, así que uso Adamax o Adagrad.
- MSE es la función de pérdida más natural. Pero, debido a cómo funciona, use MSE para predecir valores reales (cualquier cosa de 0 a 1) y entropía cruzada para clasificación (0 o 1, solo).
- Agregar más capas proporciona rendimientos decrecientes muy rápidamente.
Y, por último, solo ten esto en cuenta (sí, sé que me estoy repitiendo). El hecho de que un modelo funcione mejor en una prueba no significa que sea mejor para todo; es simplemente alguna evidencia que lo sugiere. Tal vez su tarea es diferente (pero probablemente no)