¿Cómo se reduce el tamaño de una red neuronal profunda sin gastar grandes recursos para reentrenarla?

Puede intentarlo, pero si la red se dimensionó de manera sensata, eso no debería funcionar bien. En una red de feedfoward normal sin recurrencia ni derivación, cada capa codifica una representación completa de los datos, adecuada para la tarea que está tratando de resolver. Si elimina unidades, interrumpirá esa representación de maneras bastante impredecibles. Podrías intentar hacerlo bien, tal vez observando neuronas con pesos de entrada y salida similares y “fusionándolos” combinando los pesos de alguna manera, pero no tengo idea de si realmente funcionaría mejor que eliminar neuronas al azar (es solo una idea de mi cabeza, no tengo idea si ya se había probado).

El enfoque opuesto, eliminar las capas superiores, es más sensible y bastante común. Por ejemplo, hay algunos trabajos publicados que comienzan desde la famosa red VGG 16 (que tiene 16 capas, fue entrenada en el conjunto de datos ImageNet durante varias semanas usando muchas GPU Nvidia Titan X por el Cambridge Visual Geometry Group, que amablemente hizo los pesos públicamente disponible en línea), elimine las capas superiores, reemplácelas por otra cosa y capacite a la red modificada en otra tarea.

No he leído ningún documento al respecto, pero tuve una idea de cómo podría hacer esto hace un rato. Si lo hace y funciona, hágamelo saber. No debería ser tan difícil de hacer.

Para reducir el número de neuronas en una capa de convolución, simplemente tiene que eliminar los mapas de características de salida que, en general, no contribuyen mucho.

  1. Hacer una matriz de 0s; uno para cada mapa de características. Estos mantendrán las contribuciones generales de cada mapa de características.
  2. Pase su conjunto de entrenamiento a través del modelo con pases hacia adelante y, después del pase hacia adelante de cada ejemplo, agregue la suma del valor absoluto de las activaciones de la neurona a la ranura del mapa de características relevante en el tensor realizado en el paso 1.
  3. Clasifique las contribuciones de los mapas de características en general (suponiendo que esté usando mapas de características de normalización por lotes en todas las capas son comparables, porque todos los valores deberían estar cayendo aproximadamente en el mismo rango). Luego descarte alguna proporción de los mapas de características (tal vez 30% o lo que sea) que contribuyan menos.
  4. Probablemente necesitará volver a ajustar los parámetros para obtener un rendimiento comparable, pero no llevará mucho tiempo. Una época más o menos.

Solo quiero enfatizar que esta es solo una idea que he tenido, y no he probado su efectividad. Solo lo probaría si nadie más tiene mejores ideas.

Razón por la que puede no funcionar; La contribución de las neuronas que detectan eventos más raros será menor. Por lo tanto, puede ser que esté descartando información útil, pero poco común. Dicho esto, hay mucha redundancia en las redes neuronales profundas, por lo que podría estar bien.

Además, la eliminación de mapas de características aleatorias significa que el número de mapas de características en una sola capa ya no es una potencia de 2, lo que puede no estar permitido, dependiendo de su marco.

Buena suerte.

More Interesting

Tengo un conjunto de datos con una combinación de datos cualitativos y cuantitativos, ¿cómo puedo inferir una relación o sensibilidad entre las columnas?

¿Por qué el aprendizaje profundo solo funciona bien en datos no estructurados?

¿En qué se diferencia el aprendizaje automático de la minería de datos?

¿Qué es el LSTM?

¿Debería incluirse el error de salida en la retropropagación en el bucle?

Cómo validar mi sistema de recomendaciones sin datos previos de interacción del usuario

¿Siri es una forma de aprendizaje automático?

Todos dicen que el aprendizaje automático ocupará trabajos de un gran no. de personas, ¿es esto cierto? ¿Hay algún lado positivo?

¿Cuál es un algoritmo de detección de imagen apropiado para detectar corrosión / óxido?

¿Cuáles son las buenas heurísticas para elegir el tamaño de un lote en el entrenamiento de la red neuronal?

¿Qué hace exactamente esta función, tf.nn.embedding_lookup (), en TensorFlow?

¿Se ha resuelto el problema de reconocimiento de caracteres escritos a mano?

¿Cómo calificaría un buen algoritmo, buenos datos, buena ingeniería de características en términos de efectividad para el aprendizaje automático?

¿Cuál es el mejor código de Python que extrae todas las frases y parte de las etiquetas de voz (POS) de una oración?

Hipotéticamente, ¿sería posible cultivar tejido cerebral usando células madre y luego usarlo como un procesador distribuido para tareas de aprendizaje complejas?