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 también es la respuesta correcta para TensorFlow.
Cuando utilizo la normalización y abandono por lotes en TensorFlow (específicamente usando contrib.layers), ¿debo preocuparme por el pedido?
Parece posible que si utilizo el abandono seguido inmediatamente de la normalización por lotes, podría haber problemas. Por ejemplo, si el cambio en la normalización por lotes se entrena a los números de escala más grandes de las salidas de entrenamiento, pero luego 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 abandono durante las pruebas, entonces eso el turno puede estar apagado. ¿La capa de normalización por lotes de TensorFlow lo compensa automáticamente? ¿O esto no sucede por alguna razón que me falta?
Además, ¿hay otras trampas a tener en cuenta al usar estos dos juntos? Por ejemplo, suponiendo que los estoy usando en el orden correcto en lo que respecta a lo anterior (suponiendo que es un orden correcto), podría haber problemas con el uso de tanto la normalización de lotes y la deserción en múltiples capas sucesivas? No veo un problema de inmediato con eso, pero es posible que me esté perdiendo algo.
Muchas gracias!
ACTUALIZAR:
Una prueba experimental parece sugerir que ordenar es importante. Ejecuté la misma red dos veces con solo la norma de lotes y el abandono inverso. Cuando el abandono se produce antes de la norma de lote, la pérdida de validación parece aumentar a medida que disminuye la pérdida de entrenamiento. Ambos caen 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 así, se agradecería una respuesta más definitiva e informada.
fuente
Como se ha señalado en los comentarios, un recurso increíble para leer en el orden de las capas es aquí . He revisado los comentarios y es el mejor recurso sobre el tema que he encontrado en Internet.
Mis 2 centavos:
La deserción está destinada a bloquear la información de ciertas neuronas por completo para asegurarse de que las neuronas no se adapten conjuntamente. Por lo tanto, la normalización por lotes debe realizarse después de la interrupción, de lo contrario, pasará información a través de las estadísticas de normalización.
Si lo piensa bien, en los problemas típicos de AA, esta es la razón por la que no calculamos la desviación estándar y media de los 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 consideración el comentario de pseudomarvin sobre la respuesta aceptada)
-> CONV / FC -> ReLu (u otra activación) -> Abandono -> BatchNorm -> CONV / FC
a diferencia del esquema 2
-> CONV / FC -> BatchNorm -> ReLu (u otra activación) -> Dropout -> 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
fuente
Por lo general, simplemente suelte el
Dropout
(cuando lo haya hechoBN
):Dropout
en algunos casos, porque BN proporciona beneficios de regularización similares a los de Dropout intuitivamente"Dropout
Para obtener más detalles, consulte este documento [ Comprensión de la falta de armonía entre la deserción y la normalización de lotes por cambio de varianza ] como ya lo mencionó @Haramoz en los comentarios.
fuente
what about MLPs is it useful to combine them
, ¿quiso decir esoIs it useful to combine Dropout and BN when using MLPs
? Mi sensación sobre esto es que depende principalmente del tamaño de su modelo y la cantidad de datos de entrenamiento que tenga.Encontré un artículo que explica la falta de armonía entre Dropout y Batch Norm (BN). La idea clave es lo que ellos llaman "cambio de varianza" . Esto se debe al hecho de que la deserción tiene un comportamiento diferente entre las fases de entrenamiento y prueba, lo que cambia las estadísticas de entrada que aprende BN. La idea principal se puede encontrar en esta figura que se toma de este artículo .
En este cuaderno se puede encontrar una pequeña demostración de este efecto .
fuente
Según el trabajo de investigación para un mejor rendimiento, deberíamos usar BN antes de aplicar Dropouts
fuente
El orden correcto es: Conv> Normalización> Activación> Abandono> Agrupación
fuente
Conv - Activación - DropOut - BatchNorm - Pool -> Test_loss: 0.04261355847120285
Conv - Activación - DropOut - Pool - BatchNorm -> Test_loss: 0.050065308809280396
Conv - Activación - BatchNorm - Pool - DropOut -> Test_loss: 0.04911309853196144
Conv - Activación - BatchNorm - DropOut - Pool -> Test_loss: 0.06809622049331665
Conv - BatchNorm - Activación - DropOut - Pool -> Test_loss: 0.038886815309524536
Conv - BatchNorm - Activación - Pool - DropOut -> Test_loss: 0.04126095026731491
Conv - BatchNorm - DropOut - Activación - Pool -> Test_loss: 0.05142546817660332
Conv - DropOut - Activación - BatchNorm - Pool -> Test_loss: 0.04827788099646568
Conv - DropOut - Activación - Pool - BatchNorm -> Test_loss: 0.04722036048769951
Conv - DropOut - BatchNorm - Activación - Pool -> Test_loss: 0.03238215297460556
Capacitado en el conjunto de datos MNIST (20 épocas) con 2 módulos convolucionales (ver más abajo), seguidos cada vez con
Las capas convolucionales tienen un tamaño de kernel de
(3,3)
, relleno predeterminado, la activación eselu
. El Pooling es un MaxPooling de la piscina(2,2)
. La pérdida escategorical_crossentropy
y el optimizador esadam
.La probabilidad de abandono correspondiente es
0.2
o0.3
, respectivamente. La cantidad de mapas de características es32
o64
, respectivamente.Editar: cuando dejé caer el abandono, como se recomienda en algunas respuestas, convergió más rápido pero tenía una peor capacidad de generalización que cuando uso BatchNorm y abandono.
fuente
ConV / FC - BN - Sigmoide / tanh - abandono. Si la función de activación es Relu o no, el orden de normalización y abandono depende de su tarea
fuente
Leí los artículos recomendados en la respuesta y los comentarios de https://stackoverflow.com/a/40295999/8625228
Desde el punto de vista de Ioffe y Szegedy (2015), solo use BN en la estructura de la red. Li y col. (2018) dan los análisis estadísticos y experimentales, que hay un cambio de varianza cuando los profesionales usan Dropout antes que BN. Por tanto, Li et al. (2018) recomiendan aplicar Dropout después de todas las capas BN.
Desde el punto de vista de Ioffe y Szegedy (2015), BN se ubica dentro / antes de la función de activación. Sin embargo, Chen et al. (2019) utilizan una capa de IC que combina abandono y BN, y Chen et al. (2019) recomienda usar BN después de ReLU.
En el ámbito de la seguridad, uso Dropout o BN solo en la red.
Chen, Guangyong, Pengfei Chen, Yujun Shi, Chang-Yu Hsieh, Benben Liao y Shengyu Zhang. 2019. “Repensando el uso de la normalización por lotes y el abandono en el entrenamiento de redes neuronales profundas”. CoRR abs / 1905.05928. http://arxiv.org/abs/1905.05928 .
Ioffe, Sergey y Christian Szegedy. 2015. “Normalización por lotes: aceleración del entrenamiento de redes profundas mediante la reducción del cambio de covariables interno”. CoRR abs / 1502.03167. http://arxiv.org/abs/1502.03167 .
Li, Xiang, Shuo Chen, Xiaolin Hu y Jian Yang. 2018. "Comprensión de la falta de armonía entre la deserción y la normalización de lotes por cambio de variación". CoRR abs / 1801.05134. http://arxiv.org/abs/1801.05134 .
fuente