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.
neural-networks
machine-learning
python
data-science
c++
Mark ellon
la source
la source
Réponses:
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.
la source
C ++ est en fait l'un des langages les plus populaires utilisés dans l'espace AI / ML. Python peut être plus populaire en général, mais comme d'autres l'ont noté, il est en fait assez courant d'avoir des systèmes hybrides où le calcul intensif en CPU est effectué en C ++ et Python est utilisé pour des fonctions de niveau supérieur.
Juste pour illustrer:
http://mloss.org/software/language/c__/
http://mloss.org/software/language/python/
la source
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.
la source
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.
la source
Vous prétendez que
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 ++).
la source