Deep learning for Java
En estos momentos se ha desatado una fiebre con lo del "Deep Learning", que son redes neuronales de las que estudiamos cuando la tesis del Casti. Ahora se han generalizado las matemáticas, se utilizan combinaciones de los distintos tipos de redes que se inventaron, y hay hardware (sobre todo las nuevas GPUs) que permiten aplicarlas a problemas interesantes. El hecho de que esto haya pasado ahora probablemente es una cuestión de capacidad de proceso, más que de teoría.
El caso es que la cosa se ha vuelto muy interesante, y tenemos una herramienta nueva, de una naturaleza totalmente diferente a los lenguajes de programación tradicionales, y que permite resolver varias clases de problemas. Principalmente clasificación y reconocimiento de patrones. Pero esta vez los conceptos y los patrones pueden ser complejos.
Todavía faltan muchas piezas para construir algo parecido a la capacidad cognitiva de los humanos. Modulación de la atención, memoria episódica, memoria de trabajo, razonamiento abstracto (simbolos), y un montón de cosas más que ni siquiera entendemos claramente.
Sin embargo, con cada aspecto de nuestra inteligencia que conseguimos modelar con máquinas siempre pasa lo mismo: la máquina lo hace mucho mejor que nosotros. Por ejemplo haciendo sumas, jugando al ajedrez, recordando información, indexándola, buscándo en ella, transmitiéndola.
Ahora tendremos máquinas que son capaces de reconocer patrones y establecer clasificaciones de una forma mucho mejor que un humano.
Esto se puede aplicar en muchos campos: Seguridad (reconociendo situaciones anómalas), traducción de textos, reconocimiento de imágenes, reconocimiento de voz, diagnóstico médico, detección de fraudes, estrategias de inversión, márketing, personalización y mil cosas que aún no se han pensado. Y en todas estas aplicaciones la máquina lo hará de una forma tan superior a los humanos que ni siquiera intentaremos establecer comparaciones. De la misma forma que no comparamos la capacidad de una calculadora de bolsillo con la de un humano a la hora de hacer cuentas.
Cuando el sistema de seguridad de un aeropuerto pida a los guardias que arresten a un tío que no parece diferente a los otros, y se compruebe que es un carterista, nadie se parará a pensar cómo ha llegado el sistema de seguridad a esa conclusión. Bueno, quizá al principio. La explicación podría ser la que daría Sherlock Holmes en uno de sus casos: "Tenía unos zapatos de una marca que llevaban otros carteristas que hemos pillado. En lugar de moverse por el aereopuerto en las mismas direcciones en que se mueven los viajeros normales pasó dos minutos más de lo normal en la zona donde más aglomeración había. Sus rasgos concuerdan con los de un clan familiar que se dedica a esto. Y el coche de dónde salió, sigue parado a la puerta y en marcha". Luego nos acostumbraremos a no preguntar.
Ya lo estamos sufriendo con Facebook. Aunque tú no subas información personal, otra gente lo hace. Facebook busca tu cara en las fotos que suben otros y las etiqueta. Aunque no tengas página, Facebook tiene un perfil tuyo. Como diría el Cyborg, la resistencia es inútil.
Bueno, a lo que viene todo esto es a que hay un grupo de gente haciendo código abierto en java con implementaciones de deep learning:
http://deeplearning4j.org/
Ahora mismo lo que me gustaría es estar en el paro y tener tiempo para meterme a fondo con ello. Al fín y al cabo los conceptos son los que hemos estado manejando todos estos años. No debería ser muy difícil ponerse al día. Sólo que esta vez los podría aplicar a problemas que no sean púramente teóricos.
Comentarios