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.
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.
Antworten:
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.
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:
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.
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.
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).