example machine-learning neural-network deep-learning tensorflow

machine-learning - example - tf layer dropout



¿Por qué la entrada se escala en tf.nn.dropout en tensorflow? (2)

Digamos que la red tenía n neuronas y aplicamos la tasa de abandono 1/2

Fase de entrenamiento , nos quedarían con n/2 neuronas. Entonces, si esperaba la salida x con todas las neuronas, ahora obtendrá x/2 . Entonces, para cada lote, los pesos de la red se entrenan de acuerdo con este x / 2

Fase de Prueba / Inferencia / Validación , no aplicamos ningún tipo de deserción, por lo que la salida es x. Entonces, en este caso, la salida sería con x y no con x / 2, lo que le daría el resultado incorrecto. Entonces, lo que puedes hacer es escalarlo a x / 2 durante la prueba.

En lugar de la escala anterior, específica para la fase de prueba. Lo que hace la capa de abandono de Tensorflow es que, ya sea con abandono o sin (Capacitación o prueba), amplíe la salida para que la suma sea constante.

No puedo entender por qué el abandono funciona así en tensorflow. El blog de CS231n dice que "dropout is implemented by only keeping a neuron active with some probability p (a hyperparameter), or setting it to zero otherwise." También puedes ver esto desde la imagen (Tomado del mismo sitio)

Desde el sitio tensorflow, With probability keep_prob, outputs the input element scaled up by 1 / keep_prob, otherwise outputs 0.

Ahora, ¿por qué el elemento de entrada se 1/keep_prob en 1/keep_prob ? ¿Por qué no mantener el elemento de entrada como está con probabilidad y no escalarlo con 1/keep_prob ?


Esta escala permite que se use la misma red para el entrenamiento (con keep_prob < 1.0 ) y evaluación (con keep_prob == 1.0 ). Del documento de abandono :

La idea es usar una sola red neuronal en el momento de la prueba sin interrupción. Los pesos de esta red son versiones reducidas de los pesos entrenados. Si se retiene una unidad con probabilidad p durante el entrenamiento, los pesos salientes de esa unidad se multiplican por p en el tiempo de prueba, como se muestra en la figura 2.

En lugar de agregar operaciones para reducir los pesos mediante keep_prob en el momento de la prueba, la implementación de TensorFlow agrega una opción para ampliar los pesos en 1. / keep_prob en el tiempo de entrenamiento. El efecto sobre el rendimiento es insignificante, y el código es más simple (porque usamos el mismo gráfico y tratamos a keep_prob como un tf.placeholder() que recibe un valor diferente dependiendo de si estamos entrenando o evaluando la red).