Cuando se aplica el abandono en redes neuronales artificiales, uno debe compensar el hecho de que en el momento del entrenamiento una parte de las neuronas se desactivaron. Para hacerlo, existen dos estrategias comunes:
- escalar la activación en el momento de la prueba
- invertir el abandono durante la fase de entrenamiento
Las dos estrategias se resumen en las diapositivas a continuación, tomadas de Standford CS231n: Redes neuronales convolucionales para el reconocimiento visual .
¿Qué estrategia es preferible y por qué?
Escalando la activación en el momento de la prueba:
Invertir el abandono durante la fase de entrenamiento:
neural-networks
deep-learning
dropout
Franck Dernoncourt
fuente
fuente
Respuestas:
"invertir el abandono durante la fase de entrenamiento" debería ser preferible.
Teóricamente, si vemos el abandono de Bernoulli como un método para agregar ruido a la red, es mejor que el ruido pueda tener una media cero. Si hacemos el escalado en el momento del entrenamiento para cancelar la porción de unidades desactivadas, la media del ruido sería cero.
Posteriormente, surgieron otros tipos de métodos de abandono / ruido (p. Ej., Abandono multiplicativo gaussiano, ruido aditivo gaussiano ) que también poseen una media cero.
En términos de entrenamiento y prueba de redes neuronales en la práctica, existe una razón para preferir dicha implementación también. Digamos que quiero comparar el rendimiento de dos modelos con la misma arquitectura, uno está capacitado por abandono y otro no.
Si "escalo la activación en el momento de la prueba", necesitaré dos redes diferentes en el momento de la prueba. Si uso la "versión invertida", podría aplicar la misma red de prueba (código) a ambos conjuntos de parámetros entrenados.
fuente
Otra ventaja de hacer el abandono invertido (además de no tener que cambiar el código en el momento de la prueba) es que durante el entrenamiento uno puede ponerse elegante y cambiar la tasa de abandono dinámicamente. Esto se ha denominado abandono "recocido". Esencialmente, la lógica es que agregar "ruido" de abandono hacia el comienzo del entrenamiento ayuda a evitar que la optimización se atasque en un mínimo local, al tiempo que permite que decaiga a cero al final da como resultado una red mejor sintonizada con un mejor rendimiento.
ENTRENAMIENTO DE SALIDA RECOGIDA DE REDES PROFUNDAS
Abandono modificado para el entrenamiento de la red neuronal
fuente
Andrew hizo una muy buena explicación en su curso de Aprendizaje profundo sobre esta sesión Regularización de abandono :
Diga
a3 = a3 / keep_prob
en el último paso de implementación:Z [4] = W [4] * a [3] + b [4] , el tamaño de elemento de a [3] se ha reducido
keep_prob
de D3 (D3 ha eliminado un porcentaje de elementos), por lo tanto, el valor de Z [4] también se reducirá, por lo que para compensar esto aproximadamente invertiremos el cambio dividiéndolokeep_prob
para asegurarnos de que el valor de Z [4] no se vea afectado.fuente