Pourquoi le C ++ semble-t-il moins utilisé en IA?


15

Je veux juste savoir pourquoi les ingénieurs Machine Learning et les programmeurs AI utilisent des langages comme python pour effectuer des tâches AI et non C ++, même si C ++ est techniquement un langage plus puissant que python.


2
Cette réponse vous aidera
Ugnes

Bienvenue chez AI! J'ai légèrement modifié le titre de la question. De haut niveau, Python a une syntaxe légère et est un langage interprété, ce qui signifie peaufiner et tester sans compilation. Python permet également des opérations au niveau du bit .
DukeZhou

Réponses:


16

Vous n'avez pas besoin d'un langage puissant pour programmer l'IA. La plupart des développeurs utilisent des bibliothèques comme Keras, Torch, Caffe, Watson, TensorFlow, etc. Ces bibliothèques sont hautement optimisées et gèrent tout le travail, elles sont construites avec des langages hautes performances, comme C. couches de réseau neuronal, charger des données, lancer le traitement et afficher les résultats. L'utilisation de C ++ à la place ne donnerait pratiquement aucune amélioration des performances, mais serait plus difficile pour les non-développeurs car elle nécessite de prendre soin de la gestion de la mémoire. De plus, plusieurs personnes en intelligence artificielle peuvent ne pas avoir une solide formation en programmation ou en informatique.

Un autre exemple similaire serait le développement de jeux, où le moteur est codé en C / C ++, et, souvent, toute la logique du jeu est scriptée dans un langage de haut niveau.


1
Si je suis intéressé à développer et à travailler avec l'apprentissage automatique et nlp pour le domaine du matériel .. Puis-je utiliser C ++ pour l'IA
Mark ellon

1
@AnishGupta: Oui, vous pouvez, à condition que le matériel supporte le traitement nécessaire (les réseaux de neurones en particulier sont très gourmands en processeur). TensforFlow est en fait nativement C ++ (les liaisons Python sont un ajout), et voici l'API: tensorflow.org/api_docs/cc
Neil Slater

"la plupart des profils d'IA proviennent du domaine de la science des données". La science des données n'est même pas un domaine bien défini, donc votre phrase peut ne pas être comprise ou mal comprise.
nbro

1
"L'utilisation de C ++ à la place n'apporterait pratiquement aucune amélioration des performances, mais serait plus difficile pour les non-développeurs car elle nécessite de prendre soin de la gestion de la mémoire." Vous n'avez pas à vous soucier de la gestion de la mémoire avec C ++ si vous l'écrivez bien.
Jérémy Blain

La programmation de l'IA ne consiste pas seulement à utiliser des bibliothèques existantes comme Keras et Torch. Un réseau de neurones peut être programmé à partir de zéro sans dépendances externes. Des exemples de perceptron à 3 couches sont disponibles sur Internet et la fonction d'activation sigmoïde tient dans 4 lignes de code. Je dirais que la mise en œuvre d'un réseau de neurones sans bibliothèques existantes est le moyen le plus simple de comprendre le sujet.
Manuel Rodriguez


5

Cela dépend de sa flexibilité: si vous avez un système à part entière prêt pour la production, qui ne nécessitera pas beaucoup d'ajustement, alors C ++ (ou même C) pourrait être bien. Vous devez consacrer beaucoup de temps à la création du logiciel, mais cela devrait fonctionner assez rapidement.

Cependant, si vous expérimentez toujours avec des paramètres et des paramètres, et que vous avez peut-être besoin d'ajuster l'architecture, alors C ++ sera maladroit à travailler. Vous avez besoin d'un langage comme Python qui facilite le changement. Changer le code est plus facile, car vous pouvez généralement coder plus rapidement dans des langages comme Python. Le prix à payer est que le logiciel ne fonctionne généralement pas aussi bien.

Vous devez décider comment ce compromis vous convient le mieux. Il est généralement préférable de consacrer moins de temps au codage et de ne pas trop s'inquiéter d'une durée d'exécution plus longue. Si vous prenez un jour de moins pour faire votre code, c'est beaucoup de temps que la version codée C doit rattraper. La plupart du temps, cela n'en vaut pas la peine.

Une approche commune semble être les systèmes hybrides, où les bibliothèques de base sont implémentées en C / C ++, car elles n'ont pas besoin de beaucoup de changements, et les interfaces frontales / glue / sont en Python, car là vous avez besoin de flexibilité et de vitesse n'est pas que critique.

Ce n'est pas un problème spécifique à l'IA, au fait, mais une question générale des langages interprétés vs compilés. Avec l'IA, de nombreux systèmes sont encore axés sur la recherche plutôt que sur les applications, et c'est là que la vitesse de développement l'emporte sur la vitesse d'exécution.


1
Si je le fais avec C ++, puis-je obtenir une exécution plus rapide que python et ce qui concerne le niveau de performance car il est indiqué que: C ++ est 400 fois plus rapide que python
Mark ellon

1
Ce chiffre général ne veut rien dire - cela dépend vraiment de l'application exacte. Je pense que 400 fois est probablement beaucoup trop optimiste pour la plupart des situations. Mais le fait est que s'il vous faut 500x plus de temps pour coder (et déboguer!) Le logiciel, alors même une amélioration de 400x de la vitesse serait encore plus lente! Évidemment, les chiffres sont un peu aléatoires, mais ne sous-estimez pas le temps qu'il vous faut pour réussir votre programme. Souvent, vous constaterez que l'augmentation de la vitesse est plus que compensée par un temps de développement plus rapide.
Oliver Mason

1
J'ai essayé de coder un réseau neuronal en utilisant des bibliothèques tensorflow en python et C ++ .. et j'ai trouvé que: l'algorithme de réseau neuronal qui était codé en C ++ fonctionne 280 fois plus vite que python dans lequel les mêmes bibliothèques et le même algorithme étaient utilisés
Mark ellon

1
Alors pourquoi ne pas utiliser C ++ pour l'implémentation d'algorithmes d'apprentissage machine plutôt que python
Mark ellon

1
Voir ma réponse ci-dessus ...
Oliver Mason

2

Le développement de logiciels pour les applications d'IA peut être séparé en programmation elle-même et en prototypage. C / C ++ est un excellent langage pour créer l'application car il s'exécute très rapidement et peut être fourni sous forme de bibliothèques pour les systèmes d'exploitation courants. Une application C / C ++ précompilée est la référence en matière de déploiement d'une appliance clé en main.

C ++ a un problème majeur, avant qu'un programme puisse être compilé avec GCC ou le compilateur LLVM, quelqu'un a besoin de savoir de quel algorithme il a besoin. C ++ peut exécuter un code source donné et fournit des commandes efficaces, mais de quelle manière le tableau doit être rempli et quelles boucles sont nécessaires dans le code n'est pas claire. Cette question s'inscrit dans l'étape de prototypage qui précède la programmation de l'application. Le problème n'est pas de savoir comment construire une application compilée et la livrer en tant que package de système d'exploitation, le problème est de jouer avec différents algorithmes d'IA, de construire des prototypes de GUI et de discuter avec les membres de l'équipe de la progression.

Guido van Rossum a inventé le langage de prototypage gui numéro un basé sur la programmation de scripts et offrant des capacités de pseudo-code proche. Il n'a jamais remplacé C ++, mais il crée un nouveau type de domaine. Une étape de prototypage est nécessaire avant la mise en œuvre du logiciel, notamment dans le domaine innovant de l'intelligence artificielle.

Pour expliquer pourquoi Python est supérieur au C ++, nous devons essayer de construire un prototype de logiciel avec C ++. Est-il possible d'utiliser ce langage pour implémenter rapidement une application GUI? Aucun C ++ n'a été conçu non pas comme un langage de prototypage avec des cycles d'édition rapides, mais comme une pierre solide pour les programmeurs système. Cela signifie que si le prototype fonctionne déjà, si l'algorithme est corrigé et si la documentation a été écrite, il est logique de reprogrammer le code en C ++. Cela signifie qu'un prototype Python donné est converti en C ++ et est livré aux systèmes d'exploitation existants. Mais pour la pré-étape qui consiste à rédiger des articles, à discuter des alternatives et à gérer les innovations, Python est le meilleur choix.


0

Vous prétendez que

C ++ est techniquement un langage plus puissant que python.

Mais cette affirmation est fausse (ou ne signifie pas grand-chose). N'oubliez pas qu'un langage de programmation est une spécification (souvent un document écrit en anglais). Par exemple, n3337 est une version tardive de la spécification C ++. Je n'aime pas Python, mais il semble aussi puissant que C ++ (même si les implémentations C ++ sont généralement plus rapides que celles Python): ce qu'un bon programmeur Python peut bien coder en Python, un autre bon programmeur C ++ peut bien coder en C ++ et vice inversement.

Théoriquement, C ++ et Python sont tous deux des langages de programmation Turing-complets (exprès).

Et Python est aussi expressif que C ++. Je ne peux pas nommer une fonctionnalité de langage de programmation que Python possède mais pas C ++ (sauf celles liées à la réflexion ; voir aussi cette réponse et être conscient de dlopen- voir mon programme manydl.c -, de LLVM , de libgccjit , de libbacktrace , et considérer quelques méta -programmation avec eux, à la Bismon ou comme le blog de J.Pitrat le préconise).

Vous pensez peut-être à un langage de programmation comme au logiciel qui l'implémente. Ensuite, Python est aussi expressif que C ++ (et semble plus facile à apprendre, mais c'est une illusion; voir http://norvig.com/21-days.html pour en savoir plus sur cette illusion). Python et C ++ ont une sémantique assez similaire , même si leur syntaxe est très différente. Leur système de caractères est très différent.

Observez que malheureusement, de nombreuses bibliothèques d'apprentissage machine récentes (telles que TensorFlow ou Gudhi ) sont en pratique plus faciles à utiliser en Python qu'en C ++. Mais vous pouvez utiliser TensorFlow ou Gudhi à partir du code C ++, car TensorFlow et Gudhi sont principalement codés en C ++ et fournissent et documentent une API C ++ (pas seulement une API Python).

C ++ permet la programmation multi-thread , mais l'implémentation Python habituelle a son GIL , est bytecodée , donc est beaucoup plus lent que C ++ (qui est généralement compilé en optimisant des compilateurs tels que GCC ou Clang ; cependant vous pouvez trouver des interprètes C ++, par exemple Cling ). Certaines implémentations expérimentales de Python sont compilées en JIT et sans GIL. Mais ceux-ci ne sont pas matures: je recommande d'investir un million d'euros pour augmenter leur TRL .

Notez également que C ++ est beaucoup plus difficile à apprendre que Python. Même avec une douzaine d'années d'expérience en programmation C ++, je ne peux pas prétendre connaître vraiment la plupart de C ++.

Malheureusement, la plupart des livres récents sur le génie logiciel de l'IA (par exemple celui- ci ou celui- là) utilisent Python (pas C ++) pour leurs exemples. Je veux en fait des livres sur l'IA plus récents en utilisant C ++!

BTW, je programme des logiciels open source (comme celui- ci, ou le GCC MELT obsolète ) en utilisant des techniques d'IA, mais ils n'utilisent pas Python. Mon approche des applications AI est de commencer à concevoir du DSL .

Certaines approches de l'IA impliquent une métaprogrammation, par exemple en générant une partie (ou la plupart, voire la totalité) du code d'un système par lui-même. J.Pitrat (décédé en octobre 2019) a été le pionnier de cette approche. Voir son blog , son système CAIA et le projet RefPerSys (dont l'ambition est de générer la plupart - et, espérons-le, la totalité - de son code C ++).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.