tutorial train neural network datacamp convolutional cnn python neural-network tensorflow conv-neural-network

train - tensorflow python



¿Pedido de normalización y abandono de lotes? (5)

Por lo general, simplemente abandone el Dropout (cuando tenga BN ):

  • "BN elimina la necesidad de Dropout en algunos casos porque BN proporciona beneficios de regularización similares a los de abandono intuitivo"
  • "Arquitecturas como ResNet, DenseNet, etc. que no usan Dropout

Para obtener más detalles, consulte este documento [ Comprender la falta de armonía entre el abandono y la normalización de lotes por cambio de variación ] como ya lo mencionó @Haramoz en los comentarios.

La pregunta original se refería específicamente a las implementaciones de TensorFlow. Sin embargo, las respuestas son para implementaciones en general. Esta respuesta general es también la respuesta correcta para TensorFlow.

Cuando uso la normalización por lotes y el abandono en TensorFlow (específicamente usando contrib.layers), ¿debo preocuparme por el pedido?

Parece posible que si uso el abandono seguido inmediatamente por la normalización por lotes, podría haber problemas. Por ejemplo, si el cambio en la normalización de lotes se entrena a los números de escala más grandes de las salidas de entrenamiento, pero ese mismo cambio se aplica a los números de escala más pequeños (debido a la compensación por tener más salidas) sin abandonar durante la prueba, entonces eso el turno puede estar apagado. ¿La capa de normalización por lotes TensorFlow lo compensa automáticamente? ¿O esto no sucede por alguna razón que me falta?

Además, ¿hay otros obstáculos a tener en cuenta cuando se usan estos dos juntos? Por ejemplo, suponiendo que los estoy usando en el orden correcto con respecto a lo anterior (suponiendo que haya un orden correcto), ¿podría haber problemas con el uso de la normalización por lotes y el abandono en múltiples capas sucesivas? No veo inmediatamente un problema con eso, pero podría estar perdiendo algo.

Muchas gracias

ACTUALIZAR:

Una prueba experimental parece sugerir que el orden importa. Ejecuté la misma red dos veces con solo la norma del lote y la deserción inversa. Cuando el abandono es anterior a la norma del lote, la pérdida de validación parece estar aumentando a medida que disminuye la pérdida de entrenamiento. Ambos están cayendo en el otro caso. Pero en mi caso, los movimientos son lentos, por lo que las cosas pueden cambiar después de más entrenamiento y es solo una prueba. Aún se agradecería una respuesta más definitiva e informada.


Como se señaló en los comentarios, aquí hay un recurso increíble para leer sobre el orden de las capas. He revisado los comentarios y es el mejor recurso sobre el tema que he encontrado en Internet.

Mis 2 centavos:

El abandono está destinado a bloquear la información de ciertas neuronas por completo para asegurarse de que las neuronas no se adapten de manera conjunta. Por lo tanto, la normalización por lotes debe ser posterior al abandono; de lo contrario, pasará información a través de las estadísticas de normalización.

Si lo piensa, en los problemas típicos de LD, esta es la razón por la que no calculamos la media y la desviación estándar sobre datos completos y luego los dividimos en conjuntos de entrenamiento, prueba y validación. Dividimos y luego calculamos las estadísticas sobre el conjunto de trenes y las usamos para normalizar y centrar los conjuntos de datos de validación y prueba

así que sugiero el Esquema 1 (Esto toma en cuenta pseudomarvin''s comentario pseudomarvin''s sobre la respuesta aceptada)

-> CONV / FC -> ReLu (u otra activación) -> Dropout -> BatchNorm -> CONV / FC

a diferencia del esquema 2

-> CONV / FC -> BatchNorm -> ReLu (u otra activación) -> Abandono -> CONV / FC -> en la respuesta aceptada

Tenga en cuenta que esto significa que la red del Esquema 2 debería mostrar un ajuste excesivo en comparación con la red del Esquema 1, pero OP ejecutó algunas pruebas como se menciona en la pregunta y son compatibles con el Esquema 2


El orden correcto es: Conv> Normalización> Activación> Abandono> Agrupación


En Ioffe y Szegedy 2015 , los autores afirman que "nos gustaría asegurarnos de que para cualquier valor de parámetro, la red siempre produzca activaciones con la distribución deseada". Por lo tanto, la capa de normalización por lotes se inserta en realidad justo después de una capa de convección / capa completamente conectada, pero antes de alimentar la activación de ReLu (o cualquier otro tipo de). Vea este video alrededor de las 53 min para más detalles.

En cuanto al abandono, creo que el abandono se aplica después de la capa de activación. En la figura 3b del documento de abandono, la matriz de factor / probabilidad de abandono r (l) para la capa oculta l se le aplica en y (l), donde y (l) es el resultado después de aplicar la función de activación f.

En resumen, el orden de uso de la normalización y abandono de lotes es:

-> CONV / FC -> BatchNorm -> ReLu (u otra activación) -> Dropout -> CONV / FC ->