Aprendizaje profundo: marcos comunes de aprendizaje profundo [Theano, TensorFlow, Keras, Caffe / Caffe2, MXNet, CNTK, PyTorch]

Los marcos comunes de aprendizaje profundo son TensorFlow, Caffe, Theano, Keras, PyTorch, MXNet, etc., como se muestra en la siguiente figura. Estos marcos de aprendizaje profundo se han aplicado en los campos de la visión por computadora, el reconocimiento de voz, el procesamiento del lenguaje natural y la bioinformática, y han logrado excelentes resultados.

Inserte la descripción de la imagen aquí
Casi todos los marcos se basan en gráficos de cálculo, y los gráficos de cálculo se pueden dividir en gráficos de cálculo estático y gráficos de cálculo dinámico.

  • El gráfico de cálculo estático se define y se ejecuta, y se define una vez y se ejecuta muchas veces.
  • El gráfico de cálculo dinámico se define durante el proceso de ejecución y se construye durante la ejecución (definir por ejecución), que se puede construir para múltiples ejecuciones.

Pytorch y tensorflow son marcos de aprendizaje profundo basados ​​en gráficos computacionales,

  • Pytorch usa gráficos dinámicos,
  • Tensorflow usa gráficos estáticos.

Uno, Theano

Theano nació originalmente en el laboratorio LISA de la Universidad de Montreal y comenzó a desarrollarse en 2008. Es el primer marco influyente de aprendizaje profundo de Python.

Theano es una biblioteca de Python que se puede utilizar para definir, optimizar y calcular expresiones matemáticas, especialmente matrices multidimensionales (numpy.ndarray). Al resolver problemas que contienen grandes cantidades de datos, la programación con Theano puede alcanzar velocidades más rápidas que el lenguaje C escrito a mano y, a través de la aceleración de la GPU, Theano puede incluso ser varios órdenes de magnitud más rápido que el lenguaje C basado en cálculos de CPU. Theano combina un sistema de álgebra computarizado (CAS) y un compilador de optimización, y también puede generar códigos de lenguaje C personalizados para una variedad de operaciones matemáticas. Para tareas que implican cálculos repetidos de expresiones matemáticas complejas, la velocidad de cálculo es muy importante, por lo que esta combinación de CAS y compilador de optimización es muy útil. Para situaciones en las que es necesario calcular cada expresión matemática diferente, Theano puede minimizar la cantidad de cálculo para la compilación / análisis, pero aún ofrece características simbólicas como la diferenciación automática.

Theano nació en una institución de investigación para servir a los investigadores, su diseño tiene una fuerte atmósfera académica, pero tiene mayores defectos en el diseño de ingeniería. Durante mucho tiempo, Theano ha sido criticado por sus deficiencias como la dificultad para depurar y la lenta construcción de gráficos. Para acelerar la investigación de aprendizaje profundo, las personas han desarrollado marcos de terceros como Lasagne, Blocks, PyLearn2 y Keras basados ​​en él. Estos marcos se basan en Theano y brindan una mejor interfaz de empaque para la conveniencia del usuario.

El 28 de septiembre de 2017, en vísperas del lanzamiento oficial de Theano 1.0, Yoshua Bengio, el jefe del laboratorio LISA y uno de los tres gigantes del aprendizaje profundo, anunció que Theano está a punto de detener el desarrollo: "Theano está muerto". Aunque Theano está a punto de retirarse de la etapa de la historia, como primer marco de aprendizaje profundo de Python, ha cumplido muy bien su misión, brindando una gran ayuda para los pioneros de los investigadores de aprendizaje profundo, y también para el posterior desarrollo de marcos de aprendizaje profundo. El desarrollo estableció la dirección básica del diseño: el núcleo del marco es el gráfico de cálculo y la GPU se utiliza para acelerar el cálculo.

En noviembre de 2017, LISA Lab abrió un proyecto introductorio para principiantes en GitHub, cuyo objetivo es ayudar a los estudiantes de primer año de laboratorio a dominar rápidamente los fundamentos prácticos del aprendizaje automático. El proyecto utiliza PyTorch como marco de enseñanza.

Comentario: Dado que Theano ha detenido el desarrollo, no se recomienda continuar aprendiendo como herramienta de investigación.

, Difícil

Keras es una API de red neuronal de alto nivel, escrita en Python puro y que utiliza TensorFlow, Theano y CNTK como backends. Keras nació para apoyar la experimentación rápida, capaz de convertir rápidamente las ideas en resultados. Keras debería ser el más fácil entre los marcos de aprendizaje profundo. Proporciona una API consistente y concisa, que puede reducir en gran medida la carga de trabajo de los usuarios en aplicaciones generales y evitar que los usuarios vuelvan a crear ruedas.

Estrictamente hablando, Keras no puede llamarse un marco de aprendizaje profundo. Es más como una interfaz de aprendizaje profundo, que se basa en un marco de terceros. Las deficiencias de Keras son obvias: un embalaje excesivo conduce a una pérdida de flexibilidad. Keras nació originalmente como la API de alto nivel de Theano y luego agregó TensorFlow y CNTK como backends. Para proteger las diferencias en el back-end y proporcionar una interfaz de usuario coherente, Keras ha realizado una encapsulación capa por capa, lo que dificulta que los usuarios agreguen nuevas operaciones u obtengan información de datos subyacentes. Al mismo tiempo, el empaquetado excesivo también hace que el programa Keras sea demasiado lento. Muchos errores están ocultos en el empaque. En la mayoría de los escenarios, Keras es el más lento de todos los frameworks presentados en este artículo.

Aprender Keras es muy fácil, pero pronto encontrará cuellos de botella porque carece de flexibilidad. Además, la mayoría de las veces, cuando se usa Keras, los usuarios llaman principalmente a la interfaz y es difícil aprender realmente el contenido del aprendizaje profundo.

Comentario: Comenzar es lo más fácil, pero no lo suficientemente flexible y de uso limitado.

、 、 Caffe / Caffe2

El nombre completo de Caffe es Arquitectura convolucional para integración rápida de funciones. Es un marco de aprendizaje profundo claro y eficiente. El lenguaje principal es C ++. Admite interfaces de línea de comandos, Python y MATLAB. Puede ejecutarse tanto en CPU como en GPU.

La ventaja de Caffe es que es simple y rápido, pero la desventaja es que carece de flexibilidad. A diferencia de Keras debido a la pérdida de flexibilidad debido a demasiados paquetes, la falta de flexibilidad de Caffe se debe principalmente a su diseño. El principal objeto abstracto en Caffe es la capa. Cada vez que se implementa una nueva capa, se debe usar C ++ para implementar su código de propagación hacia adelante y hacia atrás. Si desea que la nueva capa se ejecute en la GPU, también debe usar CUDA al mismo tiempo, darse cuenta de la propagación hacia adelante y hacia atrás de esta capa. Esta limitación hace que sea muy difícil para los usuarios que no están familiarizados con C ++ y CUDA extender Caffe.

Caffe ha ganado muchos usuarios con su facilidad de uso, código fuente conciso y claro, rendimiento sobresaliente y creación rápida de prototipos, y alguna vez ocupó la mitad del campo del aprendizaje profundo. Pero cuando llega la nueva era del aprendizaje profundo, Caffe ha mostrado una evidente impotencia y han surgido gradualmente muchos problemas (incluida la falta de flexibilidad, dificultad de expansión, dependencia de muchos entornos, configuración difícil, limitaciones de la aplicación, etc.). Aunque todavía se pueden encontrar muchos proyectos basados ​​en Caffe en GitHub, cada vez hay menos proyectos nuevos.

El autor de Caffe se unió a Google después de graduarse de la Universidad de California en Berkeley y participó en el desarrollo de TensorFlow. Más tarde, dejó Google para unirse a FAIR como director de ingeniería y desarrolló Caffe2. Caffe2 es un marco de aprendizaje profundo de código abierto que combina expresividad, velocidad y modularidad. Sigue una gran cantidad de diseños de Caffe y puede resolver los problemas de cuello de botella encontrados en el uso y despliegue de Caffe a lo largo de los años. El diseño de Caffe2 persigue el peso ligero. Mientras mantiene la escalabilidad y el alto rendimiento, Caffe2 también enfatiza la portabilidad. Caffe2 ha tomado el rendimiento, la expansión y la implementación móvil como sus principales objetivos de diseño desde el principio. La biblioteca principal de C ++ de Caffe2 proporciona velocidad y portabilidad, mientras que sus API de Python y C ++ permiten a los usuarios crear prototipos, entrenar e implementar fácilmente en Linux, Windows, iOS, Android e incluso Raspberry Pi y NVIDIA Tegra.

Caffe2 hereda las ventajas de Caffe y es impresionante en términos de velocidad. El Laboratorio de Inteligencia Artificial de Facebook trabajó con el equipo de Aprendizaje Automático Aplicado para usar Caffe2 para acelerar en gran medida el proceso de entrenamiento de modelos para tareas de visión artificial, y solo toma 1 hora entrenar un conjunto de datos súper grande como ImageNet. Sin embargo, a pesar de que se ha lanzado durante más de medio año y se ha desarrollado durante más de un año, Caffe2 sigue siendo un marco inmaduro. El sitio web oficial no ha proporcionado la documentación completa hasta ahora y la instalación es problemática. A menudo se producen anomalías en el proceso de compilación, y los correspondientes rara vez se encuentran en GitHub. Code.

En su apogeo, Caffe ocupa la mitad del campo de investigación de la visión por computadora. Aunque Caffe rara vez se usa en la academia hoy, todavía hay muchos artículos relacionados con la visión por computadora que usan Caffe. Debido a su desempeño estable y sobresaliente, muchas empresas todavía utilizan el modelo de implementación de Caffe. Aunque Caffe2 ha realizado muchas mejoras, está lejos de reemplazar a Caffe.

Comentarios: La documentación no está completa, pero el rendimiento es excelente, soporte de plataforma casi completo (Caffe2), adecuado para el entorno de producción.

Cuatro, MXNet

MXNet es una biblioteca de aprendizaje profundo que admite lenguajes como C ++, Python, R, Scala, Julia, MATLAB y JavaScript; admite programación de comandos y símbolos; puede ejecutarse en CPU, GPU, clúster, servidor, escritorio o dispositivos móviles. MXNet es la próxima generación de CXXNet. CXXNet se basa en las ideas de Caffe, pero su implementación es más limpia. En NIPS en 2014, Chen Tianqi y Li Mu, ambos ex alumnos de la Universidad Jiaotong de Shanghai, se reunieron para discutir sus respectivos equipos de proyectos que trabajan en kits de herramientas de aprendizaje profundo, y descubrieron que, en general, todos estaban haciendo mucho trabajo repetitivo, como cargar archivos. Así que decidieron formar la DMLC [Comunidad de aprendizaje automático distribuida (profunda)], pidiendo a todos que cooperen en el desarrollo de MXNet, aprovechen al máximo sus respectivas fortalezas y eviten la duplicación de ruedas.

MXNet es elogiado por su soporte súper distribuido, memoria obvia y optimización de la memoria de video. En el mismo modelo, MXNet a menudo ocupa menos memoria y memoria de video, y en un entorno distribuido, MXNet muestra un rendimiento de expansión significativamente mejor que otros marcos.

Dado que MXNet fue desarrollado originalmente por un grupo de estudiantes, la falta de aplicaciones comerciales restringió en gran medida el uso de MXNet. En noviembre de 2016, AWS seleccionó oficialmente MXNet como su plataforma oficial de aprendizaje profundo para la computación en la nube. En enero de 2017, el proyecto MXNet ingresó a la Fundación Apache y se convirtió en un proyecto de incubadora de Apache.

Aunque MXNet tiene la mayor cantidad de interfaces y el apoyo de muchas personas, siempre ha estado en un estado tibio. Personalmente, creo que esto se debe en gran parte a una mala promoción y a una documentación de interfaz insuficiente. MXNet ha estado en un proceso de iteración rápida durante mucho tiempo, pero su documentación no se ha actualizado durante mucho tiempo, lo que dificulta que los usuarios novatos dominen MXNet.Los usuarios antiguos a menudo necesitan consultar el código fuente para comprender realmente el uso. de la interfaz MXNet.

Para mejorar el ecosistema MXNet y promover MXNet, MXNet ha introducido sucesivamente muchas interfaces, incluidas MinPy, Keras y Gluon, pero el desarrollo de las dos primeras interfaces básicamente se ha detenido. Gluon imita el diseño de interfaz de PyTorch, y Li Mu, el autor de MXNet, personalmente En la batalla, la enseñanza en línea sobre cómo usar Gluon para aprender deep learning desde cero, llena de sinceridad, atrajo a muchos usuarios nuevos.

Comentario: La documentación es un poco confusa, pero el rendimiento distribuido es sólido y el soporte de idiomas es el más adecuado para el uso de la plataforma en la nube de AWS.

Cinco, CNTK

En agosto de 2015, Microsoft anunció en CodePlex que CNTK, un conjunto de herramientas de red informática desarrollado por Microsoft Research, será de código abierto. Cinco meses después, el 25 de enero de 2016, Microsoft abrió oficialmente CNTK en su repositorio de GitHub. Ya en 2014, dentro de Microsoft, el Dr. Xuedong Huang y su equipo estaban mejorando la capacidad de las computadoras para comprender el habla, pero las herramientas utilizadas en ese momento obviamente ralentizaron su progreso. Como resultado, un equipo de desarrollo compuesto por voluntarios concibió y diseñó sus propias soluciones, y finalmente nació CNTK.

Según la descripción de los desarrolladores de Microsoft, el rendimiento de CNTK es mejor que el de las herramientas convencionales como Caffe, Theano y TensoFlow. CNTK admite modos de CPU y GPU. Al igual que TensorFlow / Theano, describe una red neuronal como una estructura de gráfico de cálculo, con nodos hoja que representan entradas o parámetros de red, y otros nodos que representan pasos de cálculo. CNTK es un sistema de línea de comandos muy poderoso que puede crear sistemas de predicción de redes neuronales. CNTK se desarrolló originalmente para uso interno en Microsoft. Al principio, no había una interfaz Python, sino un lenguaje que casi nadie usaba, y la documentación era un poco oscura, y la promoción no fue muy efectiva, lo que llevó a There hay menos usuarios ahora. Sin embargo, en lo que respecta a la calidad del marco en sí, CNTK es más equilibrado, no tiene deficiencias obvias y es más eficaz en el campo del habla.

Comentario: La comunidad no es lo suficientemente activa, pero el desempeño es sobresaliente, bueno en la investigación relacionada con la voz.

Seis, PyTorch

En enero de 2017, el equipo de Facebook Artificial Intelligence Research (FAIR) abrió PyTorch en GitHub y rápidamente ocupó el primer lugar en GitHub.

La historia de PyTorch se remonta a Torch, que nació en la Universidad de Nueva York en 2002. Torch utiliza un lenguaje que no es muy popular, Lua, como interfaz. Lua es simple y eficiente, pero debido a que es demasiado pequeño, no mucha gente lo usa. En 2017, el equipo detrás de Torch lanzó PyTorch. PyTorch no simplemente encapsula Lua Torch para proporcionar una interfaz Python, sino que refactoriza todos los módulos en Tensor y agrega el sistema de derivación automática más avanzado para convertirse en el marco de trabajo de gráficos dinámicos más popular.

• Simplicidad: el diseño de PyTorch busca un empaque mínimo y evita volver a crear ruedas tanto como sea posible. A diferencia de TensorFlow, que está lleno de conceptos completamente nuevos como sesión, gráfico, operación, name_scope, variable, tensor, layer, etc., el diseño de PyTorch sigue tensor → variable (autograd) → nn. Módulo tres niveles de abstracción de bajo a alto, que representan respectivamente matrices de alta dimensión (tensores), derivación automática (variables) y redes neuronales (capas / módulos), y las tres abstracciones están estrechamente relacionadas y pueden modificarse y operarse al mismo tiempo.
Otro beneficio del diseño conciso es que el código es fácil de entender. El código fuente de PyTorch es solo una décima parte de TensorFlow, y el diseño menos abstracto y más intuitivo hace que el código fuente de PyTorch sea muy fácil de leer. En mi opinión, el código fuente de PyTorch es incluso más fácil de entender que la documentación de muchos marcos.

• Velocidad: la flexibilidad de PyTorch no se obtiene a costa de la velocidad. En muchas revisiones, el rendimiento de la velocidad de PyTorch es mejor que los marcos como TensorFlow y Keras. La velocidad de ejecución del marco está muy relacionada con el nivel de codificación del programador, pero para el mismo algoritmo, es más probable que el implementado con PyTorch sea más rápido que el implementado con otros marcos.

• Facilidad de uso: PyTorch es el diseño orientado a objetos más elegante entre todos los marcos. El diseño de la interfaz orientada a objetos de PyTorch proviene de Torch, y el diseño de la interfaz de Torch es conocido por su flexibilidad y facilidad de uso. El autor de Keras se inspiró originalmente en Torch para desarrollar Keras. PyTorch hereda el manto de Torch, especialmente el diseño de la API y la interfaz del módulo son muy consistentes con Torch. El diseño de PyTorch está más en línea con el pensamiento de las personas. Permite a los usuarios concentrarse en realizar sus ideas tanto como sea posible, es decir, lo que piensas es lo que obtienes, sin pensar demasiado en las limitaciones del marco en sí.

• Comunidad activa: PyTorch proporciona documentación completa, guías paso a paso y un foro mantenido por el autor para que los usuarios se comuniquen y pidan consejo. El Instituto de Investigación de Inteligencia Artificial de Facebook proporciona un fuerte apoyo para PyTorch. Como los tres principales institutos de investigación de aprendizaje profundo en la actualidad, el apoyo de FAIR es suficiente para garantizar que PyTorch obtenga actualizaciones de desarrollo continuas, no tan efímeras como muchos marcos desarrollados por individuos.

Siete, otros marcos

Además de los marcos mencionados anteriormente, hay muchos marcos que tienen cierta influencia y usuarios. Por ejemplo, PaddlePaddle de código abierto de Baidu, CMU desarrolló DyNet, tiny-dnn compacto y no dependiente conforme al estándar C ++ 11, Deeplearning4J desarrollado en Java con excelente documentación, Nervana de código abierto de Intel y DSSTNE de código abierto de Amazon. Estos marcos tienen sus propias ventajas y desventajas, pero la mayoría de ellos tienen una popularidad y atención insuficientes, o se limitan a ciertas áreas. Además, existen muchos marcos desarrollados específicamente para dispositivos móviles, como CoreML y MDL, que nacieron únicamente para la implementación y no son universales y no son adecuados para herramientas de investigación.

Supongo que te gusta

Origin blog.csdn.net/u013250861/article/details/114297054
Recomendado
Clasificación