martes, 10 de abril de 2018

IA, Machine Learning, Deep Learning

Hace unas semanas, mientras comía con un grupo de antiguos compañeros de trabajo, estuvimos hablando acerca de como con la tecnología en algunos momentos, uno tiene la sensación de que nos movemos en un mundo cíclico, donde se recuperan viejos conceptos y teorías que no han podido ponerse en práctica por diferentes razones: falta de madurez (ya sea sociedad o aplicaciones de la misma), entornos tecnológicos débiles en aquel momento, etc.

Analizamos estos conceptos que ahora mismo están tan de moda: IA, Machine Learning y Deep Learning. Nos dimos cuenta que en algunos de ellos la frontera de los mismos puede resultar poco clara llegando las personas a mezclar los mismos. La idea principal que hilaba toda la conversación, reside en el hecho de que el Big Data lo ha precipitado, ha hecho posible la eclosión de todas estas técnicas (hablamos en algunos casos de algoritmos con más 40 años de vida) permitiendo el análisis masivo de datos sobre tecnologías que hace 20 años eran sumamente caras y complejas de implantar. Por ejemplo, el procesamiento de imágenes para el reconocimiento facial podía desarrollarse sin excesivos problemas sobre máquinas MPP (Procesador Masivamente Paralelo)  o clusters, pero ¿Cual era el problema?, el coste y sobre todo la implementación de los algoritmos sobre las mismas, como por ejemplo PVM (Parallel Virtual Machine) que permite la distribución de tareas sobre un cluster formado por diferentes ordenadores de muy bajo coste (hablamos de procesadores 286 con las primeras versiones de Linux, puede que algunos los recuerden). Hoy en dia es más sencillo, debemos preocuparnos del algoritmo y sobre entornos como Spark o Hadoop podemos desarrollar los cálculos que necesitemos de una forma más simple. Pero no olvidemos que siempre deberemos tener claro donde debemos paralelizar los algoritmos desarrollando un estudio previo de ganancia sobre los mismos.



IA


Este concepto no es nuevo, quien haya cursado una Ingeniería en Informática u otras a partir de los 90 ha debido cursar asignaturas relacionadas con ella. Lleva dando vueltas desde 1950, cuando Alan Turing creó el test para determinar si un ordenador posee inteligencia real. En 1956 tuvo lugar la primera Conferencia de Inteligencia Artificial en Dartmount, lo que supuso la presentación oficial para este nuevo campo de la ciencia.

En aquellos momentos los planteamientos iniciales eran tratar de desarrollar máquinas que fueran capaces de resolver un problema complejo como lo hacemos los humanos. 

Como todo en este mundo tiende a partirse, esta nueva ciencia no estuvo exenta, surgieron dos tipos  de Inteligencia Artificial:
  • Débil o estrecha (narrow/weak IA) caracterizada por estar especializada en una tarea concreta. Ejemplo típico Deep Blue, creado por IBM en 1996 que fue capaz de ganar al gran maestro de ajedrez Gary Kasparov. O DeepMind´s AlphaGo, creada por Google, que fue capaz de vencer a jugadores profesionales de Go. Como vemos emanan de la Teoría de Juegos que aporta la base para sus algoritmos. Los asistentes digitales como Siri y Cortana son ejemplos de este tipo de IA. Siempre debemos tener en cuenta que no pueden ir más allá de aquello para lo que han sido programados.
  • Fuerte (Strong IA) nos lleva al mundo de la ciencia ficción, con cualidades humanas como la consciencia, la sensibilidad, la sabiduría y el auto conocimiento. Naturalmente, se mantiene más como una aspiración y no como una realidad. 

Machine Learning


Los primeros programas de IA, estaban basado en reglas y eran programados por una persona. En esta nueva forma de IA ya no se dependen de unas reglas y un programador, la computadora puede establecer sus propias reglas y aprender por si misma. Su objetivo es crear un modelo que nos permita resolver una tarea dada, entrenando el modelo por medio de un gran cantidad de datos. El modelo aprenderá de estos datos y será capaz de realizar predicciones que en caso de confirmarse, se podrán sumar a su base de hechos.  Dentro del Machine Learning hay dos métodos principales:

Aprendizaje supervisado (Supervised Learning)

Es una mala traducción por que realmente no hay una persona supervisando, más bien la persona dirige el aprendizaje. Un ejemplo puede ser el sistema de filtrado de SPAM de Google: el usuario ayuda a identificar a Gmail cuáles son los correos electrónicos contienen SPAM. A partir de un punto, ya se han procesado tantos mensajes que el sistema es capaz de extraer un modelo para poder predecir con una alta probabilidad de éxito cuáles de los correos son SPAM

Ejemplo de algoritmos:
  • Clasificación Naïve Bayes.
  • Árboles de decisión.
  • K-vecinos.
  • Modelos de regresión lineal.
  • Métodos de regresión logística.
  • Máquinas de vectores de soporte.
  • Métodos Ensemble.


Aprendizaje no supervisado (Unsupervised Learning)


En este modelo no se introducen ejemplos, sino que es el propio algoritmo el que debe sacar patrones o anomalías para crear un modelo. Pongamos un ejemplo, tenemos un sistema de almacenamiento donde están recogidos datos de miles de personas, con datos importantes como su estado físico y sus hábitos alimenticios. Si queremos saber cuáles son los hábitos menos saludables, tendremos que comparar cada unos ellos con el estado de salud física de la persona hasta que encontremos el patrón. 
Se trata de un ejemplo muy básico y que puede no dar resultado válidos, únicamente estaríamos empleando 2 variables para la consecución del objetivo, pero en cualquier caso nos vale como caso de uso básico.



Ejemplo de algoritmos:


  • Algoritmos de clustering (ej: K-Medidas).
  • Análisis de Componentes Principales (PCA).
  • Singular Value Decomposition.
  • Análisis de Componentes Independientes (ICA).
  • Redes neuronales.
  • Redes de funciones de base radial.

Deep Learning

Uno de los algoritmos de ML que más expectación ha despertado, han sido las redes neuronales. Basado en el funcionamiento del cerebro humano se basa en una idea sencilla: dados unos parámetros hay una forma de combinarlos para predecir un cierto resultado. Ej: sabiendo los pixels de una imagen debemos poder saber si hay un número presente en la misma y de cual se trata.

Cuando hablamos de Deep Learning, hablamos de una clase de algoritmos de Machine Learning basados en redes neuronales. Se considera que el aprendizaje profundo surgió en los años 80 a partir de redes neuronales de entre 5 y 6 capas. El neocognitrón, creado por el investigador japonés Kunihiki Fukushima se considera la primera aplicación práctica. No existe un límite establecido para el número de capas que debe tener una red neuronal para que pueda considerarse Deep Learning. En la actualidad se trabaja en redes neuronales por encima de 20 capas, capaces de procesar más de 100 variables de entrada, generando sobre 20 variables de salida. 

Las redes neuronales han demostrado ser muy efectivas en la identificación de patrones.




Como aplicaciones prácticas podemos encontrar:
  • Coches autónomos.
  • Colorear imágenes en blanco y negro.
  • Análisis y generación de informes.
  • Predecir el resultado de procedimientos judiciales.
  • Procesamiento del lenguaje natural.
  • Optimización de rutas comerciales.
  • Reconocimiento de voz e imágenes.
  • Reconocimiento de gustos de usuarios.

Retos del Machine Learning & Deep Learning

La necesidad para entrenar estas complejas redes de neuronas requiere aumentar la capacidad de procesamiento. Una de las mejoras llevadas a cabo estos años ha sido el uso de GPUs para realizar estos trabajos de manera eficiente. Esto ha ahorrado la necesidad de disponer de gran cantidad de ordenadores para realizar los cálculos. NVIDIA es uno de los principales impulsores de esta tecnología adaptando muchos de sus componentes a esta nueva realidad, tanto en la investigación como en el uso de procesadores para la IA de forma autónoma como en los vehículos o drones.

Otro de los retos más importantes es optimizar el uso de grandes volúmenes de datos para extraer patrones de ellos. Se requiere adecuar el almacenamiento de esos datos, indexarlos, y que el acceso sea lo suficientemente rápido para que pueda escalar horizontalmente. Para ello disponemos de framework en Big Data como Hadoop y Spark, que acompañados de una amplia variedad de bases de datos NoSQL cumplen las expectativas.

El problema no es ofrecer una precisión del 90% ni tan siquiera del 99%, cuando hablamos de que las máquinas piensen por nosotros o, incluso, conduciendo un vehículo de forma autónoma, es preciso disponer de un 99,999% de precisión. Ahí es dónde está el verdadero reto del Deep Learning.

Después de los últimos accidentes de coches autónomos en EEUU, algunos científicos están comenzando a defender la introducción del concepto de incertidumbre para hacer la IA más segura. Se basa en añadir a las redes neuronales la capacidad de saber que se están equivocando en su predicción, por medio de modelos de probabilidad o lógica difusa se pueden introducir estas nuevas variables que ayudarán a conseguir el 99,999% de precisión. 


miércoles, 31 de enero de 2018

Athena

Athena es un servicio de consultas interactivo para el análisis de datos, no estructurados, semiestructurados y estructurados sobre Amazon S3 bajo SQL estándar. Carece de servidor (Serverless) por lo que no se requiere la administración de infraestructura.

            Athena nos permite trabajar directamente con SQL estándar siendo muy sencillo de implantar y comenzar a trabajar, únicamente disponiendo de habilidades SQL se pueden analizar conjuntos de datos a gran escala de forma rápida y sencilla. Tampoco es necesario realizar trabajos complejos de ETL para preparar los datos para su análisis. En proyectos de Big Data, estas fases pueden llegar a suponer un máximo del 70% del tiempo empleado durante todo el proyecto, respondiendo un 30% a procesos de análisis de datos propiamente dichos.
Se puede integrar de serie con el catálogo de datos de AWS Glue, lo que permite crear un repositorio de metadatos unificado en diversos servicios, rastrear fuentes de datos para descubrir esquemas y rellenar catálogos con definiciones de particiones, tablas nuevas, modificadas y mantener las versiones de los esquemas. Glue también ofrece capacidades de ETL para transformar datos o convertirlo en formatos de columna.

            Athena nos plantea una opción interesante a la hora de comenzar a aplicar un proceso análisis de información sobre un conjunto de datos almacenados en S3, de forma rápida y sencilla empleando técnicas de Data Mining y de esta manera reduciendo los tiempos de desarrollo e implantación al mínimo de enfoques tradicionales. 

La analítica descriptiva consiste en almacenar y realizar agregaciones de datos históricos, visualizándolos de forma que puedan ayudar a la comprensión del estado actual y pasado del negocio. La analítica descriptiva nos cuenta cómo ha funcionado nuestro negocio hasta la fecha. Nos permite, por ejemplo:

  • Detectar qué fármacos tiene una mayor efectividad.
  • Visualizar cómo se distribuyen geográficamente las personas que toman parte en un estudio clínico.
  • Observar la evolución histórica del gasto en fármacos por periodos temporales y/o geográficos.
  • Identificar qué fármacos tienen una mayor efectividad por rango de edades y/o dosis durante el estudio recibidas.
  • Proyecciones de cara a futuro teniendo en cuenta el comportamiento actual.
  • Clusterización, permite fijar sobre la población el conjunto de grupos posibles, en base a sus características pudiendo determinar para un nuevo individuo su cluster determinado por sus propiedades.
  • Calcular y visualización de KPIs, que resumirán el estado del negocio.

¿Cómo funciona ? La analítica descriptiva se basa en trabajar sobre un sistema de almacenamiento donde se encuentran concentrados los datos de negocio. Este sistema puede tratarse de ficheros distribuidos al estilo Hadoop y derivados, bases de datos NoSQL, o sistemas SQL más tradicionales; todo ello dependiendo de la cantidad y complejidad de los datos a manejar. Sobre esta capa de almacenamiento se despliegan tecnologías que permitan el procesado de estos datos de forma que puedan efectuarse las agregaciones y consultas necesarias para el análisis. Es en este punto donde Athena nos permite una integración totalmente transparente, pudiendo procesar casi cualquier fuente de datos.

A la hora de trabajar con Athena nos podemos encontrar los siguientes componentes:
Ø  Los datos subyacentes, representados dentro de un bucket en Amazon S3.
Ø  Los metadatos, tablas y bases de datos, que serán gestionados por medio de AWS Glue Data Catalog.
Ø  Visualización y ejecución de consultas SQL estándar. Podremos trabajar directamente sobre la consola de AWS, por medio de una conexión JDBC y un visor SQL, empleando el API de Athena, o bien AWS CLI, que se trata de una herramienta de código abierto basada en el AWS SDK for Python (Boto) que proporciona comandos para interactuar con los servicios de AWS.

Ø  Herramientas de BI. De todo el abanico de posibilidades una de las más sencillas de usar y que mayor funcionalidades y capacidades de integración aporta es Tableau. Nos permiten desarrollar de una forma visual y totalmente intuitiva desarrollar el análisis de los datos, pudiendo introducir la agregaciones necesarias y la combinación de diferentes fuentes de datos.

Vamos a desarrollar un pequeño ejemplo, para ello vamos a disponer de un pequeño fichero que va a contener información sobre estudios clínicos, estos van a contener información para los diferentes pacientes con sus enfermedades asociadas, fármacos empleados, coste de los fármacos, fechas en las cuales se ha tomado parte, dosis empleadas, etc.
      
      En Athena, las tablas y bases de datos son definiciones de metadatos que definen un esquema para los datos fuente subyacentes. Se utiliza AWS Glue Data Catalog para almacenar y recuperar estos metadatos cuando se ejecutan consultas sobre el conjunto de datos subyacente. Las bases de datos son un agrupamiento lógico de tablas y al igual que las tablas, se consideran metadatos.
Los metadatos de una tabla indican a Athena dónde se encuentran los datos subyacentes (Amazon S3), especificando la estructura de los datos de origen y el esquema de la tabla (nombres de columna, tipos de datos y el nombre de la tabla). AWS Glue tiene características interesantes a la hora de descubrir automáticamente el esquema de los datos y poder extraer, transformar y cargar datos (ETL). 

Lo primero que tendremos que hacer es crear la infraestructura, para ello tendremos que crear un bucket donde vamos a alojar el conjunto de ficheros con los datos. En la siguiente imagen el segundo bucket creado corresponde con el alojamiento de nuestros datos.




Lo siguiente que haremos será crear la estructura del servicio de Athena: la BD junto con las tablas asociadas, en nuestro caso vamos a emplear una única tabla. En la siguiente imagen podemos ver la BD (datosclinicos) y la tabla asociada Historial, con el conjunto de campos definidos, junto con la especificación del formato del fichero a cargar y la localización de S3.




Debemos mencionar que será necesario dotar de todos los permisos necesarios a los usuarios que vayamos a emplear sobre Athena por medio de IAM. Para ello crearemos un usuario que tendrá los siguientes políticas: AmazonS3FullAccess, AmazonAthenaFullAccessSobre los bucket creados en S3, deberemos de aplicar políticas especificas de lectura sobre el bucket de datos y escritura sobre el bucket que emplea Athena para la gestión del servicio.

A la hora de ejecutar una consulta, Athena utiliza Presto como motor SQL distribuido de código abierto. Puede procesar datos de diferentes orígenes de datos, incluido HDFS (Hadoop Distributed File System) y Amazon S3.

            La visualización y ejecución de las consultas, al disponer de conexión por medio de JDBC podremos emplear multitud de herramientas, como por ejemplo DBeaver. Bastará con que descarguemos y configuremos el driver para acceder correctamente y comenzar a trabajar.






            Trabajar con una herramienta de BI, como Tableau, nos aportará una potencia extra en el análisis. Como hemos mencionado antes nos aportará una solución completa de una forma sencilla, nos basta con ir componiendo los datos sobre los que se basa nuestro análisis de forma visual y en caso de que fuera necesario calcular algún agregado de forma sencilla lo podremos desarrollar, como por ejemplo en la imagen adjunta "% Efectividad". En la siguiente imagen estamos analizando la efectividad de los fármacos sobre las diferentes provincias de la comunidad autónoma de Andalucía para un subconjunto de enfermedades (Alergia, Colesterol, Diabetes, Migraña, Problemas Cardíacos y Tumores), de forma anual, realizando un pronóstico de cara a los próximos dos años basado en la media de la información recopilada.










Machine Learning soluciones a los problemas

  El aprendizaje automático, o Machine Learning (ML), es una rama de la inteligencia artificial que se centra en la creación de sistemas que...