Warum scheint C ++ in der KI weniger verbreitet zu sein?

15

Ich möchte nur wissen, warum Ingenieure des maschinellen Lernens und KI-Programmierer Sprachen wie Python verwenden, um KI-Aufgaben auszuführen, und nicht C ++, obwohl C ++ technisch eine leistungsfähigere Sprache als Python ist.

Mark Ellon
quelle
2
Diese Antwort wird helfen
Ugnes
Willkommen bei AI! Ich habe den Titel der Frage leicht bearbeitet. Python hat auf hoher Ebene eine leichte Syntax und ist eine interpretierte Sprache, was bedeutet, dass ohne Kompilierung optimiert und getestet werden muss. Python erlaubt auch bitweise Operationen .
DukeZhou

Antworten:

16

Sie benötigen keine leistungsstarke Sprache zum Programmieren von KI. Die meisten Entwickler verwenden Bibliotheken wie Keras, Torch, Caffe, Watson, TensorFlow usw. Diese Bibliotheken sind hochoptimiert und erledigen die gesamte Arbeit. Sie sind mit Hochleistungssprachen aufgebaut, wie C. Python ist nur da, um das zu beschreiben neuronale Netzwerkschichten, Daten laden, die Verarbeitung starten und Ergebnisse anzeigen. Die Verwendung von C ++ würde kaum zu einer Leistungsverbesserung führen, wäre jedoch für Nichtentwickler schwieriger, da die Speicherverwaltung erforderlich ist. Außerdem haben einige KI-Leute möglicherweise keinen sehr soliden Programmier- oder Informatik-Hintergrund.

Ein weiteres ähnliches Beispiel wäre die Spieleentwicklung, bei der die Engine in C / C ++ codiert ist und häufig die gesamte Spielelogik in einer höheren Sprache geschrieben ist.

Bokan
quelle
1
Wenn ich daran interessiert bin, maschinelles Lernen und nlp für den Hardwarebereich zu entwickeln und damit zu arbeiten. Kann ich also C ++ für AI verwenden
Mark Ellon
1
@AnishGupta: Ja, Sie können, vorausgesetzt, die Hardware unterstützt die erforderliche Verarbeitung (neuronale Netze sind speziell sehr prozessorintensiv). TensforFlow ist in der Tat nativ C ++ (Python-Bindungen sind eine Ergänzung), und hier ist die API: tensorflow.org/api_docs/cc
Neil Slater
"Die meisten KI-Profile stammen aus dem Bereich der Datenwissenschaft". Data Science ist nicht einmal ein genau definiertes Feld, daher wird Ihr Satz möglicherweise nicht verstanden oder missverstanden.
6.
1
"Die Verwendung von C ++ würde kaum zu einer Leistungsverbesserung führen, wäre jedoch für Nichtentwickler schwieriger, da die Speicherverwaltung erforderlich ist." Sie müssen sich nicht um die Speicherverwaltung mit C ++ kümmern, wenn Sie sie gut schreiben.
Jérémy Blain
Bei der KI-Programmierung geht es nicht nur darum, vorhandene Bibliotheken wie Keras und Torch zu verwenden. Ein neuronales Netzwerk kann ohne externe Abhängigkeiten von Grund auf neu programmiert werden. Beispiele für ein 3-Schicht-Perzeptron sind im Internet verfügbar und die Sigmoid-Aktivierungsfunktion passt in 4 Codezeilen. Ich würde sagen, dass die Implementierung eines neuronalen Netzwerks ohne vorhandene Bibliotheken der einfachere Weg ist, das Thema zu verstehen.
Manuel Rodriguez
9

C ++ ist tatsächlich eine der beliebtesten Sprachen im AI / ML-Bereich. Python mag im Allgemeinen populärer sein, aber wie andere angemerkt haben, ist es tatsächlich ziemlich üblich, Hybridsysteme zu haben, bei denen die CPU-intensive Zahlenverarbeitung in C ++ durchgeführt wird und Python für Funktionen höherer Ebenen verwendet wird.

Nur zur Veranschaulichung:

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

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

Geisteskriminalität
quelle
5

Es hängt davon ab, wie flexibel es sein muss: Wenn Sie ein vollwertiges System für die Produktion bereit haben, das nicht viel angepasst werden muss, ist C ++ (oder sogar C) möglicherweise in Ordnung. Sie müssen viel Zeit in die Erstellung der Software investieren, aber dann sollte sie ziemlich schnell laufen.

Wenn Sie jedoch noch mit Einstellungen und Parametern experimentieren und möglicherweise die Architektur anpassen müssen, ist die Arbeit mit C ++ umständlich. Sie benötigen eine Sprache wie Python, die es einfacher macht, Dinge zu ändern. Das Ändern des Codes ist einfacher, da Sie in Sprachen wie Python im Allgemeinen schneller codieren können. Der Preis, den Sie zahlen, ist, dass die Software normalerweise nicht so gut funktioniert.

Sie müssen entscheiden, wie dieser Kompromiss für Sie am besten funktioniert. In der Regel ist es besser, weniger Zeit mit dem Codieren zu verbringen und sich nicht zu viele Gedanken über eine längere Laufzeit zu machen. Wenn Sie einen Tag weniger brauchen, um Ihren Code fertigzustellen, braucht die C-codierte Version viel Zeit, um aufzuholen. Meistens lohnt es sich einfach nicht.

Ein gängiger Ansatz scheinen Hybridsysteme zu sein, bei denen Kernbibliotheken in C / C ++ implementiert sind, da sie nicht viel geändert werden müssen, und die Front-End- / Klebe- / Schnittstellen in Python, da Sie dort Flexibilität und Geschwindigkeit nicht benötigen das kritisch.

Dies ist übrigens kein AI-spezifisches Problem, sondern eine allgemeine Frage von interpretierten und kompilierten Sprachen. Bei AI konzentrieren sich viele Systeme immer noch eher auf Forschung als auf Anwendung, und hier übertrifft die Geschwindigkeit der Entwicklung die Geschwindigkeit der Ausführung.

Oliver Mason
quelle
1
Wenn ich es mit C ++ mache, kann ich dann eine schnellere Ausführung als Python bekommen und was ist mit dem Leistungsniveau, weil angegeben wird, dass: C ++ 400-mal schneller als Python ist
Mark Ellon
1
Diese allgemeine Zahl hat nichts zu bedeuten - sie hängt wirklich von der genauen Anwendung ab. Ich denke, 400 Mal ist für die meisten Situationen wahrscheinlich viel zu optimistisch. Aber der Punkt ist, dass, wenn Sie 500x länger brauchen, um die Software zu codieren (und zu debuggen!), Sogar eine 400x-Verbesserung der Geschwindigkeit noch langsamer wäre! Natürlich sind die Zahlen etwas zufällig, aber unterschätzen Sie nicht die Zeit, die Sie benötigen, um Ihr Programm richtig zu machen. Oft werden Sie feststellen, dass die Geschwindigkeitssteigerung durch eine schnellere Entwicklungszeit mehr als ausgeglichen wird.
Oliver Mason
1
Ich habe versucht, ein neuronales Netz mit Tensorflow-Bibliotheken in Python und C ++ zu codieren. Dabei stellte ich fest, dass: der in C ++ codierte Algorithmus für neuronale Netze 280-mal schneller ausgeführt wird als Python, in dem dieselben Bibliotheken und derselbe Algorithmus verwendet wurden
Mark Ellon
1
Warum also nicht verwenden C ++ für die Maschinenalgorithmen Implementierung Lernen eher als Python
Mark Ellon
1
Siehe meine Antwort oben ...
Oliver Mason
2

Die Softwareentwicklung für KI-Anwendungen kann in Programmierung selbst und Prototyping unterteilt werden. C / C ++ ist eine großartige Sprache zum Erstellen der Anwendung, da sie sehr schnell ausgeführt wird und als Bibliotheken für gängige Betriebssysteme bereitgestellt werden kann. Eine vorkompilierte C / C ++ - Anwendung ist der Goldstandard, wenn jemand eine schlüsselfertige Appliance bereitstellen möchte.

C ++ hat ein großes Problem, bevor ein Programm mit GCC oder dem LLVM-Compiler kompiliert werden kann, muss jemand wissen, welchen Algorithmus er benötigt. C ++ kann einen bestimmten Quellcode ausführen und bietet effiziente Befehle. Es ist jedoch unklar, auf welche Weise das Array gefüllt werden muss und welche for-Schleifen im Code benötigt werden. Diese Frage passt in den Prototyping-Schritt, der vor der Programmierung der Anwendung erfolgt. Das Problem besteht nicht darin, eine kompilierte Anwendung zu erstellen und diese als Betriebssystempaket bereitzustellen. Das Problem besteht darin, mit verschiedenen KI-Algorithmen zu spielen, einige GUI-Prototypen zu erstellen und den Fortschritt mit den Teammitgliedern zu diskutieren.

Guido van Rossum hat die Gui-Prototyping-Sprache Nummer eins erfunden, die auf Skriptprogrammierung basiert und nahezu Pseudocode-Funktionen bietet. Es hat C ++ nie ersetzt, aber es erstellt eine neue Art von Domäne. Insbesondere im innovativen Bereich der künstlichen Intelligenz ist ein Prototyping-Schritt erforderlich, bevor die Software implementiert wird.

Um zu erklären, warum Python C ++ überlegen ist, müssen wir versuchen, einen Software-Prototyp mit C ++ zu erstellen. Ist es möglich, diese Sprache für die schnelle Implementierung einer GUI-Anwendung zu verwenden? Kein C ++ wurde nicht als Prototyping-Sprache mit schnellen Bearbeitungszyklen entwickelt, sondern als solides Fundament für Systemprogrammierer. Das heißt, wenn der Prototyp bereits funktioniert, wenn der Algorithmus festgelegt ist und die Dokumentation geschrieben wurde, ist es sinnvoll, den Code in C ++ neu zu programmieren. Das heißt, ein bestimmter Python-Prototyp wird in C ++ konvertiert und an vorhandene Betriebssysteme geliefert. Für den Vorschritt, der mit dem Schreiben von Papieren, der Diskussion von Alternativen und dem Management von Innovationen zu tun hat, ist Python die bessere Wahl.

Manuel Rodriguez
quelle
0

Sie behaupten das

C ++ ist technisch eine leistungsfähigere Sprache als Python.

Aber diese Behauptung ist falsch (oder bedeutet nicht viel). Denken Sie daran, dass eine Programmiersprache eine Spezifikation ist (häufig ein Dokument in englischer Sprache). Zum Beispiel ist n3337 ein später Entwurf der C ++ - Spezifikation. Ich mag Python nicht, aber es scheint genauso leistungsfähig zu sein wie C ++ (selbst wenn C ++ - Implementierungen im Allgemeinen schneller sind als Python): Was ein guter Python-Programmierer in Python gut codieren kann, kann ein anderer guter C ++ - Programmierer in C ++ und umgekehrt gut codieren umgekehrt.

Theoretisch sind sowohl C ++ als auch Python Turing-vollständige (absichtliche) Programmiersprachen.

Und Python ist genauso ausdrucksstark wie C ++. Ich kann keine Programmiersprachenfunktion benennen, die Python hat, aber nicht C ++ (mit Ausnahme derjenigen, die sich auf die Reflexion beziehen ; siehe auch diese Antwort und beachten Sie dlopen- siehe mein Programm manydl.c -, LLVM , libgccjit , libbacktrace und einige Meta -Programmieransatz mit ihnen, à la Bismon oder wie J.Pitrats Blog befürwortet).

Vielleicht stellen Sie sich eine Programmiersprache als die Software vor, die sie implementiert. Dann ist Python genauso ausdrucksstark wie C ++ (und scheint leichter zu erlernen zu sein, aber das ist eine Illusion; weitere Informationen zu dieser Illusion finden Sie unter http://norvig.com/21-days.html ). Python und C ++ haben eine ziemlich ähnliche Semantik , auch wenn ihre Syntax sehr unterschiedlich ist. Ihr Typensystem ist sehr unterschiedlich.

Beachten Sie, dass viele neuere Bibliotheken für maschinelles Lernen (wie TensorFlow oder Gudhi ) in Python in der Praxis einfacher zu verwenden sind als in C ++. Sie können TensorFlow oder Gudhi jedoch aus C ++ - Code verwenden, da TensorFlow und Gudhi meist in C ++ codiert sind und eine C ++ - API (nicht nur eine Python- API) bereitstellen und dokumentieren .

C ++ ermöglicht die Multithread-Programmierung , aber die übliche Python-Implementierung hat ihre GIL , ist bytecodiert und daher erheblich langsamer als C ++ (das normalerweise durch Optimierung von Compilern wie GCC oder Clang kompiliert wird ; Sie können jedoch C ++ - Interpreter finden, z . B. Cling ). Einige experimentelle Implementierungen von Python sind JIT-kompiliert und ohne GIL. Aber diese sind nicht ausgereift: Ich empfehle, eine Million Euro zu investieren, um ihre TRL zu erhöhen .

Beachten Sie auch, dass C ++ viel schwieriger zu erlernen ist als Python. Selbst mit einem Dutzend Jahren Erfahrung in der C ++ - Programmierung kann ich nicht behaupten, den größten Teil von C ++ wirklich zu kennen.

Leider verwenden die neuesten Bücher, in denen AI-Software-Engineering unterrichtet wird (z. B. dieses oder jenes ), Python (nicht C ++) als Beispiele. Ich möchte tatsächlich neuere KI-Bücher mit C ++!

Übrigens programmiere ich Open Source-Software (wie diese oder die veraltete GCC MELT ) mit KI-Techniken, aber sie verwenden kein Python. Mein Ansatz für KI-Anwendungen besteht darin, DSL in ihnen zu entwerfen .

Einige KI-Ansätze beinhalten Metaprogrammierung, z. B. das Generieren eines Teils (oder der meisten oder sogar aller) des Codes eines Systems selbst. J.Pitrat (er starb im Oktober 2019) war Pionier dieses Ansatzes. Siehe seinen Blog , sein CAIA-System und das RefPerSys- Projekt (dessen Ziel es ist, den größten und hoffentlich den gesamten C ++ - Code zu generieren).

Basile Starynkevitch
quelle