Programación funcional en Deep Learning
Anteriormente, los conceptos de «programación funcional» y «deep learning» pertenecían por completo a dos mundos diferentes. Uno de ellos fue un paradigma de programación cada vez más popular a medida que el mundo se volcó hacia la simplicidad, capacidad de compilación e inmutabilidad para mantener aplicaciones complejas de escalado. El otro era una herramienta para enseñar a las computadoras a autocompletar dibujos y hacer música. ¿Dónde estaba la superposición? ¡Vamos a averiguarlo para los futuros estudiantes de ciencia de datos!
Razones para realizar Deep Learning de una manera Funcional
Cuanto más se trabaja con los dos por separado, más empezaba la superposición práctica y teórica. En primer lugar, el Deep Learning no es un esfuerzo independiente. Necesita ser incorporado rápidamente en aplicaciones complejas de escalado en la industria.
En segundo lugar, el Machine Learning, y en particular el Deep Learning, es funcional por diseño. Dado el ecosistema correcto, existen varias razones convincentes para realizar el Deep Learning de una manera totalmente funcional.
¿Qué es el Deep Learning?
Los modelos de Deep Learning son compositivos. La programación funcional consiste en componer cadenas de funciones de orden superior para operar sobre estructuras de datos simples. Las redes neuronales están diseñadas de la misma manera, encadenando transformaciones de función de una capa a la siguiente para operar sobre una matriz simple de datos de entrada. De hecho, todo el proceso de aprendizaje profundo se puede ver cómo la optimización de un conjunto de funciones compuestas. Lo que significa que los modelos mismos son intrínsecamente funcionales.
Los componentes de Deep Learning son inmutables. Cuando las funciones operan sobre los datos de entrada, los datos no se modifican, se produce un nuevo conjunto de valores y se transfieren. Además, cuando se actualizan los pesos, no necesitan ser «mutados», solo pueden ser reemplazados por un nuevo valor. En teoría, las actualizaciones de los pesos se pueden aplicar en cualquier orden (es decir, no son dependientes entre sí). Por lo tanto, no es necesario realizar un seguimiento de un estado secuencial y mutable.
Bases de la programación funcional
La programación funcional ofrece un fácil paralelismo. Lo más importante es que las funciones que son puras y compostables son fáciles de paralelizar. Básicamente, porque paralelismo significa más velocidad y más potencia de cálculo. La programación funcional nos brinda simultaneidad y paralelismo prácticamente sin costo, por lo que es mucho más fácil trabajar con modelos grandes y distribuidos en Deep Learning.
Hay muchas teorías y perspectivas con respecto a la combinación de programación funcional y Deep Learning, desde argumentos matemáticos hasta descripciones prácticas, pero a veces es más convincente (y útil) simplemente para verlo en la práctica. Sobre todo, si queremos que en un futuro analistas de datos y expertos en Data Science implementen estas técnicas en su trabajo.
Redes neuronales
Una de las ideas tras las redes neuronales es que muchas copias de una neurona se pueden usar en una red.
En la programación, la abstracción de funciones es esencial. En lugar de escribir el mismo código docenas, cientos o incluso miles de veces, podemos escribirlo una vez y usarlo cuando lo necesitemos. Esto no solo reduce enormemente la cantidad de código que necesitamos escribir y mantener, sino que también acelera el proceso de desarrollo, pero también reduce el riesgo de que nosotros introduzcamos errores y hace que los errores que hacemos sean más fáciles de atrapar.
Usar copias múltiples de una neurona en diferentes lugares es el equivalente de la red neuronal al uso de funciones. Debido a que hay menos para aprender, el modelo aprende más rápido y aprende un mejor modelo. Esta técnica, cuyo nombre técnico es ‘ajuste de peso’, es esencial para los resultados que hemos visto recientemente en el Deep Learning.
Por supuesto, uno no puede simplemente colocar arbitrariamente copias de neuronas por todos lados. Para que el modelo funcione, debe hacerlo de una manera principal, explotando alguna estructura en sus datos. En la práctica, hay un puñado de patrones que se usan ampliamente, como las capas recurrentes y las capas convolucionales.
¿Por qué utilizar estas técnicas?
Estos patrones de redes neuronales son simplemente funciones de orden superior, es decir, funciones que toman funciones como argumentos. Cosas como esa han sido estudiadas extensamente en programación funcional. De hecho, muchos de estos patrones de red corresponden a funciones extremadamente comunes, como fold. Lo único inusual es que, en lugar de recibir funciones normales como argumentos, reciben trozos de red neuronal.
En el máster de Data Science se estudiará separadamente la programación funcional y el Deep Learning para posteriormente unir los conocimientos y poder utilizarlos. Está claro por qué: son disciplinas realmente complicadas de aprender, sobre todo para los nuevos en la materia. Por ello, es importante entender en qué consisten de forma independiente y después unirlas en la práctica. Precisamente, esa es la base de nuestro máster en Data Science. ¿Te gustaría recibir más información? ¡Consulta nuestra web!
Rellene este formulario para enviarnos cualquier consulta. En breve nos pondremos en contacto contigo.