Si no todos los que cocinan son Chefs y los que conducen no son Pilotos, ¿Crees que trabajar con datos es suficiente para que alguien sea un Científico de Datos?
En los últimos dos años no hay clase que no me pregunte por el Deep Learning, el último buzzword de moda en la Ciencia de Datos, impulsado por la proliferación de librerías (Tensorflow, Caffe, Keras, H2O, …) que ponen al alcance de nuestra mano estos potentes algoritmos para entrenar modelos de Deep Learning.
Normalmente en mis clases suelo contar la siguiente analogía para evitar que caigan en el agujero negro de la moda y la ilusión que suponen estos modelos:
“El Deep Learning es elegante y potente como un Ferrari. Pero ¿qué pasa cuando le dejamos un Ferrari a alguien de 17 años?, probablemente se estampe en la primera curva, aunque la sensación de velocidad en la primera recta es impresionante«. En mi opinión, los Ferraris (modelos de Deep Learning) deben utilizarse por dos tipologías de personas: los pilotos profesionales en las carreras más exigentes o por pilotos veteranos que van a utilizarlos para lucir palmito a 80 km/h.
Un Ferrari no es siempre la mejor alternativa para desplazarse y su elegancia y potencia puede que no compensen su precio para la mayoría de los usuarios. De la misma manera, los algoritmos de Deep Learning no son los más apropiados para la mayoría de los problemas y su complejidad y necesidad de información no justifica su uso en la mayoría de los casos.”
Pero, ¿Qué es el Deep Learning? El Deep Learning es un subconjunto de modelos de Redes Neuronales que tratan de aprovechar los entornos distribuidos para poder entrenar Redes Neuronales muy complejas imitando el cerebro humano. En este sentido, las redes neuronales están conformadas por neuronas que se relacionan entre sí para poder llegar a una conclusión. Esta puede ser determinar si en una foto aparece un gato, a qué número corresponde un grafismo o si un cliente abandonará la compañía.
Si tratamos de entender que es una red neuronal sencilla, tenemos que comprender cuales son sus elementos, las neuronas. Una neurona no es más que un decisor, que recibe varios inputs y los transforma en un output. En el caso del ejemplo del gato, podemos tener decisores que respondan sí o no a las preguntas sencillas como las siguientes: ¿aparecen ojos (en la foto)?, ¿las orejas son puntiagudas?, etc…, la combinación de estos decisores junto con otros más complejos, permite predecir si en la foto aparece un gato o no.
En teoría es muy potente, pero para poder entrenar/enseñar a una neurona, se necesita una cantidad ingente de datos, de los que normalmente no se dispone. Este suele ser el mayor reto a la hora de utilizar redes neuronales.
En uno de los Máster en los que doy clase les pido a los alumnos hacer un modelo de predicción de contratación para un producto financiero. Normalmente les recomiendo hacerlo con modelos sencillos puesto que el objetivo es entender el uso del modelo y su puesta en valor en el negocio. Un alumno me consultó sobre un problema que estaba teniendo, quería explorar modelos más complejos de redes neuronales para tratar de obtener un modelo más fiable. Cuando entrenaba el modelo encontraba patrones inimaginables que le permitían clasificar de forma correcta prácticamente todos los casos de entrenamiento, sin embargo, al ponerlo a trabajar sobre datos nuevos no conseguía acertar de forma acorde. El alumno no sabía el porqué, además, había seguido todas las indicaciones que había encontrado en una página web sobre redes neuronales.
Hicimos el siguiente ejercicio, le pregunté por el número de variables, 40 y por el tamaño de la red neuronal que había considerado. Se trataba de una red neuronal con 3 capas intermedias de 32, 32 y 16 neuronas y un decisor final. Prácticamente era una red neuronal de juguete. Nos pusimos a contar cuántos coeficientes tenía la red neuronal. Así, cada neurona de la primera capa tiene 40 inputs más el término independiente, por lo que tenemos 41*32=1.312 coeficientes en la primera capa, 33*32=1.056 coeficientes en la segunda, 33*16= 528 coeficientes en la tercera y 17 coeficientes en la última, en total 2.913 coeficientes. Aquí, la pregunta clave es cuántos registros son necesarios para poder entrenar una red de estas características que sea estable y sobre todo, generalizable. Si consideramos una aproximación utilizando cómo número máximo de coeficiente la raíz cuadrada del número de registros (particularmente me parece muy optimista), necesitaríamos 8.485.569 registros de entrenamiento para poder entrenarla (siendo muy optimistas). Muy lejos quedaban nuestros 900.000 registros totales. Está claro que 9 millones de registros no son muchos, en general, las empresas cuentan con bases de datos mucho más grandes, pero cuando hablamos de tablones de modelado, tener 9 millones de registros es una barbaridad que pocas compañías afrontan. Si cada registro representa a un cliente, una maquinaria, una línea de teléfono, un producto, etc… ¿Quién tiene 9 millones de clientes (maquinarias, productos, etc…) a los que les vayas a plantear un modelo analítico?, en España, se cuentan con los dedos de una mano.
Sirva este ejemplo para mostrar la complejidad que puede tener una red neuronal y la necesidad de datos, incluso aquellas redes neuronales muy pequeñas. Si que es cierto, que se han desarrollado técnicas para poder lidiar con estos casos, pero requieren de un conocimiento muy avanzado en redes neuronales que no se consigue leyendo 2 páginas webs y copiando un código de github. Con esto último es muy sencillo “darle a una tecla” y obtener una red neuronal entrenada/enseñada. Otra cosa es si será generalizable, si extraerá conocimiento que nos ayude a mejorar nuestro negocio y si sabremos utilizarla. Pero esto lo dejamos para los pilotos profesionales, que pare eso entrenan tantas horas al día.
Para comprender las redes neuronales, la clave son las neuronas, las cuales tenemos que conocer perfectamente, al igual que el piloto profesional se preocupa no sólo en conducir sino en comprender la mecánica y los elementos que la componen. Para ello hay que comprender la neurona desde varios puntos de vista: Desde el punto de vista estadístico, la neurona es una distribución estadística que es combinación lineal de otras distribuciones a través de una función de link. Desde el punto de vista geométrico, la neurona es un hiperplano afín que permite separar o distanciar puntos en el espacio. Desde un punto de vista algebraico, la neurona es una aplicación sobreyectiva representada por una matriz de transición. Desde un punto de vista analítico/topológico es una aplicación continua que transforma las distancias. Gracias a los algoritmos recursivos que nos aporta la informática podemos enseñar a estas neuronas a tomar decisiones.
Cada enfoque requiere un conocimiento profundo de las bases científicas, por lo que recomiendo encarecidamente que antes de conducir un Ferrari, aprendamos a gatear, andar, montar en bici y conducir, que no es lo mismo que pilotar. Más adelante, con la experiencia adecuada y el conocimiento consolidado, se podrá competir en carreras de velocidad.
Una respuesta a “Deep Learning, la última tecnología cognitiva. ¿Debería utilizarla?”