¿Por qué C ++ parece menos utilizado en IA?

15

Solo quiero saber por qué los ingenieros de Machine Learning y los programadores de IA usan lenguajes como python para realizar tareas de IA y no C ++, aunque C ++ es técnicamente un lenguaje más poderoso que python.

Mark ellon
fuente
2
Esta respuesta ayudará
Ugnes
¡Bienvenido a AI! He editado ligeramente el título de la pregunta. De alto nivel, Python tiene una sintaxis ligera y es un lenguaje interpretado, lo que significa ajustar y probar sin compilar. Python también permite operaciones bit a bit .
DukeZhou

Respuestas:

16

No necesitas un lenguaje poderoso para programar IA. La mayoría de los desarrolladores están utilizando bibliotecas como Keras, Torch, Caffe, Watson, TensorFlow, etc. Estas bibliotecas están altamente optimizadas y manejan todo el trabajo, están construidas con lenguajes de alto rendimiento, como C. Python está ahí para describir el capas de redes neuronales, cargar datos, iniciar el procesamiento y mostrar resultados. El uso de C ++ en su lugar apenas no mejoraría el rendimiento, pero sería más difícil para los no desarrolladores, ya que requiere cuidar la administración de la memoria. Además, varias personas con inteligencia artificial pueden no tener una programación muy sólida o experiencia en informática.

Otro ejemplo similar sería el desarrollo de juegos, donde el motor está codificado en C / C ++ y, a menudo, toda la lógica del juego está escrita en un lenguaje de alto nivel.

bokan
fuente
1
Si estoy interesado en desarrollar y trabajar con machine learning y nlp para el campo de hardware ... Entonces, ¿puedo usar C ++ para IA?
Mark ellon
1
@AnishGupta: Sí, puede, siempre que el hardware admita el procesamiento necesario (las redes neuronales específicamente requieren un procesador muy intenso). De hecho, TensforFlow es nativamente C ++ (los enlaces de Python son una adición), y aquí está la API: tensorflow.org/api_docs/cc
Neil Slater
"La mayoría de los perfiles de IA provienen del campo de la ciencia de datos". La ciencia de datos ni siquiera es un campo bien definido, por lo que es posible que su oración no se entienda o se malinterprete.
nbro
1
"El uso de C ++ en su lugar apenas no mejoraría el rendimiento, pero sería más difícil para los no desarrolladores, ya que requiere cuidar la administración de la memoria". No necesita preocuparse por la administración de memoria con C ++ si la escribe bien.
Jérémy Blain
La programación de IA no se trata solo de usar bibliotecas existentes como Keras y Torch. Una red neuronal se puede programar desde cero sin dependencias externas. Los ejemplos de un perceptrón de 3 capas están disponibles en Internet y la función de activación sigmoidea se ajusta a 4 líneas de código. Yo diría que implementar una red neuronal sin bibliotecas existentes es la forma más fácil de entender el tema.
Manuel Rodríguez
10

C ++ es en realidad uno de los lenguajes más populares utilizados en el espacio AI / ML. Python puede ser más popular en general, pero como otros han señalado, en realidad es bastante común tener sistemas híbridos donde el procesamiento intensivo de números de CPU se realiza en C ++ y Python se usa para funciones de nivel superior.

Solo para ilustrar:

http://mloss.org/software/language/c__/

http://mloss.org/software/language/python/

crimen mental
fuente
5

Depende de cuán flexible debe ser: si tiene un sistema completo listo para la producción, que no necesitará muchos ajustes, entonces C ++ (o incluso C) podría estar bien. Necesita dedicar mucho tiempo a la creación del software, pero luego debería ejecutarse bastante rápido.

Sin embargo, si todavía está experimentando con configuraciones y parámetros, y tal vez necesite ajustar la arquitectura, entonces C ++ será torpe para trabajar. Necesita un lenguaje como Python que facilite cambiar las cosas. Cambiar el código es más fácil, ya que generalmente puede codificar más rápido en lenguajes como Python. El precio que paga es que el software generalmente no funciona tan bien.

Debe decidir cómo esa compensación funciona mejor para usted. Por lo general, es mejor dedicar menos tiempo a la codificación y no preocuparse demasiado por un tiempo de ejecución más prolongado. Si te tomas un día menos para completar tu código, es mucho tiempo que la versión con código C necesita ponerse al día. La mayoría de las veces simplemente no vale la pena.

Un enfoque común parece ser sistemas híbridos, donde las bibliotecas centrales se implementan en C / C ++, ya que no necesitan muchos cambios, y las interfaces front-end / glue / están en Python, ya que allí se necesita flexibilidad y la velocidad no es Que crítico.

Por cierto, este no es un problema específico de la IA, sino una cuestión general de lenguajes interpretados y compilados. Con la IA, muchos sistemas todavía se centran en la investigación en lugar de la aplicación, y es ahí donde la velocidad de desarrollo supera la velocidad de ejecución.

Oliver Mason
fuente
1
Si lo hago con C ++, ¿puedo obtener una ejecución rápida que Python y qué pasa con el nivel de rendimiento porque se afirma que: C ++ es 400 veces más rápido que Python
Mark ellon
1
Esa cifra general no significa nada, realmente depende de la aplicación exacta. Creo que 400 veces es probablemente demasiado optimista para la mayoría de las situaciones. Pero el punto es que si te toma 500 veces más tiempo codificar (¡y depurar!) El software, ¡incluso una mejora de 400 veces en la velocidad aún sería más lenta! Obviamente, los números son un poco aleatorios, pero no subestimes el tiempo que te toma hacer bien tu programa. A menudo encontrará que el aumento de la velocidad está más que compensado por un tiempo de desarrollo más rápido.
Oliver Mason
1
Intenté codificar una red neuronal usando bibliotecas de tensorflow en Python y C ++ ... y descubrí que: el algoritmo de red neuronal que se codificó en C ++ funciona 280 veces más rápido que Python en el que se usaron las mismas bibliotecas y el mismo algoritmo
Mark ellon
1
Entonces, ¿por qué no usar C ++ para la implementación de algoritmos de aprendizaje automático en lugar de Python
Mark ellon
1
Vea mi respuesta arriba ...
Oliver Mason
2

El desarrollo de software para aplicaciones de IA se puede separar en programación y creación de prototipos. C / C ++ es un gran lenguaje para crear la aplicación porque se ejecuta muy rápido y puede entregarse como bibliotecas para sistemas operativos convencionales. Una aplicación C / C ++ precompilada es el estándar de oro si alguien quiere implementar un dispositivo llave en mano.

C ++ tiene un problema importante, antes de que un programa pueda compilarse con GCC o el compilador LLVM, alguien necesita saber qué algoritmo necesita. C ++ puede ejecutar un código fuente dado y proporciona comandos eficientes, pero no está claro de qué manera debe llenarse la matriz y qué bucles se necesitan en el código. Esta pregunta se ajusta al paso de creación de prototipos que viene antes de que la aplicación se programe. El problema no es cómo construir una aplicación compilada y entregarla como un paquete de sistema operativo, el problema es jugar con diferentes algoritmos de IA, construir algunos prototipos de interfaz gráfica de usuario y discutir con los miembros del equipo el progreso.

Guido van Rossum inventó el lenguaje de prototipos gui número uno que se basa en la programación de secuencias de comandos y proporciona capacidades de casi pseudocódigo. Nunca reemplazó a C ++, pero crea un nuevo tipo de dominio. Es necesario un paso de creación de prototipos antes de que se implemente el software, especialmente en el dominio innovador de la Inteligencia Artificial.

Para explicar por qué Python es superior a C ++, tenemos que intentar construir un prototipo de software con C ++. ¿Es posible usar ese lenguaje para implementar rápidamente una aplicación gui? No C ++ fue diseñado no como un lenguaje de creación de prototipos con ciclos de edición rápidos, sino como una roca sólida para los programadores de sistemas. Eso significa que, si el prototipo ya está funcionando, si el algoritmo está arreglado y si la documentación fue escrita, tiene sentido reprogramar el código en C ++. Eso significa que un prototipo de Python dado se convierte en C ++ y se entrega a los sistemas operativos existentes. Pero para el paso previo que tiene que ver con escribir documentos, discutir alternativas y gestionar innovaciones, Python es la mejor opción.

Manuel Rodriguez
fuente
0

Usted afirma que

C ++ es técnicamente un lenguaje más poderoso que python.

Pero esa afirmación es incorrecta (o no significa mucho). Recuerde que un lenguaje de programación es una especificación (a menudo un documento escrito en inglés). Por ejemplo, n3337 es un borrador tardío de la especificación C ++. No me gusta Python, pero parece tan poderoso como C ++ (incluso si las implementaciones de C ++ son generalmente más rápidas que las de Python): qué buen programador de Python puede codificar bien en Python, otro buen programador de C ++ puede codificar bien en C ++ y viceversa viceversa

Teóricamente, tanto C ++ como Python son lenguajes de programación completos de Turing (a propósito).

Y Python es tan expresivo como C ++. No puedo nombrar una característica del lenguaje de programación que Python tenga pero no C ++ (excepto las relacionadas con la reflexión ; vea también esta respuesta y tenga en cuenta dlopen- vea mi programa manydl.c -, de LLVM , de libgccjit , de libbacktrace , y considere algunos meta -programación de programación con ellos, à la Bismon o como el blog de J.Pitrat lo defiende).

Tal vez piense en un lenguaje de programación como el software que lo implementa. Entonces Python es tan expresivo como C ++ (y parece más fácil de aprender, pero eso es una ilusión; consulte http://norvig.com/21-days.html para obtener más información sobre esa ilusión). Python y C ++ tienen una semántica bastante similar , incluso si su sintaxis es muy diferente. Su sistema de tipos es muy diferente.

Observe que, lamentablemente, muchas de las principales bibliotecas de aprendizaje automático recientes (como TensorFlow o Gudhi ) son en la práctica más fáciles de usar en Python que en C ++. Pero puede usar TensorFlow o Gudhi del código C ++ ya que TensorFlow y Gudhi están codificados principalmente en C ++ y ambos proporcionan y documentan una API de C ++ (no solo Python).

C ++ permite la programación de subprocesos múltiples , pero la implementación habitual de Python tiene su GIL , está codificada , por lo que es significativamente más lenta que C ++ (que generalmente se compila optimizando compiladores como GCC o Clang ; sin embargo, puede encontrar intérpretes de C ++, por ejemplo, Cling ). Algunas implementaciones experimentales de Python están compiladas con JIT y sin GIL. Pero estos no son maduros: recomiendo invertir un millón de euros para aumentar su TRL .

Observe también que C ++ es mucho más difícil de aprender que Python. Incluso con una docena de años de experiencia en programación en C ++, no puedo afirmar que realmente conozco la mayoría de C ++.

Lamentablemente, los libros más recientes que enseñan ingeniería de software de IA (por ejemplo, este o aquel ) usan Python (no C ++) para sus ejemplos. ¡De hecho, quiero libros de IA más recientes con C ++!

Por cierto, programo software de código abierto (como este , o el obsoleto GCC MELT ) usando técnicas de IA, pero no usan Python. Mi enfoque para las aplicaciones de IA es comenzar a diseñar algunas DSL en ellas.

Algunos enfoques de IA implican metaprogramación, por ejemplo, generar algunos (o la mayoría, o incluso todos) el código de un sistema por sí mismo. J.Pitrat (falleció en octubre de 2019) fue pionero en este enfoque. Vea su blog , su sistema CAIA y el proyecto RefPerSys (cuya ambición es generar la mayoría, y con suerte todo, su código C ++).

Basile Starynkevitch
fuente