Saltar al contenido
Home » Blog » Conoce todo sobre el Dropout en redes neuronales

Conoce todo sobre el Dropout en redes neuronales

    Cuando empezamos a trabajar con las redes neuronales es muy sencillo caer en el sobre entrenamiento de los modelos. Actualmente existen varias técnicas para este problema, pero muchas de ellas son bastante costosas de llevar a cabo, y eso es un gran problema con el que hay que lidiar.

    Una de las técnicas más famosas para intentar no sobreentrenar un modelo es el dropout.

    ¿Que es Dropout exactamente?

    Resumiendo mucho se podría decir que es una técnica para hacer las redes neuronales más pequeñas con el tamaño justo para que aprendan lo que tienen que aprender sin a aprender demasiado. Es decir que aplicando en Dropout adecuado nuestra red aprenderá lo justo para que no haya sobreentrenamiento.

    En realidad lo que Dropout hace es ir desconectando neuronas con cada entrenamiento hasta conseguir el valor optimo. Es decir si establecemos un valor de Dropout de un 50% estaremos diciendo que en cada entrenamiento que se haga con la red neuronal se deshabilitará un 50% de las neuronas de esa capa.

    Un buen ejemplo para ver visualmente cómo funciona el dropout, lo podemos ver en el siguiente video, como vemos como mientras se realiza el entrenamiento el algoritmo va probando entre las posibles combinaciones.

    Consejos para usar dropout

    Los principales consejos que hay que tener en cuenta para usar dropdown son los siguientes:

    • Según el autor del artículo en el basamos esta entrada los valores óptimos de son de 20% en la capa de entrada y 50% en las capas ocultas. Aunque yo recomiendo empezar también por 20% en las capas ocultas e ir subiendo hasta un valor máximo de 50%. Un valor más bajo puede no tener efectos y un valor más alto seguramente hará infra entrenamiento.
    • Dropout se comporta mucho mejor en redes grandes que en pequeñas. Lo cual si lo piensas tiene lógica.
    • Usarlo también en las capas de entrada. Algo que mucha gente no hace, y solo lo aplica a las capas de ocultas.
    • Funciona mucho mejor usando la normalización de maxnorm, grandes tasas de aprendizaje y en la optimización un momentum alto.

    Como usarlo

    La forma de usar el dropout es como lo hemos visto en el articulo sobre LSTM. Aunque en esta ocasión no aplicamos alguno de los puntos que indicamos anteriormente (ojo, posible mejora del modelo LSTM), pero sirve muy bien para ver como se ponen las capas de dropout en un modelo.

    model = Sequential()
    model.add(LSTM(50, input_shape=(60, 1), return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(50, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(50, return_sequences=True))
    model.add(Dropout(0.2))
    model.add(LSTM(50))
    model.add(Dropout(0.2))
    model.add(Dense(1))

    Como se puede ver no es algo sumamente complejo, solo es necesario poner la capa del dropout justo de la capa sobre la que queremos hacer esta técnica.

    La salida que obtuvimos para este modelo fue la siguiente:

    Resultados con Dropout

    ¿Qué pasa si no lo usamos?

    Si no usamos está técnica es posible que acabemos teniendo un sobre entrenamiento, ya que, como hemos visto antes, está técnica es lo busca. Al no incluirlo todas las neuronas de la capa funciona y todas aprenden lo que hace que tengamos que ser mucho más precisos en el número de neuronas con el que vamos a entrenar nuestro modelo.

    Por seguir con el ejemplo del articulo sobre LSTM, veamos que sucede si no incluimos dropout.

    model = Sequential()
    model.add(LSTM(50, input_shape=(60, 1), return_sequences=True))
    model.add(LSTM(50, return_sequences=True))
    model.add(LSTM(50))
    model.add(Dense(1))

    Si ejecutamos el código y hacemos todos los pasos como se ve en el artículo al final veremos un salida similar a esta.

    Resultados sin dropout

    Como vemos hay un sobre entrenamiento bastante claro. Al funcionar todas las neuronas el modelo está siendo incapaz de aprender correctamente y está mostrando una especie de copia del estado anterior que tuvo el modelo.

    Conclusiones

    ¿Se pueden crear modelos sin usar dropout? Claro que sí, pero seguramente tardaremos más tiempo en saber cuantas neuronas son necesarias por capa. Por esta razón, está técnica nos hace ahorrar mucho tiempo a la hora de calcular el tamaño óptimo de la red neuronal.

    Como vemos no es una técnica muy complicada de usar y los beneficios pueden ser muchos. Solo hay que tener en cuenta los consejos que el propio autor de la técnica nos mostró en el artículo original y que os he expuesto aquí.

    Si tenéis cualquier duda o mejora del artículo no dudéis en poneros en contacto conmigo y os contestaré lo antes posible.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *