Abandono: escalar la activación versus invertir el abandono

9

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:

ingrese la descripción de la imagen aquí

Invertir el abandono durante la fase de entrenamiento:

ingrese la descripción de la imagen aquí

Franck Dernoncourt
fuente
¿Por qué deberíamos escalar lugar de ? Mi intuición es que cuanto más abandono, más debemos compensar, ¿verdad? Observe la relación entre la tasa de abandono y el factor de reescalado: <br> <br> <br> <br> <br> <br> <br> <br>1p11pdropout>1p>11p0.2>5>1.250.5>2>20.8>1.25>5
Ken Chan
"cuanto más abandono, más debemos compensar" Correcto, es por eso que usamos 1 / p. Si p = .1 para que el 90% de las salidas se eliminen, necesitamos escalar esos valores en 10. Tenga en cuenta que 1 / .1 = 10, mientras que 1 / (1-.1) = 1 / (. 9) = 1.1.
Tahlor

Respuestas:

5

"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.

dontloo
fuente
Permítanme asegurarme de que estoy entendiendo correctamente: ¿el modelo no invertido entrenado en abandono tendría una arquitectura diferente, porque necesitaría implementar la multiplicación por p en cada capa? Entonces, ¿la computadora lo ve como topológicamente diferente?
Eric Auld
@EricAuld hola, perdón por la respuesta tardía, sí, eso es básicamente lo que quise decir, solo por "aplicar la misma red de prueba" me refería a que no necesitarás cambiar el código.
dontloo
4

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

JPJ
fuente
2

Andrew hizo una muy buena explicación en su curso de Aprendizaje profundo sobre esta sesión Regularización de abandono :

  • El abandono invertido es más común porque facilita mucho las pruebas
  • El propósito de la inversión es asegurar que el valor Z no se vea afectado por la reducción de W.

Diga a3 = a3 / keep_proben 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_probde 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éndolo keep_probpara asegurarnos de que el valor de Z [4] no se vea afectado.

ingrese la descripción de la imagen aquí

xmindata
fuente