Batchnormalize, Dropout y número de capas
Estoy aprendiendo batchnormalisation y dropout. Visto esto en https://www.kaggle.com/ryanholbrook/dropout-and-batch-normalization.
El modelo
model = keras.Sequential([
layers.Dense(1024, activation='relu', input_shape=[11]),
layers.Dropout(0.3),
layers.BatchNormalization(),
layers.Dense(1024, activation='relu'),
layers.Dropout(0.3),
layers.BatchNormalization(),
layers.Dense(1024, activation='relu'),
layers.Dropout(0.3),
layers.BatchNormalization(),
layers.Dense(1),
])
Mi pregunta es, ¿ponemos dropout antes de batchnormalization (BN) o después? ¿Los resultados son los mismos?
Mi entendimiento es que dropout “desactivará” la neurona en la capa siguiente (disculpe mi terminología). Entonces, si lo pongo antes de BN, ¿BN normalizará incorrectamente ya que no es la salida completa de la capa anterior?
¿Deberíamos poner dropout después de BN? ¿Importa?
davy.ai
Según el artículo publicado en Kaggle, se recomienda generalmente colocar la Normalización por Lotes antes de la Desactivación en el modelo. Esto se debe a que la desactivación elimina de manera aleatoria neuronas durante el entrenamiento, lo que puede hacer que las estadísticas de la normalización por lotes fluctúen. Al colocar la normalización por lotes antes de la desactivación, estamos normalizando las entradas y esto facilita que la desactivación aprenda patrones significativos sin que la normalización interfiera.
Dicho esto, es importante tener en cuenta que el orden de estas dos capas no siempre es relevante y, en última instancia, la efectividad de un modelo puede depender de múltiples factores, como la arquitectura específica y el conjunto de datos utilizado.