Deep Learning para todos los públicos: ¿Qué son los tensores? ¿Qué es TensorFlow?

Paloma Recuero de los Santos    15 enero, 2019
En el primer post de esta serie, “Atrévete con el Deep Learning: principios básicos al alcance de todos” ya os contamos que una de las características de las redes neuronales que les otorga mayor ventaja frente a otros algoritmos de Machine Learning, es su capacidad para trabajar de forma eficiente con datos no estructurados. Es decir, las redes neuronales nos permiten etiquetar y clasificar cualquier tipo de input. Así, estos datos pueden ser de distintos tipos: números, imágenes, sonidos, textos, series temporales. ¿Y cómo lo consiguen? Lo que hacen es convertiros en  valores numéricos y expresándolos con un formato matemático en el que resulta mucho más fácil identificar patrones: en forma de tensor.
 

Si intentamos buscar en la red ¿Qué es un tensor?, seguramente nos desanimemos ante la avalancha de contenido matemático para expertos, pero no resulta tan fácil encontrar una explicación intuitiva. Daniel Jeffries, en un post de su serie sobre cómo aprender sobre IA cuando “se te dan fatal las matemáticas” (“Learning AI if you suck at Maths”) nos ofrece una explicación clara y divertida sobre tensores (ilustrada con gatos), del que vamos a resumir las ideas principales.

 

¿Por son importantes los tensores en Deep Learning ?

 

Los tensores son objetos matemáticos que almacenan valores numéricos y que pueden tener distintas dimensiones. Así, por ejemplo, un tensor de 1D es un vector, de 2D una matriz, de 3D un cubo etc

 
 
Representación gráfica de tensores de 1 a 5 dimensiones.
Figura 1: Representación gráfica de tensores de 1 a 5 dimensiones.
 
En Python, estos tensores normalmente se almacenan en lo que se conoce como NumPy arrays. NumPy es una de las librerías científicas de Python más se usan en cualquier entorno de trabajo con IA y sirve para manipular números. 

 

Veamos algunos ejemplos concretos.

  • Una lista de números, se puede “guardar” como un vector de 1D
  • Una lista de correos, con 10.000 usuarios, y 6 campos por cada uno (nombre, apellidos, dirección, ciudad, país, código postal) puede almacenarse en un tensor 2D con dimensiones (10.000, 6).
¿Y si en lugar de tener una lista, tenemos 10 listas?
  •  Entonces, es cuando entran en juego los tensores 3D, que se representarían como (10, 10.000, 6), es decir (“número de listas”, “número de personas por lista”, “número de características por persona”).
 
Representación de un tensor 3D.
Figura 2: Representación de un tensor 3D.
Un caso típico de uso de tensores 3D es el análisis de tuits. Los tuits tienen 280 caracteres, y usan el estándar UTF-8. Aunque este estándar permite crear millones de caracteres, sólo nos interesan los primeros 128 que coinciden con los básicos del sistema ASCII. Por tanto, un solo tuit se podría encapsular en un vector 2D con la forma (280, 128). Pero en un análisis de sentimiento típico, no trabajamos con un único tuit. Si lo que que queremos es analizar, por ejemplo, un corpus de 1 millón de ellos, los podemos “encapsular” en un tensor 3D de la siguiente forma (1.000.000,280,128).
 
Por su parte, los tensores 4D, se suelen usar para el análisis de imágenes. Por ejemplo, una imagen en color RGB (Red, Green, Blue), con un tamaño de 750×750 píxeles se puede almacenar en un tensor (750, 750, 3). Pero si lo que queremos es trabajar con un corpus de un millón de imágenes de gatos, con este tamaño y en este formato de color, usaremos un tensor 4D :(1.000.000, 750, 750,3).
 
Representación de cómo una imagen se puede "encapsular" en un tensor 4D.
Figura 4: Representación de cómo una imagen se puede “encapsular” en un tensor 4D.
Las librerías y entornos  frameworks de código abierto para Machine Learning son herramientas de software que están disponibles en la web de forma gratuita. Son, por tanto, una forma muy interesante probar las ventajas que puede aportar el Data Science a una empresa, sin tener que comprometerse antes con entornos propietarios, como pueden se Microsoft Azure o Amazon Machine Learning. 

 

Este tipo de frameworks están sustentados por una gran comunidad de ingenieros y científicos de datos que comparten abiertamente conjuntos de datos y modelos pre-entrenados. Así, en lugar de tener que construir un sistema de reconocimiento de imágenes desde cero, se puede empezar a partir de modelos de clasificación ya entrenados con datos de Imagenet, o construir tu propio modelo basado en estos datos.

En el post anterior también apuntamos que la creación de la librería Tensorflow marcó un hito importante en la historia del Deep Learning. TensorFlow es una biblioteca de software de código abierto para el cálculo numérico que utiliza grafos de flujo de datos. Los nodos en el grafo representan operaciones matemáticas, mientras que los bordes del grafo representan los conjuntos de datos multidimensionales (tensores) comunicados entre ellos.

En 2011 Google Brain, un equipo de investigadores e ingenieros de Google especializados en Inteligencia Artificial, desarrollaron DistBelief, el predecesor de TensorFlow.  A finales de 2015 Google decidió liberarlo y publicarlo como software libre bajo licencia Apache 2. En 2017 liberó una nueva versión con multitud de mejoras, como mejores rendimientos, y la posibilidad de aprovechar las ventajas de ejecutar sobre GPU´s. También, mejoraron integraciones con otras bibliotecas del ecosistema como Keras.

Google lleva ya años aplicando esta tecnología a muchos de sus productos y servicios, como por ejemplo, el componente de generación de respuestas automáticas de Gmail, o el de traducción automática en Google Translator. Pero desde la liberación del software en 2015 la respuesta de la comunidad ha sido espectacular, y tanto startups de Silicon Valley, como grandes corporaciones usan TensorFlow en sus proyectos. Algunos tan conocidas como Uber, Airbnb, Twitter, Airbus o IBM.

Si quieres hacerte una idea de cómo funciona TensorFlow de forma muy visual, puedes visitar esta página web, donde, sin necesidad de programar ni una línea de código, se puede configurar y ver ver en tiempo real cómo aprende una red neuronal.

Ejemplo de visualización del funcionamiento de una red neuronal.
Figura 5: Ejemplo de visualización del funcionamiento de una red neuronal.

Además de Tensorflow,  hay otros frameworks y librerías muy conocidos, como Theano, Torch, scikit-learn, Caffe, Cognitive Toolkit, Pytorch. En este post podéis encontrar un resumen de sus características más importantes, aunque una común a todos ellos es el uso de librerías como cuDNN y NCCL que ofrecen altos rendimientos en el entrenamiento de los algoritmos gracias al uso de GPUs.

Tras este segundo post más teórico, en el siguiente, nos pondremos manos a la obra y crearemos sencillas aplicaciones basadas en algoritmos Deep Learning. ¿te animas a probar?

Y, si quieres profundizar más, también puedes seguir nuestra serie sobre TensorFlow

Deep Learning con Python: Introducción a TensorFlow (Parte I), Instalación, conceptos y comandos básicos
Deep Learning con Python: Introducción a TensorFlow (Parte II, Creación de una neurona y una sencilla red neuronal
Deep Learning con Python: Introducción a TensorFlow (Parte III)Ejemplo de definición una red convolucional para abordar la clasificación de uno de los datasets más conocidos: CIFAR-10 

 

Deja un comentario

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