Cuando un área de conocimiento es compleja, es muy bueno encontrar estructura, esquemas sencillos y asimilables que nos ayuden a ver el bosque, sin perdernos entre árboles.
En esa línea, el Deep Learning es una tecnología (o conjunto de tecnologías) compleja: No sólo son complejos los modelos y los algoritmos usados (a pesar de que tras ellos, con cierta frecuencia, se escondan intuiciones más sencillas y asimilables de lo que podíamos esperar) sino que también tiene cierta complejidad el hardware y se trata, finalmente, de un sector confuso por lo dinámico y la variedad de propuestas de implementación software que aparecen en forma de librerías, APIs, herramientas.
Por eso es muy de agradecer el muy claro y sencillo esquema que nos ofrece François Chollet en su libro 'Deep Learning con Python'.
El autor nos explica el panorama global de una forma esquemática y sencilla que se apoya en la siguiente figura:
Vamos a recorrer de abajo arriba, en cuatro fases o capas, los elementos que ahí aparecen.
El Hardware
En la parte inferior nos encontramos con el hardware y ahí se marcan dos ramas claras. Por un lado tenemos la de los ordenadores de propósito general en que sus microprocesadores son las tradicionales CPU (Central Processing Unit) 'de toda la vida'.
En la columna de la izquierda nos encontramos, por su parte, las GPU (Graphical Processing Unit), un tipo de procesador especializado, procedente del campo de los videojuegos (de ahí su nombre) pero que se adapta a las mil maravillas a las necesidades computacionales del machine learning por su capacidad para manejar grandes cantidades de datos sobre los que se realizan operaciones muy repetitivas.
Librerías de bajo nivel
Manejando directamente el hardware se encuentran librerías especializadas de bajo nivel.
Así, en la columna de la CPU , el autor nos menciona BLAS (Basic Linear Algebra Subprograms), una librería escrita en FORTRAN y que realiza operaciones sobre vectores y tensores como la suma de vectores, el producto escalar o el producto de punto.
Por otro lado tenemos Eigen, una librería escrita en C++ que se dedica también a álgebra de matrices y vectores y en la que se apoya, por ejemplo, TensorFlow.
En el lado de las GPU nos encontramos con CUDA (Compute Unified Device Architecture) una plataforma de computación paralela creada por NVIDIA y que se usa con una variante del lenguaje C. aunque también, y mediante wrappers, se puede usar desde Python, FORTRAN o Java. Además, tenemos cuDNN (cuda Deep Neural Network), también de NVIDIA, que proporciona operaciones específicas para redes neuronales profundas, como la convolución.
Las implementaciones de soporte. Librerías intermedias
Apoyadas en éstas, tenemos librerías que ya funcionan tanto sobre CPU como GPU.
Así, nos encontramos con TensorFlow una librería de código abierto creada por Google para la creación y entrenamiento de redes neuronales.
En segundo lugar tenemos Theano, una librería matemática Python apoyada en NumPy y especialmente dedicada a operaciones sobre matrices, una librería concebida como proyecto open source inicialmente lanzado por el MILA (Montreal Institute for Learning Algorithms).
Y en tercer lugar CNTK (CogNitive ToolKit) de Microsoft, ahora rebautizada como Microsoft Cognitive Toolkit, también de código abierto y también dedicada a la construcción de redes neuronales.
Y, finalmente, Keras
Y en la cima de la pila tenemos Keras, de la cual es creador el propio François Chollet, una librería de muy alto nivel escrita en Python para el desarrollo rápido de modelos de Deep Learning.
Conclusión
Evidentemente, el dibujo de la pila y la breve explicación que hemos aportado sobre lo que significa cada elemento, no nos hace sabios en Deep Learning, pero sí proporciona una buena orientación en el mar de nombres extraños que rodean a ésta, como a tantas otras tecnología.
A mí, al menos, me ha venido muy bien.