¿Por qué se usa Python para el aprendizaje profundo si es tan lento?

El aprendizaje profundo se basa en marcos bien escritos y optimizados que hacen el trabajo pesado. Nadie quiere escribir convoluciones desde cero en C cada vez y pensar si es una mala optimización o un error en la implementación de un modelo que hace que el error pase por alto.

Python se usa para crear abstracciones de alto nivel para esos marcos que le permiten tratar todo como un objeto y no preocuparse por la gestión de la memoria y las peculiaridades de la programación CUDA.

Por cierto, Python no es lento. El código de Cython es casi tan rápido como el código C compilado, al menos cuando se trata de CPU.

Python sirve como un pegamento entre las bibliotecas de bajo nivel y todo lo demás, lo que facilita el uso de controladores de datos que convierten datos sin procesar y los introducen en el modelo, para obtener la salida y producir un gráfico o servirlo en una aplicación web. La integración perfecta sería mucho más importante incluso si fuera realmente lenta. Pero no lo es.

En resumen, Python es ideal para crear prototipos, experimentar y comunicar algoritmos a otros.

Hay muchas formas de usar un idioma. Cuando “usa un lenguaje para el aprendizaje profundo”, puede estar haciendo muchas cosas con él. Como muchas otras respuestas ya han mencionado, Python no está haciendo el trabajo matemático pesado: es una envoltura alrededor del código C / C ++ / CUDA / etc. altamente optimizado. Este contenedor de cosas muy optimizadas te permite hacer cosas increíbles.

Como investigador de visión artificial y aprendizaje automático, en general tengo algunos pasos en mi flujo de trabajo:

  1. Experimenta, itera rápidamente, crea prototipos, ejecuta experimentos.
  2. Cree un prototipo para resolver un problema específico, optimice algorítmicamente
  3. Construye el sistema de producción

Usar Python para el paso (1) es sorprendente, ya que es fácil iterar rápidamente en soluciones, depurar código, inspeccionar variables y resultados, visualizar resultados, etc. Y, cuando se usa Python para probar e iterar rápidamente, pasar a un nivel razonablemente pulido El prototipo no es increíblemente difícil. Entre los pasos (2) y (3) es cuando la velocidad, la memoria y el rendimiento se convierten en un gran factor de costo y factibilidad. En esa etapa, el objetivo no es iterar y analizar el algoritmo, sino reducir los costos. Por lo tanto, es posible que al hacer la transición de un algoritmo de la experimentación a la producción, la capa de Python se reduzca, pero la desventaja es que las personas que desarrollaron el algoritmo en primer lugar tienen menos probabilidades de admitirlo.

Lo que sea que te haga pensar que Python es lento, con niveles de rendimiento cercanos a C, está mal.

Lo que sea que lo haga pensar que la velocidad es el factor principal en el aprendizaje profundo (en lugar de, digamos, la administración de memoria o las estructuras de datos versátiles) está abierto a dudas.

Cualquier cosa que te haga pensar que AI y / o ML es principalmente una disciplina de programación está terriblemente mal, mientras que hay aspectos matemáticos a tener en cuenta.

Python puede ser lento. Pero utilizamos bibliotecas de aprendizaje profundo en Python para hacer cosas de aprendizaje profundo, es decir, tensorflow.

En este caso, puede pensar en python como una interfaz que se utiliza para definir gráficos computacionales, pero que no se ejecutará en python. La biblioteca de aprendizaje profundo ejecutará este gráfico computacional en c / c ++ y volverá a python con la respuesta. Por ejemplo, en tensorflow cuando esté listo con su gráfico computacional, puede comenzar la sesión para ejecutar el gráfico computacional, que en realidad se ejecuta en c ++. Aquí hay mucho trabajo pesado.

Numpy también hace su cálculo fuera de python usando c / c ++. Pero aún así, las bibliotecas de aprendizaje profundo como tensorflow, theano o torch se ejecutan mucho más rápido que numpy. Más detalles se pueden encontrar aquí Hola, TensorFlow

No hay duda de que Python es lento, en comparación con otro lenguaje de compilación como C ++. Sin embargo, Python tiene una interfaz conveniente para cooperar con C / C ++, y siempre se puede escribir un módulo que requiera un alto rendimiento en C, y otra parte en Python para aprovechar su flexibilidad y conveniencia.

De hecho, cuando hacemos tareas de aprendizaje automático en Python, rara vez escribimos en Python desde cero, pero usamos módulos maduros y populares como NumPy, SciPy, Scikit-Learn, Theano, TensorFlow, que todo está escrito en C / C ++ y es muy rápido.

De esa manera, podemos hacer uso de la comodidad que brinda Python para un desarrollo rápido, sin grandes daños en el rendimiento.

El código de Python que se ejecuta en la máquina virtual no es realmente rápido, porque una de las filosofías de diseño para el lenguaje es ahorrar tiempo humano dejando el trabajo a la VM. Por ejemplo, si convierte su código de Python en Cython y tiene todas las variables escritas de forma estática, verá que se ejecuta mucho más rápido de lo que se escribe dinámicamente.
Una de las mayores ventajas para python es su simplicidad. Y para el aprendizaje profundo, dado que la mayoría de los usuarios son matemáticos y científicos, reduce mucho la curva de aprendizaje.
Dicho esto, la mayoría de los paquetes modernos de aprendizaje profundo, como Tensorflow, en realidad tienen sus funcionalidades principales implementadas con C / C ++ o cython, mientras que solo exponen sus interfaces como python. Por lo tanto, no debe haber demasiadas preocupaciones sobre el rendimiento.

Python puede ser lento, pero tenga en cuenta que muchos aspectos numéricos de Python se realizan en bibliotecas compiladas en otro lenguaje (C o C ++, en general), y que no es raro que este trabajo de aprendizaje profundo se realice en un entorno distribuido. entorno informático de rendimiento donde Python es simplemente la interfaz para configurar y controlar el trabajo. La velocidad de Python en sí misma, por lo tanto, es completamente irrelevante.

Esta es una tendencia general que se extiende más allá del aprendizaje profundo.

Queremos software de alto rendimiento Y software de escritura barato. En el pasado, la tendencia era usar Java, un equilibrio correcto entre rápido y simple. Pero Java mostró sus límites. Así que ahora la tendencia es usar bibliotecas escritas en C ++ / CUDA haciendo el cálculo pesado con una API de Python en la parte superior para escribir la aplicación, alimentando los datos a las bibliotecas de bajo nivel.

Hay dos significados de lento: velocidad de programación lenta (codificador), velocidad de ejecución lenta (computadora). Los programadores son más productivos en Python porque es fácil de usar y tiene excelentes bibliotecas para el aprendizaje automático. En otras palabras, ahorra tiempo al programador.

Probablemente se esté refiriendo a bibliotecas como Theano o Tensorflow.

La velocidad de Python no importa tanto, ya que usan Python para definir gráficos que describen cálculos.
Los gráficos se compilan en C / C ++.

Otras respuestas también señalaron un par de bibliotecas de Python que envuelven lenguajes de nivel inferior.

Hay bibliotecas que compilan y optimizan el código de Python en código C. Comprueba theano:

Bienvenido – Documentación de Theano 0.8.2

Python es bastante fácil de usar y la forma en que manipulas los datos es bastante fácil. Realmente no creo que sea tan lento, solo si te gustan los ciclos 😉

More Interesting

¿Qué opinas de la exageración actual sobre Deep Learning?

Cómo implementar el aprendizaje automático en una aplicación de Android

¿Por qué a veces vanilla SGD y Momentum superan a los optimizadores como AdaDelta en el aprendizaje profundo?

Si planeo obtener un doctorado en aprendizaje de refuerzo teórico, ¿qué profesores y universidades debería considerar?

¿Qué es la agrupación en una arquitectura profunda?

Cómo publicar un proyecto capstone

¿Cuáles son los temas sobre big data para hacer una tesis de maestría que excluye el aprendizaje automático?

Cómo obtener trabajos de aprendizaje automático sin una educación formal

¿La máquina está aprendiendo la 'versión del hombre tonto' de intentar recrear la inteligencia?

¿Es posible usar bibliotecas de aprendizaje automático OpenCV para aplicaciones que no son de visión por computadora?

¿Cuál es el beneficio de usar métodos de detección de comunidad gráfica sobre los enfoques de agrupación de datos y aprendizaje automático?

¿Cómo entiendes las ecuaciones de MLE para los clasificadores Naive Bayes en el libro de aprendizaje automático de Kevin Murphy?

¿Cómo se asegura que el aprendizaje automático no aprenda la correlación cuando no hay causalidad, especialmente para la predicción?

Debido a que este será el tema de un panel en el Instituto de Verano NBER, ¿qué puede aprender la economía de Data Science y / o Machine Learning, y qué puntos sobre este tema le gustaría ver incluidos?

¿Por qué es tan difícil la IA? ¿Por qué todavía no hemos construido una máquina de IA?