Deep Learning Software Frameworks Deep Learning interest Group, CCC, INAOE Leonardo Chang, Nelson Méndez y Leyanis López Centro de Aplicaciones de Tecnologías de Avanzada (CENATAV), La Habana, Cuba Mayo de 2016 1
Librerías más utilizadas Eblearn.lsh LUSH neuralnetworks Lasagne MatConvNet RNNLIB CUV Library Elektronn NeuralDesigner deepmat Caffe Nengo OpenNN cudamat Theano Generalized Hebbian Learning Theano CNTK Learning Deep Boltzmann Machines mcrbm RNNLM Tensorflow mpot MXNet Deep Learning Tutorials Blocks Pylearn2 MShadow Deep Belief Networks Torch Cuda-Convnet deeplearning4j DeepLearnToolbox Estimating Partition Functions of RBM s CXXNET 3-way factored RBM Eblearn Keras matrbm 2
: es uno de los framework de Deep Learning más populares y ampliamente utilizados. Implementa eficientemente redes de convolución para imágenes en C/C++. No está diseñada para otras aplicaciones como texto, sonido o series de tiempo. Ventajas: Bueno para redes de feedforward y de procesamientos imágenes. Permite de manera sencilla el uso del entrenamiento del GPU usando todas sus potencialidades. Entrenamiento de modelos sin necesidad de escribir código. Interfaz en Python, Matlab, C/C++ para el manejo a alto nivel. Limitantes: No es eficiente para redes neuronales recurrentes (RNN). Engorroso uso para el trabajo con redes de grandes dimensiones. Desarrollada solo para Linux, aunque existe una versión no mantenida por ellos para Windows. 3
: es una biblioteca de Python que permite definir, optimizar y evaluar expresiones matemáticas que implican matrices multidimensionales, de manera eficiente. Ventajas: Cuenta con APIs de alto nivel (Keras, Lasagne y Blocks) que mejoran su engorroso uso directo. Uso de Python mediante numpy que permite facilidad del uso del lenguaje. Transparencia en el uso del GPU. Realiza cálculos intensivos de datos hasta 140 veces más rápido que con la CPU (sólo con float32). El uso de diagramas de flujos permite una abstracción más agradable, además de que las Redes Neuronales Recurrentes (RNN) se engranan muy bien con estos. Evaluador de expresiones rápido mediante la generación de código dinámico en C. Limitantes: Theano en su manera básica es de muy bajo nivel, lo que hace su uso directo muy engorroso. Los mensajes de errores son de muy poca ayuda. En el modelado de grandes dimensiones se puede tomar tiempos largos en compilar. Solamente soporta un GPU. 4
: es un framework con un amplio soporte para los algoritmos de aprendizaje de máquinas que prioriza el uso del GPU. Es muy fácil de usar y muy eficiente gracias a la sencillez de las líneas de comando LuaJIT y una implementación subyacente de C/CUDA. Ventajas: Varios modelos pre-entrenados. Es sencillo escribir tus propios tipos de capas Limitantes: Es con código Lua (su uso está poco extendido). No es bueno para redes neuronales recurrentes Soporte de GPU, de manera eficiente y rápida. Trabajo eficiente con arreglos N-dimensionales. Integrable con ios, Android y FPGA. Excelente interfaz con C, mediante Lua. 5
: es una biblioteca de software de código abierto para el cálculo numérico usando diagramas de flujo de datos. Desarrollado originalmente por investigadores de Google's Machine Intelligence, para facilitar la integración rápida y sencilla de prototipos de investigación al sistema de producción. Ventajas: Uso de Python mediante numpy que permite facilidad del uso del lenguaje. El uso de diagramas de flujo permite una abstracción más agradable y compatible con Theano. Muy rápido en los tiempos de compilación de grandes modelos (en comparación con Theano). Cuenta con una herramienta de visualización (TensorBoard). Cuenta con un fuerte modelo de uso del paralelismo. Limitantes: A pesar de sus optimizaciones suele ser más lento que otros frameworks. Por el momento, TensorFlow no es compatible con las llamadas operaciones de matriz "inline. No contiene muchos modelos pre entrenados. 6
: Computational Network ToolKit. CNTK es un framework de código abierto de Microsoft, que describe redes neuronales profundas como una serie de pasos de cálculo a través de un grafo dirigido. La biblioteca incluye Feed-Forward DNNs, Redes Convolucionales y Redes Recurrentes. CNTK ofrece un Python-API sobre código C++. Puede ser utilizado con varios GPUs en diferentes máquinas gracias a su composición tan distribuida. El permiso de licencia de CNTK no adopta las licencias más convencionales de código abierto tales como ASF 2.0, MIT o BSD, esta última es la adoptada por Theano, Torch y la Caffe. 7
: desarrollada por Oxford Visual Geometry Group, como una plataforma educativa y de investigación para el desarrollo de prototipos de redes neuronales de convolución. Sus principales características son: Flexibilidad: Las capas de redes neuronales se implementan de una manera directa, por lo que son fáciles de modificar, ampliar o integrarse con otras nuevas. Poder. La aplicación puede ejecutar modelos de gran tamaño. Se proporcionan varios modelos pre-formados. Eficiencia. La puesta en práctica es bastante eficiente, apoyando tanto CPU como GPU. Los prototipos entrenados son de fácil integración con otros framework. 8
DL4J es una biblioteca de aprendizaje profundo de código abierto escrito en Java y la máquina virtual de java y un framework con un amplio apoyo para los algoritmos de aprendizaje profundo. DL4J incluye implementaciones de la máquina de Boltzmann restringida, redes de recurrencias profundas, autoencoders profundos, stacked de autoencoder eliminadores de ruido y recursive neural tensor network, entre otros. Todos estos algoritmos incluyen versiones paralelas distribuidas que se integran con Hadoop y Spark, que trabajan lo mismo con CPU, que con GPU. DL4J incluye arreglos N-dimensionales usando la clase ND4J, es similar a la funcionalidad que ofrece Numpy a Python. 9
CONCLUSIONES Son muchas las consideraciones de diseño y de equilibrio entre el rendimiento computacional y la flexibilidad. Cada conjunto de herramientas tiene sus fortalezas únicas: Caffe es popular entre los investigadores de visión por computadora debido a su desempeño eficiente. TensorFlow es operable mediante diagramas de flujo. Theano es único con su operación simbólica, tiempos de ejecución muy cortos. Torch utiliza el lenguaje de programación Lua. CNTK proporciona un rendimiento computacional distribuido muy eficiente. MatConvNet es simple y de fácil uso para la creación y prueba de prototipos. 10